@unovis/angular 1.6.0-pre.2 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/lib/bundles/unovis-angular.umd.js +301 -16
  2. package/dist/lib/bundles/unovis-angular.umd.js.map +1 -1
  3. package/dist/lib/components/brush/brush.component.d.ts +1 -1
  4. package/dist/lib/components/crosshair/crosshair.component.d.ts +21 -8
  5. package/dist/lib/components/graph/graph.component.d.ts +9 -1
  6. package/dist/lib/components/nested-donut/nested-donut.component.d.ts +1 -1
  7. package/dist/lib/components/plotband/plotband.component.d.ts +81 -0
  8. package/dist/lib/components/plotband/plotband.module.d.ts +7 -0
  9. package/dist/lib/components/plotline/plotline.component.d.ts +87 -0
  10. package/dist/lib/components/plotline/plotline.module.d.ts +7 -0
  11. package/dist/lib/components/timeline/timeline.component.d.ts +60 -15
  12. package/dist/lib/components.d.ts +6 -0
  13. package/dist/lib/esm2015/components/brush/brush.component.js +1 -1
  14. package/dist/lib/esm2015/components/crosshair/crosshair.component.js +8 -4
  15. package/dist/lib/esm2015/components/graph/graph.component.js +8 -4
  16. package/dist/lib/esm2015/components/nested-donut/nested-donut.component.js +1 -1
  17. package/dist/lib/esm2015/components/plotband/plotband.component.js +61 -0
  18. package/dist/lib/esm2015/components/plotband/plotband.module.js +18 -0
  19. package/dist/lib/esm2015/components/plotline/plotline.component.js +63 -0
  20. package/dist/lib/esm2015/components/plotline/plotline.module.js +18 -0
  21. package/dist/lib/esm2015/components/timeline/timeline.component.js +53 -11
  22. package/dist/lib/esm2015/components.js +7 -1
  23. package/dist/lib/esm2015/html-components/rolling-pin-legend/rolling-pin-legend.component.js +48 -0
  24. package/dist/lib/esm2015/html-components/rolling-pin-legend/rolling-pin-legend.module.js +18 -0
  25. package/dist/lib/fesm2015/unovis-angular.js +273 -18
  26. package/dist/lib/fesm2015/unovis-angular.js.map +1 -1
  27. package/dist/lib/html-components/rolling-pin-legend/rolling-pin-legend.component.d.ts +24 -0
  28. package/dist/lib/html-components/rolling-pin-legend/rolling-pin-legend.module.d.ts +7 -0
  29. package/dist/lib/package.json +2 -2
  30. package/package.json +2 -2
@@ -69,7 +69,7 @@ export declare class VisBrushComponent<Datum> implements BrushConfigInterface<Da
69
69
  /** Allow dragging the selected area as a whole in order to change the selected range. Default: `false` */
70
70
  draggable?: boolean;
71
71
  /** Position of the handle: `Arrangement.Inside` or `Arrangement.Outside`. Default: `Arrangement.Inside` */
72
- handlePosition?: Arrangement | string;
72
+ handlePosition?: Arrangement.Inside | Arrangement.Outside | string;
73
73
  /** Constraint Brush selection to a minimal length in data units. Default: `undefined` */
74
74
  selectionMinLength?: number;
75
75
  data: Datum[];
@@ -80,9 +80,11 @@ export declare class VisCrosshairComponent<Datum> implements CrosshairConfigInte
80
80
  baseline?: NumericAccessor<Datum>;
81
81
  /** An instance of the Tooltip component to be used with Crosshair. Default: `undefined` */
82
82
  tooltip?: Tooltip | undefined;
83
- /** Tooltip template accessor. The function is supposed to return either a valid HTML string or an HTMLElement. Default: `d => ''` */
84
- template?: (data: Datum, x: number | Date) => string | HTMLElement;
85
- /** Hide Crosshair when the corresponding element is far from mouse pointer. Default: `true` */
83
+ /** Tooltip template accessor. The function is supposed to return either a valid HTML string or an HTMLElement.
84
+ * When `snapToData` is `false`, `datum` will be `undefined` but `data` and `leftNearestDatumIndex` will be provided.
85
+ * Default: `d => ''` */
86
+ template?: (datum: Datum, x: number | Date, data: Datum[], leftNearestDatumIndex: number) => string | HTMLElement;
87
+ /** Hide Crosshair when the corresponding datum element is far from mouse pointer. Default: `true` */
86
88
  hideWhenFarFromPointer?: boolean;
87
89
  /** Distance in pixels to check in the hideWhenFarFromPointer condition. Default: `100` */
88
90
  hideWhenFarFromPointerDistance?: number;
@@ -92,11 +94,22 @@ export declare class VisCrosshairComponent<Datum> implements CrosshairConfigInte
92
94
  * Default: `true` */
93
95
  snapToData?: boolean;
94
96
  /** Custom function for setting up the crosshair circles, usually needed when `snapToData` is set to `false`.
95
- * The function receives the horizontal position of the crosshair (in the data space, not in pixels), the data array
96
- * and the `yScale` instance to help you calculate the correct vertical position of the circles.
97
- * It has to return an array of the CrosshairCircle objects: `{ y: number; color: string; opacity?: number }[]`.
97
+ * The function receives the horizontal position of the crosshair (in the data space, not in pixels), the data array,
98
+ * the `yScale` instance to help you calculate the correct vertical position of the circles, and the nearest datum index.
99
+ * It has to return an array of the `CrosshairCircle` objects: `{ y: number; color: string; opacity?: number }[]`.
98
100
  * Default: `undefined` */
99
- getCircles?: (x: number | Date | Date, data: Datum[], yScale: ContinuousScale) => CrosshairCircle[];
101
+ getCircles?: (x: number | Date, data: Datum[], yScale: ContinuousScale, leftNearestDatumIndex: number) => CrosshairCircle[];
102
+ /** Callback function that is called when the crosshair is moved:
103
+ * - `x` is the horizontal position of the crosshair in the data space;
104
+ * - `datum` is the nearest datum to the crosshair;
105
+ * - `datumIndex` is the index of the nearest datum.
106
+ * - `event` is the event that triggered the crosshair move (mouse or wheel).
107
+ *
108
+ * When the mouse goes out of the container and on wheel events, all the arguments are `undefined` except for `event`.
109
+ * Default: `undefined` */
110
+ onCrosshairMove?: (x?: number | Date, datum?: Datum, datumIndex?: number, event?: MouseEvent | WheelEvent) => void;
111
+ /** Force the crosshair to show at a specific position. Default: `undefined` */
112
+ forceShowAt?: number | Date;
100
113
  data: Datum[];
101
114
  component: Crosshair<Datum> | undefined;
102
115
  componentContainer: ContainerCore | undefined;
@@ -104,5 +117,5 @@ export declare class VisCrosshairComponent<Datum> implements CrosshairConfigInte
104
117
  ngOnChanges(changes: SimpleChanges): void;
105
118
  private getConfig;
106
119
  static ɵfac: i0.ɵɵFactoryDeclaration<VisCrosshairComponent<any>, never>;
107
- static ɵcmp: i0.ɵɵComponentDeclaration<VisCrosshairComponent<any>, "vis-crosshair", never, { "duration": "duration"; "events": "events"; "attributes": "attributes"; "x": "x"; "y": "y"; "id": "id"; "color": "color"; "xScale": "xScale"; "yScale": "yScale"; "excludeFromDomainCalculation": "excludeFromDomainCalculation"; "strokeColor": "strokeColor"; "strokeWidth": "strokeWidth"; "yStacked": "yStacked"; "baseline": "baseline"; "tooltip": "tooltip"; "template": "template"; "hideWhenFarFromPointer": "hideWhenFarFromPointer"; "hideWhenFarFromPointerDistance": "hideWhenFarFromPointerDistance"; "snapToData": "snapToData"; "getCircles": "getCircles"; "data": "data"; }, {}, never, never>;
120
+ static ɵcmp: i0.ɵɵComponentDeclaration<VisCrosshairComponent<any>, "vis-crosshair", never, { "duration": "duration"; "events": "events"; "attributes": "attributes"; "x": "x"; "y": "y"; "id": "id"; "color": "color"; "xScale": "xScale"; "yScale": "yScale"; "excludeFromDomainCalculation": "excludeFromDomainCalculation"; "strokeColor": "strokeColor"; "strokeWidth": "strokeWidth"; "yStacked": "yStacked"; "baseline": "baseline"; "tooltip": "tooltip"; "template": "template"; "hideWhenFarFromPointer": "hideWhenFarFromPointer"; "hideWhenFarFromPointerDistance": "hideWhenFarFromPointerDistance"; "snapToData": "snapToData"; "getCircles": "getCircles"; "onCrosshairMove": "onCrosshairMove"; "forceShowAt": "forceShowAt"; "data": "data"; }, {}, never, never>;
108
121
  }
@@ -105,6 +105,14 @@ export declare class VisGraphComponent<N extends GraphInputNode, L extends Graph
105
105
  * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.
106
106
  * Default: `1` */
107
107
  layoutParallelSubGroupsPerRow?: number;
108
+ /** Spacing between nodes, dynamic by default.
109
+ * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.
110
+ * Default: `undefined` */
111
+ layoutParallelNodeSpacing?: number | [number, number];
112
+ /** Spacing between sub-groups.
113
+ * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.
114
+ * Default: `40` */
115
+ layoutParallelSubGroupSpacing?: number;
108
116
  /** Spacing between groups.
109
117
  * Only for `GraphLayoutType.Parallel` and `GraphLayoutType.ParallelHorizontal` layouts.
110
118
  * Default: `undefined` */
@@ -284,5 +292,5 @@ export declare class VisGraphComponent<N extends GraphInputNode, L extends Graph
284
292
  ngOnChanges(changes: SimpleChanges): void;
285
293
  private getConfig;
286
294
  static ɵfac: i0.ɵɵFactoryDeclaration<VisGraphComponent<any, any>, never>;
287
- static ɵcmp: i0.ɵɵComponentDeclaration<VisGraphComponent<any, any>, "vis-graph", never, { "duration": "duration"; "events": "events"; "attributes": "attributes"; "zoomScaleExtent": "zoomScaleExtent"; "disableZoom": "disableZoom"; "zoomEventFilter": "zoomEventFilter"; "disableDrag": "disableDrag"; "disableBrush": "disableBrush"; "zoomThrottledUpdateNodeThreshold": "zoomThrottledUpdateNodeThreshold"; "fitViewPadding": "fitViewPadding"; "fitViewAlign": "fitViewAlign"; "layoutType": "layoutType"; "layoutAutofit": "layoutAutofit"; "layoutAutofitTolerance": "layoutAutofitTolerance"; "layoutNonConnectedAside": "layoutNonConnectedAside"; "layoutNodeGroup": "layoutNodeGroup"; "layoutGroupOrder": "layoutGroupOrder"; "layoutParallelNodesPerColumn": "layoutParallelNodesPerColumn"; "layoutParallelNodeSubGroup": "layoutParallelNodeSubGroup"; "layoutParallelSubGroupsPerRow": "layoutParallelSubGroupsPerRow"; "layoutParallelGroupSpacing": "layoutParallelGroupSpacing"; "layoutParallelSortConnectionsByGroup": "layoutParallelSortConnectionsByGroup"; "forceLayoutSettings": "forceLayoutSettings"; "dagreLayoutSettings": "dagreLayoutSettings"; "layoutElkSettings": "layoutElkSettings"; "layoutElkNodeGroups": "layoutElkNodeGroups"; "layoutElkGetNodeShape": "layoutElkGetNodeShape"; "linkWidth": "linkWidth"; "linkStyle": "linkStyle"; "linkBandWidth": "linkBandWidth"; "linkArrow": "linkArrow"; "linkStroke": "linkStroke"; "linkDisabled": "linkDisabled"; "linkFlow": "linkFlow"; "linkFlowAnimDuration": "linkFlowAnimDuration"; "linkFlowParticleSize": "linkFlowParticleSize"; "linkFlowParticleSpeed": "linkFlowParticleSpeed"; "linkLabel": "linkLabel"; "linkLabelShiftFromCenter": "linkLabelShiftFromCenter"; "linkNeighborSpacing": "linkNeighborSpacing"; "linkCurvature": "linkCurvature"; "linkHighlightOnHover": "linkHighlightOnHover"; "linkSourcePointOffset": "linkSourcePointOffset"; "linkTargetPointOffset": "linkTargetPointOffset"; "selectedLinkId": "selectedLinkId"; "nodeSize": "nodeSize"; "nodeStrokeWidth": "nodeStrokeWidth"; "nodeShape": "nodeShape"; "nodeGaugeValue": "nodeGaugeValue"; "nodeGaugeFill": "nodeGaugeFill"; "nodeGaugeAnimDuration": "nodeGaugeAnimDuration"; "nodeIcon": "nodeIcon"; "nodeIconSize": "nodeIconSize"; "nodeLabel": "nodeLabel"; "nodeLabelTrim": "nodeLabelTrim"; "nodeLabelTrimMode": "nodeLabelTrimMode"; "nodeLabelTrimLength": "nodeLabelTrimLength"; "nodeSubLabel": "nodeSubLabel"; "nodeSubLabelTrim": "nodeSubLabelTrim"; "nodeSubLabelTrimMode": "nodeSubLabelTrimMode"; "nodeSubLabelTrimLength": "nodeSubLabelTrimLength"; "nodeSideLabels": "nodeSideLabels"; "nodeBottomIcon": "nodeBottomIcon"; "nodeDisabled": "nodeDisabled"; "nodeFill": "nodeFill"; "nodeStroke": "nodeStroke"; "nodeSort": "nodeSort"; "nodeEnterPosition": "nodeEnterPosition"; "nodeEnterScale": "nodeEnterScale"; "nodeExitPosition": "nodeExitPosition"; "nodeExitScale": "nodeExitScale"; "nodeEnterCustomRenderFunction": "nodeEnterCustomRenderFunction"; "nodeUpdateCustomRenderFunction": "nodeUpdateCustomRenderFunction"; "nodePartialUpdateCustomRenderFunction": "nodePartialUpdateCustomRenderFunction"; "nodeExitCustomRenderFunction": "nodeExitCustomRenderFunction"; "nodeOnZoomCustomRenderFunction": "nodeOnZoomCustomRenderFunction"; "nodeSelectionHighlightMode": "nodeSelectionHighlightMode"; "selectedNodeId": "selectedNodeId"; "selectedNodeIds": "selectedNodeIds"; "panels": "panels"; "onNodeDragStart": "onNodeDragStart"; "onNodeDrag": "onNodeDrag"; "onNodeDragEnd": "onNodeDragEnd"; "onZoom": "onZoom"; "onZoomStart": "onZoomStart"; "onZoomEnd": "onZoomEnd"; "onLayoutCalculated": "onLayoutCalculated"; "onNodeSelectionBrush": "onNodeSelectionBrush"; "onNodeSelectionDrag": "onNodeSelectionDrag"; "onRenderComplete": "onRenderComplete"; "shouldDataUpdate": "shouldDataUpdate"; "data": "data"; }, {}, never, never>;
295
+ static ɵcmp: i0.ɵɵComponentDeclaration<VisGraphComponent<any, any>, "vis-graph", never, { "duration": "duration"; "events": "events"; "attributes": "attributes"; "zoomScaleExtent": "zoomScaleExtent"; "disableZoom": "disableZoom"; "zoomEventFilter": "zoomEventFilter"; "disableDrag": "disableDrag"; "disableBrush": "disableBrush"; "zoomThrottledUpdateNodeThreshold": "zoomThrottledUpdateNodeThreshold"; "fitViewPadding": "fitViewPadding"; "fitViewAlign": "fitViewAlign"; "layoutType": "layoutType"; "layoutAutofit": "layoutAutofit"; "layoutAutofitTolerance": "layoutAutofitTolerance"; "layoutNonConnectedAside": "layoutNonConnectedAside"; "layoutNodeGroup": "layoutNodeGroup"; "layoutGroupOrder": "layoutGroupOrder"; "layoutParallelNodesPerColumn": "layoutParallelNodesPerColumn"; "layoutParallelNodeSubGroup": "layoutParallelNodeSubGroup"; "layoutParallelSubGroupsPerRow": "layoutParallelSubGroupsPerRow"; "layoutParallelNodeSpacing": "layoutParallelNodeSpacing"; "layoutParallelSubGroupSpacing": "layoutParallelSubGroupSpacing"; "layoutParallelGroupSpacing": "layoutParallelGroupSpacing"; "layoutParallelSortConnectionsByGroup": "layoutParallelSortConnectionsByGroup"; "forceLayoutSettings": "forceLayoutSettings"; "dagreLayoutSettings": "dagreLayoutSettings"; "layoutElkSettings": "layoutElkSettings"; "layoutElkNodeGroups": "layoutElkNodeGroups"; "layoutElkGetNodeShape": "layoutElkGetNodeShape"; "linkWidth": "linkWidth"; "linkStyle": "linkStyle"; "linkBandWidth": "linkBandWidth"; "linkArrow": "linkArrow"; "linkStroke": "linkStroke"; "linkDisabled": "linkDisabled"; "linkFlow": "linkFlow"; "linkFlowAnimDuration": "linkFlowAnimDuration"; "linkFlowParticleSize": "linkFlowParticleSize"; "linkFlowParticleSpeed": "linkFlowParticleSpeed"; "linkLabel": "linkLabel"; "linkLabelShiftFromCenter": "linkLabelShiftFromCenter"; "linkNeighborSpacing": "linkNeighborSpacing"; "linkCurvature": "linkCurvature"; "linkHighlightOnHover": "linkHighlightOnHover"; "linkSourcePointOffset": "linkSourcePointOffset"; "linkTargetPointOffset": "linkTargetPointOffset"; "selectedLinkId": "selectedLinkId"; "nodeSize": "nodeSize"; "nodeStrokeWidth": "nodeStrokeWidth"; "nodeShape": "nodeShape"; "nodeGaugeValue": "nodeGaugeValue"; "nodeGaugeFill": "nodeGaugeFill"; "nodeGaugeAnimDuration": "nodeGaugeAnimDuration"; "nodeIcon": "nodeIcon"; "nodeIconSize": "nodeIconSize"; "nodeLabel": "nodeLabel"; "nodeLabelTrim": "nodeLabelTrim"; "nodeLabelTrimMode": "nodeLabelTrimMode"; "nodeLabelTrimLength": "nodeLabelTrimLength"; "nodeSubLabel": "nodeSubLabel"; "nodeSubLabelTrim": "nodeSubLabelTrim"; "nodeSubLabelTrimMode": "nodeSubLabelTrimMode"; "nodeSubLabelTrimLength": "nodeSubLabelTrimLength"; "nodeSideLabels": "nodeSideLabels"; "nodeBottomIcon": "nodeBottomIcon"; "nodeDisabled": "nodeDisabled"; "nodeFill": "nodeFill"; "nodeStroke": "nodeStroke"; "nodeSort": "nodeSort"; "nodeEnterPosition": "nodeEnterPosition"; "nodeEnterScale": "nodeEnterScale"; "nodeExitPosition": "nodeExitPosition"; "nodeExitScale": "nodeExitScale"; "nodeEnterCustomRenderFunction": "nodeEnterCustomRenderFunction"; "nodeUpdateCustomRenderFunction": "nodeUpdateCustomRenderFunction"; "nodePartialUpdateCustomRenderFunction": "nodePartialUpdateCustomRenderFunction"; "nodeExitCustomRenderFunction": "nodeExitCustomRenderFunction"; "nodeOnZoomCustomRenderFunction": "nodeOnZoomCustomRenderFunction"; "nodeSelectionHighlightMode": "nodeSelectionHighlightMode"; "selectedNodeId": "selectedNodeId"; "selectedNodeIds": "selectedNodeIds"; "panels": "panels"; "onNodeDragStart": "onNodeDragStart"; "onNodeDrag": "onNodeDrag"; "onNodeDragEnd": "onNodeDragEnd"; "onZoom": "onZoom"; "onZoomStart": "onZoomStart"; "onZoomEnd": "onZoomEnd"; "onLayoutCalculated": "onLayoutCalculated"; "onNodeSelectionBrush": "onNodeSelectionBrush"; "onNodeSelectionDrag": "onNodeSelectionDrag"; "onRenderComplete": "onRenderComplete"; "shouldDataUpdate": "shouldDataUpdate"; "data": "data"; }, {}, never, never>;
288
296
  }
