@kepler.gl/components 3.1.0-alpha.3 → 3.1.0-alpha.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bottom-widget.d.ts +7 -1
- package/dist/bottom-widget.js +2 -8
- package/dist/common/action-panel.d.ts +5 -6
- package/dist/common/action-panel.js +3 -5
- package/dist/common/animation-control/animation-control.d.ts +2 -1
- package/dist/common/animation-control/animation-control.js +4 -2
- package/dist/common/animation-control/animation-speed-slider.js +21 -7
- package/dist/common/animation-control/floating-time-display.js +1 -1
- package/dist/common/animation-control/play-control.js +11 -13
- package/dist/common/animation-control/playback-controls.d.ts +11 -20
- package/dist/common/animation-control/playback-controls.js +6 -4
- package/dist/common/animation-control/reset-control.js +11 -13
- package/dist/common/animation-control/speed-control.js +10 -12
- package/dist/common/color-legend.d.ts +4 -5
- package/dist/common/color-legend.js +16 -5
- package/dist/common/column-stats-chart.d.ts +9 -3
- package/dist/common/column-stats-chart.js +17 -63
- package/dist/common/data-table/canvas.d.ts +2 -1
- package/dist/common/data-table/index.d.ts +7 -7
- package/dist/common/data-table/index.js +4 -5
- package/dist/common/file-uploader/file-upload-progress.d.ts +4 -4
- package/dist/common/file-uploader/file-upload-progress.js +1 -2
- package/dist/common/file-uploader/file-upload.d.ts +1 -1
- package/dist/common/file-uploader/upload-button.js +2 -2
- package/dist/common/flex-container.d.ts +8 -3
- package/dist/common/histogram-plot.js +4 -2
- package/dist/common/icon-button.d.ts +7 -4
- package/dist/common/icons/draggable-dots.d.ts +14 -0
- package/dist/common/icons/draggable-dots.js +85 -0
- package/dist/common/icons/horizontal-resize-handle.d.ts +14 -0
- package/dist/common/icons/horizontal-resize-handle.js +59 -0
- package/dist/common/icons/index.d.ts +2 -0
- package/dist/common/icons/index.js +15 -1
- package/dist/common/icons/pin.js +1 -1
- package/dist/common/info-helper.js +2 -2
- package/dist/common/item-selector/chickleted-input.d.ts +21 -17
- package/dist/common/item-selector/chickleted-input.js +3 -3
- package/dist/common/item-selector/dropdown-list.d.ts +12 -12
- package/dist/common/item-selector/dropdown-list.js +1 -2
- package/dist/common/item-selector/dropdown-select.d.ts +8 -4
- package/dist/common/item-selector/dropdown-select.js +2 -2
- package/dist/common/item-selector/item-selector.d.ts +5 -9
- package/dist/common/item-selector/item-selector.js +1 -1
- package/dist/common/item-selector/typeahead.d.ts +20 -6
- package/dist/common/item-selector/typeahead.js +3 -3
- package/dist/common/loading-spinner.d.ts +8 -4
- package/dist/common/loading-spinner.js +1 -1
- package/dist/common/modal.d.ts +12 -12
- package/dist/common/modal.js +3 -3
- package/dist/common/portaled.d.ts +22 -486
- package/dist/common/portaled.js +6 -3
- package/dist/common/range-plot.d.ts +23 -28
- package/dist/common/range-plot.js +38 -29
- package/dist/common/range-slider-timeline.js +1 -2
- package/dist/common/slider/slider-bar-handle.d.ts +5 -0
- package/dist/common/slider/slider-bar-handle.js +2 -2
- package/dist/common/slider/slider-handle.d.ts +9 -0
- package/dist/common/slider/slider-handle.js +3 -3
- package/dist/common/slider/slider.d.ts +2 -2
- package/dist/common/styled-components.d.ts +444 -92
- package/dist/common/styled-components.js +15 -11
- package/dist/common/sync-timeline-control.js +2 -2
- package/dist/common/time-range-slider-time-title.d.ts +4 -0
- package/dist/common/time-range-slider-time-title.js +1 -1
- package/dist/common/time-range-slider.d.ts +7 -3
- package/dist/common/time-range-slider.js +1 -1
- package/dist/common/timeline-slider.d.ts +2 -0
- package/dist/common/timeline-slider.js +1 -1
- package/dist/common/toolbar-item.js +2 -2
- package/dist/common/toolbar.d.ts +5 -3
- package/dist/common/toolbar.js +1 -1
- package/dist/common/vertical-toolbar.d.ts +6 -1
- package/dist/container.js +2 -2
- package/dist/dnd-context.d.ts +1 -1
- package/dist/effects/compact-color-picker.d.ts +1 -1
- package/dist/effects/effect-configurator.d.ts +4 -4
- package/dist/effects/effect-manager.d.ts +2 -0
- package/dist/effects/effect-manager.js +10 -10
- package/dist/effects/effect-panel-header.js +5 -5
- package/dist/effects/effect-time-configurator.js +2 -2
- package/dist/effects/effect-time-selector.d.ts +1 -6
- package/dist/effects/effect-time-selector.js +3 -3
- package/dist/effects/effect-type-dropdown-list.js +2 -2
- package/dist/effects/effect-type-list-item.d.ts +1 -10
- package/dist/effects/effect-type-list-item.js +2 -2
- package/dist/effects/effect-type-selector.d.ts +1 -12
- package/dist/effects/effect-type-selector.js +2 -2
- package/dist/effects/timezone-selector.d.ts +1 -9
- package/dist/effects/timezone-selector.js +1 -1
- package/dist/filters/components.d.ts +6 -3
- package/dist/filters/filter-panels/filter-synced-dataset-panel.d.ts +3 -4
- package/dist/filters/time-widget-top.js +2 -2
- package/dist/filters/types.d.ts +4 -2
- package/dist/filters/types.js +1 -1
- package/dist/geocoder/geocoder.js +2 -2
- package/dist/geocoder-panel.d.ts +6 -0
- package/dist/geocoder-panel.js +1 -1
- package/dist/hooks/use-fetch-vector-tile-metadata.d.ts +3 -2
- package/dist/hooks/use-fetch-vector-tile-metadata.js +33 -18
- package/dist/hooks/use-legend-position.d.ts +36 -0
- package/dist/hooks/use-legend-position.js +147 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +18 -3
- package/dist/kepler-gl.d.ts +44 -5
- package/dist/kepler-gl.js +77 -4
- package/dist/map/layer-hover-info.d.ts +3 -1
- package/dist/map/map-control-panel.js +4 -3
- package/dist/map/map-control-toolbar.d.ts +15 -1
- package/dist/map/map-control-toolbar.js +1 -1
- package/dist/map/map-legend-panel.d.ts +10 -35
- package/dist/map/map-legend-panel.js +234 -128
- package/dist/map/map-legend.d.ts +3 -2
- package/dist/map/map-legend.js +7 -10
- package/dist/map/map-popover.js +16 -11
- package/dist/map-container.d.ts +10 -8
- package/dist/map-container.js +86 -55
- package/dist/modal-container.d.ts +2 -1
- package/dist/modal-container.js +4 -3
- package/dist/modals/add-map-style-modal.d.ts +3 -0
- package/dist/modals/add-map-style-modal.js +58 -10
- package/dist/modals/cloud-components/cloud-item.js +2 -2
- package/dist/modals/cloud-tile.d.ts +6 -1
- package/dist/modals/cloud-tile.js +2 -2
- package/dist/modals/data-table-modal.d.ts +5 -3
- package/dist/modals/data-table-modal.js +3 -3
- package/dist/modals/export-data-modal.js +4 -5
- package/dist/modals/export-map-modal/components.d.ts +5 -3
- package/dist/modals/export-map-modal/export-html-map.js +2 -2
- package/dist/modals/export-map-modal/export-json-map.js +3 -2
- package/dist/modals/modal-dialog.d.ts +3 -1
- package/dist/modals/modal-tabs.js +2 -2
- package/dist/modals/share-map-modal.d.ts +4 -4
- package/dist/modals/storage-map-viewer.js +3 -3
- package/dist/modals/tilesets-modals/common.d.ts +1 -1
- package/dist/modals/tilesets-modals/common.js +1 -1
- package/dist/modals/tilesets-modals/load-data-footer.d.ts +3 -3
- package/dist/modals/tilesets-modals/load-data-footer.js +16 -7
- package/dist/modals/tilesets-modals/load-tileset.js +5 -4
- package/dist/modals/tilesets-modals/tileset-vector-form.js +28 -14
- package/dist/plot-container.js +3 -3
- package/dist/side-panel/add-by-dataset-button.js +4 -1
- package/dist/side-panel/common/dataset-info.js +3 -3
- package/dist/side-panel/common/dataset-title.d.ts +1 -0
- package/dist/side-panel/common/dataset-title.js +5 -4
- package/dist/side-panel/filter-manager.d.ts +2 -2
- package/dist/side-panel/filter-manager.js +1 -1
- package/dist/side-panel/filter-panel/filter-panel-header.d.ts +9 -1
- package/dist/side-panel/filter-panel/filter-panel-header.js +24 -9
- package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.d.ts +10 -1
- package/dist/side-panel/interaction-panel/tooltip-config/tooltip-chicklet.js +5 -3
- package/dist/side-panel/layer-panel/aggr-scale-selector.d.ts +2 -1
- package/dist/side-panel/layer-panel/aggr-scale-selector.js +3 -1
- package/dist/side-panel/layer-panel/channel-by-value-selector.d.ts +2 -4
- package/dist/side-panel/layer-panel/channel-by-value-selector.js +9 -5
- package/dist/side-panel/layer-panel/color-breaks-panel.d.ts +15 -7
- package/dist/side-panel/layer-panel/color-breaks-panel.js +52 -20
- package/dist/side-panel/layer-panel/color-palette-preset.js +2 -2
- package/dist/side-panel/layer-panel/color-palette.d.ts +9 -4
- package/dist/side-panel/layer-panel/color-palette.js +13 -7
- package/dist/side-panel/layer-panel/color-range-selector.js +2 -2
- package/dist/side-panel/layer-panel/color-scale-selector.d.ts +3 -1
- package/dist/side-panel/layer-panel/color-scale-selector.js +82 -37
- package/dist/side-panel/layer-panel/color-selector.d.ts +6 -6
- package/dist/side-panel/layer-panel/color-selector.js +52 -36
- package/dist/side-panel/layer-panel/custom-palette.d.ts +44 -15
- package/dist/side-panel/layer-panel/custom-palette.js +342 -39
- package/dist/side-panel/layer-panel/custom-picker.d.ts +9 -5
- package/dist/side-panel/layer-panel/custom-picker.js +2 -2
- package/dist/side-panel/layer-panel/dimension-scale-selector.js +5 -3
- package/dist/side-panel/layer-panel/layer-column-mode-config.js +1 -1
- package/dist/side-panel/layer-panel/layer-config-group.d.ts +11 -11
- package/dist/side-panel/layer-panel/layer-config-group.js +2 -2
- package/dist/side-panel/layer-panel/layer-configurator.d.ts +7 -7
- package/dist/side-panel/layer-panel/layer-configurator.js +10 -10
- package/dist/side-panel/layer-panel/layer-list.d.ts +2 -0
- package/dist/side-panel/layer-panel/layer-list.js +7 -4
- package/dist/side-panel/layer-panel/layer-panel-header.js +5 -5
- package/dist/side-panel/layer-panel/layer-panel.d.ts +3 -0
- package/dist/side-panel/layer-panel/layer-panel.js +8 -8
- package/dist/side-panel/layer-panel/layer-type-dropdown-list.js +2 -2
- package/dist/side-panel/layer-panel/layer-type-list-item.d.ts +1 -10
- package/dist/side-panel/layer-panel/layer-type-list-item.js +2 -2
- package/dist/side-panel/layer-panel/layer-type-selector.d.ts +1 -8
- package/dist/side-panel/layer-panel/layer-type-selector.js +1 -1
- package/dist/side-panel/layer-panel/single-color-palette.js +2 -2
- package/dist/side-panel/layer-panel/vector-tile-layer-configurator.js +6 -3
- package/dist/side-panel/map-style-panel/map-style-selector.js +2 -2
- package/dist/side-panel/panel-header-action.js +2 -2
- package/dist/side-panel/panel-header.js +2 -2
- package/dist/side-panel/panel-tab.d.ts +3 -3
- package/dist/side-panel/panel-tab.js +2 -2
- package/dist/side-panel/panel-view-list-toggle.d.ts +4 -4
- package/dist/side-panel/panel-view-list-toggle.js +2 -2
- package/dist/side-panel/side-bar.js +2 -2
- package/dist/side-panel.d.ts +1 -1
- package/dist/types.d.ts +6 -7
- package/dist/types.js +1 -1
- package/package.json +23 -22
|
@@ -15,4 +15,4 @@ function MapControlToolbar() {
|
|
|
15
15
|
return StyledToolbar;
|
|
16
16
|
}
|
|
17
17
|
var _default = exports["default"] = MapControlToolbar;
|
|
18
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3ZlcnRpY2FsVG9vbGJhciIsIl90ZW1wbGF0ZU9iamVjdCIsIk1hcENvbnRyb2xUb29sYmFyIiwiU3R5bGVkVG9vbGJhciIsInN0eWxlZCIsIlZlcnRpY2FsVG9vbGJhciIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL21hcC9tYXAtY29udHJvbC10b29sYmFyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBWZXJ0aWNhbFRvb2xiYXIgZnJvbSAnLi4vY29tbW9uL3ZlcnRpY2FsLXRvb2xiYXInO1xuaW1wb3J0IHtCYXNlQ29tcG9uZW50UHJvcHN9IGZyb20gJy4uL3R5cGVzJztcblxuZnVuY3Rpb24gTWFwQ29udHJvbFRvb2xiYXIoKSB7XG4gIGNvbnN0IFN0eWxlZFRvb2xiYXIgPSBzdHlsZWQoVmVydGljYWxUb29sYmFyKTxCYXNlQ29tcG9uZW50UHJvcHM+YFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMzJweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoY2FsYygtNTAlICsgNDVweCkpO1xuXG4gICAgLnRvb2xiYXItaXRlbSB7XG4gICAgICB3aWR0aDogMTIwcHg7XG4gICAgICBwYWRkaW5nOiAxM3B4IDE2cHg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuXG4gICAgICAudG9vbGJhci1pdGVtX19zdmctY29udGFpbmVyIHtcbiAgICAgICAgd2lkdGg6IDE2cHg7XG4gICAgICAgIGhlaWdodDogMTZweDtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xuICAgICAgfVxuXG4gICAgICAudG9vbGJhci1pdGVtX190aXRsZSB7XG4gICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgICB9XG4gICAgfVxuICBgO1xuXG4gIHJldHVybiBTdHlsZWRUb29sYmFyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNYXBDb250cm9sVG9vbGJhcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFHQSxJQUFBQSxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsZ0JBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUF5RCxJQUFBRSxlQUFBLEVBSnpEO0FBQ0E7QUFNQSxTQUFTQyxpQkFBaUJBLENBQUEsRUFBRztFQUMzQixJQUFNQyxhQUFhLEdBQUcsSUFBQUMsNEJBQU0sRUFBQ0MsMkJBQWUsQ0FBQyxDQUFBSixlQUFBLEtBQUFBLGVBQUEsT0FBQUssdUJBQUEsNmRBc0I1QztFQUVELE9BQU9ILGFBQWE7QUFDdEI7QUFBQyxJQUFBSSxRQUFBLEdBQUFDLE9BQUEsY0FFY04saUJBQWlCIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import React, { ComponentType } from 'react';
|
|
2
|
-
import
|
|
2
|
+
import { ActionHandler, toggleSplitMapViewport } from '@kepler.gl/actions';
|
|
3
|
+
import { Layer } from '@kepler.gl/layers';
|
|
4
|
+
import { LayerVisConfig, MapControls, MapState } from '@kepler.gl/types';
|
|
5
|
+
import { MapLegendControlSettings } from '../hooks/use-legend-position';
|
|
3
6
|
import MapControlPanelFactory from './map-control-panel';
|
|
7
|
+
import MapControlTooltipFactory from './map-control-tooltip';
|
|
4
8
|
import MapLegendFactory from './map-legend';
|
|
5
|
-
import { LayerVisConfig, MapControls, MapState } from '@kepler.gl/types';
|
|
6
|
-
import { Layer } from '@kepler.gl/layers';
|
|
7
|
-
import { ActionHandler, toggleSplitMapViewport } from '@kepler.gl/actions';
|
|
8
9
|
export declare type MapLegendPanelFactoryDeps = [
|
|
9
10
|
typeof MapControlTooltipFactory,
|
|
10
11
|
typeof MapControlPanelFactory,
|
|
@@ -23,42 +24,16 @@ export declare type MapLegendPanelProps = {
|
|
|
23
24
|
actionIcons: MapLegendPanelIcons;
|
|
24
25
|
mapControls: MapControls;
|
|
25
26
|
mapState?: MapState;
|
|
26
|
-
|
|
27
|
-
offsetRight?: number;
|
|
27
|
+
onLayerVisConfigChange?: (oldLayer: Layer, newVisConfig: Partial<LayerVisConfig>) => void;
|
|
28
28
|
onToggleSplitMapViewport?: ActionHandler<typeof toggleSplitMapViewport>;
|
|
29
29
|
isViewportUnsyncAllowed?: boolean;
|
|
30
30
|
onClickControlBtn?: (e?: MouseEvent) => void;
|
|
31
|
-
onLayerVisConfigChange?: (oldLayer: Layer, newVisConfig: Partial<LayerVisConfig>) => void;
|
|
32
31
|
className: string;
|
|
32
|
+
settings: MapLegendControlSettings;
|
|
33
|
+
isSidePanelShown: boolean;
|
|
33
34
|
};
|
|
34
|
-
declare
|
|
35
|
-
|
|
36
|
-
scale: number;
|
|
37
|
-
layers: readonly Layer[];
|
|
38
|
-
logoComponent: Element;
|
|
39
|
-
onToggleMapControl: (control: string) => void;
|
|
40
|
-
isExport: boolean;
|
|
41
|
-
actionIcons: MapLegendPanelIcons;
|
|
42
|
-
mapControls: MapControls;
|
|
43
|
-
mapState?: MapState | undefined;
|
|
44
|
-
mapHeight?: number | undefined;
|
|
45
|
-
offsetRight?: number | undefined;
|
|
46
|
-
onToggleSplitMapViewport?: ActionHandler<(payload: {
|
|
47
|
-
isViewportSynced?: boolean | undefined;
|
|
48
|
-
isZoomLocked?: boolean | undefined;
|
|
49
|
-
}) => {
|
|
50
|
-
payload: {
|
|
51
|
-
isViewportSynced?: boolean | undefined;
|
|
52
|
-
isZoomLocked?: boolean | undefined;
|
|
53
|
-
};
|
|
54
|
-
type: "@@kepler.gl/TOGGLE_SPLIT_MAP_VIEWPORT";
|
|
55
|
-
}> | undefined;
|
|
56
|
-
isViewportUnsyncAllowed?: boolean | undefined;
|
|
57
|
-
onClickControlBtn?: ((e?: MouseEvent | undefined) => void) | undefined;
|
|
58
|
-
onLayerVisConfigChange?: ((oldLayer: Layer, newVisConfig: Partial<LayerVisConfig>) => void) | undefined;
|
|
59
|
-
} & {
|
|
60
|
-
theme?: any;
|
|
61
|
-
}>;
|
|
35
|
+
declare type MapLegendPanelComponentType = React.FC<MapLegendPanelProps>;
|
|
36
|
+
declare function MapLegendPanelFactory(MapControlTooltip: ReturnType<typeof MapControlTooltipFactory>, MapControlPanel: ReturnType<typeof MapControlPanelFactory>, MapLegend: ReturnType<typeof MapLegendFactory>): MapLegendPanelComponentType;
|
|
62
37
|
declare namespace MapLegendPanelFactory {
|
|
63
38
|
var deps: (typeof MapControlTooltipFactory | typeof MapControlPanelFactory | typeof MapLegendFactory)[];
|
|
64
39
|
}
|
|
@@ -7,149 +7,255 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
exports["default"] = void 0;
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
-
var
|
|
10
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
11
11
|
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
|
|
12
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
12
13
|
var _reactDom = require("react-dom");
|
|
13
14
|
var _react = _interopRequireWildcard(require("react"));
|
|
14
15
|
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
16
|
+
var _core = require("@dnd-kit/core");
|
|
17
|
+
var _utilities = require("@dnd-kit/utilities");
|
|
18
|
+
var _react2 = require("@floating-ui/react");
|
|
19
|
+
var _actions = require("@kepler.gl/actions");
|
|
20
|
+
var _reducers = require("@kepler.gl/reducers");
|
|
21
|
+
var _styles = require("@kepler.gl/styles");
|
|
22
|
+
var _utils = require("@kepler.gl/utils");
|
|
15
23
|
var _icons = require("../common/icons");
|
|
16
24
|
var _styledComponents2 = require("../common/styled-components");
|
|
17
|
-
var
|
|
25
|
+
var _context = require("../context");
|
|
26
|
+
var _useLegendPosition3 = _interopRequireDefault(require("../hooks/use-legend-position"));
|
|
27
|
+
var _injector = require("../injector");
|
|
18
28
|
var _mapControlPanel = _interopRequireDefault(require("./map-control-panel"));
|
|
29
|
+
var _mapControlTooltip = _interopRequireDefault(require("./map-control-tooltip"));
|
|
19
30
|
var _mapLegend = _interopRequireDefault(require("./map-legend"));
|
|
20
|
-
var
|
|
21
|
-
var
|
|
22
|
-
var _context = require("../context");
|
|
23
|
-
var _react2 = require("@floating-ui/react");
|
|
24
|
-
var _templateObject, _templateObject2; // SPDX-License-Identifier: MIT
|
|
31
|
+
var _modifiers = require("@dnd-kit/modifiers");
|
|
32
|
+
var _templateObject, _templateObject2, _templateObject3; // SPDX-License-Identifier: MIT
|
|
25
33
|
// Copyright contributors to the kepler.gl project
|
|
26
34
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
27
35
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
28
|
-
|
|
29
|
-
var
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
36
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
37
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
38
|
+
var DRAG_RESIZE_ID = 'map-legend-resize';
|
|
39
|
+
var DRAG_MOVE_ID = 'map-legend-move';
|
|
40
|
+
var StyledDraggableLegendContent = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n position: absolute;\n outline: none;\n transition: border-color 0.2s ease-in-out;\n border: 1px solid transparent;\n .legend-input-block {\n display: none;\n }\n &.is-dragging .legend-input-block {\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: transparent;\n }\n &:hover,\n &.is-dragging {\n .legend-move-handle {\n opacity: 1;\n pointer-events: auto;\n }\n .legend-resize-handle {\n opacity: 1;\n pointer-events: auto;\n }\n border-color: ", ";\n }\n .map-control__panel-content {\n max-height: calc(100vh - 100px);\n ", ";\n }\n border-radius: 4px;\n z-index: 2;\n .map-control-panel {\n margin-bottom: 0 !important;\n }\n"])), function (props) {
|
|
41
|
+
return props.theme.activeColor;
|
|
42
|
+
}, function (props) {
|
|
43
|
+
return props.contentHeight ? "height: ".concat(props.contentHeight, "px;") : '';
|
|
44
|
+
});
|
|
45
|
+
var StyledMoveHandle = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n position: absolute;\n display: flex;\n flex-direction: column;\n align-items: center;\n color: white;\n z-index: 2;\n top: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 48px;\n height: 16px;\n border-radius: 4px;\n cursor: move;\n background-color: ", ";\n"])), function (props) {
|
|
46
|
+
return props.theme.activeColor;
|
|
47
|
+
});
|
|
48
|
+
var StyledResizeHandle = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.2s ease-in-out;\n position: absolute;\n display: flex;\n flex-direction: column;\n align-items: center;\n color: #f7f8fa;\n z-index: 2;\n bottom: 0;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 48px;\n height: 16px;\n border-radius: 4px;\n cursor: ns-resize;\n"])));
|
|
49
|
+
var DraggableLegendContent = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
|
50
|
+
var positionStyles = props.positionStyles,
|
|
51
|
+
children = props.children;
|
|
52
|
+
var draggableMove = (0, _core.useDraggable)({
|
|
53
|
+
id: DRAG_MOVE_ID
|
|
54
|
+
});
|
|
55
|
+
var draggableResize = (0, _core.useDraggable)({
|
|
56
|
+
id: DRAG_RESIZE_ID
|
|
57
|
+
});
|
|
58
|
+
var refs = (0, _react2.useMergeRefs)([draggableMove.setNodeRef, ref]);
|
|
59
|
+
var isDragging = draggableMove.isDragging || draggableResize.isDragging;
|
|
60
|
+
return /*#__PURE__*/_react["default"].createElement(StyledDraggableLegendContent, (0, _extends2["default"])({
|
|
61
|
+
ref: refs,
|
|
62
|
+
className: (0, _classnames["default"])('draggable-legend', {
|
|
63
|
+
'is-dragging': isDragging
|
|
64
|
+
}),
|
|
65
|
+
style: _objectSpread(_objectSpread({}, positionStyles), {}, {
|
|
66
|
+
transform: _utilities.CSS.Translate.toString(draggableMove.transform)
|
|
67
|
+
}),
|
|
68
|
+
contentHeight: props.contentHeight
|
|
69
|
+
}, draggableMove.attributes), children, isDragging ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
70
|
+
className: "legend-input-block"
|
|
71
|
+
}) : null, /*#__PURE__*/_react["default"].createElement(StyledMoveHandle, (0, _extends2["default"])({
|
|
72
|
+
className: "legend-move-handle"
|
|
73
|
+
}, draggableMove.listeners), /*#__PURE__*/_react["default"].createElement(_icons.DraggableDots, {
|
|
74
|
+
height: "16px"
|
|
75
|
+
})), /*#__PURE__*/_react["default"].createElement(StyledResizeHandle, (0, _extends2["default"])({
|
|
76
|
+
className: "legend-resize-handle",
|
|
77
|
+
ref: draggableResize.setNodeRef
|
|
78
|
+
}, draggableResize.listeners), /*#__PURE__*/_react["default"].createElement(_icons.HorizontalResizeHandle, {
|
|
79
|
+
height: "16px"
|
|
80
|
+
})));
|
|
81
|
+
});
|
|
82
|
+
var DraggableLegend = (0, _injector.withState)([_reducers.uiStateLens], function (state) {
|
|
83
|
+
return state;
|
|
84
|
+
}, {
|
|
85
|
+
setMapControlSettings: _actions.setMapControlSettings
|
|
86
|
+
})((0, _styledComponents.withTheme)(function (_ref) {
|
|
87
|
+
var _uiState$mapControls;
|
|
88
|
+
var uiState = _ref.uiState,
|
|
89
|
+
theme = _ref.theme,
|
|
90
|
+
setMapControlSettings = _ref.setMapControlSettings,
|
|
91
|
+
children = _ref.children;
|
|
92
|
+
var isSidePanelShown = uiState.activeSidePanel;
|
|
93
|
+
var settings = (_uiState$mapControls = uiState.mapControls) === null || _uiState$mapControls === void 0 || (_uiState$mapControls = _uiState$mapControls.mapLegend) === null || _uiState$mapControls === void 0 ? void 0 : _uiState$mapControls.settings;
|
|
94
|
+
var legendContentRef = (0, _react.useRef)(null);
|
|
95
|
+
var onChangeSettings = (0, _react.useCallback)(function (newSettings) {
|
|
96
|
+
return setMapControlSettings('mapLegend', newSettings);
|
|
97
|
+
}, [setMapControlSettings]);
|
|
98
|
+
var _useLegendPosition = (0, _useLegendPosition3["default"])({
|
|
99
|
+
legendContentRef: legendContentRef,
|
|
100
|
+
isSidePanelShown: isSidePanelShown,
|
|
101
|
+
theme: theme,
|
|
102
|
+
settings: settings,
|
|
103
|
+
onChangeSettings: onChangeSettings
|
|
104
|
+
}),
|
|
105
|
+
positionStyles = _useLegendPosition.positionStyles,
|
|
106
|
+
updatePosition = _useLegendPosition.updatePosition,
|
|
107
|
+
startResize = _useLegendPosition.startResize,
|
|
108
|
+
resize = _useLegendPosition.resize,
|
|
109
|
+
contentHeight = _useLegendPosition.contentHeight;
|
|
110
|
+
var handleDragStart = (0, _react.useCallback)(function (event) {
|
|
111
|
+
switch (event.active.id) {
|
|
112
|
+
case DRAG_RESIZE_ID:
|
|
113
|
+
startResize();
|
|
114
|
+
break;
|
|
115
|
+
default:
|
|
116
|
+
updatePosition();
|
|
95
117
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
118
|
+
}, [updatePosition, startResize]);
|
|
119
|
+
var handleDragEnd = (0, _react.useCallback)(updatePosition, [updatePosition]);
|
|
120
|
+
var handleDragMove = (0, _react.useCallback)(function (event) {
|
|
121
|
+
switch (event.active.id) {
|
|
122
|
+
case DRAG_RESIZE_ID:
|
|
123
|
+
resize(event.delta.y);
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}, [resize]);
|
|
127
|
+
return /*#__PURE__*/_react["default"].createElement(_core.DndContext, {
|
|
128
|
+
onDragStart: handleDragStart,
|
|
129
|
+
onDragMove: handleDragMove,
|
|
130
|
+
onDragEnd: handleDragEnd,
|
|
131
|
+
modifiers: [_modifiers.restrictToWindowEdges]
|
|
132
|
+
}, /*#__PURE__*/_react["default"].createElement(DraggableLegendContent, {
|
|
133
|
+
ref: legendContentRef,
|
|
134
|
+
positionStyles: positionStyles,
|
|
135
|
+
contentHeight: contentHeight
|
|
136
|
+
}, children));
|
|
137
|
+
}));
|
|
138
|
+
var ImageExportLegend = (0, _styledComponents.withTheme)(function (_ref2) {
|
|
139
|
+
var _containerRef$current;
|
|
140
|
+
var settings = _ref2.settings,
|
|
141
|
+
isSidePanelShown = _ref2.isSidePanelShown,
|
|
142
|
+
theme = _ref2.theme,
|
|
143
|
+
children = _ref2.children;
|
|
144
|
+
var containerRef = (0, _react.useRef)(null);
|
|
145
|
+
var legendContentRef = (0, _react.useRef)(null);
|
|
146
|
+
var _useLegendPosition2 = (0, _useLegendPosition3["default"])({
|
|
147
|
+
legendContentRef: legendContentRef,
|
|
148
|
+
isSidePanelShown: isSidePanelShown,
|
|
149
|
+
theme: theme,
|
|
150
|
+
settings: settings,
|
|
151
|
+
onChangeSettings: function onChangeSettings() {
|
|
152
|
+
// do nothing by default
|
|
127
153
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
154
|
+
}),
|
|
155
|
+
positionStyles = _useLegendPosition2.positionStyles;
|
|
156
|
+
var portalRoot = (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 || (_containerRef$current = _containerRef$current.closest('.export-map-instance')) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.querySelector('#default-deckgl-overlay-wrapper');
|
|
157
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
158
|
+
ref: containerRef
|
|
159
|
+
}, portalRoot ? /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/_react["default"].createElement("div", {
|
|
160
|
+
className: "fixed-legend",
|
|
161
|
+
ref: legendContentRef,
|
|
162
|
+
style: _objectSpread(_objectSpread({}, positionStyles), {}, {
|
|
163
|
+
position: 'absolute'
|
|
164
|
+
})
|
|
165
|
+
}, children), portalRoot) : null);
|
|
166
|
+
});
|
|
167
|
+
MapLegendPanelFactory.deps = [_mapControlTooltip["default"], _mapControlPanel["default"], _mapLegend["default"]];
|
|
168
|
+
var defaultActionIcons = {
|
|
169
|
+
legend: _icons.Legend
|
|
170
|
+
};
|
|
171
|
+
var MapLegendPanelComponent = function MapLegendPanelComponent(_ref3) {
|
|
172
|
+
var _uiState$mapControls2, _rootContext$current;
|
|
173
|
+
var layers = _ref3.layers,
|
|
174
|
+
mapControls = _ref3.mapControls,
|
|
175
|
+
scale = _ref3.scale,
|
|
176
|
+
onToggleMapControl = _ref3.onToggleMapControl,
|
|
177
|
+
isExport = _ref3.isExport,
|
|
178
|
+
logoComponent = _ref3.logoComponent,
|
|
179
|
+
_ref3$actionIcons = _ref3.actionIcons,
|
|
180
|
+
actionIcons = _ref3$actionIcons === void 0 ? defaultActionIcons : _ref3$actionIcons,
|
|
181
|
+
mapState = _ref3.mapState,
|
|
182
|
+
uiState = _ref3.uiState,
|
|
183
|
+
onLayerVisConfigChange = _ref3.onLayerVisConfigChange,
|
|
184
|
+
onToggleSplitMapViewport = _ref3.onToggleSplitMapViewport,
|
|
185
|
+
onClickControlBtn = _ref3.onClickControlBtn,
|
|
186
|
+
_ref3$isViewportUnsyn = _ref3.isViewportUnsyncAllowed,
|
|
187
|
+
isViewportUnsyncAllowed = _ref3$isViewportUnsyn === void 0 ? true : _ref3$isViewportUnsyn,
|
|
188
|
+
className = _ref3.className,
|
|
189
|
+
interactionConfig = _ref3.interactionConfig,
|
|
190
|
+
MapControlTooltip = _ref3.MapControlTooltip,
|
|
191
|
+
MapControlPanel = _ref3.MapControlPanel,
|
|
192
|
+
MapLegend = _ref3.MapLegend;
|
|
193
|
+
var isSidePanelShown = uiState.activeSidePanel;
|
|
194
|
+
var settings = (_uiState$mapControls2 = uiState.mapControls) === null || _uiState$mapControls2 === void 0 || (_uiState$mapControls2 = _uiState$mapControls2.mapLegend) === null || _uiState$mapControls2 === void 0 ? void 0 : _uiState$mapControls2.settings;
|
|
195
|
+
var mapLegend = (mapControls === null || mapControls === void 0 ? void 0 : mapControls.mapLegend) || {};
|
|
196
|
+
var _ref4 = mapLegend || {},
|
|
197
|
+
active = _ref4.active,
|
|
198
|
+
disableEdit = _ref4.disableEdit;
|
|
199
|
+
var rootContext = (0, _react.useContext)(_context.RootContext);
|
|
200
|
+
var onClick = (0, _react.useCallback)(function () {
|
|
201
|
+
var _mapControls$mapDraw;
|
|
202
|
+
onClickControlBtn === null || onClickControlBtn === void 0 || onClickControlBtn();
|
|
203
|
+
if (mapControls !== null && mapControls !== void 0 && (_mapControls$mapDraw = mapControls.mapDraw) !== null && _mapControls$mapDraw !== void 0 && _mapControls$mapDraw.active) {
|
|
204
|
+
onToggleMapControl('mapDraw');
|
|
133
205
|
}
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
206
|
+
onToggleMapControl('mapLegend');
|
|
207
|
+
}, [onClickControlBtn, onToggleMapControl, mapControls]);
|
|
208
|
+
var onCloseClick = (0, _react.useCallback)(function (e) {
|
|
209
|
+
e.preventDefault();
|
|
210
|
+
onToggleMapControl('mapLegend');
|
|
211
|
+
}, [onToggleMapControl]);
|
|
212
|
+
if (!mapLegend.show) {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
var legendPanel = active ? /*#__PURE__*/_react["default"].createElement(MapControlPanel, {
|
|
216
|
+
scale: scale,
|
|
217
|
+
header: "header.layerLegend",
|
|
218
|
+
onClick: onCloseClick,
|
|
219
|
+
pinnable: false,
|
|
220
|
+
disableClose: false,
|
|
221
|
+
isExport: isExport,
|
|
222
|
+
logoComponent: logoComponent,
|
|
223
|
+
mapState: mapState,
|
|
224
|
+
onToggleSplitMapViewport: onToggleSplitMapViewport,
|
|
225
|
+
isViewportUnsyncAllowed: isViewportUnsyncAllowed,
|
|
226
|
+
className: className
|
|
227
|
+
}, /*#__PURE__*/_react["default"].createElement(MapLegend, {
|
|
228
|
+
layers: layers,
|
|
229
|
+
mapState: mapState,
|
|
230
|
+
disableEdit: disableEdit,
|
|
231
|
+
isExport: isExport,
|
|
232
|
+
onLayerVisConfigChange: onLayerVisConfigChange
|
|
233
|
+
})) : null;
|
|
234
|
+
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, active ? (0, _utils.hasPortableWidth)(_styles.breakPointValues) ? legendPanel : isExport ? /*#__PURE__*/_react["default"].createElement(ImageExportLegend, {
|
|
235
|
+
isSidePanelShown: isSidePanelShown,
|
|
236
|
+
settings: settings
|
|
237
|
+
}, legendPanel) : ( /*#__PURE__*/(0, _reactDom.createPortal)( /*#__PURE__*/_react["default"].createElement(DraggableLegend, null, legendPanel), (_rootContext$current = rootContext === null || rootContext === void 0 ? void 0 : rootContext.current) !== null && _rootContext$current !== void 0 ? _rootContext$current : document.body)) : null, !isExport ? /*#__PURE__*/_react["default"].createElement(MapControlTooltip, {
|
|
238
|
+
id: "show-legend",
|
|
239
|
+
message: "tooltip.showLegend"
|
|
240
|
+
}, /*#__PURE__*/_react["default"].createElement(_styledComponents2.MapControlButton, {
|
|
241
|
+
className: "map-control-button show-legend",
|
|
242
|
+
onClick: onClick
|
|
243
|
+
}, /*#__PURE__*/_react["default"].createElement(actionIcons.legend, {
|
|
244
|
+
height: "22px"
|
|
245
|
+
}))) : null);
|
|
246
|
+
};
|
|
247
|
+
function MapLegendPanelFactory(MapControlTooltip, MapControlPanel, MapLegend) {
|
|
248
|
+
var MapLegendPanel = (0, _injector.withState)([_reducers.uiStateLens], function (state) {
|
|
249
|
+
return {
|
|
250
|
+
MapControlTooltip: MapControlTooltip,
|
|
251
|
+
MapControlPanel: MapControlPanel,
|
|
252
|
+
MapLegend: MapLegend
|
|
253
|
+
};
|
|
254
|
+
}, {
|
|
255
|
+
setMapControlSettings: _actions.setMapControlSettings
|
|
256
|
+
})(MapLegendPanelComponent);
|
|
151
257
|
MapLegendPanel.displayName = 'MapLegendPanel';
|
|
152
258
|
return (0, _styledComponents.withTheme)(MapLegendPanel);
|
|
153
259
|
}
|
|
154
260
|
var _default = exports["default"] = MapLegendPanelFactory;
|
|
155
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3REb20iLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pY29ucyIsIl9zdHlsZWRDb21wb25lbnRzMiIsIl9tYXBDb250cm9sVG9vbHRpcCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbWFwQ29udHJvbFBhbmVsIiwiX21hcExlZ2VuZCIsIl9jb25zdGFudHMiLCJfc3R5bGVzIiwiX2NvbnRleHQiLCJfcmVhY3QyIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIk1hcExlZ2VuZFBhbmVsRmFjdG9yeSIsImRlcHMiLCJNYXBDb250cm9sVG9vbHRpcEZhY3RvcnkiLCJNYXBDb250cm9sUGFuZWxGYWN0b3J5IiwiTWFwTGVnZW5kRmFjdG9yeSIsIlBpblRvQm90dG9tIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJESU1FTlNJT05TIiwibWFwQ29udHJvbCIsIm1hcExlZ2VuZCIsInBpbm5lZCIsImJvdHRvbSIsInByb3BzIiwib2Zmc2V0UmlnaHQiLCJyaWdodCIsIm1lZGlhIiwicG9ydGFibGUiLCJ3aWR0aCIsIk1hcENvbnRyb2xUb29sdGlwIiwiTWFwQ29udHJvbFBhbmVsIiwiTWFwTGVnZW5kIiwiZGVmYXVsdEFjdGlvbkljb25zIiwibGVnZW5kIiwiTGVnZW5kIiwiTWFwTGVnZW5kUGFuZWwiLCJfcmVmIiwidGhlbWUiLCJsYXllcnMiLCJtYXBDb250cm9scyIsInNjYWxlIiwib25Ub2dnbGVNYXBDb250cm9sIiwiaXNFeHBvcnQiLCJsb2dvQ29tcG9uZW50IiwiX3JlZiRhY3Rpb25JY29ucyIsImFjdGlvbkljb25zIiwibWFwU3RhdGUiLCJvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvbkNsaWNrQ29udHJvbEJ0biIsIl9yZWYkaXNWaWV3cG9ydFVuc3luYyIsImlzVmlld3BvcnRVbnN5bmNBbGxvd2VkIiwiY2xhc3NOYW1lIiwib25MYXllclZpc0NvbmZpZ0NoYW5nZSIsIl9yZWYyIiwiaXNQaW5uZWQiLCJhY3RpdmUiLCJkaXNhYmxlRWRpdCIsInJvb3RDb250ZXh0IiwidXNlQ29udGV4dCIsIlJvb3RDb250ZXh0IiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwiaXNPcGVuZWQiLCJzZXRJc09wZW5lZCIsIl91c2VGbG9hdGluZyIsInVzZUZsb2F0aW5nIiwicGxhY2VtZW50Iiwib3BlbiIsIm9uT3BlbkNoYW5nZSIsIm1pZGRsZXdhcmUiLCJvZmZzZXQiLCJyZWZzIiwiY29udGV4dCIsImZsb2F0aW5nU3R5bGVzIiwiY2xpY2siLCJ1c2VDbGljayIsImRpc21pc3MiLCJ1c2VEaXNtaXNzIiwiX3VzZUludGVyYWN0aW9ucyIsInVzZUludGVyYWN0aW9ucyIsImdldEZsb2F0aW5nUHJvcHMiLCJnZXRSZWZlcmVuY2VQcm9wcyIsIm9uQ2xpY2siLCJ1c2VDYWxsYmFjayIsIl9tYXBDb250cm9scyRtYXBEcmF3IiwibWFwRHJhdyIsIm9uQ2xvc2VDbGljayIsInByZXZlbnREZWZhdWx0Iiwib25QaW5DbGljayIsInNob3ciLCJtYXBDb250cm9sUGFuZWwiLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwiaGVhZGVyIiwicGlubmFibGUiLCJkaXNhYmxlQ2xvc2UiLCJfbWFwQ29udHJvbHMkZWZmZWN0IiwiX21hcENvbnRyb2xzJGVmZmVjdDIiLCJfbWFwQ29udHJvbHMkYWlBc3Npc3QiLCJfbWFwQ29udHJvbHMkYWlBc3Npc3QyIiwicGlubmVkT2Zmc2V0UmlnaHQiLCJlZmZlY3QiLCJlZmZlY3RQYW5lbFdpZHRoIiwiYWlBc3Npc3RhbnQiLCJhaUFzc2lzdGFudFBhbmVsV2lkdGgiLCJwaW5uZWRQYW5lbCIsImNyZWF0ZVBvcnRhbCIsImN1cnJlbnQiLCJkb2N1bWVudCIsImJvZHkiLCJGcmFnbWVudCIsIkZsb2F0aW5nUG9ydGFsIiwicm9vdCIsInJlZiIsInNldEZsb2F0aW5nIiwic3R5bGUiLCJzZXRSZWZlcmVuY2UiLCJpZCIsIm1lc3NhZ2UiLCJNYXBDb250cm9sQnV0dG9uIiwiaGVpZ2h0IiwiZGlzcGxheU5hbWUiLCJ3aXRoVGhlbWUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbWFwL21hcC1sZWdlbmQtcGFuZWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCB7Y3JlYXRlUG9ydGFsfSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFJlYWN0LCB7Q29tcG9uZW50VHlwZSwgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7d2l0aFRoZW1lfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7TGVnZW5kfSBmcm9tICcuLi9jb21tb24vaWNvbnMnO1xuaW1wb3J0IHtNYXBDb250cm9sQnV0dG9ufSBmcm9tICcuLi9jb21tb24vc3R5bGVkLWNvbXBvbmVudHMnO1xuaW1wb3J0IE1hcENvbnRyb2xUb29sdGlwRmFjdG9yeSBmcm9tICcuL21hcC1jb250cm9sLXRvb2x0aXAnO1xuaW1wb3J0IE1hcENvbnRyb2xQYW5lbEZhY3RvcnkgZnJvbSAnLi9tYXAtY29udHJvbC1wYW5lbCc7XG5pbXBvcnQgTWFwTGVnZW5kRmFjdG9yeSBmcm9tICcuL21hcC1sZWdlbmQnO1xuXG5pbXBvcnQge0RJTUVOU0lPTlN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7TGF5ZXJWaXNDb25maWcsIE1hcENvbnRyb2xNYXBMZWdlbmQsIE1hcENvbnRyb2xzLCBNYXBTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0xheWVyfSBmcm9tICdAa2VwbGVyLmdsL2xheWVycyc7XG5pbXBvcnQge21lZGlhfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5pbXBvcnQge0FjdGlvbkhhbmRsZXIsIHRvZ2dsZVNwbGl0TWFwVmlld3BvcnR9IGZyb20gJ0BrZXBsZXIuZ2wvYWN0aW9ucyc7XG5cbmltcG9ydCB7Um9vdENvbnRleHR9IGZyb20gJy4uL2NvbnRleHQnO1xuXG5NYXBMZWdlbmRQYW5lbEZhY3RvcnkuZGVwcyA9IFtNYXBDb250cm9sVG9vbHRpcEZhY3RvcnksIE1hcENvbnRyb2xQYW5lbEZhY3RvcnksIE1hcExlZ2VuZEZhY3RvcnldO1xuXG5leHBvcnQgdHlwZSBNYXBMZWdlbmRQYW5lbEZhY3RvcnlEZXBzID0gW1xuICB0eXBlb2YgTWFwQ29udHJvbFRvb2x0aXBGYWN0b3J5LFxuICB0eXBlb2YgTWFwQ29udHJvbFBhbmVsRmFjdG9yeSxcbiAgdHlwZW9mIE1hcExlZ2VuZEZhY3Rvcnlcbl07XG5pbnRlcmZhY2UgUGluVG9Cb3R0b21Qcm9wcyB7XG4gIG9mZnNldFJpZ2h0PzogbnVtYmVyO1xufVxuaW1wb3J0IHtcbiAgRmxvYXRpbmdQb3J0YWwsXG4gIG9mZnNldCxcbiAgdXNlQ2xpY2ssXG4gIHVzZURpc21pc3MsXG4gIHVzZUZsb2F0aW5nLFxuICB1c2VJbnRlcmFjdGlvbnNcbn0gZnJvbSAnQGZsb2F0aW5nLXVpL3JlYWN0JztcblxuY29uc3QgUGluVG9Cb3R0b20gPSBzdHlsZWQuZGl2PFBpblRvQm90dG9tUHJvcHM+YFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogJHtESU1FTlNJT05TLm1hcENvbnRyb2wubWFwTGVnZW5kLnBpbm5lZC5ib3R0b219cHg7XG4gIHJpZ2h0OiAke3Byb3BzID0+IChwcm9wcy5vZmZzZXRSaWdodCB8fCAwKSArIERJTUVOU0lPTlMubWFwQ29udHJvbC5tYXBMZWdlbmQucGlubmVkLnJpZ2h0fXB4O1xuICAke21lZGlhLnBvcnRhYmxlYFxuICAgIGJvdHRvbTogMHB4O1xuICAgIHJpZ2h0OiAwcHg7XG4gICAgbWluLXdpZHRoOiAke0RJTUVOU0lPTlMubWFwQ29udHJvbC53aWR0aCArIERJTUVOU0lPTlMubWFwQ29udHJvbC5tYXBMZWdlbmQucGlubmVkLnJpZ2h0fXB4O1xuICAgIC5tYXAtY29udHJvbC1wYW5lbCB7XG4gICAgICBtaW4taGVpZ2h0OiAyMTVweDtcbiAgICAgIG1hcmdpbi1ib3R0b206IDBweDtcbiAgICB9O1xuICBgfTtcbmA7XG5cbmludGVyZmFjZSBNYXBMZWdlbmRQYW5lbEljb25zIHtcbiAgbGVnZW5kOiBDb21wb25lbnRUeXBlPGFueT47XG59XG5cbmV4cG9ydCB0eXBlIE1hcExlZ2VuZFBhbmVsUHJvcHMgPSB7XG4gIHRoZW1lOiBhbnk7XG4gIGxheWVyczogUmVhZG9ubHlBcnJheTxMYXllcj47XG4gIHNjYWxlOiBudW1iZXI7XG4gIG9uVG9nZ2xlTWFwQ29udHJvbDogKGNvbnRyb2w6IHN0cmluZykgPT4gdm9pZDtcbiAgaXNFeHBvcnQ6IGJvb2xlYW47XG4gIGxvZ29Db21wb25lbnQ6IEVsZW1lbnQ7XG4gIGFjdGlvbkljb25zOiBNYXBMZWdlbmRQYW5lbEljb25zO1xuICBtYXBDb250cm9sczogTWFwQ29udHJvbHM7XG4gIG1hcFN0YXRlPzogTWFwU3RhdGU7XG4gIG1hcEhlaWdodD86IG51bWJlcjtcbiAgb2Zmc2V0UmlnaHQ/OiBudW1iZXI7XG4gIG9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydD86IEFjdGlvbkhhbmRsZXI8dHlwZW9mIHRvZ2dsZVNwbGl0TWFwVmlld3BvcnQ+O1xuICBpc1ZpZXdwb3J0VW5zeW5jQWxsb3dlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2tDb250cm9sQnRuPzogKGU/OiBNb3VzZUV2ZW50KSA9PiB2b2lkO1xuICBvbkxheWVyVmlzQ29uZmlnQ2hhbmdlPzogKG9sZExheWVyOiBMYXllciwgbmV3VmlzQ29uZmlnOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPikgPT4gdm9pZDtcbiAgY2xhc3NOYW1lOiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBNYXBMZWdlbmRQYW5lbEZhY3RvcnkoTWFwQ29udHJvbFRvb2x0aXAsIE1hcENvbnRyb2xQYW5lbCwgTWFwTGVnZW5kKSB7XG4gIGNvbnN0IGRlZmF1bHRBY3Rpb25JY29ucyA9IHtcbiAgICBsZWdlbmQ6IExlZ2VuZFxuICB9O1xuXG4gIGNvbnN0IE1hcExlZ2VuZFBhbmVsOiBSZWFjdC5GQzxNYXBMZWdlbmRQYW5lbFByb3BzPiA9ICh7XG4gICAgdGhlbWUsXG4gICAgbGF5ZXJzLFxuICAgIG1hcENvbnRyb2xzLFxuICAgIHNjYWxlLFxuICAgIG9uVG9nZ2xlTWFwQ29udHJvbCxcbiAgICBpc0V4cG9ydCxcbiAgICBsb2dvQ29tcG9uZW50LFxuICAgIGFjdGlvbkljb25zID0gZGVmYXVsdEFjdGlvbkljb25zLFxuICAgIG1hcFN0YXRlLFxuICAgIG9mZnNldFJpZ2h0LFxuICAgIG9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydCxcbiAgICBvbkNsaWNrQ29udHJvbEJ0bixcbiAgICBpc1ZpZXdwb3J0VW5zeW5jQWxsb3dlZCA9IHRydWUsXG4gICAgY2xhc3NOYW1lLFxuICAgIG9uTGF5ZXJWaXNDb25maWdDaGFuZ2VcbiAgfSkgPT4ge1xuICAgIGNvbnN0IG1hcExlZ2VuZCA9IG1hcENvbnRyb2xzPy5tYXBMZWdlbmQgfHwgKHt9IGFzIE1hcENvbnRyb2xNYXBMZWdlbmQpO1xuICAgIGNvbnN0IHthY3RpdmU6IGlzUGlubmVkLCBkaXNhYmxlRWRpdH0gPSBtYXBMZWdlbmQgfHwge307XG4gICAgY29uc3Qgcm9vdENvbnRleHQgPSB1c2VDb250ZXh0KFJvb3RDb250ZXh0KTtcbiAgICBjb25zdCBbaXNPcGVuZWQsIHNldElzT3BlbmVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICAgIGNvbnN0IHtyZWZzLCBjb250ZXh0LCBmbG9hdGluZ1N0eWxlc30gPSB1c2VGbG9hdGluZyh7XG4gICAgICBwbGFjZW1lbnQ6ICdsZWZ0LXN0YXJ0JyxcbiAgICAgIG9wZW46IGlzT3BlbmVkLFxuICAgICAgb25PcGVuQ2hhbmdlOiBzZXRJc09wZW5lZCxcbiAgICAgIG1pZGRsZXdhcmU6IFtvZmZzZXQoMTApXVxuICAgIH0pO1xuXG4gICAgY29uc3QgY2xpY2sgPSB1c2VDbGljayhjb250ZXh0KTtcbiAgICBjb25zdCBkaXNtaXNzID0gdXNlRGlzbWlzcyhjb250ZXh0KTtcbiAgICBjb25zdCB7Z2V0RmxvYXRpbmdQcm9wcywgZ2V0UmVmZXJlbmNlUHJvcHN9ID0gdXNlSW50ZXJhY3Rpb25zKFtjbGljaywgZGlzbWlzc10pO1xuXG4gICAgY29uc3Qgb25DbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgIG9uQ2xpY2tDb250cm9sQnRuPy4oKTtcbiAgICAgIGlmIChtYXBDb250cm9scz8ubWFwRHJhdz8uYWN0aXZlKSB7XG4gICAgICAgIG9uVG9nZ2xlTWFwQ29udHJvbCgnbWFwRHJhdycpO1xuICAgICAgfVxuICAgIH0sIFtvbkNsaWNrQ29udHJvbEJ0biwgb25Ub2dnbGVNYXBDb250cm9sLCBtYXBDb250cm9sc10pO1xuICAgIGNvbnN0IG9uQ2xvc2VDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgICAgZSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgb25Ub2dnbGVNYXBDb250cm9sKCdtYXBMZWdlbmQnKTtcbiAgICAgIH0sXG4gICAgICBbb25Ub2dnbGVNYXBDb250cm9sXVxuICAgICk7XG4gICAgY29uc3Qgb25QaW5DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgICAgZSA9PiB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2V0SXNPcGVuZWQoZmFsc2UpO1xuICAgICAgICBvblRvZ2dsZU1hcENvbnRyb2woJ21hcExlZ2VuZCcpO1xuICAgICAgfSxcbiAgICAgIFtzZXRJc09wZW5lZCwgb25Ub2dnbGVNYXBDb250cm9sXVxuICAgICk7XG5cbiAgICBpZiAoIW1hcExlZ2VuZC5zaG93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgbWFwQ29udHJvbFBhbmVsID0gKFxuICAgICAgPE1hcENvbnRyb2xQYW5lbFxuICAgICAgICBzY2FsZT17c2NhbGV9XG4gICAgICAgIGhlYWRlcj1cImhlYWRlci5sYXllckxlZ2VuZFwiXG4gICAgICAgIGlzUGlubmVkPXt0cnVlfVxuICAgICAgICB7Li4uKGlzUGlubmVkXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIG9uQ2xpY2s6IG9uQ2xvc2VDbGljayxcbiAgICAgICAgICAgICAgcGlubmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG9uUGluQ2xpY2ssXG4gICAgICAgICAgICAgIHBpbm5hYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHRydWVcbiAgICAgICAgICAgIH0pfVxuICAgICAgICBpc0V4cG9ydD17aXNFeHBvcnR9XG4gICAgICAgIGxvZ29Db21wb25lbnQ9e2xvZ29Db21wb25lbnR9XG4gICAgICAgIG1hcFN0YXRlPXttYXBTdGF0ZX1cbiAgICAgICAgb25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0PXtvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnR9XG4gICAgICAgIGlzVmlld3BvcnRVbnN5bmNBbGxvd2VkPXtpc1ZpZXdwb3J0VW5zeW5jQWxsb3dlZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICA+XG4gICAgICAgIDxNYXBMZWdlbmRcbiAgICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgICBtYXBTdGF0ZT17bWFwU3RhdGV9XG4gICAgICAgICAgZGlzYWJsZUVkaXQ9e2Rpc2FibGVFZGl0fVxuICAgICAgICAgIGlzRXhwb3J0PXtpc0V4cG9ydH1cbiAgICAgICAgICBvbkxheWVyVmlzQ29uZmlnQ2hhbmdlPXtvbkxheWVyVmlzQ29uZmlnQ2hhbmdlfVxuICAgICAgICAvPlxuICAgICAgPC9NYXBDb250cm9sUGFuZWw+XG4gICAgKTtcblxuICAgIGlmIChpc1Bpbm5lZCkge1xuICAgICAgLy8gUGlubmVkIHBhbmVsIGlzIG5vdCBzdXBwb3J0ZWQgaW4gZXhwb3J0IG1vZGVcbiAgICAgIGlmIChpc0V4cG9ydCkge1xuICAgICAgICByZXR1cm4gbWFwQ29udHJvbFBhbmVsO1xuICAgICAgfVxuICAgICAgY29uc3QgcGlubmVkT2Zmc2V0UmlnaHQgPVxuICAgICAgICBtYXBDb250cm9scz8uZWZmZWN0Py5zaG93ICYmIG1hcENvbnRyb2xzPy5lZmZlY3Q/LmFjdGl2ZVxuICAgICAgICAgID8gdGhlbWUuZWZmZWN0UGFuZWxXaWR0aCArIDEwXG4gICAgICAgICAgOiBtYXBDb250cm9scz8uYWlBc3Npc3RhbnQ/LnNob3cgJiYgbWFwQ29udHJvbHM/LmFpQXNzaXN0YW50Py5hY3RpdmVcbiAgICAgICAgICA/IHRoZW1lLmFpQXNzaXN0YW50UGFuZWxXaWR0aCArIDEwXG4gICAgICAgICAgOiAwO1xuICAgICAgY29uc3QgcGlubmVkUGFuZWwgPSAoXG4gICAgICAgIDxQaW5Ub0JvdHRvbSBvZmZzZXRSaWdodD17cGlubmVkT2Zmc2V0UmlnaHR9PnttYXBDb250cm9sUGFuZWx9PC9QaW5Ub0JvdHRvbT5cbiAgICAgICk7XG4gICAgICByZXR1cm4gY3JlYXRlUG9ydGFsKHBpbm5lZFBhbmVsLCByb290Q29udGV4dD8uY3VycmVudCB8fCBkb2N1bWVudC5ib2R5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2lzT3BlbmVkID8gKFxuICAgICAgICAgIDxGbG9hdGluZ1BvcnRhbCByb290PXtyb290Q29udGV4dD8uY3VycmVudH0+XG4gICAgICAgICAgICA8ZGl2IHJlZj17cmVmcy5zZXRGbG9hdGluZ30gc3R5bGU9e2Zsb2F0aW5nU3R5bGVzfSB7Li4uZ2V0RmxvYXRpbmdQcm9wcygpfT5cbiAgICAgICAgICAgICAge21hcENvbnRyb2xQYW5lbH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvRmxvYXRpbmdQb3J0YWw+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8ZGl2IHJlZj17cmVmcy5zZXRSZWZlcmVuY2V9IHsuLi5nZXRSZWZlcmVuY2VQcm9wcygpfT5cbiAgICAgICAgICA8TWFwQ29udHJvbFRvb2x0aXAgaWQ9XCJzaG93LWxlZ2VuZFwiIG1lc3NhZ2U9XCJ0b29sdGlwLnNob3dMZWdlbmRcIj5cbiAgICAgICAgICAgIDxNYXBDb250cm9sQnV0dG9uIGNsYXNzTmFtZT1cIm1hcC1jb250cm9sLWJ1dHRvbiBzaG93LWxlZ2VuZFwiIG9uQ2xpY2s9e29uQ2xpY2t9PlxuICAgICAgICAgICAgICA8YWN0aW9uSWNvbnMubGVnZW5kIGhlaWdodD1cIjIycHhcIiAvPlxuICAgICAgICAgICAgPC9NYXBDb250cm9sQnV0dG9uPlxuICAgICAgICAgIDwvTWFwQ29udHJvbFRvb2x0aXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC8+XG4gICAgKTtcbiAgfTtcblxuICBNYXBMZWdlbmRQYW5lbC5kaXNwbGF5TmFtZSA9ICdNYXBMZWdlbmRQYW5lbCc7XG4gIHJldHVybiB3aXRoVGhlbWUoTWFwTGVnZW5kUGFuZWwpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNYXBMZWdlbmRQYW5lbEZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsU0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFB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O01BQ1AsSUFBTUMsV0FBVyxnQkFDZnJJLE1BQUEsWUFBQXVILGFBQUEsQ0FBQy9FLFdBQVc7UUFBQ1UsV0FBVyxFQUFFOEU7TUFBa0IsR0FBRVYsZUFBNkIsQ0FDNUU7TUFDRCxvQkFBTyxJQUFBZ0Isc0JBQVksRUFBQ0QsV0FBVyxFQUFFLENBQUFsRCxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRW9ELE9BQU8sS0FBSUMsUUFBUSxDQUFDQyxJQUFJLENBQUM7SUFDekU7SUFFQSxvQkFDRXpJLE1BQUEsWUFBQXVILGFBQUEsQ0FBQXZILE1BQUEsWUFBQTBJLFFBQUEsUUFDR2hELFFBQVEsZ0JBQ1AxRixNQUFBLFlBQUF1SCxhQUFBLENBQUMzRyxPQUFBLENBQUErSCxjQUFjO01BQUNDLElBQUksRUFBRXpELFdBQVcsYUFBWEEsV0FBVyx1QkFBWEEsV0FBVyxDQUFFb0Q7SUFBUSxnQkFDekN2SSxNQUFBLFlBQUF1SCxhQUFBLFlBQUFDLFNBQUE7TUFBS3FCLEdBQUcsRUFBRTFDLElBQUksQ0FBQzJDLFdBQVk7TUFBQ0MsS0FBSyxFQUFFMUM7SUFBZSxHQUFLTyxnQkFBZ0IsQ0FBQyxDQUFDLEdBQ3RFVSxlQUNFLENBQ1MsQ0FBQyxHQUNmLElBQUksZUFDUnRILE1BQUEsWUFBQXVILGFBQUEsWUFBQUMsU0FBQTtNQUFLcUIsR0FBRyxFQUFFMUMsSUFBSSxDQUFDNkM7SUFBYSxHQUFLbkMsaUJBQWlCLENBQUMsQ0FBQyxnQkFDbEQ3RyxNQUFBLFlBQUF1SCxhQUFBLENBQUNoRSxpQkFBaUI7TUFBQzBGLEVBQUUsRUFBQyxhQUFhO01BQUNDLE9BQU8sRUFBQztJQUFvQixnQkFDOURsSixNQUFBLFlBQUF1SCxhQUFBLENBQUNuSCxrQkFBQSxDQUFBK0ksZ0JBQWdCO01BQUN0RSxTQUFTLEVBQUMsZ0NBQWdDO01BQUNpQyxPQUFPLEVBQUVBO0lBQVEsZ0JBQzVFOUcsTUFBQSxZQUFBdUgsYUFBQSxDQUFDaEQsV0FBVyxDQUFDWixNQUFNO01BQUN5RixNQUFNLEVBQUM7SUFBTSxDQUFFLENBQ25CLENBQ0QsQ0FDaEIsQ0FDTCxDQUFDO0VBRVAsQ0FBQztFQUVEdkYsY0FBYyxDQUFDd0YsV0FBVyxHQUFHLGdCQUFnQjtFQUM3QyxPQUFPLElBQUFDLDJCQUFTLEVBQUN6RixjQUFjLENBQUM7QUFDbEM7QUFBQyxJQUFBMEYsUUFBQSxHQUFBQyxPQUFBLGNBRWNySCxxQkFBcUIiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
261
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX3JlYWN0RG9tIiwiX3JlYWN0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9jb3JlIiwiX3V0aWxpdGllcyIsIl9yZWFjdDIiLCJfYWN0aW9ucyIsIl9yZWR1Y2VycyIsIl9zdHlsZXMiLCJfdXRpbHMiLCJfaWNvbnMiLCJfc3R5bGVkQ29tcG9uZW50czIiLCJfY29udGV4dCIsIl91c2VMZWdlbmRQb3NpdGlvbjMiLCJfaW5qZWN0b3IiLCJfbWFwQ29udHJvbFBhbmVsIiwiX21hcENvbnRyb2xUb29sdGlwIiwiX21hcExlZ2VuZCIsIl9tb2RpZmllcnMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsIkRSQUdfUkVTSVpFX0lEIiwiRFJBR19NT1ZFX0lEIiwiU3R5bGVkRHJhZ2dhYmxlTGVnZW5kQ29udGVudCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsImFjdGl2ZUNvbG9yIiwiY29udGVudEhlaWdodCIsImNvbmNhdCIsIlN0eWxlZE1vdmVIYW5kbGUiLCJTdHlsZWRSZXNpemVIYW5kbGUiLCJEcmFnZ2FibGVMZWdlbmRDb250ZW50IiwiZm9yd2FyZFJlZiIsInJlZiIsInBvc2l0aW9uU3R5bGVzIiwiY2hpbGRyZW4iLCJkcmFnZ2FibGVNb3ZlIiwidXNlRHJhZ2dhYmxlIiwiaWQiLCJkcmFnZ2FibGVSZXNpemUiLCJyZWZzIiwidXNlTWVyZ2VSZWZzIiwic2V0Tm9kZVJlZiIsImlzRHJhZ2dpbmciLCJjcmVhdGVFbGVtZW50IiwiX2V4dGVuZHMyIiwiY2xhc3NOYW1lIiwiY2xhc3NuYW1lcyIsInN0eWxlIiwidHJhbnNmb3JtIiwiQ1NTIiwiVHJhbnNsYXRlIiwidG9TdHJpbmciLCJhdHRyaWJ1dGVzIiwibGlzdGVuZXJzIiwiRHJhZ2dhYmxlRG90cyIsImhlaWdodCIsIkhvcml6b250YWxSZXNpemVIYW5kbGUiLCJEcmFnZ2FibGVMZWdlbmQiLCJ3aXRoU3RhdGUiLCJ1aVN0YXRlTGVucyIsInN0YXRlIiwic2V0TWFwQ29udHJvbFNldHRpbmdzIiwid2l0aFRoZW1lIiwiX3JlZiIsIl91aVN0YXRlJG1hcENvbnRyb2xzIiwidWlTdGF0ZSIsImlzU2lkZVBhbmVsU2hvd24iLCJhY3RpdmVTaWRlUGFuZWwiLCJzZXR0aW5ncyIsIm1hcENvbnRyb2xzIiwibWFwTGVnZW5kIiwibGVnZW5kQ29udGVudFJlZiIsInVzZVJlZiIsIm9uQ2hhbmdlU2V0dGluZ3MiLCJ1c2VDYWxsYmFjayIsIm5ld1NldHRpbmdzIiwiX3VzZUxlZ2VuZFBvc2l0aW9uIiwidXNlTGVnZW5kUG9zaXRpb24iLCJ1cGRhdGVQb3NpdGlvbiIsInN0YXJ0UmVzaXplIiwicmVzaXplIiwiaGFuZGxlRHJhZ1N0YXJ0IiwiZXZlbnQiLCJhY3RpdmUiLCJoYW5kbGVEcmFnRW5kIiwiaGFuZGxlRHJhZ01vdmUiLCJkZWx0YSIsInkiLCJEbmRDb250ZXh0Iiwib25EcmFnU3RhcnQiLCJvbkRyYWdNb3ZlIiwib25EcmFnRW5kIiwibW9kaWZpZXJzIiwicmVzdHJpY3RUb1dpbmRvd0VkZ2VzIiwiSW1hZ2VFeHBvcnRMZWdlbmQiLCJfcmVmMiIsIl9jb250YWluZXJSZWYkY3VycmVudCIsImNvbnRhaW5lclJlZiIsIl91c2VMZWdlbmRQb3NpdGlvbjIiLCJwb3J0YWxSb290IiwiY3VycmVudCIsImNsb3Nlc3QiLCJxdWVyeVNlbGVjdG9yIiwiY3JlYXRlUG9ydGFsIiwicG9zaXRpb24iLCJNYXBMZWdlbmRQYW5lbEZhY3RvcnkiLCJkZXBzIiwiTWFwQ29udHJvbFRvb2x0aXBGYWN0b3J5IiwiTWFwQ29udHJvbFBhbmVsRmFjdG9yeSIsIk1hcExlZ2VuZEZhY3RvcnkiLCJkZWZhdWx0QWN0aW9uSWNvbnMiLCJsZWdlbmQiLCJMZWdlbmQiLCJNYXBMZWdlbmRQYW5lbENvbXBvbmVudCIsIl9yZWYzIiwiX3VpU3RhdGUkbWFwQ29udHJvbHMyIiwiX3Jvb3RDb250ZXh0JGN1cnJlbnQiLCJsYXllcnMiLCJzY2FsZSIsIm9uVG9nZ2xlTWFwQ29udHJvbCIsImlzRXhwb3J0IiwibG9nb0NvbXBvbmVudCIsIl9yZWYzJGFjdGlvbkljb25zIiwiYWN0aW9uSWNvbnMiLCJtYXBTdGF0ZSIsIm9uTGF5ZXJWaXNDb25maWdDaGFuZ2UiLCJvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnQiLCJvbkNsaWNrQ29udHJvbEJ0biIsIl9yZWYzJGlzVmlld3BvcnRVbnN5biIsImlzVmlld3BvcnRVbnN5bmNBbGxvd2VkIiwiaW50ZXJhY3Rpb25Db25maWciLCJNYXBDb250cm9sVG9vbHRpcCIsIk1hcENvbnRyb2xQYW5lbCIsIk1hcExlZ2VuZCIsIl9yZWY0IiwiZGlzYWJsZUVkaXQiLCJyb290Q29udGV4dCIsInVzZUNvbnRleHQiLCJSb290Q29udGV4dCIsIm9uQ2xpY2siLCJfbWFwQ29udHJvbHMkbWFwRHJhdyIsIm1hcERyYXciLCJvbkNsb3NlQ2xpY2siLCJwcmV2ZW50RGVmYXVsdCIsInNob3ciLCJsZWdlbmRQYW5lbCIsImhlYWRlciIsInBpbm5hYmxlIiwiZGlzYWJsZUNsb3NlIiwiRnJhZ21lbnQiLCJoYXNQb3J0YWJsZVdpZHRoIiwiYnJlYWtQb2ludFZhbHVlcyIsImRvY3VtZW50IiwiYm9keSIsIm1lc3NhZ2UiLCJNYXBDb250cm9sQnV0dG9uIiwiTWFwTGVnZW5kUGFuZWwiLCJkaXNwbGF5TmFtZSIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tYXAvbWFwLWxlZ2VuZC1wYW5lbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQge2NyZWF0ZVBvcnRhbH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBSZWFjdCwge0NvbXBvbmVudFR5cGUsIEZDLCBmb3J3YXJkUmVmLCB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlUmVmfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgc3R5bGVkLCB7d2l0aFRoZW1lfSBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5cbmltcG9ydCB7RG5kQ29udGV4dCwgdXNlRHJhZ2dhYmxlfSBmcm9tICdAZG5kLWtpdC9jb3JlJztcbmltcG9ydCB7Q1NTfSBmcm9tICdAZG5kLWtpdC91dGlsaXRpZXMnO1xuaW1wb3J0IHt1c2VNZXJnZVJlZnN9IGZyb20gJ0BmbG9hdGluZy11aS9yZWFjdCc7XG5cbmltcG9ydCB7QWN0aW9uSGFuZGxlciwgc2V0TWFwQ29udHJvbFNldHRpbmdzLCB0b2dnbGVTcGxpdE1hcFZpZXdwb3J0fSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtMYXllcn0gZnJvbSAnQGtlcGxlci5nbC9sYXllcnMnO1xuaW1wb3J0IHt1aVN0YXRlTGVuc30gZnJvbSAnQGtlcGxlci5nbC9yZWR1Y2Vycyc7XG5pbXBvcnQge2JyZWFrUG9pbnRWYWx1ZXN9IGZyb20gJ0BrZXBsZXIuZ2wvc3R5bGVzJztcbmltcG9ydCB7TGF5ZXJWaXNDb25maWcsIE1hcENvbnRyb2xNYXBMZWdlbmQsIE1hcENvbnRyb2xzLCBNYXBTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge2hhc1BvcnRhYmxlV2lkdGh9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge0xlZ2VuZCwgRHJhZ2dhYmxlRG90cywgSG9yaXpvbnRhbFJlc2l6ZUhhbmRsZX0gZnJvbSAnLi4vY29tbW9uL2ljb25zJztcbmltcG9ydCB7TWFwQ29udHJvbEJ1dHRvbn0gZnJvbSAnLi4vY29tbW9uL3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCB7Um9vdENvbnRleHR9IGZyb20gJy4uL2NvbnRleHQnO1xuaW1wb3J0IHVzZUxlZ2VuZFBvc2l0aW9uLCB7TWFwTGVnZW5kQ29udHJvbFNldHRpbmdzfSBmcm9tICcuLi9ob29rcy91c2UtbGVnZW5kLXBvc2l0aW9uJztcbmltcG9ydCB7d2l0aFN0YXRlfSBmcm9tICcuLi9pbmplY3Rvcic7XG5pbXBvcnQgTWFwQ29udHJvbFBhbmVsRmFjdG9yeSBmcm9tICcuL21hcC1jb250cm9sLXBhbmVsJztcbmltcG9ydCBNYXBDb250cm9sVG9vbHRpcEZhY3RvcnkgZnJvbSAnLi9tYXAtY29udHJvbC10b29sdGlwJztcbmltcG9ydCBNYXBMZWdlbmRGYWN0b3J5IGZyb20gJy4vbWFwLWxlZ2VuZCc7XG5pbXBvcnQge3Jlc3RyaWN0VG9XaW5kb3dFZGdlc30gZnJvbSAnQGRuZC1raXQvbW9kaWZpZXJzJztcblxuY29uc3QgRFJBR19SRVNJWkVfSUQgPSAnbWFwLWxlZ2VuZC1yZXNpemUnO1xuY29uc3QgRFJBR19NT1ZFX0lEID0gJ21hcC1sZWdlbmQtbW92ZSc7XG5cbmNvbnN0IFN0eWxlZERyYWdnYWJsZUxlZ2VuZENvbnRlbnQgPSBzdHlsZWQuZGl2PHtjb250ZW50SGVpZ2h0PzogbnVtYmVyfT5gXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZS1pbi1vdXQ7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICAubGVnZW5kLWlucHV0LWJsb2NrIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG4gICYuaXMtZHJhZ2dpbmcgLmxlZ2VuZC1pbnB1dC1ibG9jayB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgfVxuICAmOmhvdmVyLFxuICAmLmlzLWRyYWdnaW5nIHtcbiAgICAubGVnZW5kLW1vdmUtaGFuZGxlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICB9XG4gICAgLmxlZ2VuZC1yZXNpemUtaGFuZGxlIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICB9XG4gICAgYm9yZGVyLWNvbG9yOiAke3Byb3BzID0+IHByb3BzLnRoZW1lLmFjdGl2ZUNvbG9yfTtcbiAgfVxuICAubWFwLWNvbnRyb2xfX3BhbmVsLWNvbnRlbnQge1xuICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAxMDBweCk7XG4gICAgJHtwcm9wcyA9PiAocHJvcHMuY29udGVudEhlaWdodCA/IGBoZWlnaHQ6ICR7cHJvcHMuY29udGVudEhlaWdodH1weDtgIDogJycpfTtcbiAgfVxuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIHotaW5kZXg6IDI7XG4gIC5tYXAtY29udHJvbC1wYW5lbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRNb3ZlSGFuZGxlID0gc3R5bGVkLmRpdmBcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLWluLW91dDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogd2hpdGU7XG4gIHotaW5kZXg6IDI7XG4gIHRvcDogMDtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbiAgd2lkdGg6IDQ4cHg7XG4gIGhlaWdodDogMTZweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBjdXJzb3I6IG1vdmU7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUuYWN0aXZlQ29sb3J9O1xuYDtcblxuY29uc3QgU3R5bGVkUmVzaXplSGFuZGxlID0gc3R5bGVkLmRpdmBcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLWluLW91dDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBjb2xvcjogI2Y3ZjhmYTtcbiAgei1pbmRleDogMjtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICB3aWR0aDogNDhweDtcbiAgaGVpZ2h0OiAxNnB4O1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGN1cnNvcjogbnMtcmVzaXplO1xuYDtcblxuZXhwb3J0IHR5cGUgTWFwTGVnZW5kUGFuZWxGYWN0b3J5RGVwcyA9IFtcbiAgdHlwZW9mIE1hcENvbnRyb2xUb29sdGlwRmFjdG9yeSxcbiAgdHlwZW9mIE1hcENvbnRyb2xQYW5lbEZhY3RvcnksXG4gIHR5cGVvZiBNYXBMZWdlbmRGYWN0b3J5XG5dO1xuXG50eXBlIERyYWdnYWJsZUxlZ2VuZENvbnRlbnRQcm9wcyA9IHtcbiAgY29udGVudEhlaWdodD86IG51bWJlcjtcbiAgcG9zaXRpb25TdHlsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufTtcblxuY29uc3QgRHJhZ2dhYmxlTGVnZW5kQ29udGVudCA9IGZvcndhcmRSZWYoKHByb3BzOiBEcmFnZ2FibGVMZWdlbmRDb250ZW50UHJvcHMsIHJlZikgPT4ge1xuICBjb25zdCB7cG9zaXRpb25TdHlsZXMsIGNoaWxkcmVufSA9IHByb3BzO1xuICBjb25zdCBkcmFnZ2FibGVNb3ZlID0gdXNlRHJhZ2dhYmxlKHtpZDogRFJBR19NT1ZFX0lEfSk7XG4gIGNvbnN0IGRyYWdnYWJsZVJlc2l6ZSA9IHVzZURyYWdnYWJsZSh7aWQ6IERSQUdfUkVTSVpFX0lEfSk7XG4gIGNvbnN0IHJlZnMgPSB1c2VNZXJnZVJlZnMoW2RyYWdnYWJsZU1vdmUuc2V0Tm9kZVJlZiwgcmVmXSk7XG4gIGNvbnN0IGlzRHJhZ2dpbmcgPSBkcmFnZ2FibGVNb3ZlLmlzRHJhZ2dpbmcgfHwgZHJhZ2dhYmxlUmVzaXplLmlzRHJhZ2dpbmc7XG4gIHJldHVybiAoXG4gICAgPFN0eWxlZERyYWdnYWJsZUxlZ2VuZENvbnRlbnRcbiAgICAgIHJlZj17cmVmc31cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NuYW1lcygnZHJhZ2dhYmxlLWxlZ2VuZCcsIHsnaXMtZHJhZ2dpbmcnOiBpc0RyYWdnaW5nfSl9XG4gICAgICBzdHlsZT17ey4uLnBvc2l0aW9uU3R5bGVzLCB0cmFuc2Zvcm06IENTUy5UcmFuc2xhdGUudG9TdHJpbmcoZHJhZ2dhYmxlTW92ZS50cmFuc2Zvcm0pfX1cbiAgICAgIGNvbnRlbnRIZWlnaHQ9e3Byb3BzLmNvbnRlbnRIZWlnaHR9XG4gICAgICB7Li4uZHJhZ2dhYmxlTW92ZS5hdHRyaWJ1dGVzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIHtpc0RyYWdnaW5nID8gPGRpdiBjbGFzc05hbWU9XCJsZWdlbmQtaW5wdXQtYmxvY2tcIiAvPiA6IG51bGx9XG4gICAgICA8U3R5bGVkTW92ZUhhbmRsZSBjbGFzc05hbWU9XCJsZWdlbmQtbW92ZS1oYW5kbGVcIiB7Li4uZHJhZ2dhYmxlTW92ZS5saXN0ZW5lcnN9PlxuICAgICAgICA8RHJhZ2dhYmxlRG90cyBoZWlnaHQ9XCIxNnB4XCIgLz5cbiAgICAgIDwvU3R5bGVkTW92ZUhhbmRsZT5cbiAgICAgIDxTdHlsZWRSZXNpemVIYW5kbGVcbiAgICAgICAgY2xhc3NOYW1lPVwibGVnZW5kLXJlc2l6ZS1oYW5kbGVcIlxuICAgICAgICByZWY9e2RyYWdnYWJsZVJlc2l6ZS5zZXROb2RlUmVmfVxuICAgICAgICB7Li4uZHJhZ2dhYmxlUmVzaXplLmxpc3RlbmVyc31cbiAgICAgID5cbiAgICAgICAgPEhvcml6b250YWxSZXNpemVIYW5kbGUgaGVpZ2h0PVwiMTZweFwiIC8+XG4gICAgICA8L1N0eWxlZFJlc2l6ZUhhbmRsZT5cbiAgICA8L1N0eWxlZERyYWdnYWJsZUxlZ2VuZENvbnRlbnQ+XG4gICk7XG59KTtcblxuY29uc3QgRHJhZ2dhYmxlTGVnZW5kID0gd2l0aFN0YXRlKFt1aVN0YXRlTGVuc10sIHN0YXRlID0+IHN0YXRlLCB7c2V0TWFwQ29udHJvbFNldHRpbmdzfSkoXG4gIHdpdGhUaGVtZSgoe3VpU3RhdGUsIHRoZW1lLCBzZXRNYXBDb250cm9sU2V0dGluZ3MsIGNoaWxkcmVufSkgPT4ge1xuICAgIGNvbnN0IGlzU2lkZVBhbmVsU2hvd24gPSB1aVN0YXRlLmFjdGl2ZVNpZGVQYW5lbDtcbiAgICBjb25zdCBzZXR0aW5ncyA9IHVpU3RhdGUubWFwQ29udHJvbHM/Lm1hcExlZ2VuZD8uc2V0dGluZ3M7XG5cbiAgICBjb25zdCBsZWdlbmRDb250ZW50UmVmID0gdXNlUmVmPEhUTUxFbGVtZW50PihudWxsKTtcbiAgICBjb25zdCBvbkNoYW5nZVNldHRpbmdzID0gdXNlQ2FsbGJhY2soXG4gICAgICBuZXdTZXR0aW5ncyA9PiBzZXRNYXBDb250cm9sU2V0dGluZ3MoJ21hcExlZ2VuZCcsIG5ld1NldHRpbmdzKSxcbiAgICAgIFtzZXRNYXBDb250cm9sU2V0dGluZ3NdXG4gICAgKTtcbiAgICBjb25zdCB7cG9zaXRpb25TdHlsZXMsIHVwZGF0ZVBvc2l0aW9uLCBzdGFydFJlc2l6ZSwgcmVzaXplLCBjb250ZW50SGVpZ2h0fSA9IHVzZUxlZ2VuZFBvc2l0aW9uKHtcbiAgICAgIGxlZ2VuZENvbnRlbnRSZWYsXG4gICAgICBpc1NpZGVQYW5lbFNob3duLFxuICAgICAgdGhlbWUsXG4gICAgICBzZXR0aW5ncyxcbiAgICAgIG9uQ2hhbmdlU2V0dGluZ3NcbiAgICB9KTtcblxuICAgIGNvbnN0IGhhbmRsZURyYWdTdGFydCA9IHVzZUNhbGxiYWNrKFxuICAgICAgZXZlbnQgPT4ge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmFjdGl2ZS5pZCkge1xuICAgICAgICAgIGNhc2UgRFJBR19SRVNJWkVfSUQ6XG4gICAgICAgICAgICBzdGFydFJlc2l6ZSgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbdXBkYXRlUG9zaXRpb24sIHN0YXJ0UmVzaXplXVxuICAgICk7XG4gICAgY29uc3QgaGFuZGxlRHJhZ0VuZCA9IHVzZUNhbGxiYWNrKHVwZGF0ZVBvc2l0aW9uLCBbdXBkYXRlUG9zaXRpb25dKTtcbiAgICBjb25zdCBoYW5kbGVEcmFnTW92ZSA9IHVzZUNhbGxiYWNrKFxuICAgICAgZXZlbnQgPT4ge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmFjdGl2ZS5pZCkge1xuICAgICAgICAgIGNhc2UgRFJBR19SRVNJWkVfSUQ6XG4gICAgICAgICAgICByZXNpemUoZXZlbnQuZGVsdGEueSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFtyZXNpemVdXG4gICAgKTtcblxuICAgIHJldHVybiAoXG4gICAgICA8RG5kQ29udGV4dFxuICAgICAgICBvbkRyYWdTdGFydD17aGFuZGxlRHJhZ1N0YXJ0fVxuICAgICAgICBvbkRyYWdNb3ZlPXtoYW5kbGVEcmFnTW92ZX1cbiAgICAgICAgb25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfVxuICAgICAgICBtb2RpZmllcnM9e1tyZXN0cmljdFRvV2luZG93RWRnZXNdfVxuICAgICAgPlxuICAgICAgICA8RHJhZ2dhYmxlTGVnZW5kQ29udGVudFxuICAgICAgICAgIHJlZj17bGVnZW5kQ29udGVudFJlZn1cbiAgICAgICAgICBwb3NpdGlvblN0eWxlcz17cG9zaXRpb25TdHlsZXN9XG4gICAgICAgICAgY29udGVudEhlaWdodD17Y29udGVudEhlaWdodH1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9EcmFnZ2FibGVMZWdlbmRDb250ZW50PlxuICAgICAgPC9EbmRDb250ZXh0PlxuICAgICk7XG4gIH0pXG4pIGFzIEZDPHtjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlfT47XG5cbnR5cGUgSW1hZ2VFeHBvcnRMZWdlbmRQcm9wcyA9IHtcbiAgc2V0dGluZ3M6IE1hcExlZ2VuZENvbnRyb2xTZXR0aW5ncztcbiAgaXNTaWRlUGFuZWxTaG93bjogYm9vbGVhbjtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbn07XG5cbmNvbnN0IEltYWdlRXhwb3J0TGVnZW5kID0gd2l0aFRoZW1lKCh7c2V0dGluZ3MsIGlzU2lkZVBhbmVsU2hvd24sIHRoZW1lLCBjaGlsZHJlbn0pID0+IHtcbiAgY29uc3QgY29udGFpbmVyUmVmOiBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD4gPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGxlZ2VuZENvbnRlbnRSZWY6IFJlYWN0Lk11dGFibGVSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPiA9IHVzZVJlZihudWxsKTtcblxuICBjb25zdCB7cG9zaXRpb25TdHlsZXN9ID0gdXNlTGVnZW5kUG9zaXRpb24oe1xuICAgIGxlZ2VuZENvbnRlbnRSZWYsXG4gICAgaXNTaWRlUGFuZWxTaG93bixcbiAgICB0aGVtZSxcbiAgICBzZXR0aW5ncyxcbiAgICBvbkNoYW5nZVNldHRpbmdzOiAoKSA9PiB7XG4gICAgICAvLyBkbyBub3RoaW5nIGJ5IGRlZmF1bHRcbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IHBvcnRhbFJvb3QgPSBjb250YWluZXJSZWYuY3VycmVudFxuICAgID8uY2xvc2VzdCgnLmV4cG9ydC1tYXAtaW5zdGFuY2UnKVxuICAgID8ucXVlcnlTZWxlY3RvcignI2RlZmF1bHQtZGVja2dsLW92ZXJsYXktd3JhcHBlcicpO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICB7cG9ydGFsUm9vdFxuICAgICAgICA/IGNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiZml4ZWQtbGVnZW5kXCJcbiAgICAgICAgICAgICAgcmVmPXtsZWdlbmRDb250ZW50UmVmfVxuICAgICAgICAgICAgICBzdHlsZT17ey4uLnBvc2l0aW9uU3R5bGVzLCBwb3NpdGlvbjogJ2Fic29sdXRlJ319XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgICAgIDwvZGl2PixcbiAgICAgICAgICAgIHBvcnRhbFJvb3RcbiAgICAgICAgICApXG4gICAgICAgIDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKTtcbn0pIGFzIFJlYWN0LkZDPEltYWdlRXhwb3J0TGVnZW5kUHJvcHM+O1xuXG5NYXBMZWdlbmRQYW5lbEZhY3RvcnkuZGVwcyA9IFtNYXBDb250cm9sVG9vbHRpcEZhY3RvcnksIE1hcENvbnRyb2xQYW5lbEZhY3RvcnksIE1hcExlZ2VuZEZhY3RvcnldO1xuXG5pbnRlcmZhY2UgTWFwTGVnZW5kUGFuZWxJY29ucyB7XG4gIGxlZ2VuZDogQ29tcG9uZW50VHlwZTxhbnk+O1xufVxuXG5leHBvcnQgdHlwZSBNYXBMZWdlbmRQYW5lbFByb3BzID0ge1xuICB0aGVtZTogYW55O1xuICBsYXllcnM6IFJlYWRvbmx5QXJyYXk8TGF5ZXI+O1xuICBzY2FsZTogbnVtYmVyO1xuICBvblRvZ2dsZU1hcENvbnRyb2w6IChjb250cm9sOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGlzRXhwb3J0OiBib29sZWFuO1xuICBsb2dvQ29tcG9uZW50OiBFbGVtZW50O1xuICBhY3Rpb25JY29uczogTWFwTGVnZW5kUGFuZWxJY29ucztcbiAgbWFwQ29udHJvbHM6IE1hcENvbnRyb2xzO1xuICBtYXBTdGF0ZT86IE1hcFN0YXRlO1xuICBvbkxheWVyVmlzQ29uZmlnQ2hhbmdlPzogKG9sZExheWVyOiBMYXllciwgbmV3VmlzQ29uZmlnOiBQYXJ0aWFsPExheWVyVmlzQ29uZmlnPikgPT4gdm9pZDtcbiAgb25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0PzogQWN0aW9uSGFuZGxlcjx0eXBlb2YgdG9nZ2xlU3BsaXRNYXBWaWV3cG9ydD47XG4gIGlzVmlld3BvcnRVbnN5bmNBbGxvd2VkPzogYm9vbGVhbjtcbiAgb25DbGlja0NvbnRyb2xCdG4/OiAoZT86IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBzZXR0aW5nczogTWFwTGVnZW5kQ29udHJvbFNldHRpbmdzO1xuICBpc1NpZGVQYW5lbFNob3duOiBib29sZWFuO1xufTtcblxudHlwZSBNYXBMZWdlbmRQYW5lbENvbXBvbmVudFR5cGUgPSBSZWFjdC5GQzxNYXBMZWdlbmRQYW5lbFByb3BzPjtcblxuY29uc3QgZGVmYXVsdEFjdGlvbkljb25zID0ge1xuICBsZWdlbmQ6IExlZ2VuZFxufTtcblxuY29uc3QgTWFwTGVnZW5kUGFuZWxDb21wb25lbnQgPSAoe1xuICBsYXllcnMsXG4gIG1hcENvbnRyb2xzLFxuICBzY2FsZSxcbiAgb25Ub2dnbGVNYXBDb250cm9sLFxuICBpc0V4cG9ydCxcbiAgbG9nb0NvbXBvbmVudCxcbiAgYWN0aW9uSWNvbnMgPSBkZWZhdWx0QWN0aW9uSWNvbnMsXG4gIG1hcFN0YXRlLFxuICB1aVN0YXRlLFxuICBvbkxheWVyVmlzQ29uZmlnQ2hhbmdlLFxuICBvblRvZ2dsZVNwbGl0TWFwVmlld3BvcnQsXG4gIG9uQ2xpY2tDb250cm9sQnRuLFxuICBpc1ZpZXdwb3J0VW5zeW5jQWxsb3dlZCA9IHRydWUsXG4gIGNsYXNzTmFtZSxcbiAgaW50ZXJhY3Rpb25Db25maWcsXG4gIE1hcENvbnRyb2xUb29sdGlwLFxuICBNYXBDb250cm9sUGFuZWwsXG4gIE1hcExlZ2VuZFxufSkgPT4ge1xuICBjb25zdCBpc1NpZGVQYW5lbFNob3duID0gdWlTdGF0ZS5hY3RpdmVTaWRlUGFuZWw7XG4gIGNvbnN0IHNldHRpbmdzID0gdWlTdGF0ZS5tYXBDb250cm9scz8ubWFwTGVnZW5kPy5zZXR0aW5ncztcblxuICBjb25zdCBtYXBMZWdlbmQgPSBtYXBDb250cm9scz8ubWFwTGVnZW5kIHx8ICh7fSBhcyBNYXBDb250cm9sTWFwTGVnZW5kKTtcbiAgY29uc3Qge2FjdGl2ZSwgZGlzYWJsZUVkaXR9ID0gbWFwTGVnZW5kIHx8IHt9O1xuICBjb25zdCByb290Q29udGV4dCA9IHVzZUNvbnRleHQoUm9vdENvbnRleHQpO1xuXG4gIGNvbnN0IG9uQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb25DbGlja0NvbnRyb2xCdG4/LigpO1xuICAgIGlmIChtYXBDb250cm9scz8ubWFwRHJhdz8uYWN0aXZlKSB7XG4gICAgICBvblRvZ2dsZU1hcENvbnRyb2woJ21hcERyYXcnKTtcbiAgICB9XG4gICAgb25Ub2dnbGVNYXBDb250cm9sKCdtYXBMZWdlbmQnKTtcbiAgfSwgW29uQ2xpY2tDb250cm9sQnRuLCBvblRvZ2dsZU1hcENvbnRyb2wsIG1hcENvbnRyb2xzXSk7XG4gIGNvbnN0IG9uQ2xvc2VDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgb25Ub2dnbGVNYXBDb250cm9sKCdtYXBMZWdlbmQnKTtcbiAgICB9LFxuICAgIFtvblRvZ2dsZU1hcENvbnRyb2xdXG4gICk7XG5cbiAgaWYgKCFtYXBMZWdlbmQuc2hvdykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbGVnZW5kUGFuZWwgPSBhY3RpdmUgPyAoXG4gICAgPE1hcENvbnRyb2xQYW5lbFxuICAgICAgc2NhbGU9e3NjYWxlfVxuICAgICAgaGVhZGVyPVwiaGVhZGVyLmxheWVyTGVnZW5kXCJcbiAgICAgIHsuLi57b25DbGljazogb25DbG9zZUNsaWNrLCBwaW5uYWJsZTogZmFsc2UsIGRpc2FibGVDbG9zZTogZmFsc2V9fVxuICAgICAgaXNFeHBvcnQ9e2lzRXhwb3J0fVxuICAgICAgbG9nb0NvbXBvbmVudD17bG9nb0NvbXBvbmVudH1cbiAgICAgIG1hcFN0YXRlPXttYXBTdGF0ZX1cbiAgICAgIG9uVG9nZ2xlU3BsaXRNYXBWaWV3cG9ydD17b25Ub2dnbGVTcGxpdE1hcFZpZXdwb3J0fVxuICAgICAgaXNWaWV3cG9ydFVuc3luY0FsbG93ZWQ9e2lzVmlld3BvcnRVbnN5bmNBbGxvd2VkfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgPlxuICAgICAgPE1hcExlZ2VuZFxuICAgICAgICBsYXllcnM9e2xheWVyc31cbiAgICAgICAgbWFwU3RhdGU9e21hcFN0YXRlfVxuICAgICAgICBkaXNhYmxlRWRpdD17ZGlzYWJsZUVkaXR9XG4gICAgICAgIGlzRXhwb3J0PXtpc0V4cG9ydH1cbiAgICAgICAgb25MYXllclZpc0NvbmZpZ0NoYW5nZT17b25MYXllclZpc0NvbmZpZ0NoYW5nZX1cbiAgICAgIC8+XG4gICAgPC9NYXBDb250cm9sUGFuZWw+XG4gICkgOiBudWxsO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHthY3RpdmUgPyAoXG4gICAgICAgIGhhc1BvcnRhYmxlV2lkdGgoYnJlYWtQb2ludFZhbHVlcykgPyAoXG4gICAgICAgICAgbGVnZW5kUGFuZWxcbiAgICAgICAgKSA6IGlzRXhwb3J0ID8gKFxuICAgICAgICAgIDxJbWFnZUV4cG9ydExlZ2VuZCBpc1NpZGVQYW5lbFNob3duPXtpc1NpZGVQYW5lbFNob3dufSBzZXR0aW5ncz17c2V0dGluZ3N9PlxuICAgICAgICAgICAge2xlZ2VuZFBhbmVsfVxuICAgICAgICAgIDwvSW1hZ2VFeHBvcnRMZWdlbmQ+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgY3JlYXRlUG9ydGFsKFxuICAgICAgICAgICAgPERyYWdnYWJsZUxlZ2VuZD57bGVnZW5kUGFuZWx9PC9EcmFnZ2FibGVMZWdlbmQ+LFxuICAgICAgICAgICAgcm9vdENvbnRleHQ/LmN1cnJlbnQgPz8gZG9jdW1lbnQuYm9keVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKSA6IG51bGx9XG4gICAgICB7IWlzRXhwb3J0ID8gKFxuICAgICAgICA8TWFwQ29udHJvbFRvb2x0aXAgaWQ9XCJzaG93LWxlZ2VuZFwiIG1lc3NhZ2U9XCJ0b29sdGlwLnNob3dMZWdlbmRcIj5cbiAgICAgICAgICA8TWFwQ29udHJvbEJ1dHRvbiBjbGFzc05hbWU9XCJtYXAtY29udHJvbC1idXR0b24gc2hvdy1sZWdlbmRcIiBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICAgICAgICAgIDxhY3Rpb25JY29ucy5sZWdlbmQgaGVpZ2h0PVwiMjJweFwiIC8+XG4gICAgICAgICAgPC9NYXBDb250cm9sQnV0dG9uPlxuICAgICAgICA8L01hcENvbnRyb2xUb29sdGlwPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC8+XG4gICk7XG59O1xuXG5mdW5jdGlvbiBNYXBMZWdlbmRQYW5lbEZhY3RvcnkoXG4gIE1hcENvbnRyb2xUb29sdGlwOiBSZXR1cm5UeXBlPHR5cGVvZiBNYXBDb250cm9sVG9vbHRpcEZhY3Rvcnk+LFxuICBNYXBDb250cm9sUGFuZWw6IFJldHVyblR5cGU8dHlwZW9mIE1hcENvbnRyb2xQYW5lbEZhY3Rvcnk+LFxuICBNYXBMZWdlbmQ6IFJldHVyblR5cGU8dHlwZW9mIE1hcExlZ2VuZEZhY3Rvcnk+XG4pOiBNYXBMZWdlbmRQYW5lbENvbXBvbmVudFR5cGUge1xuICBjb25zdCBNYXBMZWdlbmRQYW5lbCA9IHdpdGhTdGF0ZShcbiAgICBbdWlTdGF0ZUxlbnNdLFxuICAgIHN0YXRlID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIE1hcENvbnRyb2xUb29sdGlwLFxuICAgICAgICBNYXBDb250cm9sUGFuZWwsXG4gICAgICAgIE1hcExlZ2VuZFxuICAgICAgfTtcbiAgICB9LFxuICAgIHtzZXRNYXBDb250cm9sU2V0dGluZ3N9XG4gICkoTWFwTGVnZW5kUGFuZWxDb21wb25lbnQpO1xuXG4gIE1hcExlZ2VuZFBhbmVsLmRpc3BsYXlOYW1lID0gJ01hcExlZ2VuZFBhbmVsJztcbiAgcmV0dXJuIHdpdGhUaGVtZShNYXBMZWdlbmRQYW5lbCBhcyBNYXBMZWdlbmRQYW5lbENvbXBvbmVudFR5cGUpIGFzIE1hcExlZ2VuZFBhbmVsQ29tcG9uZW50VHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFwTGVnZW5kUGFuZWxGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUdBLElBQUFBLFdBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFNBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLGlCQUFBLEdBQUFELHVCQUFBLENBQUFILE9BQUE7QUFFQSxJQUFBSyxLQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxPQUFB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
|