@@ -69,7 +69,7 @@ export declare class VisNestedDonutComponent<Datum> implements NestedDonutConfig
69
69
  showBackground?: boolean;
70
70
  /** Sort function for segments. Default `undefined` */
71
71
  sort?: (a: NestedDonutSegment<Datum>, b: NestedDonutSegment<Datum>) => number;
72
- /** Array of accessor functions to defined the nested groups */
72
+ /** Array of accessor functions to defined the nested groups. Default: `[]` */
73
73
  layers: StringAccessor<Datum>[];
74
74
  /** Configuration properties for individual layers. Accepts an accessor or constant of type:
75
75
  * {
@@ -0,0 +1,81 @@
1
+ import { AfterViewInit, SimpleChanges } from '@angular/core';
2
+ import { Plotband, PlotbandConfigInterface, ContainerCore, VisEventType, VisEventCallback, AxisType, PlotbandLabelPosition, PlotbandLabelOrientation } from '@unovis/ts';
3
+ import * as i0 from "@angular/core";
4
+ export declare class VisPlotbandComponent<Datum> implements PlotbandConfigInterface<Datum>, AfterViewInit {
5
+ /** Duration of the animation in milliseconds. */
6
+ duration?: number;
7
+ /** Events configuration. An object containing properties in the following format:
8
+ *
9
+ * ```
10
+ * {
11
+ * \[selectorString]: {
12
+ * \[eventType]: callbackFunction
13
+ * }
14
+ * }
15
+ * ```
16
+ * e.g.:
17
+ * ```
18
+ * {
19
+ * \[Area.selectors.area]: {
20
+ * click: (d) => console.log("Clicked Area", d)
21
+ * }
22
+ * }
23
+ * ``` */
24
+ events?: {
25
+ [selector: string]: {
26
+ [eventType in VisEventType]?: VisEventCallback;
27
+ };
28
+ };
29
+ /** You can set every SVG and HTML visualization object to have a custom DOM attributes, which is useful
30
+ * when you want to do unit or end-to-end testing. Attributes configuration object has the following structure:
31
+ *
32
+ * ```
33
+ * {
34
+ * \[selectorString]: {
35
+ * \[attributeName]: attribute constant value or accessor function
36
+ * }
37
+ * }
38
+ * ```
39
+ * e.g.:
40
+ * ```
41
+ * {
42
+ * \[Area.selectors.area]: {
43
+ * "test-value": d => d.value
44
+ * }
45
+ * }
46
+ * ``` */
47
+ attributes?: {
48
+ [selector: string]: {
49
+ [attr: string]: string | number | boolean | ((datum: any) => string | number | boolean);
50
+ };
51
+ };
52
+ /** Axis to draw the plotband on. */
53
+ axis?: AxisType;
54
+ /** Start coordinate for the plotband. */
55
+ from?: number | null | undefined;
56
+ /** End coordinate for the plotband. */
57
+ to?: number | null | undefined;
58
+ /** Optional text to display on the plotband */
59
+ labelText?: string;
60
+ /** Position of the label relative to the plotband area (e.g., 'top-left-outside').
61
+ * Can be customized with a string. */
62
+ labelPosition?: PlotbandLabelPosition;
63
+ /** Horizontal offset (in pixels) for positioning the label. */
64
+ labelOffsetX?: number;
65
+ /** Vertical offset (in pixels) for positioning the label. */
66
+ labelOffsetY?: number;
67
+ /** Orientation of the label text. */
68
+ labelOrientation?: PlotbandLabelOrientation;
69
+ /** Optional color for the label text */
70
+ labelColor?: string;
71
+ /** Font size (in pixels) for the label text.
72
+ * Uses the CSS variable `--vis-plotband-label-font-size` by default, which resolves to `12px`. */
73
+ labelSize?: number;
74
+ component: Plotband<Datum> | undefined;
75
+ componentContainer: ContainerCore | undefined;
76
+ ngAfterViewInit(): void;
77
+ ngOnChanges(changes: SimpleChanges): void;
78
+ private getConfig;
79
+ static ɵfac: i0.ɵɵFactoryDeclaration<VisPlotbandComponent<any>, never>;
80
+ static ɵcmp: i0.ɵɵComponentDeclaration<VisPlotbandComponent<any>, "vis-plotband", never, { "duration": "duration"; "events": "events"; "attributes": "attributes"; "axis": "axis"; "from": "from"; "to": "to"; "labelText": "labelText"; "labelPosition": "labelPosition"; "labelOffsetX": "labelOffsetX"; "labelOffsetY": "labelOffsetY"; "labelOrientation": "labelOrientation"; "labelColor": "labelColor"; "labelSize": "labelSize"; }, {}, never, never>;
81
+ }
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./plotband.component";
3
+ export declare class VisPlotbandModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<VisPlotbandModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<VisPlotbandModule, [typeof i1.VisPlotbandComponent], never, [typeof i1.VisPlotbandComponent]>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<VisPlotbandModule>;
7
+ }
@@ -0,0 +1,87 @@
1
+ import { AfterViewInit, SimpleChanges } from '@angular/core';
2
+ import { Plotline, PlotlineConfigInterface, ContainerCore, VisEventType, VisEventCallback, AxisType, PlotlineLineStylePresets, PlotlineLabelPosition, PlotlineLabelOrientation } from '@unovis/ts';
3
+ import * as i0 from "@angular/core";
4
+ export declare class VisPlotlineComponent<Datum> implements PlotlineConfigInterface<Datum>, AfterViewInit {
5
+ /** Duration of the animation in milliseconds. */
6
+ duration?: number;
7
+ /** Events configuration. An object containing properties in the following format:
8
+ *
9
+ * ```
10
+ * {
11
+ * \[selectorString]: {
12
+ * \[eventType]: callbackFunction
13
+ * }
14
+ * }
15
+ * ```
16
+ * e.g.:
17
+ * ```
18
+ * {
19
+ * \[Area.selectors.area]: {
20
+ * click: (d) => console.log("Clicked Area", d)
21
+ * }
22
+ * }
23
+ * ``` */
24
+ events?: {
25
+ [selector: string]: {
26
+ [eventType in VisEventType]?: VisEventCallback;
27
+ };
28
+ };
29
+ /** You can set every SVG and HTML visualization object to have a custom DOM attributes, which is useful
30
+ * when you want to do unit or end-to-end testing. Attributes configuration object has the following structure:
31
+ *
32
+ * ```
33
+ * {
34
+ * \[selectorString]: {
35
+ * \[attributeName]: attribute constant value or accessor function
36
+ * }
37
+ * }
38
+ * ```
39
+ * e.g.:
40
+ * ```
41
+ * {
42
+ * \[Area.selectors.area]: {
43
+ * "test-value": d => d.value
44
+ * }
45
+ * }
46
+ * ``` */
47
+ attributes?: {
48
+ [selector: string]: {
49
+ [attr: string]: string | number | boolean | ((datum: any) => string | number | boolean);
50
+ };
51
+ };
52
+ /** Line width in pixels.
53
+ * Uses CSS variable: `--vis-plotline-width`. */
54
+ lineWidth?: number;
55
+ /** Plotline direction type.
56
+ * Should be either `AxisType.X` or `AxisType.Y`. */
57
+ axis?: AxisType | string;
58
+ /** Value to draw the plotline at. */
59
+ value?: number | null | undefined;
60
+ /** Line style of the plotline.
61
+ * Can be a named preset or an array of numbers representing `stroke-dasharray`.
62
+ * Uses CSS variable: `--vis-plotline-dasharray`. */
63
+ lineStyle?: PlotlineLineStylePresets | number[];
64
+ /** Label text to display on the plotline. */
65
+ labelText?: string;
66
+ /** Position of the label relative to the plotline. */
67
+ labelPosition?: PlotlineLabelPosition;
68
+ /** Horizontal offset of the label in pixels. */
69
+ labelOffsetX?: number;
70
+ /** Vertical offset of the label in pixels. */
71
+ labelOffsetY?: number;
72
+ /** Orientation of the label: horizontal or vertical. */
73
+ labelOrientation?: PlotlineLabelOrientation;
74
+ /** Color of the label text.
75
+ * Uses CSS variable: `--vis-plotline-label-color`. */
76
+ labelColor?: string;
77
+ /** Font size of the label text in pixels.
78
+ * Uses CSS variable: `--vis-plotline-label-font-size`. */
79
+ labelSize?: number;
80
+ component: Plotline<Datum> | undefined;
81
+ componentContainer: ContainerCore | undefined;
82
+ ngAfterViewInit(): void;
83
+ ngOnChanges(changes: SimpleChanges): void;
84
+ private getConfig;
85
+ static ɵfac: i0.ɵɵFactoryDeclaration<VisPlotlineComponent<any>, never>;
86
+ static ɵcmp: i0.ɵɵComponentDeclaration<VisPlotlineComponent<any>, "vis-plotline", never, { "duration": "duration"; "events": "events"; "attributes": "attributes"; "lineWidth": "lineWidth"; "axis": "axis"; "value": "value"; "lineStyle": "lineStyle"; "labelText": "labelText"; "labelPosition": "labelPosition"; "labelOffsetX": "labelOffsetX"; "labelOffsetY": "labelOffsetY"; "labelOrientation": "labelOrientation"; "labelColor": "labelColor"; "labelSize": "labelSize"; }, {}, never, never>;
87
+ }
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./plotline.component";
3
+ export declare class VisPlotlineModule {
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<VisPlotlineModule, never>;
5
+ static ɵmod: i0.ɵɵNgModuleDeclaration<VisPlotlineModule, [typeof i1.VisPlotlineComponent], never, [typeof i1.VisPlotlineComponent]>;
6
+ static ɵinj: i0.ɵɵInjectorDeclaration<VisPlotlineModule>;
7
+ }
@@ -1,5 +1,5 @@
1
1
  import { AfterViewInit, SimpleChanges } from '@angular/core';
2
- import { Timeline, TimelineConfigInterface, ContainerCore, VisEventType, VisEventCallback, NumericAccessor, ColorAccessor, ContinuousScale, StringAccessor } from '@unovis/ts';
2
+ import { Timeline, TimelineConfigInterface, ContainerCore, VisEventType, VisEventCallback, NumericAccessor, ColorAccessor, ContinuousScale, StringAccessor, GenericAccessor, Arrangement, TimelineRowLabel, TimelineRowIcon, TextAlign, TimelineArrow, TimelineLineRenderState } from '@unovis/ts';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class VisTimelineComponent<Datum> implements TimelineConfigInterface<Datum>, AfterViewInit {
5
5
  /** Animation duration of the data update transitions in milliseconds. Default: `600` */
@@ -68,30 +68,75 @@ export declare class VisTimelineComponent<Datum> implements TimelineConfigInterf
68
68
  * the scales of the chart.
69
69
  * Default: `false` */
70
70
  excludeFromDomainCalculation?: boolean;
71
+ /** */
72
+ type?: StringAccessor<Datum>;
73
+ /** */
74
+ length?: NumericAccessor<Datum>;
75
+ /** */
76
+ cursor?: StringAccessor<Datum>;
77
+ /** Timeline item row accessor function. Records with the `lineRow` will be plotted in one row. Default: `undefined` */
78
+ lineRow?: StringAccessor<Datum>;
79
+ /** Timeline item duration accessor function. Default: `undefined`. Falls back to the deprecated `length` property */
80
+ lineDuration?: NumericAccessor<Datum>;
71
81
  /** Width of the timeline items. Default: `8` */
72
82
  lineWidth?: NumericAccessor<Datum>;
73
83
  /** Display rounded ends for timeline items. Default: `true` */
74
84
  lineCap?: boolean;
85
+ /** Provide a href to an SVG defined in container's `svgDefs` to display an icon at the start of the line. Default: undefined */
86
+ lineStartIcon?: StringAccessor<Datum>;
87
+ /** Line start icon color accessor function. Default: `undefined` */
88
+ lineStartIconColor?: StringAccessor<Datum>;
89
+ /** Line start icon size accessor function. Default: `undefined` */
90
+ lineStartIconSize?: NumericAccessor<Datum>;
91
+ /** Line start icon arrangement configuration. Controls how the icon is positioned relative to the line.
92
+ * Accepts values from the Arrangement enum: `Arrangement.Start`, `Arrangement.Middle`, `Arrangement.End` or a string equivalent.
93
+ * Default: `Arrangement.Inside` */
94
+ lineStartIconArrangement?: GenericAccessor<Arrangement | any, Datum>;
95
+ /** Provide a href to an SVG defined in container's `svgDefs` to display an icon at the end of the line. Default: undefined */
96
+ lineEndIcon?: StringAccessor<Datum>;
97
+ /** Line end icon color accessor function. Default: `undefined` */
98
+ lineEndIconColor?: StringAccessor<Datum>;
99
+ /** Line end icon size accessor function. Default: `undefined` */
100
+ lineEndIconSize?: NumericAccessor<Datum>;
101
+ /** Line end icon arrangement configuration. Controls how the icon is positioned relative to the line.
102
+ * Accepts values from the Arrangement enum: `Arrangement.Start`, `Arrangement.Middle`, `Arrangement.End` or a string equivalent.
103
+ * Default: `Arrangement.Inside` */
104
+ lineEndIconArrangement?: GenericAccessor<Arrangement | any, Datum>;
105
+ /** Configurable Timeline item cursor when hovering over. Default: `undefined` */
106
+ lineCursor?: StringAccessor<Datum>;
107
+ /** Sets the minimum line length to 1 pixel for better visibility of small values. Default: `false` */
108
+ showEmptySegments?: boolean;
75
109
  /** Timeline row height. Default: `22` */
76
110
  rowHeight?: number;
77
- /** Timeline item length accessor function. Default: `d => d.length` */
78
- length?: NumericAccessor<Datum>;
79
- /** Timeline item type accessor function. Records of one type will be plotted in one row. Default: `d => d.type` */
80
- type?: StringAccessor<Datum>;
81
- /** Configurable Timeline item cursor when hovering over. Default: `null` */
82
- cursor?: StringAccessor<Datum>;
83
- /** Show item type labels when set to `true`. Default: `false` */
111
+ /** Alternating row colors. Default: `true` */
112
+ alternatingRowColors?: boolean;
113
+ /** */
84
114
  showLabels?: boolean;
85
- /** Fixed label width in pixels. Labels longer than the specified value will be trimmed. Default: `undefined` */
115
+ /** */
86
116
  labelWidth?: number;
87
- /** Maximum label width in pixels. Labels longer than the specified value will be trimmed. Default: `120` */
117
+ /** */
88
118
  maxLabelWidth?: number;
89
- /** Alternating row colors. Default: `true` */
90
- alternatingRowColors?: boolean;
119
+ /** Show row labels when set to `true`. Default: `false`. Falls back to deprecated `showLabels` */
120
+ showRowLabels?: boolean;
121
+ /** Row label style as an object with the `{ [property-name]: value }` format. Default: `undefined` */
122
+ rowLabelStyle?: GenericAccessor<Record<string, string>, TimelineRowLabel<Datum>>;
123
+ /** Row label formatter function. Default: `undefined` */
124
+ rowLabelFormatter?: (key: string, items: Datum[], i: number) => string;
125
+ /** Provide an icon href to be displayed before the row label. Default: `undefined` */
126
+ rowIcon?: (key: string, items: Datum[], i: number) => TimelineRowIcon | undefined;
127
+ /** Fixed label width in pixels. Labels longer than the specified value will be trimmed. Default: `undefined`. Falls back to deprecated `labelWidth`. */
128
+ rowLabelWidth?: number;
129
+ /** Maximum label width in pixels. Labels longer than the specified value will be trimmed. Default: `undefined`. Falls back to deprecated `maxLabelWidth`. */
130
+ rowMaxLabelWidth?: number;
131
+ /** Text alignment for labels: `TextAlign.Left`, `TextAlign.Center` or `TextAlign.Right`. Default: `TextAlign.Right` */
132
+ rowLabelTextAlign?: TextAlign | any;
133
+ arrows?: TimelineArrow[];
134
+ /** Control the animation by specify the initial position for new lines as [x, y]. Default: `undefined` */
135
+ animationLineEnterPosition?: [number | undefined | null, number | undefined | null] | ((d: Datum & TimelineLineRenderState, i: number, data: (Datum & TimelineLineRenderState)[]) => [number | undefined, number | undefined]) | undefined;
136
+ /** Control the animation by specify the destination position for exiting lines as [x, y]. Default: `undefined` */
137
+ animationLineExitPosition?: [number | undefined | null, number | undefined | null] | ((d: Datum & TimelineLineRenderState, i: number, data: (Datum & TimelineLineRenderState)[]) => [number | undefined, number | undefined]) | undefined;
91
138
  /** Scrolling callback function: `(scrollTop: number) => void`. Default: `undefined` */
92
139
  onScroll?: (scrollTop: number) => void;
93
- /** Sets the minimum line length to 1 pixel for better visibility of small values. Default: `false` */
94
- showEmptySegments?: boolean;
95
140
  data: Datum[];
96
141
  component: Timeline<Datum> | undefined;
97
142
  componentContainer: ContainerCore | undefined;
@@ -99,5 +144,5 @@ export declare class VisTimelineComponent<Datum> implements TimelineConfigInterf
99
144
  ngOnChanges(changes: SimpleChanges): void;
100
145
  private getConfig;
101
146
  static ɵfac: i0.ɵɵFactoryDeclaration<VisTimelineComponent<any>, never>;
102
- static ɵcmp: i0.ɵɵComponentDeclaration<VisTimelineComponent<any>, "vis-timeline", never, { "duration": "duration"; "events": "events"; "attributes": "attributes"; "x": "x"; "id": "id"; "color": "color"; "xScale": "xScale"; "yScale": "yScale"; "excludeFromDomainCalculation": "excludeFromDomainCalculation"; "lineWidth": "lineWidth"; "lineCap": "lineCap"; "rowHeight": "rowHeight"; "length": "length"; "type": "type"; "cursor": "cursor"; "showLabels": "showLabels"; "labelWidth": "labelWidth"; "maxLabelWidth": "maxLabelWidth"; "alternatingRowColors": "alternatingRowColors"; "onScroll": "onScroll"; "showEmptySegments": "showEmptySegments"; "data": "data"; }, {}, never, never>;
147
+ static ɵcmp: i0.ɵɵComponentDeclaration<VisTimelineComponent<any>, "vis-timeline", never, { "duration": "duration"; "events": "events"; "attributes": "attributes"; "x": "x"; "id": "id"; "color": "color"; "xScale": "xScale"; "yScale": "yScale"; "excludeFromDomainCalculation": "excludeFromDomainCalculation"; "type": "type"; "length": "length"; "cursor": "cursor"; "lineRow": "lineRow"; "lineDuration": "lineDuration"; "lineWidth": "lineWidth"; "lineCap": "lineCap"; "lineStartIcon": "lineStartIcon"; "lineStartIconColor": "lineStartIconColor"; "lineStartIconSize": "lineStartIconSize"; "lineStartIconArrangement": "lineStartIconArrangement"; "lineEndIcon": "lineEndIcon"; "lineEndIconColor": "lineEndIconColor"; "lineEndIconSize": "lineEndIconSize"; "lineEndIconArrangement": "lineEndIconArrangement"; "lineCursor": "lineCursor"; "showEmptySegments": "showEmptySegments"; "rowHeight": "rowHeight"; "alternatingRowColors": "alternatingRowColors"; "showLabels": "showLabels"; "labelWidth": "labelWidth"; "maxLabelWidth": "maxLabelWidth"; "showRowLabels": "showRowLabels"; "rowLabelStyle": "rowLabelStyle"; "rowLabelFormatter": "rowLabelFormatter"; "rowIcon": "rowIcon"; "rowLabelWidth": "rowLabelWidth"; "rowMaxLabelWidth": "rowMaxLabelWidth"; "rowLabelTextAlign": "rowLabelTextAlign"; "arrows": "arrows"; "animationLineEnterPosition": "animationLineEnterPosition"; "animationLineExitPosition": "animationLineExitPosition"; "onScroll": "onScroll"; "data": "data"; }, {}, never, never>;
103
148
  }
@@ -23,6 +23,8 @@ export { VisLineComponent } from './components/line/line.component';
23
23
  export { VisLineModule } from './components/line/line.module';
24
24
  export { VisNestedDonutComponent } from './components/nested-donut/nested-donut.component';
25
25
  export { VisNestedDonutModule } from './components/nested-donut/nested-donut.module';
26
+ export { VisPlotlineComponent } from './components/plotline/plotline.component';
27
+ export { VisPlotlineModule } from './components/plotline/plotline.module';
26
28
  export { VisSankeyComponent } from './components/sankey/sankey.component';
27
29
  export { VisSankeyModule } from './components/sankey/sankey.module';
28
30
  export { VisScatterComponent } from './components/scatter/scatter.component';
@@ -35,11 +37,15 @@ export { VisXYLabelsComponent } from './components/xy-labels/xy-labels.component
35
37
  export { VisXYLabelsModule } from './components/xy-labels/xy-labels.module';
36
38
  export { VisTopoJSONMapComponent } from './components/topojson-map/topojson-map.component';
37
39
  export { VisTopoJSONMapModule } from './components/topojson-map/topojson-map.module';
40
+ export { VisPlotbandComponent } from './components/plotband/plotband.component';
41
+ export { VisPlotbandModule } from './components/plotband/plotband.module';
38
42
  export { VisLeafletMapComponent } from './html-components/leaflet-map/leaflet-map.component';
39
43
  export { VisLeafletMapModule } from './html-components/leaflet-map/leaflet-map.module';
40
44
  export { VisLeafletFlowMapComponent } from './html-components/leaflet-flow-map/leaflet-flow-map.component';
41
45
  export { VisLeafletFlowMapModule } from './html-components/leaflet-flow-map/leaflet-flow-map.module';
42
46
  export { VisBulletLegendComponent } from './html-components/bullet-legend/bullet-legend.component';
43
47
  export { VisBulletLegendModule } from './html-components/bullet-legend/bullet-legend.module';
48
+ export { VisRollingPinLegendComponent } from './html-components/rolling-pin-legend/rolling-pin-legend.component';
49
+ export { VisRollingPinLegendModule } from './html-components/rolling-pin-legend/rolling-pin-legend.module';
44
50
  export { VisTooltipComponent } from './components/tooltip/tooltip.component';
45
51
  export { VisTooltipModule } from './components/tooltip/tooltip.module';
@@ -66,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
66
66
  }], data: [{
67
67
  type: Input
68
68
  }] } });
69
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ1c2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYnJ1c2gvYnJ1c2guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFpQixLQUFLLEVBQWlCLE1BQU0sZUFBZSxDQUFBO0FBQzlFLE9BQU8sRUFBRSxLQUFLLEVBQW9GLE1BQU0sWUFBWSxDQUFBO0FBRXBILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUE7O0FBUTNDLE1BQU0sT0FBTyxpQkFBaUI7SUFzRjVCLGVBQWU7O1FBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUVuRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDakMsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLE1BQU0sRUFBRSxDQUFBO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBRSxPQUFzQjs7UUFDakMsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQUUsTUFBQSxJQUFJLENBQUMsU0FBUywwQ0FBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQUU7UUFDeEQsTUFBQSxJQUFJLENBQUMsU0FBUywwQ0FBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDM0MsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLE1BQU0sRUFBRSxDQUFBO0lBQ25DLENBQUM7SUFFTyxTQUFTO1FBQ2YsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUE7UUFDcEssTUFBTSxNQUFNLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLENBQUE7UUFDdEssTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQTBDLENBQUE7UUFDekUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVM7WUFBRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTFFLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQzs7K0dBNUdVLGlCQUFpQjttR0FBakIsaUJBQWlCLGdZQUZqQixDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQywrQ0FGOUQsRUFBRTs0RkFJRCxpQkFBaUI7a0JBTjdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFFBQVEsRUFBRSxFQUFFO29CQUNaLGdEQUFnRDtvQkFDaEQsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsbUJBQW1CLEVBQUUsQ0FBQztpQkFDekU7OEJBR1UsUUFBUTtzQkFBaEIsS0FBSztnQkFtQkcsTUFBTTtzQkFBZCxLQUFLO2dCQXdCRyxVQUFVO3NCQUFsQixLQUFLO2dCQVFHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAhISEgVGhpcyBjb2RlIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4gWW91IHNob3VsZCBub3QgY2hhbmdlIGl0ICEhIVxuaW1wb3J0IHsgQ29tcG9uZW50LCBBZnRlclZpZXdJbml0LCBJbnB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCcnVzaCwgQnJ1c2hDb25maWdJbnRlcmZhY2UsIENvbnRhaW5lckNvcmUsIFZpc0V2ZW50VHlwZSwgVmlzRXZlbnRDYWxsYmFjaywgQXJyYW5nZW1lbnQgfSBmcm9tICdAdW5vdmlzL3RzJ1xuaW1wb3J0IHsgRDNCcnVzaEV2ZW50IH0gZnJvbSAnZDMtYnJ1c2gnXG5pbXBvcnQgeyBWaXNYWUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Zpcy1icnVzaCcsXG4gIHRlbXBsYXRlOiAnJyxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogVmlzWFlDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBWaXNCcnVzaENvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgVmlzQnJ1c2hDb21wb25lbnQ8RGF0dW0+IGltcGxlbWVudHMgQnJ1c2hDb25maWdJbnRlcmZhY2U8RGF0dW0+LCBBZnRlclZpZXdJbml0IHtcbiAgLyoqIEFuaW1hdGlvbiBkdXJhdGlvbiBvZiB0aGUgZGF0YSB1cGRhdGUgdHJhbnNpdGlvbnMgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0OiBgNjAwYCAqL1xuICBASW5wdXQoKSBkdXJhdGlvbj86IG51bWJlclxuXG4gIC8qKiBFdmVudHMgY29uZmlndXJhdGlvbi4gQW4gb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiAgICpcbiAgICogYGBgXG4gICAqIHtcbiAgICogXFxbc2VsZWN0b3JTdHJpbmddOiB7XG4gICAqICAgICBcXFtldmVudFR5cGVdOiBjYWxsYmFja0Z1bmN0aW9uXG4gICAqICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqIGUuZy46XG4gICAqIGBgYFxuICAgKiB7XG4gICAqIFxcW0FyZWEuc2VsZWN0b3JzLmFyZWFdOiB7XG4gICAqICAgIGNsaWNrOiAoZCkgPT4gY29uc29sZS5sb2coXCJDbGlja2VkIEFyZWFcIiwgZClcbiAgICogIH1cbiAgICogfVxuICAgKiBgYGAgKi9cbiAgQElucHV0KCkgZXZlbnRzPzoge1xuICAgIFtzZWxlY3Rvcjogc3RyaW5nXToge1xuICAgICAgW2V2ZW50VHlwZSBpbiBWaXNFdmVudFR5cGVdPzogVmlzRXZlbnRDYWxsYmFja1xuICAgIH07XG4gIH1cblxuICAvKiogWW91IGNhbiBzZXQgZXZlcnkgU1ZHIGFuZCBIVE1MIHZpc3VhbGl6YXRpb24gb2JqZWN0IHRvIGhhdmUgYSBjdXN0b20gRE9NIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIHVzZWZ1bFxuICAgKiB3aGVuIHlvdSB3YW50IHRvIGRvIHVuaXQgb3IgZW5kLXRvLWVuZCB0ZXN0aW5nLiBBdHRyaWJ1dGVzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbiAgICpcbiAgICogYGBgXG4gICAqIHtcbiAgICogXFxbc2VsZWN0b3JTdHJpbmddOiB7XG4gICAqICAgICBcXFthdHRyaWJ1dGVOYW1lXTogYXR0cmlidXRlIGNvbnN0YW50IHZhbHVlIG9yIGFjY2Vzc29yIGZ1bmN0aW9uXG4gICAqICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqIGUuZy46XG4gICAqIGBgYFxuICAgKiB7XG4gICAqIFxcW0FyZWEuc2VsZWN0b3JzLmFyZWFdOiB7XG4gICAqICAgIFwidGVzdC12YWx1ZVwiOiBkID0+IGQudmFsdWVcbiAgICogIH1cbiAgICogfVxuICAgKiBgYGAgKi9cbiAgQElucHV0KCkgYXR0cmlidXRlcz86IHtcbiAgICBbc2VsZWN0b3I6IHN0cmluZ106IHtcbiAgICAgIFthdHRyOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgKChkYXR1bTogYW55KSA9PiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBhbnkgQnJ1c2ggZXZlbnQuXG4gICAqIERlZmF1bHQ6IGAoc2VsZWN0aW9uOiBbbnVtYmVyLCBudW1iZXJdLCBldmVudDogRDNCcnVzaEV2ZW50PERhdHVtPiwgdXNlckRyaXZlbjogYm9vbGVhbik6IHZvaWQgPT4ge31gICovXG4gIEBJbnB1dCgpIG9uQnJ1c2g/OiAoKHNlbGVjdGlvbjogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCwgZXZlbnQ6IEQzQnJ1c2hFdmVudDxEYXR1bT4sIHVzZXJEcml2ZW46IGJvb2xlYW4pID0+IHZvaWQpXG5cbiAgLyoqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiB0aGUgQnJ1c2ggc3RhcnQgZXZlbnQuXG4gICAqIERlZmF1bHQ6IGAoc2VsZWN0aW9uOiBbbnVtYmVyLCBudW1iZXJdLCBldmVudDogRDNCcnVzaEV2ZW50PERhdHVtPiwgdXNlckRyaXZlbjogYm9vbGVhbik6IHZvaWQgPT4ge31gICovXG4gIEBJbnB1dCgpIG9uQnJ1c2hTdGFydD86ICgoc2VsZWN0aW9uOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLCBldmVudDogRDNCcnVzaEV2ZW50PERhdHVtPiwgdXNlckRyaXZlbjogYm9vbGVhbikgPT4gdm9pZClcblxuICAvKiogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHRoZSBCcnVzaCBtb3ZlIGV2ZW50LlxuICAgKiBEZWZhdWx0OiBgKHNlbGVjdGlvbjogW251bWJlciwgbnVtYmVyXSwgZXZlbnQ6IEQzQnJ1c2hFdmVudDxEYXR1bT4sIHVzZXJEcml2ZW46IGJvb2xlYW4pOiB2b2lkID0+IHt9YCAqL1xuICBASW5wdXQoKSBvbkJydXNoTW92ZT86ICgoc2VsZWN0aW9uOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLCBldmVudDogRDNCcnVzaEV2ZW50PERhdHVtPiwgdXNlckRyaXZlbjogYm9vbGVhbikgPT4gdm9pZClcblxuICAvKiogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHRoZSBCcnVzaCBlbmQgZXZlbnQuXG4gICAqIERlZmF1bHQ6IGAoc2VsZWN0aW9uOiBbbnVtYmVyLCBudW1iZXJdLCBldmVudDogRDNCcnVzaEV2ZW50PERhdHVtPiwgdXNlckRyaXZlbjogYm9vbGVhbik6IHZvaWQgPT4ge31gICovXG4gIEBJbnB1dCgpIG9uQnJ1c2hFbmQ/OiAoKHNlbGVjdGlvbjogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCwgZXZlbnQ6IEQzQnJ1c2hFdmVudDxEYXR1bT4sIHVzZXJEcml2ZW46IGJvb2xlYW4pID0+IHZvaWQpXG5cbiAgLyoqIFdpZHRoIG9mIHRoZSBCcnVzaCBoYW5kbGUuIERlZmF1bHQ6IGAxYCAqL1xuICBASW5wdXQoKSBoYW5kbGVXaWR0aD86IG51bWJlclxuXG4gIC8qKiBCcnVzaCBzZWxlY3Rpb24gaW4gdGhlIGRhdGEgc3BhY2UgY29vcmRpbmF0ZXMsIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHNlbGVjdGlvbi4gRGVmYXVsdDogYHVuZGVmaW5lZGAgKi9cbiAgQElucHV0KCkgc2VsZWN0aW9uPzogW251bWJlciwgbnVtYmVyXSB8IG51bGxcblxuICAvKiogQWxsb3cgZHJhZ2dpbmcgdGhlIHNlbGVjdGVkIGFyZWEgYXMgYSB3aG9sZSBpbiBvcmRlciB0byBjaGFuZ2UgdGhlIHNlbGVjdGVkIHJhbmdlLiBEZWZhdWx0OiBgZmFsc2VgICovXG4gIEBJbnB1dCgpIGRyYWdnYWJsZT86IGJvb2xlYW5cblxuICAvKiogUG9zaXRpb24gb2YgdGhlIGhhbmRsZTogYEFycmFuZ2VtZW50Lkluc2lkZWAgb3IgYEFycmFuZ2VtZW50Lk91dHNpZGVgLiBEZWZhdWx0OiBgQXJyYW5nZW1lbnQuSW5zaWRlYCAqL1xuICBASW5wdXQoKSBoYW5kbGVQb3NpdGlvbj86IEFycmFuZ2VtZW50IHwgc3RyaW5nXG5cbiAgLyoqIENvbnN0cmFpbnQgQnJ1c2ggc2VsZWN0aW9uIHRvIGEgbWluaW1hbCBsZW5ndGggaW4gZGF0YSB1bml0cy4gRGVmYXVsdDogYHVuZGVmaW5lZGAgKi9cbiAgQElucHV0KCkgc2VsZWN0aW9uTWluTGVuZ3RoPzogbnVtYmVyXG4gIEBJbnB1dCgpIGRhdGE6IERhdHVtW11cblxuICBjb21wb25lbnQ6IEJydXNoPERhdHVtPiB8IHVuZGVmaW5lZFxuICBwdWJsaWMgY29tcG9uZW50Q29udGFpbmVyOiBDb250YWluZXJDb3JlIHwgdW5kZWZpbmVkXG5cbiAgbmdBZnRlclZpZXdJbml0ICgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbXBvbmVudCA9IG5ldyBCcnVzaDxEYXR1bT4odGhpcy5nZXRDb25maWcoKSlcblxuICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50LnNldERhdGEodGhpcy5kYXRhKVxuICAgICAgdGhpcy5jb21wb25lbnRDb250YWluZXI/LnJlbmRlcigpXG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMgKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5kYXRhKSB7IHRoaXMuY29tcG9uZW50Py5zZXREYXRhKHRoaXMuZGF0YSkgfVxuICAgIHRoaXMuY29tcG9uZW50Py5zZXRDb25maWcodGhpcy5nZXRDb25maWcoKSlcbiAgICB0aGlzLmNvbXBvbmVudENvbnRhaW5lcj8ucmVuZGVyKClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29uZmlnICgpOiBCcnVzaENvbmZpZ0ludGVyZmFjZTxEYXR1bT4ge1xuICAgIGNvbnN0IHsgZHVyYXRpb24sIGV2ZW50cywgYXR0cmlidXRlcywgb25CcnVzaCwgb25CcnVzaFN0YXJ0LCBvbkJydXNoTW92ZSwgb25CcnVzaEVuZCwgaGFuZGxlV2lkdGgsIHNlbGVjdGlvbiwgZHJhZ2dhYmxlLCBoYW5kbGVQb3NpdGlvbiwgc2VsZWN0aW9uTWluTGVuZ3RoIH0gPSB0aGlzXG4gICAgY29uc3QgY29uZmlnID0geyBkdXJhdGlvbiwgZXZlbnRzLCBhdHRyaWJ1dGVzLCBvbkJydXNoLCBvbkJydXNoU3RhcnQsIG9uQnJ1c2hNb3ZlLCBvbkJydXNoRW5kLCBoYW5kbGVXaWR0aCwgc2VsZWN0aW9uLCBkcmFnZ2FibGUsIGhhbmRsZVBvc2l0aW9uLCBzZWxlY3Rpb25NaW5MZW5ndGggfVxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhjb25maWcpIGFzIChrZXlvZiBCcnVzaENvbmZpZ0ludGVyZmFjZTxEYXR1bT4pW11cbiAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsgaWYgKGNvbmZpZ1trZXldID09PSB1bmRlZmluZWQpIGRlbGV0ZSBjb25maWdba2V5XSB9KVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG59XG4iXX0=
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJ1c2guY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYnJ1c2gvYnJ1c2guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFpQixLQUFLLEVBQWlCLE1BQU0sZUFBZSxDQUFBO0FBQzlFLE9BQU8sRUFBRSxLQUFLLEVBQW9GLE1BQU0sWUFBWSxDQUFBO0FBRXBILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxZQUFZLENBQUE7O0FBUTNDLE1BQU0sT0FBTyxpQkFBaUI7SUFzRjVCLGVBQWU7O1FBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssQ0FBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUVuRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDakMsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLE1BQU0sRUFBRSxDQUFBO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBRSxPQUFzQjs7UUFDakMsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQUUsTUFBQSxJQUFJLENBQUMsU0FBUywwQ0FBRSxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1NBQUU7UUFDeEQsTUFBQSxJQUFJLENBQUMsU0FBUywwQ0FBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7UUFDM0MsTUFBQSxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLE1BQU0sRUFBRSxDQUFBO0lBQ25DLENBQUM7SUFFTyxTQUFTO1FBQ2YsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsR0FBRyxJQUFJLENBQUE7UUFDcEssTUFBTSxNQUFNLEdBQUcsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsY0FBYyxFQUFFLGtCQUFrQixFQUFFLENBQUE7UUFDdEssTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQTBDLENBQUE7UUFDekUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVM7WUFBRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTFFLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQzs7K0dBNUdVLGlCQUFpQjttR0FBakIsaUJBQWlCLGdZQUZqQixDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQywrQ0FGOUQsRUFBRTs0RkFJRCxpQkFBaUI7a0JBTjdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFFBQVEsRUFBRSxFQUFFO29CQUNaLGdEQUFnRDtvQkFDaEQsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsbUJBQW1CLEVBQUUsQ0FBQztpQkFDekU7OEJBR1UsUUFBUTtzQkFBaEIsS0FBSztnQkFtQkcsTUFBTTtzQkFBZCxLQUFLO2dCQXdCRyxVQUFVO3NCQUFsQixLQUFLO2dCQVFHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBSUcsVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBR0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvLyAhISEgVGhpcyBjb2RlIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZC4gWW91IHNob3VsZCBub3QgY2hhbmdlIGl0ICEhIVxuaW1wb3J0IHsgQ29tcG9uZW50LCBBZnRlclZpZXdJbml0LCBJbnB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCcnVzaCwgQnJ1c2hDb25maWdJbnRlcmZhY2UsIENvbnRhaW5lckNvcmUsIFZpc0V2ZW50VHlwZSwgVmlzRXZlbnRDYWxsYmFjaywgQXJyYW5nZW1lbnQgfSBmcm9tICdAdW5vdmlzL3RzJ1xuaW1wb3J0IHsgRDNCcnVzaEV2ZW50IH0gZnJvbSAnZDMtYnJ1c2gnXG5pbXBvcnQgeyBWaXNYWUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Zpcy1icnVzaCcsXG4gIHRlbXBsYXRlOiAnJyxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogVmlzWFlDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBWaXNCcnVzaENvbXBvbmVudCB9XSxcbn0pXG5leHBvcnQgY2xhc3MgVmlzQnJ1c2hDb21wb25lbnQ8RGF0dW0+IGltcGxlbWVudHMgQnJ1c2hDb25maWdJbnRlcmZhY2U8RGF0dW0+LCBBZnRlclZpZXdJbml0IHtcbiAgLyoqIEFuaW1hdGlvbiBkdXJhdGlvbiBvZiB0aGUgZGF0YSB1cGRhdGUgdHJhbnNpdGlvbnMgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0OiBgNjAwYCAqL1xuICBASW5wdXQoKSBkdXJhdGlvbj86IG51bWJlclxuXG4gIC8qKiBFdmVudHMgY29uZmlndXJhdGlvbi4gQW4gb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiAgICpcbiAgICogYGBgXG4gICAqIHtcbiAgICogXFxbc2VsZWN0b3JTdHJpbmddOiB7XG4gICAqICAgICBcXFtldmVudFR5cGVdOiBjYWxsYmFja0Z1bmN0aW9uXG4gICAqICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqIGUuZy46XG4gICAqIGBgYFxuICAgKiB7XG4gICAqIFxcW0FyZWEuc2VsZWN0b3JzLmFyZWFdOiB7XG4gICAqICAgIGNsaWNrOiAoZCkgPT4gY29uc29sZS5sb2coXCJDbGlja2VkIEFyZWFcIiwgZClcbiAgICogIH1cbiAgICogfVxuICAgKiBgYGAgKi9cbiAgQElucHV0KCkgZXZlbnRzPzoge1xuICAgIFtzZWxlY3Rvcjogc3RyaW5nXToge1xuICAgICAgW2V2ZW50VHlwZSBpbiBWaXNFdmVudFR5cGVdPzogVmlzRXZlbnRDYWxsYmFja1xuICAgIH07XG4gIH1cblxuICAvKiogWW91IGNhbiBzZXQgZXZlcnkgU1ZHIGFuZCBIVE1MIHZpc3VhbGl6YXRpb24gb2JqZWN0IHRvIGhhdmUgYSBjdXN0b20gRE9NIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIHVzZWZ1bFxuICAgKiB3aGVuIHlvdSB3YW50IHRvIGRvIHVuaXQgb3IgZW5kLXRvLWVuZCB0ZXN0aW5nLiBBdHRyaWJ1dGVzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbiAgICpcbiAgICogYGBgXG4gICAqIHtcbiAgICogXFxbc2VsZWN0b3JTdHJpbmddOiB7XG4gICAqICAgICBcXFthdHRyaWJ1dGVOYW1lXTogYXR0cmlidXRlIGNvbnN0YW50IHZhbHVlIG9yIGFjY2Vzc29yIGZ1bmN0aW9uXG4gICAqICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqIGUuZy46XG4gICAqIGBgYFxuICAgKiB7XG4gICAqIFxcW0FyZWEuc2VsZWN0b3JzLmFyZWFdOiB7XG4gICAqICAgIFwidGVzdC12YWx1ZVwiOiBkID0+IGQudmFsdWVcbiAgICogIH1cbiAgICogfVxuICAgKiBgYGAgKi9cbiAgQElucHV0KCkgYXR0cmlidXRlcz86IHtcbiAgICBbc2VsZWN0b3I6IHN0cmluZ106IHtcbiAgICAgIFthdHRyOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgKChkYXR1bTogYW55KSA9PiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBhbnkgQnJ1c2ggZXZlbnQuXG4gICAqIERlZmF1bHQ6IGAoc2VsZWN0aW9uOiBbbnVtYmVyLCBudW1iZXJdLCBldmVudDogRDNCcnVzaEV2ZW50PERhdHVtPiwgdXNlckRyaXZlbjogYm9vbGVhbik6IHZvaWQgPT4ge31gICovXG4gIEBJbnB1dCgpIG9uQnJ1c2g/OiAoKHNlbGVjdGlvbjogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCwgZXZlbnQ6IEQzQnJ1c2hFdmVudDxEYXR1bT4sIHVzZXJEcml2ZW46IGJvb2xlYW4pID0+IHZvaWQpXG5cbiAgLyoqIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiB0aGUgQnJ1c2ggc3RhcnQgZXZlbnQuXG4gICAqIERlZmF1bHQ6IGAoc2VsZWN0aW9uOiBbbnVtYmVyLCBudW1iZXJdLCBldmVudDogRDNCcnVzaEV2ZW50PERhdHVtPiwgdXNlckRyaXZlbjogYm9vbGVhbik6IHZvaWQgPT4ge31gICovXG4gIEBJbnB1dCgpIG9uQnJ1c2hTdGFydD86ICgoc2VsZWN0aW9uOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLCBldmVudDogRDNCcnVzaEV2ZW50PERhdHVtPiwgdXNlckRyaXZlbjogYm9vbGVhbikgPT4gdm9pZClcblxuICAvKiogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHRoZSBCcnVzaCBtb3ZlIGV2ZW50LlxuICAgKiBEZWZhdWx0OiBgKHNlbGVjdGlvbjogW251bWJlciwgbnVtYmVyXSwgZXZlbnQ6IEQzQnJ1c2hFdmVudDxEYXR1bT4sIHVzZXJEcml2ZW46IGJvb2xlYW4pOiB2b2lkID0+IHt9YCAqL1xuICBASW5wdXQoKSBvbkJydXNoTW92ZT86ICgoc2VsZWN0aW9uOiBbbnVtYmVyLCBudW1iZXJdIHwgdW5kZWZpbmVkLCBldmVudDogRDNCcnVzaEV2ZW50PERhdHVtPiwgdXNlckRyaXZlbjogYm9vbGVhbikgPT4gdm9pZClcblxuICAvKiogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHRoZSBCcnVzaCBlbmQgZXZlbnQuXG4gICAqIERlZmF1bHQ6IGAoc2VsZWN0aW9uOiBbbnVtYmVyLCBudW1iZXJdLCBldmVudDogRDNCcnVzaEV2ZW50PERhdHVtPiwgdXNlckRyaXZlbjogYm9vbGVhbik6IHZvaWQgPT4ge31gICovXG4gIEBJbnB1dCgpIG9uQnJ1c2hFbmQ/OiAoKHNlbGVjdGlvbjogW251bWJlciwgbnVtYmVyXSB8IHVuZGVmaW5lZCwgZXZlbnQ6IEQzQnJ1c2hFdmVudDxEYXR1bT4sIHVzZXJEcml2ZW46IGJvb2xlYW4pID0+IHZvaWQpXG5cbiAgLyoqIFdpZHRoIG9mIHRoZSBCcnVzaCBoYW5kbGUuIERlZmF1bHQ6IGAxYCAqL1xuICBASW5wdXQoKSBoYW5kbGVXaWR0aD86IG51bWJlclxuXG4gIC8qKiBCcnVzaCBzZWxlY3Rpb24gaW4gdGhlIGRhdGEgc3BhY2UgY29vcmRpbmF0ZXMsIGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHNlbGVjdGlvbi4gRGVmYXVsdDogYHVuZGVmaW5lZGAgKi9cbiAgQElucHV0KCkgc2VsZWN0aW9uPzogW251bWJlciwgbnVtYmVyXSB8IG51bGxcblxuICAvKiogQWxsb3cgZHJhZ2dpbmcgdGhlIHNlbGVjdGVkIGFyZWEgYXMgYSB3aG9sZSBpbiBvcmRlciB0byBjaGFuZ2UgdGhlIHNlbGVjdGVkIHJhbmdlLiBEZWZhdWx0OiBgZmFsc2VgICovXG4gIEBJbnB1dCgpIGRyYWdnYWJsZT86IGJvb2xlYW5cblxuICAvKiogUG9zaXRpb24gb2YgdGhlIGhhbmRsZTogYEFycmFuZ2VtZW50Lkluc2lkZWAgb3IgYEFycmFuZ2VtZW50Lk91dHNpZGVgLiBEZWZhdWx0OiBgQXJyYW5nZW1lbnQuSW5zaWRlYCAqL1xuICBASW5wdXQoKSBoYW5kbGVQb3NpdGlvbj86IEFycmFuZ2VtZW50Lkluc2lkZSB8IEFycmFuZ2VtZW50Lk91dHNpZGUgfCBzdHJpbmdcblxuICAvKiogQ29uc3RyYWludCBCcnVzaCBzZWxlY3Rpb24gdG8gYSBtaW5pbWFsIGxlbmd0aCBpbiBkYXRhIHVuaXRzLiBEZWZhdWx0OiBgdW5kZWZpbmVkYCAqL1xuICBASW5wdXQoKSBzZWxlY3Rpb25NaW5MZW5ndGg/OiBudW1iZXJcbiAgQElucHV0KCkgZGF0YTogRGF0dW1bXVxuXG4gIGNvbXBvbmVudDogQnJ1c2g8RGF0dW0+IHwgdW5kZWZpbmVkXG4gIHB1YmxpYyBjb21wb25lbnRDb250YWluZXI6IENvbnRhaW5lckNvcmUgfCB1bmRlZmluZWRcblxuICBuZ0FmdGVyVmlld0luaXQgKCk6IHZvaWQge1xuICAgIHRoaXMuY29tcG9uZW50ID0gbmV3IEJydXNoPERhdHVtPih0aGlzLmdldENvbmZpZygpKVxuXG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgdGhpcy5jb21wb25lbnQuc2V0RGF0YSh0aGlzLmRhdGEpXG4gICAgICB0aGlzLmNvbXBvbmVudENvbnRhaW5lcj8ucmVuZGVyKClcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyAoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmRhdGEpIHsgdGhpcy5jb21wb25lbnQ/LnNldERhdGEodGhpcy5kYXRhKSB9XG4gICAgdGhpcy5jb21wb25lbnQ/LnNldENvbmZpZyh0aGlzLmdldENvbmZpZygpKVxuICAgIHRoaXMuY29tcG9uZW50Q29udGFpbmVyPy5yZW5kZXIoKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb25maWcgKCk6IEJydXNoQ29uZmlnSW50ZXJmYWNlPERhdHVtPiB7XG4gICAgY29uc3QgeyBkdXJhdGlvbiwgZXZlbnRzLCBhdHRyaWJ1dGVzLCBvbkJydXNoLCBvbkJydXNoU3RhcnQsIG9uQnJ1c2hNb3ZlLCBvbkJydXNoRW5kLCBoYW5kbGVXaWR0aCwgc2VsZWN0aW9uLCBkcmFnZ2FibGUsIGhhbmRsZVBvc2l0aW9uLCBzZWxlY3Rpb25NaW5MZW5ndGggfSA9IHRoaXNcbiAgICBjb25zdCBjb25maWcgPSB7IGR1cmF0aW9uLCBldmVudHMsIGF0dHJpYnV0ZXMsIG9uQnJ1c2gsIG9uQnJ1c2hTdGFydCwgb25CcnVzaE1vdmUsIG9uQnJ1c2hFbmQsIGhhbmRsZVdpZHRoLCBzZWxlY3Rpb24sIGRyYWdnYWJsZSwgaGFuZGxlUG9zaXRpb24sIHNlbGVjdGlvbk1pbkxlbmd0aCB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZykgYXMgKGtleW9mIEJydXNoQ29uZmlnSW50ZXJmYWNlPERhdHVtPilbXVxuICAgIGtleXMuZm9yRWFjaChrZXkgPT4geyBpZiAoY29uZmlnW2tleV0gPT09IHVuZGVmaW5lZCkgZGVsZXRlIGNvbmZpZ1trZXldIH0pXG5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cbn1cbiJdfQ==
@@ -21,8 +21,8 @@ export class VisCrosshairComponent {
21
21
  (_c = this.componentContainer) === null || _c === void 0 ? void 0 : _c.render();
22
22
  }
23
23
  getConfig() {
24
- const { duration, events, attributes, x, y, id, color, xScale, yScale, excludeFromDomainCalculation, strokeColor, strokeWidth, yStacked, baseline, tooltip, template, hideWhenFarFromPointer, hideWhenFarFromPointerDistance, snapToData, getCircles } = this;
25
- const config = { duration, events, attributes, x, y, id, color, xScale, yScale, excludeFromDomainCalculation, strokeColor, strokeWidth, yStacked, baseline, tooltip, template, hideWhenFarFromPointer, hideWhenFarFromPointerDistance, snapToData, getCircles };
24
+ const { duration, events, attributes, x, y, id, color, xScale, yScale, excludeFromDomainCalculation, strokeColor, strokeWidth, yStacked, baseline, tooltip, template, hideWhenFarFromPointer, hideWhenFarFromPointerDistance, snapToData, getCircles, onCrosshairMove, forceShowAt } = this;
25
+ const config = { duration, events, attributes, x, y, id, color, xScale, yScale, excludeFromDomainCalculation, strokeColor, strokeWidth, yStacked, baseline, tooltip, template, hideWhenFarFromPointer, hideWhenFarFromPointerDistance, snapToData, getCircles, onCrosshairMove, forceShowAt };
26
26
  const keys = Object.keys(config);
27
27
  keys.forEach(key => { if (config[key] === undefined)
28
28
  delete config[key]; });
@@ -30,7 +30,7 @@ export class VisCrosshairComponent {
30
30
  }
31
31
  }
32
32
  VisCrosshairComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: VisCrosshairComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
33
- VisCrosshairComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: VisCrosshairComponent, selector: "vis-crosshair", inputs: { duration: "duration", events: "events", attributes: "attributes", x: "x", y: "y", id: "id", color: "color", xScale: "xScale", yScale: "yScale", excludeFromDomainCalculation: "excludeFromDomainCalculation", strokeColor: "strokeColor", strokeWidth: "strokeWidth", yStacked: "yStacked", baseline: "baseline", tooltip: "tooltip", template: "template", hideWhenFarFromPointer: "hideWhenFarFromPointer", hideWhenFarFromPointerDistance: "hideWhenFarFromPointerDistance", snapToData: "snapToData", getCircles: "getCircles", data: "data" }, providers: [{ provide: VisXYComponent, useExisting: VisCrosshairComponent }], usesOnChanges: true, ngImport: i0, template: '', isInline: true });
33
+ VisCrosshairComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: VisCrosshairComponent, selector: "vis-crosshair", inputs: { duration: "duration", events: "events", attributes: "attributes", x: "x", y: "y", id: "id", color: "color", xScale: "xScale", yScale: "yScale", excludeFromDomainCalculation: "excludeFromDomainCalculation", strokeColor: "strokeColor", strokeWidth: "strokeWidth", yStacked: "yStacked", baseline: "baseline", tooltip: "tooltip", template: "template", hideWhenFarFromPointer: "hideWhenFarFromPointer", hideWhenFarFromPointerDistance: "hideWhenFarFromPointerDistance", snapToData: "snapToData", getCircles: "getCircles", onCrosshairMove: "onCrosshairMove", forceShowAt: "forceShowAt", data: "data" }, providers: [{ provide: VisXYComponent, useExisting: VisCrosshairComponent }], usesOnChanges: true, ngImport: i0, template: '', isInline: true });
34
34
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: VisCrosshairComponent, decorators: [{
35
35
  type: Component,
36
36
  args: [{
@@ -79,7 +79,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
79
79
  type: Input
80
80
  }], getCircles: [{
81
81
  type: Input
82
+ }], onCrosshairMove: [{
83
+ type: Input
84
+ }], forceShowAt: [{
85
+ type: Input
82
86
  }], data: [{
83
87
  type: Input
84
88
  }] } });
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NoYWlyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Nyb3NzaGFpci9jcm9zc2hhaXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFpQixLQUFLLEVBQWlCLE1BQU0sZUFBZSxDQUFBO0FBQzlFLE9BQU8sRUFDTCxTQUFTLEdBVVYsTUFBTSxZQUFZLENBQUE7QUFDbkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQTs7QUFRM0MsTUFBTSxPQUFPLHFCQUFxQjtJQXdIaEMsZUFBZTs7UUFDYixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBRXZELElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNqQyxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsTUFBTSxFQUFFLENBQUE7U0FDbEM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFFLE9BQXNCOztRQUNqQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFBRSxNQUFBLElBQUksQ0FBQyxTQUFTLDBDQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7U0FBRTtRQUN4RCxNQUFBLElBQUksQ0FBQyxTQUFTLDBDQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUMzQyxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsTUFBTSxFQUFFLENBQUE7SUFDbkMsQ0FBQztJQUVPLFNBQVM7UUFDZixNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsOEJBQThCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQTtRQUM3UCxNQUFNLE1BQU0sR0FBRyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLDRCQUE0QixFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLHNCQUFzQixFQUFFLDhCQUE4QixFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsQ0FBQTtRQUMvUCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBOEMsQ0FBQTtRQUM3RSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUztZQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFMUUsT0FBTyxNQUFNLENBQUE7SUFDZixDQUFDOzttSEE5SVUscUJBQXFCO3VHQUFyQixxQkFBcUIsc2tCQUZyQixDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsQ0FBQywrQ0FGbEUsRUFBRTs0RkFJRCxxQkFBcUI7a0JBTmpDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRSxFQUFFO29CQUNaLGdEQUFnRDtvQkFDaEQsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsdUJBQXVCLEVBQUUsQ0FBQztpQkFDN0U7OEJBR1UsUUFBUTtzQkFBaEIsS0FBSztnQkFtQkcsTUFBTTtzQkFBZCxLQUFLO2dCQXdCRyxVQUFVO3NCQUFsQixLQUFLO2dCQU9HLENBQUM7c0JBQVQsS0FBSztnQkFHRyxDQUFDO3NCQUFULEtBQUs7Z0JBR0csRUFBRTtzQkFBVixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFLRyxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csTUFBTTtzQkFBZCxLQUFLO2dCQU1HLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLE9BQU87c0JBQWYsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFHRyw4QkFBOEI7c0JBQXRDLEtBQUs7Z0JBTUcsVUFBVTtzQkFBbEIsS0FBSztnQkFPRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8vICEhISBUaGlzIGNvZGUgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLiBZb3Ugc2hvdWxkIG5vdCBjaGFuZ2UgaXQgISEhXG5pbXBvcnQgeyBDb21wb25lbnQsIEFmdGVyVmlld0luaXQsIElucHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIENyb3NzaGFpcixcbiAgQ3Jvc3NoYWlyQ29uZmlnSW50ZXJmYWNlLFxuICBDb250YWluZXJDb3JlLFxuICBWaXNFdmVudFR5cGUsXG4gIFZpc0V2ZW50Q2FsbGJhY2ssXG4gIE51bWVyaWNBY2Nlc3NvcixcbiAgQ29sb3JBY2Nlc3NvcixcbiAgQ29udGludW91c1NjYWxlLFxuICBUb29sdGlwLFxuICBDcm9zc2hhaXJDaXJjbGUsXG59IGZyb20gJ0B1bm92aXMvdHMnXG5pbXBvcnQgeyBWaXNYWUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUnXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Zpcy1jcm9zc2hhaXInLFxuICB0ZW1wbGF0ZTogJycsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFZpc1hZQ29tcG9uZW50LCB1c2VFeGlzdGluZzogVmlzQ3Jvc3NoYWlyQ29tcG9uZW50IH1dLFxufSlcbmV4cG9ydCBjbGFzcyBWaXNDcm9zc2hhaXJDb21wb25lbnQ8RGF0dW0+IGltcGxlbWVudHMgQ3Jvc3NoYWlyQ29uZmlnSW50ZXJmYWNlPERhdHVtPiwgQWZ0ZXJWaWV3SW5pdCB7XG4gIC8qKiBBbmltYXRpb24gZHVyYXRpb24gb2YgdGhlIGRhdGEgdXBkYXRlIHRyYW5zaXRpb25zIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdDogYDYwMGAgKi9cbiAgQElucHV0KCkgZHVyYXRpb24/OiBudW1iZXJcblxuICAvKiogRXZlbnRzIGNvbmZpZ3VyYXRpb24uIEFuIG9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXMgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6XG4gICAqXG4gICAqIGBgYFxuICAgKiB7XG4gICAqIFxcW3NlbGVjdG9yU3RyaW5nXToge1xuICAgKiAgICAgXFxbZXZlbnRUeXBlXTogY2FsbGJhY2tGdW5jdGlvblxuICAgKiAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKiBlLmcuOlxuICAgKiBgYGBcbiAgICoge1xuICAgKiBcXFtBcmVhLnNlbGVjdG9ycy5hcmVhXToge1xuICAgKiAgICBjbGljazogKGQpID0+IGNvbnNvbGUubG9nKFwiQ2xpY2tlZCBBcmVhXCIsIGQpXG4gICAqICB9XG4gICAqIH1cbiAgICogYGBgICovXG4gIEBJbnB1dCgpIGV2ZW50cz86IHtcbiAgICBbc2VsZWN0b3I6IHN0cmluZ106IHtcbiAgICAgIFtldmVudFR5cGUgaW4gVmlzRXZlbnRUeXBlXT86IFZpc0V2ZW50Q2FsbGJhY2tcbiAgICB9O1xuICB9XG5cbiAgLyoqIFlvdSBjYW4gc2V0IGV2ZXJ5IFNWRyBhbmQgSFRNTCB2aXN1YWxpemF0aW9uIG9iamVjdCB0byBoYXZlIGEgY3VzdG9tIERPTSBhdHRyaWJ1dGVzLCB3aGljaCBpcyB1c2VmdWxcbiAgICogd2hlbiB5b3Ugd2FudCB0byBkbyB1bml0IG9yIGVuZC10by1lbmQgdGVzdGluZy4gQXR0cmlidXRlcyBjb25maWd1cmF0aW9uIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmU6XG4gICAqXG4gICAqIGBgYFxuICAgKiB7XG4gICAqIFxcW3NlbGVjdG9yU3RyaW5nXToge1xuICAgKiAgICAgXFxbYXR0cmlidXRlTmFtZV06IGF0dHJpYnV0ZSBjb25zdGFudCB2YWx1ZSBvciBhY2Nlc3NvciBmdW5jdGlvblxuICAgKiAgfVxuICAgKiB9XG4gICAqIGBgYFxuICAgKiBlLmcuOlxuICAgKiBgYGBcbiAgICoge1xuICAgKiBcXFtBcmVhLnNlbGVjdG9ycy5hcmVhXToge1xuICAgKiAgICBcInRlc3QtdmFsdWVcIjogZCA9PiBkLnZhbHVlXG4gICAqICB9XG4gICAqIH1cbiAgICogYGBgICovXG4gIEBJbnB1dCgpIGF0dHJpYnV0ZXM/OiB7XG4gICAgW3NlbGVjdG9yOiBzdHJpbmddOiB7XG4gICAgICBbYXR0cjogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8ICgoZGF0dW06IGFueSkgPT4gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbik7XG4gICAgfTtcbiAgfVxuXG4gIC8qKiBPcHRpb25hbCBhY2Nlc3NvciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB0aGUgdmFsdWVzIGFsb25nIHRoZSBYIGF4aXMuIERlZmF1bHQ6IGB1bmRlZmluZWRgICovXG4gIEBJbnB1dCgpIHg/OiBOdW1lcmljQWNjZXNzb3I8RGF0dW0+XG5cbiAgLyoqIE9wdGlvbmFsIHNpbmdsZSBvZiBtdWx0aXBsZSBhY2Nlc3NvciBmdW5jdGlvbnMgZm9yIGdldHRpbmcgdGhlIHZhbHVlcyBhbG9uZyB0aGUgWSBheGlzLiBEZWZhdWx0OiBgdW5kZWZpbmVkYCAqL1xuICBASW5wdXQoKSB5PzogTnVtZXJpY0FjY2Vzc29yPERhdHVtPiB8IE51bWVyaWNBY2Nlc3NvcjxEYXR1bT5bXVxuXG4gIC8qKiBBY2Nlc3NvciBmdW5jdGlvbiBmb3IgZ2V0dGluZyB0aGUgdW5pcXVlIGRhdGEgcmVjb3JkIGlkLiBVc2VkIGZvciBtb3JlIHBlcnNpc3RlbnQgZGF0YSB1cGRhdGVzLiBEZWZhdWx0OiBgKGQsIGkpID0+IGQuaWQgPz8gaWAgKi9cbiAgQElucHV0KCkgaWQ/OiAoKGQ6IERhdHVtLCBpOiBudW1iZXIsIC4uLnJlc3QpID0+IHN0cmluZylcblxuICAvKiogT3B0aW9uYWwgY29sb3IgYXJyYXkgb3IgY29sb3IgYWNjZXNzb3IgZnVuY3Rpb24gZm9yIGNyb3NzaGFpciBjaXJjbGVzLiBEZWZhdWx0OiBgZCA9PiBkLmNvbG9yYCAqL1xuICBASW5wdXQoKSBjb2xvcj86IENvbG9yQWNjZXNzb3I8RGF0dW0+XG5cbiAgLyoqIFNjYWxlIGZvciBYIGRpbWVuc2lvbiwgZS5nLiBTY2FsZS5zY2FsZUxpbmVhcigpLiBJZiB5b3Ugc2V0IHhTY2FsZSB5b3UnbGwgYmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgaXQncyBgZG9tYWluYCBhbmQgYHJhbmdlYCBhcyB3ZWxsLlxuICAgKiBPbmx5IGNvbnRpbnVvdXMgc2NhbGVzIGFyZSBzdXBwb3J0ZWQuXG4gICAqIERlZmF1bHQ6IGB1bmRlZmluZWRgICovXG4gIEBJbnB1dCgpIHhTY2FsZT86IENvbnRpbnVvdXNTY2FsZVxuXG4gIC8qKiBTY2FsZSBmb3IgWSBkaW1lbnNpb24sIGUuZy4gU2NhbGUuc2NhbGVMaW5lYXIoKS4gSWYgeW91IHNldCB5U2NhbGUgeW91J2xsIGJlIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIGl0J3MgYGRvbWFpbmAgYW5kIGByYW5nZWAgYXMgd2VsbC5cbiAgICogT25seSBjb250aW51b3VzIHNjYWxlcyBhcmUgc3VwcG9ydGVkLlxuICAgKiBEZWZhdWx0OiBgdW5kZWZpbmVkYCAqL1xuICBASW5wdXQoKSB5U2NhbGU/OiBDb250aW51b3VzU2NhbGVcblxuICAvKiogSWRlbnRpZmllcyB3aGV0aGVyIHRoZSBjb21wb25lbnQgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gb3ZlcmFsbCBYIGFuZCBZIGRvbWFpbiBjYWxjdWxhdGlvbnMgb3Igbm90LlxuICAgKiBUaGlzIHByb3BlcnR5IGNhbiBiZSB1c2VmdWwgd2hlbiB5b3Ugd2FudCBwYXNzIGluZGl2aWR1YWwgZGF0YSB0byBhIGNvbXBvbmVudCBhbmQgeW91IGRvbid0IHdhbnQgaXQgdG8gYWZmZWN0XG4gICAqIHRoZSBzY2FsZXMgb2YgdGhlIGNoYXJ0LlxuICAgKiBEZWZhdWx0OiBgZmFsc2VgICovXG4gIEBJbnB1dCgpIGV4Y2x1ZGVGcm9tRG9tYWluQ2FsY3VsYXRpb24/OiBib29sZWFuXG5cbiAgLyoqIE9wdGlvbmFsIHN0cm9rZSBjb2xvciBhY2Nlc3NvciBmdW5jdGlvbiBmb3IgY3Jvc3NoYWlyIGNpcmNsZXMuIERlZmF1bHQ6IGB1bmRlZmluZWRgICovXG4gIEBJbnB1dCgpIHN0cm9rZUNvbG9yPzogQ29sb3JBY2Nlc3NvcjxEYXR1bT5cblxuICAvKiogT3B0aW9uYWwgc3Ryb2tlIHdpZHRoIGZvciBjcm9zc2hhaXIgY2lyY2xlcy4gRGVmYXVsdDogYHVuZGVmaW5lZGAgKi9cbiAgQElucHV0KCkgc3Ryb2tlV2lkdGg/OiBOdW1lcmljQWNjZXNzb3I8RGF0dW0+XG5cbiAgLyoqIFNlcGFyYXRlIGFycmF5IG9mIGFjY2Vzc29ycyBmb3Igc3RhY2tlZCBjb21wb25lbnRzIChlZyBTdGFja2VkQmFyLCBBcmVhKS4gRGVmYXVsdDogYHVuZGVmaW5lZGAgKi9cbiAgQElucHV0KCkgeVN0YWNrZWQ/OiBOdW1lcmljQWNjZXNzb3I8RGF0dW0+W11cblxuICAvKiogQmFzZWxpbmUgYWNjZXNzb3IgZnVuY3Rpb24gZm9yIHN0YWNrZWQgdmFsdWVzLCB1c2VmdWwgd2l0aCBzdGFja2VkIGFyZWFzLiBEZWZhdWx0OiBgbnVsbGAgKi9cbiAgQElucHV0KCkgYmFzZWxpbmU/OiBOdW1lcmljQWNjZXNzb3I8RGF0dW0+XG5cbiAgLyoqIEFuIGluc3RhbmNlIG9mIHRoZSBUb29sdGlwIGNvbXBvbmVudCB0byBiZSB1c2VkIHdpdGggQ3Jvc3NoYWlyLiBEZWZhdWx0OiBgdW5kZWZpbmVkYCAqL1xuICBASW5wdXQoKSB0b29sdGlwPzogVG9vbHRpcCB8IHVuZGVmaW5lZFxuXG4gIC8qKiBUb29sdGlwIHRlbXBsYXRlIGFjY2Vzc29yLiBUaGUgZnVuY3Rpb24gaXMgc3VwcG9zZWQgdG8gcmV0dXJuIGVpdGhlciBhIHZhbGlkIEhUTUwgc3RyaW5nIG9yIGFuIEhUTUxFbGVtZW50LiBEZWZhdWx0OiBgZCA9PiAnJ2AgKi9cbiAgQElucHV0KCkgdGVtcGxhdGU/OiAoZGF0YTogRGF0dW0sIHg6IG51bWJlciB8IERhdGUpID0+IHN0cmluZyB8IEhUTUxFbGVtZW50XG5cbiAgLyoqIEhpZGUgQ3Jvc3NoYWlyIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBpcyBmYXIgZnJvbSBtb3VzZSBwb2ludGVyLiBEZWZhdWx0OiBgdHJ1ZWAgKi9cbiAgQElucHV0KCkgaGlkZVdoZW5GYXJGcm9tUG9pbnRlcj86IGJvb2xlYW5cblxuICAvKiogRGlzdGFuY2UgaW4gcGl4ZWxzIHRvIGNoZWNrIGluIHRoZSBoaWRlV2hlbkZhckZyb21Qb2ludGVyIGNvbmRpdGlvbi4gRGVmYXVsdDogYDEwMGAgKi9cbiAgQElucHV0KCkgaGlkZVdoZW5GYXJGcm9tUG9pbnRlckRpc3RhbmNlPzogbnVtYmVyXG5cbiAgLyoqIFNuYXAgdG8gdGhlIG5lYXJlc3QgZGF0YSBwb2ludC5cbiAgICogSWYgZGlzYWJsZWQsIHRoZSB0b29sdGlwIHRlbXBsYXRlIHdpbGwgcmVjZWl2ZSBvbmx5IHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBjcm9zc2hhaXIgYW5kIHlvdSdsbCBiZSByZXNwb25zaWJsZVxuICAgKiBmb3IgZ2V0dGluZyB0aGUgdW5kZXJseWluZyBkYXRhIHJlY29yZHMgYW5kIGNyb3NzaGFpciBjaXJjbGVzIChzZWUgdGhlIGBnZXRDaXJjbGVzYCBjb25maWd1cmF0aW9uIG9wdGlvbikuXG4gICAqIERlZmF1bHQ6IGB0cnVlYCAqL1xuICBASW5wdXQoKSBzbmFwVG9EYXRhPzogYm9vbGVhblxuXG4gIC8qKiBDdXN0b20gZnVuY3Rpb24gZm9yIHNldHRpbmcgdXAgdGhlIGNyb3NzaGFpciBjaXJjbGVzLCB1c3VhbGx5IG5lZWRlZCB3aGVuIGBzbmFwVG9EYXRhYCBpcyBzZXQgdG8gYGZhbHNlYC5cbiAgICogVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRoZSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBjcm9zc2hhaXIgKGluIHRoZSBkYXRhIHNwYWNlLCBub3QgaW4gcGl4ZWxzKSwgdGhlIGRhdGEgYXJyYXlcbiAgICogYW5kIHRoZSBgeVNjYWxlYCBpbnN0YW5jZSB0byBoZWxwIHlvdSBjYWxjdWxhdGUgdGhlIGNvcnJlY3QgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGNpcmNsZXMuXG4gICAqIEl0IGhhcyB0byByZXR1cm4gYW4gYXJyYXkgb2YgdGhlIENyb3NzaGFpckNpcmNsZSBvYmplY3RzOiBgeyB5OiBudW1iZXI7IGNvbG9yOiBzdHJpbmc7IG9wYWNpdHk/OiBudW1iZXIgfVtdYC5cbiAgICogRGVmYXVsdDogYHVuZGVmaW5lZGAgKi9cbiAgQElucHV0KCkgZ2V0Q2lyY2xlcz86ICh4OiBudW1iZXIgfCBEYXRlIHwgRGF0ZSwgZGF0YTogRGF0dW1bXSwgeVNjYWxlOiBDb250aW51b3VzU2NhbGUpID0+IENyb3NzaGFpckNpcmNsZVtdXG4gIEBJbnB1dCgpIGRhdGE6IERhdHVtW11cblxuICBjb21wb25lbnQ6IENyb3NzaGFpcjxEYXR1bT4gfCB1bmRlZmluZWRcbiAgcHVibGljIGNvbXBvbmVudENvbnRhaW5lcjogQ29udGFpbmVyQ29yZSB8IHVuZGVmaW5lZFxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCAoKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnQgPSBuZXcgQ3Jvc3NoYWlyPERhdHVtPih0aGlzLmdldENvbmZpZygpKVxuXG4gICAgaWYgKHRoaXMuZGF0YSkge1xuICAgICAgdGhpcy5jb21wb25lbnQuc2V0RGF0YSh0aGlzLmRhdGEpXG4gICAgICB0aGlzLmNvbXBvbmVudENvbnRhaW5lcj8ucmVuZGVyKClcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyAoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmRhdGEpIHsgdGhpcy5jb21wb25lbnQ/LnNldERhdGEodGhpcy5kYXRhKSB9XG4gICAgdGhpcy5jb21wb25lbnQ/LnNldENvbmZpZyh0aGlzLmdldENvbmZpZygpKVxuICAgIHRoaXMuY29tcG9uZW50Q29udGFpbmVyPy5yZW5kZXIoKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb25maWcgKCk6IENyb3NzaGFpckNvbmZpZ0ludGVyZmFjZTxEYXR1bT4ge1xuICAgIGNvbnN0IHsgZHVyYXRpb24sIGV2ZW50cywgYXR0cmlidXRlcywgeCwgeSwgaWQsIGNvbG9yLCB4U2NhbGUsIHlTY2FsZSwgZXhjbHVkZUZyb21Eb21haW5DYWxjdWxhdGlvbiwgc3Ryb2tlQ29sb3IsIHN0cm9rZVdpZHRoLCB5U3RhY2tlZCwgYmFzZWxpbmUsIHRvb2x0aXAsIHRlbXBsYXRlLCBoaWRlV2hlbkZhckZyb21Qb2ludGVyLCBoaWRlV2hlbkZhckZyb21Qb2ludGVyRGlzdGFuY2UsIHNuYXBUb0RhdGEsIGdldENpcmNsZXMgfSA9IHRoaXNcbiAgICBjb25zdCBjb25maWcgPSB7IGR1cmF0aW9uLCBldmVudHMsIGF0dHJpYnV0ZXMsIHgsIHksIGlkLCBjb2xvciwgeFNjYWxlLCB5U2NhbGUsIGV4Y2x1ZGVGcm9tRG9tYWluQ2FsY3VsYXRpb24sIHN0cm9rZUNvbG9yLCBzdHJva2VXaWR0aCwgeVN0YWNrZWQsIGJhc2VsaW5lLCB0b29sdGlwLCB0ZW1wbGF0ZSwgaGlkZVdoZW5GYXJGcm9tUG9pbnRlciwgaGlkZVdoZW5GYXJGcm9tUG9pbnRlckRpc3RhbmNlLCBzbmFwVG9EYXRhLCBnZXRDaXJjbGVzIH1cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoY29uZmlnKSBhcyAoa2V5b2YgQ3Jvc3NoYWlyQ29uZmlnSW50ZXJmYWNlPERhdHVtPilbXVxuICAgIGtleXMuZm9yRWFjaChrZXkgPT4geyBpZiAoY29uZmlnW2tleV0gPT09IHVuZGVmaW5lZCkgZGVsZXRlIGNvbmZpZ1trZXldIH0pXG5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cbn1cbiJdfQ==
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvc3NoYWlyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Nyb3NzaGFpci9jcm9zc2hhaXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBFQUEwRTtBQUMxRSxPQUFPLEVBQUUsU0FBUyxFQUFpQixLQUFLLEVBQWlCLE1BQU0sZUFBZSxDQUFBO0FBQzlFLE9BQU8sRUFDTCxTQUFTLEdBVVYsTUFBTSxZQUFZLENBQUE7QUFDbkIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQTs7QUFRM0MsTUFBTSxPQUFPLHFCQUFxQjtJQXVJaEMsZUFBZTs7UUFDYixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksU0FBUyxDQUFRLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO1FBRXZELElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNqQyxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsTUFBTSxFQUFFLENBQUE7U0FDbEM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFFLE9BQXNCOztRQUNqQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFBRSxNQUFBLElBQUksQ0FBQyxTQUFTLDBDQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7U0FBRTtRQUN4RCxNQUFBLElBQUksQ0FBQyxTQUFTLDBDQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUMzQyxNQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsTUFBTSxFQUFFLENBQUE7SUFDbkMsQ0FBQztJQUVPLFNBQVM7UUFDZixNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsOEJBQThCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFBO1FBQzNSLE1BQU0sTUFBTSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsNEJBQTRCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsOEJBQThCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsV0FBVyxFQUFFLENBQUE7UUFDN1IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQThDLENBQUE7UUFDN0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVM7WUFBRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBRTFFLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQzs7bUhBN0pVLHFCQUFxQjt1R0FBckIscUJBQXFCLHNvQkFGckIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLENBQUMsK0NBRmxFLEVBQUU7NEZBSUQscUJBQXFCO2tCQU5qQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixRQUFRLEVBQUUsRUFBRTtvQkFDWixnREFBZ0Q7b0JBQ2hELFNBQVMsRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxXQUFXLHVCQUF1QixFQUFFLENBQUM7aUJBQzdFOzhCQUdVLFFBQVE7c0JBQWhCLEtBQUs7Z0JBbUJHLE1BQU07c0JBQWQsS0FBSztnQkF3QkcsVUFBVTtzQkFBbEIsS0FBSztnQkFPRyxDQUFDO3NCQUFULEtBQUs7Z0JBR0csQ0FBQztzQkFBVCxLQUFLO2dCQUdHLEVBQUU7c0JBQVYsS0FBSztnQkFHRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0csTUFBTTtzQkFBZCxLQUFLO2dCQUtHLE1BQU07c0JBQWQsS0FBSztnQkFNRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBR0csOEJBQThCO3NCQUF0QyxLQUFLO2dCQU1HLFVBQVU7c0JBQWxCLEtBQUs7Z0JBT0csVUFBVTtzQkFBbEIsS0FBSztnQkFVRyxlQUFlO3NCQUF2QixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLy8gISEhIFRoaXMgY29kZSB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQuIFlvdSBzaG91bGQgbm90IGNoYW5nZSBpdCAhISFcbmltcG9ydCB7IENvbXBvbmVudCwgQWZ0ZXJWaWV3SW5pdCwgSW5wdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgQ3Jvc3NoYWlyLFxuICBDcm9zc2hhaXJDb25maWdJbnRlcmZhY2UsXG4gIENvbnRhaW5lckNvcmUsXG4gIFZpc0V2ZW50VHlwZSxcbiAgVmlzRXZlbnRDYWxsYmFjayxcbiAgTnVtZXJpY0FjY2Vzc29yLFxuICBDb2xvckFjY2Vzc29yLFxuICBDb250aW51b3VzU2NhbGUsXG4gIFRvb2x0aXAsXG4gIENyb3NzaGFpckNpcmNsZSxcbn0gZnJvbSAnQHVub3Zpcy90cydcbmltcG9ydCB7IFZpc1hZQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZSdcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmlzLWNyb3NzaGFpcicsXG4gIHRlbXBsYXRlOiAnJyxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIHByb3ZpZGVyczogW3sgcHJvdmlkZTogVmlzWFlDb21wb25lbnQsIHVzZUV4aXN0aW5nOiBWaXNDcm9zc2hhaXJDb21wb25lbnQgfV0sXG59KVxuZXhwb3J0IGNsYXNzIFZpc0Nyb3NzaGFpckNvbXBvbmVudDxEYXR1bT4gaW1wbGVtZW50cyBDcm9zc2hhaXJDb25maWdJbnRlcmZhY2U8RGF0dW0+LCBBZnRlclZpZXdJbml0IHtcbiAgLyoqIEFuaW1hdGlvbiBkdXJhdGlvbiBvZiB0aGUgZGF0YSB1cGRhdGUgdHJhbnNpdGlvbnMgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0OiBgNjAwYCAqL1xuICBASW5wdXQoKSBkdXJhdGlvbj86IG51bWJlclxuXG4gIC8qKiBFdmVudHMgY29uZmlndXJhdGlvbi4gQW4gb2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDpcbiAgICpcbiAgICogYGBgXG4gICAqIHtcbiAgICogXFxbc2VsZWN0b3JTdHJpbmddOiB7XG4gICAqICAgICBcXFtldmVudFR5cGVdOiBjYWxsYmFja0Z1bmN0aW9uXG4gICAqICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqIGUuZy46XG4gICAqIGBgYFxuICAgKiB7XG4gICAqIFxcW0FyZWEuc2VsZWN0b3JzLmFyZWFdOiB7XG4gICAqICAgIGNsaWNrOiAoZCkgPT4gY29uc29sZS5sb2coXCJDbGlja2VkIEFyZWFcIiwgZClcbiAgICogIH1cbiAgICogfVxuICAgKiBgYGAgKi9cbiAgQElucHV0KCkgZXZlbnRzPzoge1xuICAgIFtzZWxlY3Rvcjogc3RyaW5nXToge1xuICAgICAgW2V2ZW50VHlwZSBpbiBWaXNFdmVudFR5cGVdPzogVmlzRXZlbnRDYWxsYmFja1xuICAgIH07XG4gIH1cblxuICAvKiogWW91IGNhbiBzZXQgZXZlcnkgU1ZHIGFuZCBIVE1MIHZpc3VhbGl6YXRpb24gb2JqZWN0IHRvIGhhdmUgYSBjdXN0b20gRE9NIGF0dHJpYnV0ZXMsIHdoaWNoIGlzIHVzZWZ1bFxuICAgKiB3aGVuIHlvdSB3YW50IHRvIGRvIHVuaXQgb3IgZW5kLXRvLWVuZCB0ZXN0aW5nLiBBdHRyaWJ1dGVzIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZTpcbiAgICpcbiAgICogYGBgXG4gICAqIHtcbiAgICogXFxbc2VsZWN0b3JTdHJpbmddOiB7XG4gICAqICAgICBcXFthdHRyaWJ1dGVOYW1lXTogYXR0cmlidXRlIGNvbnN0YW50IHZhbHVlIG9yIGFjY2Vzc29yIGZ1bmN0aW9uXG4gICAqICB9XG4gICAqIH1cbiAgICogYGBgXG4gICAqIGUuZy46XG4gICAqIGBgYFxuICAgKiB7XG4gICAqIFxcW0FyZWEuc2VsZWN0b3JzLmFyZWFdOiB7XG4gICAqICAgIFwidGVzdC12YWx1ZVwiOiBkID0+IGQudmFsdWVcbiAgICogIH1cbiAgICogfVxuICAgKiBgYGAgKi9cbiAgQElucHV0KCkgYXR0cmlidXRlcz86IHtcbiAgICBbc2VsZWN0b3I6IHN0cmluZ106IHtcbiAgICAgIFthdHRyOiBzdHJpbmddOiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgKChkYXR1bTogYW55KSA9PiBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKTtcbiAgICB9O1xuICB9XG5cbiAgLyoqIE9wdGlvbmFsIGFjY2Vzc29yIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSB2YWx1ZXMgYWxvbmcgdGhlIFggYXhpcy4gRGVmYXVsdDogYHVuZGVmaW5lZGAgKi9cbiAgQElucHV0KCkgeD86IE51bWVyaWNBY2Nlc3NvcjxEYXR1bT5cblxuICAvKiogT3B0aW9uYWwgc2luZ2xlIG9mIG11bHRpcGxlIGFjY2Vzc29yIGZ1bmN0aW9ucyBmb3IgZ2V0dGluZyB0aGUgdmFsdWVzIGFsb25nIHRoZSBZIGF4aXMuIERlZmF1bHQ6IGB1bmRlZmluZWRgICovXG4gIEBJbnB1dCgpIHk/OiBOdW1lcmljQWNjZXNzb3I8RGF0dW0+IHwgTnVtZXJpY0FjY2Vzc29yPERhdHVtPltdXG5cbiAgLyoqIEFjY2Vzc29yIGZ1bmN0aW9uIGZvciBnZXR0aW5nIHRoZSB1bmlxdWUgZGF0YSByZWNvcmQgaWQuIFVzZWQgZm9yIG1vcmUgcGVyc2lzdGVudCBkYXRhIHVwZGF0ZXMuIERlZmF1bHQ6IGAoZCwgaSkgPT4gZC5pZCA/PyBpYCAqL1xuICBASW5wdXQoKSBpZD86ICgoZDogRGF0dW0sIGk6IG51bWJlciwgLi4ucmVzdCkgPT4gc3RyaW5nKVxuXG4gIC8qKiBPcHRpb25hbCBjb2xvciBhcnJheSBvciBjb2xvciBhY2Nlc3NvciBmdW5jdGlvbiBmb3IgY3Jvc3NoYWlyIGNpcmNsZXMuIERlZmF1bHQ6IGBkID0+IGQuY29sb3JgICovXG4gIEBJbnB1dCgpIGNvbG9yPzogQ29sb3JBY2Nlc3NvcjxEYXR1bT5cblxuICAvKiogU2NhbGUgZm9yIFggZGltZW5zaW9uLCBlLmcuIFNjYWxlLnNjYWxlTGluZWFyKCkuIElmIHlvdSBzZXQgeFNjYWxlIHlvdSdsbCBiZSByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBpdCdzIGBkb21haW5gIGFuZCBgcmFuZ2VgIGFzIHdlbGwuXG4gICAqIE9ubHkgY29udGludW91cyBzY2FsZXMgYXJlIHN1cHBvcnRlZC5cbiAgICogRGVmYXVsdDogYHVuZGVmaW5lZGAgKi9cbiAgQElucHV0KCkgeFNjYWxlPzogQ29udGludW91c1NjYWxlXG5cbiAgLyoqIFNjYWxlIGZvciBZIGRpbWVuc2lvbiwgZS5nLiBTY2FsZS5zY2FsZUxpbmVhcigpLiBJZiB5b3Ugc2V0IHlTY2FsZSB5b3UnbGwgYmUgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgaXQncyBgZG9tYWluYCBhbmQgYHJhbmdlYCBhcyB3ZWxsLlxuICAgKiBPbmx5IGNvbnRpbnVvdXMgc2NhbGVzIGFyZSBzdXBwb3J0ZWQuXG4gICAqIERlZmF1bHQ6IGB1bmRlZmluZWRgICovXG4gIEBJbnB1dCgpIHlTY2FsZT86IENvbnRpbnVvdXNTY2FsZVxuXG4gIC8qKiBJZGVudGlmaWVzIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBvdmVyYWxsIFggYW5kIFkgZG9tYWluIGNhbGN1bGF0aW9ucyBvciBub3QuXG4gICAqIFRoaXMgcHJvcGVydHkgY2FuIGJlIHVzZWZ1bCB3aGVuIHlvdSB3YW50IHBhc3MgaW5kaXZpZHVhbCBkYXRhIHRvIGEgY29tcG9uZW50IGFuZCB5b3UgZG9uJ3Qgd2FudCBpdCB0byBhZmZlY3RcbiAgICogdGhlIHNjYWxlcyBvZiB0aGUgY2hhcnQuXG4gICAqIERlZmF1bHQ6IGBmYWxzZWAgKi9cbiAgQElucHV0KCkgZXhjbHVkZUZyb21Eb21haW5DYWxjdWxhdGlvbj86IGJvb2xlYW5cblxuICAvKiogT3B0aW9uYWwgc3Ryb2tlIGNvbG9yIGFjY2Vzc29yIGZ1bmN0aW9uIGZvciBjcm9zc2hhaXIgY2lyY2xlcy4gRGVmYXVsdDogYHVuZGVmaW5lZGAgKi9cbiAgQElucHV0KCkgc3Ryb2tlQ29sb3I/OiBDb2xvckFjY2Vzc29yPERhdHVtPlxuXG4gIC8qKiBPcHRpb25hbCBzdHJva2Ugd2lkdGggZm9yIGNyb3NzaGFpciBjaXJjbGVzLiBEZWZhdWx0OiBgdW5kZWZpbmVkYCAqL1xuICBASW5wdXQoKSBzdHJva2VXaWR0aD86IE51bWVyaWNBY2Nlc3NvcjxEYXR1bT5cblxuICAvKiogU2VwYXJhdGUgYXJyYXkgb2YgYWNjZXNzb3JzIGZvciBzdGFja2VkIGNvbXBvbmVudHMgKGVnIFN0YWNrZWRCYXIsIEFyZWEpLiBEZWZhdWx0OiBgdW5kZWZpbmVkYCAqL1xuICBASW5wdXQoKSB5U3RhY2tlZD86IE51bWVyaWNBY2Nlc3NvcjxEYXR1bT5bXVxuXG4gIC8qKiBCYXNlbGluZSBhY2Nlc3NvciBmdW5jdGlvbiBmb3Igc3RhY2tlZCB2YWx1ZXMsIHVzZWZ1bCB3aXRoIHN0YWNrZWQgYXJlYXMuIERlZmF1bHQ6IGBudWxsYCAqL1xuICBASW5wdXQoKSBiYXNlbGluZT86IE51bWVyaWNBY2Nlc3NvcjxEYXR1bT5cblxuICAvKiogQW4gaW5zdGFuY2Ugb2YgdGhlIFRvb2x0aXAgY29tcG9uZW50IHRvIGJlIHVzZWQgd2l0aCBDcm9zc2hhaXIuIERlZmF1bHQ6IGB1bmRlZmluZWRgICovXG4gIEBJbnB1dCgpIHRvb2x0aXA/OiBUb29sdGlwIHwgdW5kZWZpbmVkXG5cbiAgLyoqIFRvb2x0aXAgdGVtcGxhdGUgYWNjZXNzb3IuIFRoZSBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byByZXR1cm4gZWl0aGVyIGEgdmFsaWQgSFRNTCBzdHJpbmcgb3IgYW4gSFRNTEVsZW1lbnQuXG4gICAqIFdoZW4gYHNuYXBUb0RhdGFgIGlzIGBmYWxzZWAsIGBkYXR1bWAgd2lsbCBiZSBgdW5kZWZpbmVkYCBidXQgYGRhdGFgIGFuZCBgbGVmdE5lYXJlc3REYXR1bUluZGV4YCB3aWxsIGJlIHByb3ZpZGVkLlxuICAgKiBEZWZhdWx0OiBgZCA9PiAnJ2AgKi9cbiAgQElucHV0KCkgdGVtcGxhdGU/OiAoZGF0dW06IERhdHVtLCB4OiBudW1iZXIgfCBEYXRlLCBkYXRhOiBEYXR1bVtdLCBsZWZ0TmVhcmVzdERhdHVtSW5kZXg6IG51bWJlcikgPT4gc3RyaW5nIHwgSFRNTEVsZW1lbnRcblxuICAvKiogSGlkZSBDcm9zc2hhaXIgd2hlbiB0aGUgY29ycmVzcG9uZGluZyBkYXR1bSBlbGVtZW50IGlzIGZhciBmcm9tIG1vdXNlIHBvaW50ZXIuIERlZmF1bHQ6IGB0cnVlYCAqL1xuICBASW5wdXQoKSBoaWRlV2hlbkZhckZyb21Qb2ludGVyPzogYm9vbGVhblxuXG4gIC8qKiBEaXN0YW5jZSBpbiBwaXhlbHMgdG8gY2hlY2sgaW4gdGhlIGhpZGVXaGVuRmFyRnJvbVBvaW50ZXIgY29uZGl0aW9uLiBEZWZhdWx0OiBgMTAwYCAqL1xuICBASW5wdXQoKSBoaWRlV2hlbkZhckZyb21Qb2ludGVyRGlzdGFuY2U/OiBudW1iZXJcblxuICAvKiogU25hcCB0byB0aGUgbmVhcmVzdCBkYXRhIHBvaW50LlxuICAgKiBJZiBkaXNhYmxlZCwgdGhlIHRvb2x0aXAgdGVtcGxhdGUgd2lsbCByZWNlaXZlIG9ubHkgdGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIGNyb3NzaGFpciBhbmQgeW91J2xsIGJlIHJlc3BvbnNpYmxlXG4gICAqIGZvciBnZXR0aW5nIHRoZSB1bmRlcmx5aW5nIGRhdGEgcmVjb3JkcyBhbmQgY3Jvc3NoYWlyIGNpcmNsZXMgKHNlZSB0aGUgYGdldENpcmNsZXNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uKS5cbiAgICogRGVmYXVsdDogYHRydWVgICovXG4gIEBJbnB1dCgpIHNuYXBUb0RhdGE/OiBib29sZWFuXG5cbiAgLyoqIEN1c3RvbSBmdW5jdGlvbiBmb3Igc2V0dGluZyB1cCB0aGUgY3Jvc3NoYWlyIGNpcmNsZXMsIHVzdWFsbHkgbmVlZGVkIHdoZW4gYHNuYXBUb0RhdGFgIGlzIHNldCB0byBgZmFsc2VgLlxuICAgKiBUaGUgZnVuY3Rpb24gcmVjZWl2ZXMgdGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIGNyb3NzaGFpciAoaW4gdGhlIGRhdGEgc3BhY2UsIG5vdCBpbiBwaXhlbHMpLCB0aGUgZGF0YSBhcnJheSxcbiAgICogdGhlIGB5U2NhbGVgIGluc3RhbmNlIHRvIGhlbHAgeW91IGNhbGN1bGF0ZSB0aGUgY29ycmVjdCB2ZXJ0aWNhbCBwb3NpdGlvbiBvZiB0aGUgY2lyY2xlcywgYW5kIHRoZSBuZWFyZXN0IGRhdHVtIGluZGV4LlxuICAgKiBJdCBoYXMgdG8gcmV0dXJuIGFuIGFycmF5IG9mIHRoZSBgQ3Jvc3NoYWlyQ2lyY2xlYCBvYmplY3RzOiBgeyB5OiBudW1iZXI7IGNvbG9yOiBzdHJpbmc7IG9wYWNpdHk/OiBudW1iZXIgfVtdYC5cbiAgICogRGVmYXVsdDogYHVuZGVmaW5lZGAgKi9cbiAgQElucHV0KCkgZ2V0Q2lyY2xlcz86ICh4OiBudW1iZXIgfCBEYXRlLCBkYXRhOiBEYXR1bVtdLCB5U2NhbGU6IENvbnRpbnVvdXNTY2FsZSwgbGVmdE5lYXJlc3REYXR1bUluZGV4OiBudW1iZXIpID0+IENyb3NzaGFpckNpcmNsZVtdXG5cbiAgLyoqIENhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlIGNyb3NzaGFpciBpcyBtb3ZlZDpcbiAgICogLSBgeGAgaXMgdGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIGNyb3NzaGFpciBpbiB0aGUgZGF0YSBzcGFjZTtcbiAgICogLSBgZGF0dW1gIGlzIHRoZSBuZWFyZXN0IGRhdHVtIHRvIHRoZSBjcm9zc2hhaXI7XG4gICAqIC0gYGRhdHVtSW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgbmVhcmVzdCBkYXR1bS5cbiAgICogLSBgZXZlbnRgIGlzIHRoZSBldmVudCB0aGF0IHRyaWdnZXJlZCB0aGUgY3Jvc3NoYWlyIG1vdmUgKG1vdXNlIG9yIHdoZWVsKS5cbiAgICpcbiAgICogV2hlbiB0aGUgbW91c2UgZ29lcyBvdXQgb2YgdGhlIGNvbnRhaW5lciBhbmQgb24gd2hlZWwgZXZlbnRzLCBhbGwgdGhlIGFyZ3VtZW50cyBhcmUgYHVuZGVmaW5lZGAgZXhjZXB0IGZvciBgZXZlbnRgLlxuICAgKiBEZWZhdWx0OiBgdW5kZWZpbmVkYCAqL1xuICBASW5wdXQoKSBvbkNyb3NzaGFpck1vdmU/OiAoeD86IG51bWJlciB8IERhdGUsIGRhdHVtPzogRGF0dW0sIGRhdHVtSW5kZXg/OiBudW1iZXIsIGV2ZW50PzogTW91c2VFdmVudCB8IFdoZWVsRXZlbnQpID0+IHZvaWRcblxuICAvKiogRm9yY2UgdGhlIGNyb3NzaGFpciB0byBzaG93IGF0IGEgc3BlY2lmaWMgcG9zaXRpb24uIERlZmF1bHQ6IGB1bmRlZmluZWRgICovXG4gIEBJbnB1dCgpIGZvcmNlU2hvd0F0PzogbnVtYmVyIHwgRGF0ZVxuICBASW5wdXQoKSBkYXRhOiBEYXR1bVtdXG5cbiAgY29tcG9uZW50OiBDcm9zc2hhaXI8RGF0dW0+IHwgdW5kZWZpbmVkXG4gIHB1YmxpYyBjb21wb25lbnRDb250YWluZXI6IENvbnRhaW5lckNvcmUgfCB1bmRlZmluZWRcblxuICBuZ0FmdGVyVmlld0luaXQgKCk6IHZvaWQge1xuICAgIHRoaXMuY29tcG9uZW50ID0gbmV3IENyb3NzaGFpcjxEYXR1bT4odGhpcy5nZXRDb25maWcoKSlcblxuICAgIGlmICh0aGlzLmRhdGEpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50LnNldERhdGEodGhpcy5kYXRhKVxuICAgICAgdGhpcy5jb21wb25lbnRDb250YWluZXI/LnJlbmRlcigpXG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMgKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5kYXRhKSB7IHRoaXMuY29tcG9uZW50Py5zZXREYXRhKHRoaXMuZGF0YSkgfVxuICAgIHRoaXMuY29tcG9uZW50Py5zZXRDb25maWcodGhpcy5nZXRDb25maWcoKSlcbiAgICB0aGlzLmNvbXBvbmVudENvbnRhaW5lcj8ucmVuZGVyKClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29uZmlnICgpOiBDcm9zc2hhaXJDb25maWdJbnRlcmZhY2U8RGF0dW0+IHtcbiAgICBjb25zdCB7IGR1cmF0aW9uLCBldmVudHMsIGF0dHJpYnV0ZXMsIHgsIHksIGlkLCBjb2xvciwgeFNjYWxlLCB5U2NhbGUsIGV4Y2x1ZGVGcm9tRG9tYWluQ2FsY3VsYXRpb24sIHN0cm9rZUNvbG9yLCBzdHJva2VXaWR0aCwgeVN0YWNrZWQsIGJhc2VsaW5lLCB0b29sdGlwLCB0ZW1wbGF0ZSwgaGlkZVdoZW5GYXJGcm9tUG9pbnRlciwgaGlkZVdoZW5GYXJGcm9tUG9pbnRlckRpc3RhbmNlLCBzbmFwVG9EYXRhLCBnZXRDaXJjbGVzLCBvbkNyb3NzaGFpck1vdmUsIGZvcmNlU2hvd0F0IH0gPSB0aGlzXG4gICAgY29uc3QgY29uZmlnID0geyBkdXJhdGlvbiwgZXZlbnRzLCBhdHRyaWJ1dGVzLCB4LCB5LCBpZCwgY29sb3IsIHhTY2FsZSwgeVNjYWxlLCBleGNsdWRlRnJvbURvbWFpbkNhbGN1bGF0aW9uLCBzdHJva2VDb2xvciwgc3Ryb2tlV2lkdGgsIHlTdGFja2VkLCBiYXNlbGluZSwgdG9vbHRpcCwgdGVtcGxhdGUsIGhpZGVXaGVuRmFyRnJvbVBvaW50ZXIsIGhpZGVXaGVuRmFyRnJvbVBvaW50ZXJEaXN0YW5jZSwgc25hcFRvRGF0YSwgZ2V0Q2lyY2xlcywgb25Dcm9zc2hhaXJNb3ZlLCBmb3JjZVNob3dBdCB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZykgYXMgKGtleW9mIENyb3NzaGFpckNvbmZpZ0ludGVyZmFjZTxEYXR1bT4pW11cbiAgICBrZXlzLmZvckVhY2goa2V5ID0+IHsgaWYgKGNvbmZpZ1trZXldID09PSB1bmRlZmluZWQpIGRlbGV0ZSBjb25maWdba2V5XSB9KVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG59XG4iXX0=