@tetacom/svg-charts 1.2.1 → 1.2.4

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 (45) hide show
  1. package/chart/chart/chart.component.d.ts +2 -1
  2. package/chart/chart-container/chart-container.component.d.ts +5 -6
  3. package/chart/chart-container/series/linear-series-base.d.ts +2 -2
  4. package/chart/chart-container/series/scatter-series/scatter-series.component.d.ts +0 -1
  5. package/chart/chart-container/x-axis/x-axis.component.d.ts +2 -4
  6. package/chart/core/axis/axis.d.ts +3 -0
  7. package/chart/model/i-broadcast-message.d.ts +2 -2
  8. package/chart/service/chart.service.d.ts +4 -0
  9. package/chart/service/scale.service.d.ts +2 -0
  10. package/esm2020/chart/base/series-base.component.mjs +3 -3
  11. package/esm2020/chart/chart/chart.component.mjs +12 -4
  12. package/esm2020/chart/chart-container/annotation/annotation.component.mjs +6 -6
  13. package/esm2020/chart/chart-container/chart-container.component.mjs +21 -30
  14. package/esm2020/chart/chart-container/crosshair/crosshair.component.mjs +3 -3
  15. package/esm2020/chart/chart-container/gridlines/gridlines.component.mjs +14 -8
  16. package/esm2020/chart/chart-container/plotband/plot-band.component.mjs +3 -3
  17. package/esm2020/chart/chart-container/plotline/plotline.component.mjs +3 -3
  18. package/esm2020/chart/chart-container/series/area-series/area-series.component.mjs +8 -8
  19. package/esm2020/chart/chart-container/series/bar/bar-series.component.mjs +8 -8
  20. package/esm2020/chart/chart-container/series/block-area-series/block-area-series.component.mjs +6 -6
  21. package/esm2020/chart/chart-container/series/block-series/block-series.component.mjs +6 -6
  22. package/esm2020/chart/chart-container/series/line/line-series.component.mjs +3 -3
  23. package/esm2020/chart/chart-container/series/linear-series-base.mjs +47 -41
  24. package/esm2020/chart/chart-container/series/scatter-series/scatter-series.component.mjs +6 -6
  25. package/esm2020/chart/chart-container/series-host/series-host.component.mjs +3 -3
  26. package/esm2020/chart/chart-container/tooltip/tooltip.component.mjs +3 -3
  27. package/esm2020/chart/chart-container/x-axis/x-axis.component.mjs +6 -30
  28. package/esm2020/chart/chart-container/y-axis/y-axis.component.mjs +6 -6
  29. package/esm2020/chart/chart.module.mjs +4 -4
  30. package/esm2020/chart/core/axis/axis.mjs +7 -1
  31. package/esm2020/chart/default/default-axis-config.mjs +2 -2
  32. package/esm2020/chart/directives/brushable.directive.mjs +5 -6
  33. package/esm2020/chart/directives/zoomable.directive.mjs +49 -16
  34. package/esm2020/chart/legend/legend.component.mjs +3 -3
  35. package/esm2020/chart/model/i-broadcast-message.mjs +2 -2
  36. package/esm2020/chart/service/broadcast.service.mjs +3 -3
  37. package/esm2020/chart/service/brush.service.mjs +23 -20
  38. package/esm2020/chart/service/chart.service.mjs +9 -4
  39. package/esm2020/chart/service/scale.service.mjs +137 -4
  40. package/esm2020/chart/service/zoom.service.mjs +5 -5
  41. package/fesm2015/tetacom-svg-charts.mjs +404 -231
  42. package/fesm2015/tetacom-svg-charts.mjs.map +1 -1
  43. package/fesm2020/tetacom-svg-charts.mjs +391 -225
  44. package/fesm2020/tetacom-svg-charts.mjs.map +1 -1
  45. package/package.json +3 -3
@@ -28,6 +28,7 @@ export declare class ChartComponent implements OnInit, OnChanges, OnDestroy {
28
28
  annotationContextMenu: EventEmitter<IChartEvent<Annotation>>;
29
29
  annotationClick: EventEmitter<IChartEvent<Annotation>>;
30
30
  annotationMove: EventEmitter<IChartEvent<Annotation>>;
31
+ zoomServiceInstance: EventEmitter<ZoomService>;
31
32
  set config(config: IChartConfig);
32
33
  private _alive;
33
34
  constructor(chartService: ChartService, zoomService: ZoomService, scaleService: ScaleService);
@@ -36,5 +37,5 @@ export declare class ChartComponent implements OnInit, OnChanges, OnDestroy {
36
37
  ngAfterViewInit(): void;
37
38
  ngOnDestroy(): void;
38
39
  static ɵfac: i0.ɵɵFactoryDeclaration<ChartComponent, never>;
39
- static ɵcmp: i0.ɵɵComponentDeclaration<ChartComponent, "teta-svg-chart", never, { "config": "config"; }, { "pointerMove": "pointerMove"; "plotBandsMove": "plotBandsMove"; "plotBandClick": "plotBandClick"; "plotBandContextMenu": "plotBandContextMenu"; "plotLinesMove": "plotLinesMove"; "pointMove": "pointMove"; "chartClick": "chartClick"; "chartContextMenu": "chartContextMenu"; "annotationContextMenu": "annotationContextMenu"; "annotationClick": "annotationClick"; "annotationMove": "annotationMove"; }, never, never, false>;
40
+ static ɵcmp: i0.ɵɵComponentDeclaration<ChartComponent, "teta-svg-chart", never, { "config": "config"; }, { "pointerMove": "pointerMove"; "plotBandsMove": "plotBandsMove"; "plotBandClick": "plotBandClick"; "plotBandContextMenu": "plotBandContextMenu"; "plotLinesMove": "plotLinesMove"; "pointMove": "pointMove"; "chartClick": "chartClick"; "chartContextMenu": "chartContextMenu"; "annotationContextMenu": "annotationContextMenu"; "annotationClick": "annotationClick"; "annotationMove": "annotationMove"; "zoomServiceInstance": "zoomServiceInstance"; }, never, never, false>;
40
41
  }
@@ -5,7 +5,7 @@ import { Observable } from 'rxjs';
5
5
  import { Axis } from '../core/axis/axis';
6
6
  import { ScaleService } from '../service/scale.service';
7
7
  import { ZoomService } from '../service/zoom.service';
8
- import { ZoomType } from "../model/enum/zoom-type";
8
+ import { ZoomType } from '../model/enum/zoom-type';
9
9
  import * as i0 from "@angular/core";
10
10
  export declare class ChartContainerComponent implements OnInit, OnDestroy {
11
11
  private _svc;
@@ -15,18 +15,17 @@ export declare class ChartContainerComponent implements OnInit, OnDestroy {
15
15
  private _elementRef;
16
16
  private _zone;
17
17
  config: Observable<IChartConfig>;
18
- yAxisMap: Observable<Map<number, Axis>>;
19
- xAxisMap: Observable<Map<number, Axis>>;
20
- yScaleMap: Observable<Map<number, any>>;
21
- xScaleMap: Observable<Map<number, any>>;
18
+ yMap: Observable<Map<number, Axis>>;
19
+ xMap: Observable<Map<number, Axis>>;
22
20
  size: Observable<DOMRect>;
23
21
  visibleRect: Observable<any>;
24
22
  brushScale: Observable<any>;
25
- private _observer;
26
23
  zoomType: typeof ZoomType;
24
+ private _observer;
27
25
  private filterPositionMap;
28
26
  constructor(_svc: ChartService, _cdr: ChangeDetectorRef, _scaleService: ScaleService, _zoomService: ZoomService, _elementRef: ElementRef, _zone: NgZone);
29
27
  ngOnInit(): void;
28
+ ngAfterViewInit(): void;
30
29
  ngOnDestroy(): void;
31
30
  private sumSize;
32
31
  getTranslate(axis?: Axis, size?: DOMRect): Observable<string>;
@@ -5,7 +5,7 @@ import { Observable } from 'rxjs';
5
5
  import { ChartService } from '../../service/chart.service';
6
6
  import { ScaleService } from '../../service/scale.service';
7
7
  import { ZoomService } from '../../service/zoom.service';
8
- import { ClipPointsDirection } from "../../model/enum/clip-points-direction";
8
+ import { ClipPointsDirection } from '../../model/enum/clip-points-direction';
9
9
  import * as i0 from "@angular/core";
10
10
  export declare class LinearSeriesBase<T extends BasePoint> extends SeriesBaseComponent<T> implements OnInit, AfterViewInit, OnDestroy {
11
11
  protected svc: ChartService;
@@ -26,7 +26,7 @@ export declare class LinearSeriesBase<T extends BasePoint> extends SeriesBaseCom
26
26
  ngOnDestroy(): void;
27
27
  ngAfterViewInit(): void;
28
28
  getMarkers(): T[];
29
- getTransform(event: any, scaleX: Map<number, any>, scaleY: Map<number, any>): Pick<BasePoint, 'x' | 'y'>;
29
+ getTransform(event: any, scaleX: any, scaleY: any): Pick<BasePoint, 'x' | 'y'>;
30
30
  static ɵfac: i0.ɵɵFactoryDeclaration<LinearSeriesBase<any>, never>;
31
31
  static ɵcmp: i0.ɵɵComponentDeclaration<LinearSeriesBase<any>, "ng-component", never, {}, {}, never, never, false>;
32
32
  }
@@ -15,7 +15,6 @@ export declare class ScatterSeriesComponent<T extends BasePoint> extends SeriesB
15
15
  transform: Observable<Pick<BasePoint, 'x' | 'y'>>;
16
16
  display: Observable<number>;
17
17
  path: Observable<string>;
18
- svgElement: SVGGeometryElement;
19
18
  x: Observable<any>;
20
19
  y: Observable<any>;
21
20
  constructor(svc: ChartService, cdr: ChangeDetectorRef, scaleService: ScaleService, zoomService: ZoomService, element: ElementRef);
@@ -1,9 +1,9 @@
1
- import { AfterViewInit, OnDestroy, OnInit } from '@angular/core';
1
+ import { OnInit } from '@angular/core';
2
2
  import { Axis } from '../../core/axis/axis';
3
3
  import { Observable } from "rxjs";
4
4
  import { ScaleService } from "../../service/scale.service";
5
5
  import * as i0 from "@angular/core";
6
- export declare class XAxisComponent implements OnInit, OnDestroy, AfterViewInit {
6
+ export declare class XAxisComponent implements OnInit {
7
7
  private scaleService;
8
8
  x: Observable<any>;
9
9
  axis: Axis;
@@ -13,8 +13,6 @@ export declare class XAxisComponent implements OnInit, OnDestroy, AfterViewInit
13
13
  getLabelTransform(): string;
14
14
  ngOnInit(): void;
15
15
  ngOnDestroy(): void;
16
- ngAfterViewInit(): void;
17
- private draw;
18
16
  static ɵfac: i0.ɵɵFactoryDeclaration<XAxisComponent, never>;
19
17
  static ɵcmp: i0.ɵɵComponentDeclaration<XAxisComponent, "[teta-x-axis]", never, { "axis": "axis"; "size": "size"; }, {}, never, never, false>;
20
18
  }
@@ -12,6 +12,7 @@ export declare class Axis {
12
12
  private _ticksValues;
13
13
  private _options;
14
14
  private _originDomain;
15
+ private _scale;
15
16
  private defaultFormatters;
16
17
  private defaultScales;
17
18
  constructor(config: IChartConfig);
@@ -44,9 +45,11 @@ export declare class Axis {
44
45
  linkedSeries(): Array<Series<BasePoint>>;
45
46
  setExtremes(): void;
46
47
  setOriginDomain(domain: Array<any>): void;
48
+ setScale(scale: any): void;
47
49
  private setSelfSize;
48
50
  private setTicksValues;
49
51
  private setOptions;
52
+ get scale(): any;
50
53
  get extremes(): Array<number>;
51
54
  get orientation(): AxisOrientation;
52
55
  get selfSize(): number;
@@ -7,13 +7,13 @@ export declare type TransformStyle = {
7
7
  export declare class ZoomMessage {
8
8
  event?: D3ZoomEvent<any, any> | any;
9
9
  axis?: Axis;
10
- brushDomain?: number[];
10
+ domain?: number[];
11
11
  chartId: string;
12
12
  style?: TransformStyle;
13
13
  constructor(options?: {
14
14
  event: D3ZoomEvent<any, any> | any;
15
15
  axis?: Axis;
16
- brushDomain?: number[];
16
+ domain?: number[];
17
17
  chartId: string;
18
18
  style?: TransformStyle;
19
19
  });
@@ -8,6 +8,7 @@ import { IPointMove } from '../model/i-point-move';
8
8
  import { BasePoint } from '../model/base-point';
9
9
  import { Series } from '../model/series';
10
10
  import { Annotation } from '../model/annotation';
11
+ import { ZoomService } from "./zoom.service";
11
12
  import * as i0 from "@angular/core";
12
13
  export declare class ChartService {
13
14
  id: Observable<string>;
@@ -25,6 +26,7 @@ export declare class ChartService {
25
26
  annotationContextMenu: Observable<IChartEvent<Annotation>>;
26
27
  chartClick: Observable<IChartEvent<BasePoint>>;
27
28
  chartContextMenu: Observable<IChartEvent<BasePoint>>;
29
+ zoomInstance: Observable<ZoomService>;
28
30
  private config$;
29
31
  private size$;
30
32
  private pointerMove$;
@@ -36,6 +38,7 @@ export declare class ChartService {
36
38
  private chartContextMenu$;
37
39
  private annotationEvent$;
38
40
  private annotationMove$;
41
+ private zoomInstance$;
39
42
  private static _hiddenSeriesPostfix;
40
43
  constructor();
41
44
  setConfig(config: IChartConfig): void;
@@ -51,6 +54,7 @@ export declare class ChartService {
51
54
  emitPoint(event: IChartEvent<IPointMove>): void;
52
55
  emitChartClick(event: IChartEvent<BasePoint>): void;
53
56
  emitChartContextMenu(event: IChartEvent<BasePoint>): void;
57
+ emitZoomInstance(event: ZoomService): void;
54
58
  private saveCookie;
55
59
  private restoreLocalStorage;
56
60
  private setDefaults;
@@ -8,6 +8,8 @@ export declare class ScaleService {
8
8
  private zoomService;
9
9
  yAxisMap: Observable<Map<number, Axis>>;
10
10
  xAxisMap: Observable<Map<number, Axis>>;
11
+ yMap: Observable<Map<number, Axis>>;
12
+ xMap: Observable<Map<number, Axis>>;
11
13
  yScaleMap: Observable<Map<number, any>>;
12
14
  xScaleMap: Observable<Map<number, any>>;
13
15
  private transformCacheX;
@@ -26,9 +26,9 @@ export class SeriesBaseComponent {
26
26
  ngOnInit() {
27
27
  }
28
28
  }
29
- SeriesBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: SeriesBaseComponent, deps: [{ token: i1.ChartService }, { token: i0.ChangeDetectorRef }, { token: i2.ScaleService }, { token: i3.ZoomService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
30
- SeriesBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: SeriesBaseComponent, selector: "ng-component", inputs: { config: "config", series: "series" }, ngImport: i0, template: '', isInline: true });
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: SeriesBaseComponent, decorators: [{
29
+ SeriesBaseComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: SeriesBaseComponent, deps: [{ token: i1.ChartService }, { token: i0.ChangeDetectorRef }, { token: i2.ScaleService }, { token: i3.ZoomService }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
30
+ SeriesBaseComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: SeriesBaseComponent, selector: "ng-component", inputs: { config: "config", series: "series" }, ngImport: i0, template: '', isInline: true });
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: SeriesBaseComponent, decorators: [{
32
32
  type: Component,
33
33
  args: [{
34
34
  template: '',
@@ -28,6 +28,7 @@ export class ChartComponent {
28
28
  this.annotationContextMenu = new EventEmitter();
29
29
  this.annotationClick = new EventEmitter();
30
30
  this.annotationMove = new EventEmitter();
31
+ this.zoomServiceInstance = new EventEmitter();
31
32
  this._alive = true;
32
33
  this.svcConfig = this.chartService.config;
33
34
  this.hasSeriesData = this.svcConfig.pipe(map((_) => _.series?.length > 0 && _.series?.some((_) => _.data?.length > 0)));
@@ -108,6 +109,11 @@ export class ChartComponent {
108
109
  .subscribe((_) => {
109
110
  this.annotationMove.emit(_);
110
111
  });
112
+ this.chartService.zoomInstance
113
+ .pipe(takeWhile(() => this._alive))
114
+ .subscribe((_) => {
115
+ this.zoomServiceInstance.emit(_);
116
+ });
111
117
  }
112
118
  ngAfterViewInit() {
113
119
  }
@@ -118,9 +124,9 @@ export class ChartComponent {
118
124
  });
119
125
  }
120
126
  }
121
- ChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ChartComponent, deps: [{ token: i1.ChartService }, { token: i2.ZoomService }, { token: i3.ScaleService }], target: i0.ɵɵFactoryTarget.Component });
122
- ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: ChartComponent, selector: "teta-svg-chart", inputs: { config: "config" }, outputs: { pointerMove: "pointerMove", plotBandsMove: "plotBandsMove", plotBandClick: "plotBandClick", plotBandContextMenu: "plotBandContextMenu", plotLinesMove: "plotLinesMove", pointMove: "pointMove", chartClick: "chartClick", chartContextMenu: "chartContextMenu", annotationContextMenu: "annotationContextMenu", annotationClick: "annotationClick", annotationMove: "annotationMove" }, providers: [ChartService, ZoomService, ScaleService, BrushService], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"{\n hasSeriesData: hasSeriesData | async,\n svcConfig: svcConfig | async\n} as data\">\n <ng-container *ngIf=\"data.hasSeriesData === true else noData\">\n <div class=\"column column_auto\">\n <teta-chart-container class=\"chart-container position-relative\"></teta-chart-container>\n </div>\n <teta-legend *ngIf=\"data.svcConfig.legend?.enable === true\" [series]=\"data.svcConfig.series\"></teta-legend>\n </ng-container>\n</ng-container>\n<ng-template #noData>\n <div class=\"column column_auto align-center justify-content-center\">\n <span class=\"font-body-3 color-text-40\">\u0414\u0430\u043D\u043D\u044B\u0435 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442</span>\n </div>\n</ng-template>\n", styles: [":host{position:relative;display:flex;flex-direction:column;height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.ChartContainerComponent, selector: "teta-chart-container" }, { kind: "component", type: i6.LegendComponent, selector: "teta-legend", inputs: ["series"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
123
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: ChartComponent, decorators: [{
127
+ ChartComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ChartComponent, deps: [{ token: i1.ChartService }, { token: i2.ZoomService }, { token: i3.ScaleService }], target: i0.ɵɵFactoryTarget.Component });
128
+ ChartComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: ChartComponent, selector: "teta-svg-chart", inputs: { config: "config" }, outputs: { pointerMove: "pointerMove", plotBandsMove: "plotBandsMove", plotBandClick: "plotBandClick", plotBandContextMenu: "plotBandContextMenu", plotLinesMove: "plotLinesMove", pointMove: "pointMove", chartClick: "chartClick", chartContextMenu: "chartContextMenu", annotationContextMenu: "annotationContextMenu", annotationClick: "annotationClick", annotationMove: "annotationMove", zoomServiceInstance: "zoomServiceInstance" }, providers: [ChartService, ZoomService, ScaleService, BrushService], usesOnChanges: true, ngImport: i0, template: "<ng-container *ngIf=\"{\n hasSeriesData: hasSeriesData | async,\n svcConfig: svcConfig | async\n} as data\">\n <ng-container *ngIf=\"data.hasSeriesData === true else noData\">\n <div class=\"column column_auto\">\n <teta-chart-container class=\"chart-container position-relative\"></teta-chart-container>\n </div>\n <teta-legend *ngIf=\"data.svcConfig.legend?.enable === true\" [series]=\"data.svcConfig.series\"></teta-legend>\n </ng-container>\n</ng-container>\n<ng-template #noData>\n <div class=\"column column_auto align-center justify-content-center\">\n <span class=\"font-body-3 color-text-40\">\u0414\u0430\u043D\u043D\u044B\u0435 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442</span>\n </div>\n</ng-template>\n", styles: [":host{position:relative;display:flex;flex-direction:column;height:100%;width:100%}\n"], dependencies: [{ kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.ChartContainerComponent, selector: "teta-chart-container" }, { kind: "component", type: i6.LegendComponent, selector: "teta-legend", inputs: ["series"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
129
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: ChartComponent, decorators: [{
124
130
  type: Component,
125
131
  args: [{ selector: 'teta-svg-chart', providers: [ChartService, ZoomService, ScaleService, BrushService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"{\n hasSeriesData: hasSeriesData | async,\n svcConfig: svcConfig | async\n} as data\">\n <ng-container *ngIf=\"data.hasSeriesData === true else noData\">\n <div class=\"column column_auto\">\n <teta-chart-container class=\"chart-container position-relative\"></teta-chart-container>\n </div>\n <teta-legend *ngIf=\"data.svcConfig.legend?.enable === true\" [series]=\"data.svcConfig.series\"></teta-legend>\n </ng-container>\n</ng-container>\n<ng-template #noData>\n <div class=\"column column_auto align-center justify-content-center\">\n <span class=\"font-body-3 color-text-40\">\u0414\u0430\u043D\u043D\u044B\u0435 \u043E\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044E\u0442</span>\n </div>\n</ng-template>\n", styles: [":host{position:relative;display:flex;flex-direction:column;height:100%;width:100%}\n"] }]
126
132
  }], ctorParameters: function () { return [{ type: i1.ChartService }, { type: i2.ZoomService }, { type: i3.ScaleService }]; }, propDecorators: { pointerMove: [{
@@ -145,7 +151,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImpor
145
151
  type: Output
146
152
  }], annotationMove: [{
147
153
  type: Output
154
+ }], zoomServiceInstance: [{
155
+ type: Output
148
156
  }], config: [{
149
157
  type: Input
150
158
  }] } });
151
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0L2NoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC9jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFHdEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFLdEQsT0FBTyxFQUFDLEdBQUcsRUFBYyxTQUFTLEVBQUUsY0FBYyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWhFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7QUFTL0QsTUFBTSxPQUFPLGNBQWM7SUEwQ3pCLFlBQW1CLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLFlBQTBCO1FBRjFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBeEM3QyxnQkFBVyxHQUFtRCxJQUFJLFlBQVksRUFBb0MsQ0FBQztRQUduSCxrQkFBYSxHQUF3QyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUcvRixrQkFBYSxHQUF3QyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUcvRix3QkFBbUIsR0FBd0MsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFHckcsa0JBQWEsR0FBd0MsSUFBSSxZQUFZLEVBQXlCLENBQUM7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aGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDaGFydFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvY2hhcnQuc2VydmljZSc7XG5pbXBvcnQge0lDaGFydENvbmZpZ30gZnJvbSAnLi4vbW9kZWwvaS1jaGFydC1jb25maWcnO1xuaW1wb3J0IHtCYXNlUG9pbnR9IGZyb20gJy4uL21vZGVsL2Jhc2UtcG9pbnQnO1xuaW1wb3J0IHtab29tU2VydmljZX0gZnJvbSAnLi4vc2VydmljZS96b29tLnNlcnZpY2UnO1xuaW1wb3J0IHtTY2FsZVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2Uvc2NhbGUuc2VydmljZSc7XG5pbXBvcnQge0JydXNoU2VydmljZX0gZnJvbSAnLi4vc2VydmljZS9icnVzaC5zZXJ2aWNlJztcbmltcG9ydCB7SUNoYXJ0RXZlbnR9IGZyb20gJy4uL21vZGVsL2ktY2hhcnQtZXZlbnQnO1xuaW1wb3J0IHtQbG90TGluZX0gZnJvbSAnLi4vbW9kZWwvcGxvdC1saW5lJztcbmltcG9ydCB7UGxvdEJhbmR9IGZyb20gJy4uL21vZGVsL3Bsb3QtYmFuZCc7XG5pbXBvcnQge0lQb2ludE1vdmV9IGZyb20gJy4uL21vZGVsL2ktcG9pbnQtbW92ZSc7XG5pbXBvcnQge21hcCwgT2JzZXJ2YWJsZSwgdGFrZVdoaWxlLCB3aXRoTGF0ZXN0RnJvbX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Fubm90YXRpb259IGZyb20gJy4uL21vZGVsL2Fubm90YXRpb24nO1xuaW1wb3J0IHtUb29sdGlwVHJhY2tpbmd9IGZyb20gJy4uL21vZGVsL2VudW0vdG9vbHRpcC10cmFja2luZyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RldGEtc3ZnLWNoYXJ0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NoYXJ0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hhcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbQ2hhcnRTZXJ2aWNlLCBab29tU2VydmljZSwgU2NhbGVTZXJ2aWNlLCBCcnVzaFNlcnZpY2VdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgaGFzU2VyaWVzRGF0YTogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgc3ZjQ29uZmlnOiBPYnNlcnZhYmxlPElDaGFydENvbmZpZz47XG4gIEBPdXRwdXQoKVxuICBwb2ludGVyTW92ZTogRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PE1hcDxudW1iZXIsIG51bWJlcj4+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8TWFwPG51bWJlciwgbnVtYmVyPj4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHBsb3RCYW5kc01vdmU6IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxQbG90QmFuZD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxQbG90QmFuZD4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHBsb3RCYW5kQ2xpY2s6IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxQbG90QmFuZD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxQbG90QmFuZD4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHBsb3RCYW5kQ29udGV4dE1lbnU6IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxQbG90QmFuZD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxQbG90QmFuZD4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHBsb3RMaW5lc01vdmU6IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxQbG90TGluZT4+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxQbG90TGluZT4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHBvaW50TW92ZTogRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PElQb2ludE1vdmU+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8SVBvaW50TW92ZT4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGNoYXJ0Q2xpY2s6IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxCYXNlUG9pbnQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8QmFzZVBvaW50Pj4oKTtcblxuICBAT3V0cHV0KClcbiAgY2hhcnRDb250ZXh0TWVudTogRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PEJhc2VQb2ludD4+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxCYXNlUG9pbnQ+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBhbm5vdGF0aW9uQ29udGV4dE1lbnU6IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxBbm5vdGF0aW9uPj4gPSBuZXcgRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PEFubm90YXRpb24+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBhbm5vdGF0aW9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxBbm5vdGF0aW9uPj4gPSBuZXcgRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PEFubm90YXRpb24+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBhbm5vdGF0aW9uTW92ZTogRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PEFubm90YXRpb24+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8QW5ub3RhdGlvbj4+KCk7XG5cbiAgQElucHV0KCkgc2V0IGNvbmZpZyhjb25maWc6IElDaGFydENvbmZpZykge1xuICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnNldENvbmZpZyhjb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBfYWxpdmUgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBjaGFydFNlcnZpY2U6IENoYXJ0U2VydmljZSxcbiAgICAgICAgICAgICAgcHVibGljIHpvb21TZXJ2aWNlOiBab29tU2VydmljZSxcbiAgICAgICAgICAgICAgcHVibGljIHNjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlKSB7XG4gICAgdGhpcy5zdmNDb25maWcgPSB0aGlzLmNoYXJ0U2VydmljZS5jb25maWc7XG4gICAgdGhpcy5oYXNTZXJpZXNEYXRhID0gdGhpcy5zdmNDb25maWcucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKF8pID0+IF8uc2VyaWVzPy5sZW5ndGggPiAwICYmIF8uc2VyaWVzPy5zb21lKChfKSA9PiBfLmRhdGE/Lmxlbmd0aCA+IDApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnBvaW50ZXJNb3ZlXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zY2FsZVNlcnZpY2UueFNjYWxlTWFwLCB0aGlzLnNjYWxlU2VydmljZS55U2NhbGVNYXAsIHRoaXMuY2hhcnRTZXJ2aWNlLmNvbmZpZylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IFtQb2ludGVyRXZlbnQsIE1hcDxudW1iZXIsIGFueT4sIE1hcDxudW1iZXIsIGFueT4sIElDaGFydENvbmZpZ10pID0+IHtcbiAgICAgICAgY29uc3QgW2V2ZW50LCB4LCB5LCBjb25maWddID0gZGF0YTtcbiAgICAgICAgY29uc3QgdG9vbHRpcFRyYWNraW5nID0gY29uZmlnPy50b29sdGlwPy50cmFja2luZztcbiAgICAgICAgaWYgKHRvb2x0aXBUcmFja2luZyA9PT0gVG9vbHRpcFRyYWNraW5nLnkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICAgICAgICAgIHkuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0LnNldChrZXksIHZhbHVlLmludmVydChldmVudC5vZmZzZXRZKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5wb2ludGVyTW92ZS5lbWl0KHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHRhcmdldDogcmVzdWx0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgICAgICAgICB4LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoa2V5LCB2YWx1ZS5pbnZlcnQoZXZlbnQub2Zmc2V0WCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucG9pbnRlck1vdmUuZW1pdCh7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICB0YXJnZXQ6IHJlc3VsdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnBsb3RCYW5kRXZlbnRcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgIHRoaXMucGxvdEJhbmRzTW92ZS5lbWl0KF8pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0U2VydmljZS5wbG90TGluZU1vdmUucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMucGxvdExpbmVzTW92ZS5lbWl0KF8pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UucG9pbnRNb3ZlLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICB0aGlzLnBvaW50TW92ZS5lbWl0KF8pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UuY2hhcnRDbGlja1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSlcbiAgICAgICkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICB0aGlzLmNoYXJ0Q2xpY2suZW1pdChfKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2hhcnRTZXJ2aWNlLmNoYXJ0Q29udGV4dE1lbnVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpXG4gICAgICApLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgdGhpcy5jaGFydENvbnRleHRNZW51LmVtaXQoXyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0U2VydmljZS5wbG90QmFuZENsaWNrXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgdGhpcy5wbG90QmFuZENsaWNrLmVtaXQoXyk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnBsb3RCYW5kQ29udGV4dE1lbnVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICB0aGlzLnBsb3RCYW5kQ29udGV4dE1lbnUuZW1pdChfKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UuYW5ub3RhdGlvbkNvbnRleHRNZW51XG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uQ29udGV4dE1lbnUuZW1pdChfKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UuYW5ub3RhdGlvbkNsaWNrXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uQ2xpY2suZW1pdChfKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UuYW5ub3RhdGlvbk1vdmVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICB0aGlzLmFubm90YXRpb25Nb3ZlLmVtaXQoXyk7XG4gICAgICB9KTtcblxuXG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9hbGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuem9vbVNlcnZpY2UuYnJvYWRjYXN0U3Vic2NyaXB0aW9uPy5mb3JFYWNoKChzdWIpID0+IHtcbiAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwie1xuICBoYXNTZXJpZXNEYXRhOiBoYXNTZXJpZXNEYXRhIHwgYXN5bmMsXG4gIHN2Y0NvbmZpZzogc3ZjQ29uZmlnIHwgYXN5bmNcbn0gYXMgZGF0YVwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGF0YS5oYXNTZXJpZXNEYXRhID09PSB0cnVlIGVsc2Ugbm9EYXRhXCI+XG4gICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW5fYXV0b1wiPlxuICAgICAgPHRldGEtY2hhcnQtY29udGFpbmVyIGNsYXNzPVwiY2hhcnQtY29udGFpbmVyIHBvc2l0aW9uLXJlbGF0aXZlXCI+PC90ZXRhLWNoYXJ0LWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8dGV0YS1sZWdlbmQgKm5nSWY9XCJkYXRhLnN2Y0NvbmZpZy5sZWdlbmQ/LmVuYWJsZSA9PT0gdHJ1ZVwiIFtzZXJpZXNdPVwiZGF0YS5zdmNDb25maWcuc2VyaWVzXCI+PC90ZXRhLWxlZ2VuZD5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjbm9EYXRhPlxuICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbl9hdXRvIGFsaWduLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJmb250LWJvZHktMyBjb2xvci10ZXh0LTQwXCI+0JTQsNC90L3Ri9C1INC+0YLRgdGD0YLRgdGC0LLRg9GO0YI8L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
159
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NoYXJ0L2NoYXJ0L2NoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3NyYy9jaGFydC9jaGFydC9jaGFydC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFHdEQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFLdEQsT0FBTyxFQUFDLEdBQUcsRUFBYyxTQUFTLEVBQUUsY0FBYyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRWhFLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7QUFTL0QsTUFBTSxPQUFPLGNBQWM7SUE4Q3pCLFlBQW1CLFlBQTBCLEVBQzFCLFdBQXdCLEVBQ3hCLFlBQTBCO1FBRjFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBNUM3QyxnQkFBVyxHQUFtRCxJQUFJLFlBQVksRUFBb0MsQ0FBQztRQUduSCxrQkFBYSxHQUF3QyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUcvRixrQkFBYSxHQUF3QyxJQUFJLFlBQVksRUFBeUIsQ0FBQztRQUcvRix3QkFBbUIsR0FBd0MsSUFBSSxZQUFZLEVBQXlCLENBQUM7UUFHckcsa0JBQWEsR0FBd0MsSUFBSSxZQUFZLEVBQXlCLENBQUM7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LE1BQU07Z0JBSVAsbUJBQW1CO3NCQURsQixNQUFNO2dCQUlQLGFBQWE7c0JBRFosTUFBTTtnQkFJUCxTQUFTO3NCQURSLE1BQU07Z0JBSVAsVUFBVTtzQkFEVCxNQUFNO2dCQUlQLGdCQUFnQjtzQkFEZixNQUFNO2dCQUlQLHFCQUFxQjtzQkFEcEIsTUFBTTtnQkFJUCxlQUFlO3NCQURkLE1BQU07Z0JBSVAsY0FBYztzQkFEYixNQUFNO2dCQUlQLG1CQUFtQjtzQkFEbEIsTUFBTTtnQkFJTSxNQUFNO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q2hhcnRTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHtJQ2hhcnRDb25maWd9IGZyb20gJy4uL21vZGVsL2ktY2hhcnQtY29uZmlnJztcbmltcG9ydCB7QmFzZVBvaW50fSBmcm9tICcuLi9tb2RlbC9iYXNlLXBvaW50JztcbmltcG9ydCB7Wm9vbVNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2Uvem9vbS5zZXJ2aWNlJztcbmltcG9ydCB7U2NhbGVTZXJ2aWNlfSBmcm9tICcuLi9zZXJ2aWNlL3NjYWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtCcnVzaFNlcnZpY2V9IGZyb20gJy4uL3NlcnZpY2UvYnJ1c2guc2VydmljZSc7XG5pbXBvcnQge0lDaGFydEV2ZW50fSBmcm9tICcuLi9tb2RlbC9pLWNoYXJ0LWV2ZW50JztcbmltcG9ydCB7UGxvdExpbmV9IGZyb20gJy4uL21vZGVsL3Bsb3QtbGluZSc7XG5pbXBvcnQge1Bsb3RCYW5kfSBmcm9tICcuLi9tb2RlbC9wbG90LWJhbmQnO1xuaW1wb3J0IHtJUG9pbnRNb3ZlfSBmcm9tICcuLi9tb2RlbC9pLXBvaW50LW1vdmUnO1xuaW1wb3J0IHttYXAsIE9ic2VydmFibGUsIHRha2VXaGlsZSwgd2l0aExhdGVzdEZyb219IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtBbm5vdGF0aW9ufSBmcm9tICcuLi9tb2RlbC9hbm5vdGF0aW9uJztcbmltcG9ydCB7VG9vbHRpcFRyYWNraW5nfSBmcm9tICcuLi9tb2RlbC9lbnVtL3Rvb2x0aXAtdHJhY2tpbmcnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0ZXRhLXN2Zy1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGFydC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NoYXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0NoYXJ0U2VydmljZSwgWm9vbVNlcnZpY2UsIFNjYWxlU2VydmljZSwgQnJ1c2hTZXJ2aWNlXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIGhhc1Nlcmllc0RhdGE6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHN2Y0NvbmZpZzogT2JzZXJ2YWJsZTxJQ2hhcnRDb25maWc+O1xuICBAT3V0cHV0KClcbiAgcG9pbnRlck1vdmU6IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxNYXA8bnVtYmVyLCBudW1iZXI+Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PE1hcDxudW1iZXIsIG51bWJlcj4+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBwbG90QmFuZHNNb3ZlOiBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8UGxvdEJhbmQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8UGxvdEJhbmQ+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBwbG90QmFuZENsaWNrOiBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8UGxvdEJhbmQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8UGxvdEJhbmQ+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBwbG90QmFuZENvbnRleHRNZW51OiBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8UGxvdEJhbmQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8UGxvdEJhbmQ+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBwbG90TGluZXNNb3ZlOiBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8UGxvdExpbmU+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8UGxvdExpbmU+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBwb2ludE1vdmU6IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxJUG9pbnRNb3ZlPj4gPSBuZXcgRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PElQb2ludE1vdmU+PigpO1xuXG4gIEBPdXRwdXQoKVxuICBjaGFydENsaWNrOiBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8QmFzZVBvaW50Pj4gPSBuZXcgRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PEJhc2VQb2ludD4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIGNoYXJ0Q29udGV4dE1lbnU6IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxCYXNlUG9pbnQ+PiA9IG5ldyBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8QmFzZVBvaW50Pj4oKTtcblxuICBAT3V0cHV0KClcbiAgYW5ub3RhdGlvbkNvbnRleHRNZW51OiBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8QW5ub3RhdGlvbj4+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxBbm5vdGF0aW9uPj4oKTtcblxuICBAT3V0cHV0KClcbiAgYW5ub3RhdGlvbkNsaWNrOiBFdmVudEVtaXR0ZXI8SUNoYXJ0RXZlbnQ8QW5ub3RhdGlvbj4+ID0gbmV3IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxBbm5vdGF0aW9uPj4oKTtcblxuICBAT3V0cHV0KClcbiAgYW5ub3RhdGlvbk1vdmU6IEV2ZW50RW1pdHRlcjxJQ2hhcnRFdmVudDxBbm5vdGF0aW9uPj4gPSBuZXcgRXZlbnRFbWl0dGVyPElDaGFydEV2ZW50PEFubm90YXRpb24+PigpO1xuXG4gIEBPdXRwdXQoKVxuICB6b29tU2VydmljZUluc3RhbmNlOiBFdmVudEVtaXR0ZXI8Wm9vbVNlcnZpY2U+ID0gbmV3IEV2ZW50RW1pdHRlcjxab29tU2VydmljZT4oKTtcblxuXG4gIEBJbnB1dCgpIHNldCBjb25maWcoY29uZmlnOiBJQ2hhcnRDb25maWcpIHtcbiAgICB0aGlzLmNoYXJ0U2VydmljZS5zZXRDb25maWcoY29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgX2FsaXZlID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY2hhcnRTZXJ2aWNlOiBDaGFydFNlcnZpY2UsXG4gICAgICAgICAgICAgIHB1YmxpYyB6b29tU2VydmljZTogWm9vbVNlcnZpY2UsXG4gICAgICAgICAgICAgIHB1YmxpYyBzY2FsZVNlcnZpY2U6IFNjYWxlU2VydmljZSkge1xuXG4gICAgdGhpcy5zdmNDb25maWcgPSB0aGlzLmNoYXJ0U2VydmljZS5jb25maWc7XG4gICAgdGhpcy5oYXNTZXJpZXNEYXRhID0gdGhpcy5zdmNDb25maWcucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKF8pID0+IF8uc2VyaWVzPy5sZW5ndGggPiAwICYmIF8uc2VyaWVzPy5zb21lKChfKSA9PiBfLmRhdGE/Lmxlbmd0aCA+IDApXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnBvaW50ZXJNb3ZlXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSxcbiAgICAgICAgd2l0aExhdGVzdEZyb20odGhpcy5zY2FsZVNlcnZpY2UueFNjYWxlTWFwLCB0aGlzLnNjYWxlU2VydmljZS55U2NhbGVNYXAsIHRoaXMuY2hhcnRTZXJ2aWNlLmNvbmZpZylcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IFtQb2ludGVyRXZlbnQsIE1hcDxudW1iZXIsIGFueT4sIE1hcDxudW1iZXIsIGFueT4sIElDaGFydENvbmZpZ10pID0+IHtcbiAgICAgICAgY29uc3QgW2V2ZW50LCB4LCB5LCBjb25maWddID0gZGF0YTtcbiAgICAgICAgY29uc3QgdG9vbHRpcFRyYWNraW5nID0gY29uZmlnPy50b29sdGlwPy50cmFja2luZztcbiAgICAgICAgaWYgKHRvb2x0aXBUcmFja2luZyA9PT0gVG9vbHRpcFRyYWNraW5nLnkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICAgICAgICAgIHkuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgICAgICAgcmVzdWx0LnNldChrZXksIHZhbHVlLmludmVydChldmVudC5vZmZzZXRZKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5wb2ludGVyTW92ZS5lbWl0KHtcbiAgICAgICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgICAgIHRhcmdldDogcmVzdWx0XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgICAgICAgICB4LmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdC5zZXQoa2V5LCB2YWx1ZS5pbnZlcnQoZXZlbnQub2Zmc2V0WCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucG9pbnRlck1vdmUuZW1pdCh7XG4gICAgICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgICAgICB0YXJnZXQ6IHJlc3VsdFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnBsb3RCYW5kRXZlbnRcbiAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgIHRoaXMucGxvdEJhbmRzTW92ZS5lbWl0KF8pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0U2VydmljZS5wbG90TGluZU1vdmUucGlwZSh0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKS5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgIHRoaXMucGxvdExpbmVzTW92ZS5lbWl0KF8pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UucG9pbnRNb3ZlLnBpcGUodGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICB0aGlzLnBvaW50TW92ZS5lbWl0KF8pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UuY2hhcnRDbGlja1xuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSlcbiAgICAgICkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICB0aGlzLmNoYXJ0Q2xpY2suZW1pdChfKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2hhcnRTZXJ2aWNlLmNoYXJ0Q29udGV4dE1lbnVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpXG4gICAgICApLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgdGhpcy5jaGFydENvbnRleHRNZW51LmVtaXQoXyk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmNoYXJ0U2VydmljZS5wbG90QmFuZENsaWNrXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgdGhpcy5wbG90QmFuZENsaWNrLmVtaXQoXyk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnBsb3RCYW5kQ29udGV4dE1lbnVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICB0aGlzLnBsb3RCYW5kQ29udGV4dE1lbnUuZW1pdChfKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UuYW5ub3RhdGlvbkNvbnRleHRNZW51XG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uQ29udGV4dE1lbnUuZW1pdChfKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UuYW5ub3RhdGlvbkNsaWNrXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHRoaXMuX2FsaXZlKSlcbiAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uQ2xpY2suZW1pdChfKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5jaGFydFNlcnZpY2UuYW5ub3RhdGlvbk1vdmVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4gdGhpcy5fYWxpdmUpKVxuICAgICAgLnN1YnNjcmliZSgoXykgPT4ge1xuICAgICAgICB0aGlzLmFubm90YXRpb25Nb3ZlLmVtaXQoXyk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuY2hhcnRTZXJ2aWNlLnpvb21JbnN0YW5jZVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VXaGlsZSgoKSA9PiB0aGlzLl9hbGl2ZSkpXG4gICAgICAuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgIHRoaXMuem9vbVNlcnZpY2VJbnN0YW5jZS5lbWl0KF8pO1xuICAgICAgfSk7XG5cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2FsaXZlID0gZmFsc2U7XG4gICAgdGhpcy56b29tU2VydmljZS5icm9hZGNhc3RTdWJzY3JpcHRpb24/LmZvckVhY2goKHN1YikgPT4ge1xuICAgICAgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ7XG4gIGhhc1Nlcmllc0RhdGE6IGhhc1Nlcmllc0RhdGEgfCBhc3luYyxcbiAgc3ZjQ29uZmlnOiBzdmNDb25maWcgfCBhc3luY1xufSBhcyBkYXRhXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJkYXRhLmhhc1Nlcmllc0RhdGEgPT09IHRydWUgZWxzZSBub0RhdGFcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbl9hdXRvXCI+XG4gICAgICA8dGV0YS1jaGFydC1jb250YWluZXIgY2xhc3M9XCJjaGFydC1jb250YWluZXIgcG9zaXRpb24tcmVsYXRpdmVcIj48L3RldGEtY2hhcnQtY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDx0ZXRhLWxlZ2VuZCAqbmdJZj1cImRhdGEuc3ZjQ29uZmlnLmxlZ2VuZD8uZW5hYmxlID09PSB0cnVlXCIgW3Nlcmllc109XCJkYXRhLnN2Y0NvbmZpZy5zZXJpZXNcIj48L3RldGEtbGVnZW5kPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuPG5nLXRlbXBsYXRlICNub0RhdGE+XG4gIDxkaXYgY2xhc3M9XCJjb2x1bW4gY29sdW1uX2F1dG8gYWxpZ24tY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9keS0zIGNvbG9yLXRleHQtNDBcIj7QlNCw0L3QvdGL0LUg0L7RgtGB0YPRgtGB0YLQstGD0Y7Rgjwvc3Bhbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -10,8 +10,8 @@ export class AnnotationComponent {
10
10
  this.scaleService = scaleService;
11
11
  this.cdr = cdr;
12
12
  this.chartService = chartService;
13
- this.x = this.scaleService.xScaleMap.pipe(map((_) => _.get(this.annotation.xAxisIndex ?? 0)));
14
- this.y = this.scaleService.yScaleMap.pipe(map((_) => _.get(this.annotation.yAxisIndex ?? 0)));
13
+ this.x = this.scaleService.xMap.pipe(map((_) => _.get(this.annotation.xAxisIndex ?? 0).scale));
14
+ this.y = this.scaleService.yMap.pipe(map((_) => _.get(this.annotation.yAxisIndex ?? 0).scale));
15
15
  this.drag = d3.drag();
16
16
  }
17
17
  set annotation(annotation) {
@@ -59,9 +59,9 @@ export class AnnotationComponent {
59
59
  }
60
60
  }
61
61
  }
62
- AnnotationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: AnnotationComponent, deps: [{ token: i1.ScaleService }, { token: i0.ChangeDetectorRef }, { token: i2.ChartService }], target: i0.ɵɵFactoryTarget.Component });
63
- AnnotationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: AnnotationComponent, selector: "[teta-annotation]", inputs: { annotation: "annotation" }, host: { listeners: { "click": "click($event)", "contextmenu": "contextMenu($event)" } }, viewQueries: [{ propertyName: "node", first: true, predicate: ["annotationNode"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"{\n x: x | async,\n y: y | async\n } as data\">\n <svg:circle\n [attr.r]=\"annotation.style?.radius ?? 5\"\n [attr.cx]=\"data.x(annotation.point.x)\"\n [attr.fill]=\"annotation?.style?.fill ?? 'var(--color-text-90)'\"\n [attr.cy]=\"data.y(annotation.point.y)\">\n </svg:circle>\n <svg:line\n [attr.x1]=\"data.x(annotation.point.x)\"\n [attr.y1]=\"data.y(annotation.point.y)\"\n [attr.x2]=\"data.x(annotation.point.x) + (annotation.dx ?? 0)\"\n [attr.y2]=\"data.y(annotation.point.y) + (annotation.dy ?? 0)\"\n [attr.stroke]=\"annotation.style?.stroke ?? 'var(--color-text-90)'\"\n [attr.stroke-width]=\"annotation.style?.strokeWidth ?? 1\"\n [attr.stroke-dasharray]=\"annotation.style?.strokeDasharray ?? null\"\n >\n </svg:line>\n <svg:foreignObject\n class=\"position-absolute\"\n [attr.width]=\"node?.nativeElement.offsetWidth ?? 0\"\n [attr.height]=\"node?.nativeElement.offsetHeight ?? 0\"\n [attr.x]=\"data.x(annotation.point.x) + (annotation.dx ?? 0) - 10\"\n [attr.y]=\"data.y(annotation.point.y) + (annotation.dy ?? 0) - 10\">\n <div\n #annotationNode\n [style.background-color]=\"annotation.style?.fill ?? 'var(--color-text-90)'\"\n [style.cursor]=\"annotation?.draggable ? 'move' : 'default'\"\n [className]=\"'padding-h-2 ' + annotation.className ?? ''\"\n style=\"border-radius: 2px; display: inline-block;\">\n <ng-container *ngIf=\"annotation.template;else default\">\n <ng-container *ngTemplateOutlet=\"annotation.template;context: {$implicit: annotation}\"></ng-container>\n </ng-container>\n </div>\n </svg:foreignObject>\n</ng-container>\n<ng-template #default>\n {{ annotation.note?.label}}\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
64
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: AnnotationComponent, decorators: [{
62
+ AnnotationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: AnnotationComponent, deps: [{ token: i1.ScaleService }, { token: i0.ChangeDetectorRef }, { token: i2.ChartService }], target: i0.ɵɵFactoryTarget.Component });
63
+ AnnotationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.2", type: AnnotationComponent, selector: "[teta-annotation]", inputs: { annotation: "annotation" }, host: { listeners: { "click": "click($event)", "contextmenu": "contextMenu($event)" } }, viewQueries: [{ propertyName: "node", first: true, predicate: ["annotationNode"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"{\n x: x | async,\n y: y | async\n } as data\">\n <svg:circle\n [attr.r]=\"annotation.style?.radius ?? 5\"\n [attr.cx]=\"data.x(annotation.point.x)\"\n [attr.fill]=\"annotation?.style?.fill ?? 'var(--color-text-90)'\"\n [attr.cy]=\"data.y(annotation.point.y)\">\n </svg:circle>\n <svg:line\n [attr.x1]=\"data.x(annotation.point.x)\"\n [attr.y1]=\"data.y(annotation.point.y)\"\n [attr.x2]=\"data.x(annotation.point.x) + (annotation.dx ?? 0)\"\n [attr.y2]=\"data.y(annotation.point.y) + (annotation.dy ?? 0)\"\n [attr.stroke]=\"annotation.style?.stroke ?? 'var(--color-text-90)'\"\n [attr.stroke-width]=\"annotation.style?.strokeWidth ?? 1\"\n [attr.stroke-dasharray]=\"annotation.style?.strokeDasharray ?? null\"\n >\n </svg:line>\n <svg:foreignObject\n class=\"position-absolute\"\n [attr.width]=\"node?.nativeElement.offsetWidth ?? 0\"\n [attr.height]=\"node?.nativeElement.offsetHeight ?? 0\"\n [attr.x]=\"data.x(annotation.point.x) + (annotation.dx ?? 0) - 10\"\n [attr.y]=\"data.y(annotation.point.y) + (annotation.dy ?? 0) - 10\">\n <div\n #annotationNode\n [style.background-color]=\"annotation.style?.fill ?? 'var(--color-text-90)'\"\n [style.cursor]=\"annotation?.draggable ? 'move' : 'default'\"\n [className]=\"'padding-h-2 ' + annotation.className ?? ''\"\n style=\"border-radius: 2px; display: inline-block;\">\n <ng-container *ngIf=\"annotation.template;else default\">\n <ng-container *ngTemplateOutlet=\"annotation.template;context: {$implicit: annotation}\"></ng-container>\n </ng-container>\n </div>\n </svg:foreignObject>\n</ng-container>\n<ng-template #default>\n {{ annotation.note?.label}}\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
64
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.2", ngImport: i0, type: AnnotationComponent, decorators: [{
65
65
  type: Component,
66
66
  args: [{ selector: '[teta-annotation]', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"{\n x: x | async,\n y: y | async\n } as data\">\n <svg:circle\n [attr.r]=\"annotation.style?.radius ?? 5\"\n [attr.cx]=\"data.x(annotation.point.x)\"\n [attr.fill]=\"annotation?.style?.fill ?? 'var(--color-text-90)'\"\n [attr.cy]=\"data.y(annotation.point.y)\">\n </svg:circle>\n <svg:line\n [attr.x1]=\"data.x(annotation.point.x)\"\n [attr.y1]=\"data.y(annotation.point.y)\"\n [attr.x2]=\"data.x(annotation.point.x) + (annotation.dx ?? 0)\"\n [attr.y2]=\"data.y(annotation.point.y) + (annotation.dy ?? 0)\"\n [attr.stroke]=\"annotation.style?.stroke ?? 'var(--color-text-90)'\"\n [attr.stroke-width]=\"annotation.style?.strokeWidth ?? 1\"\n [attr.stroke-dasharray]=\"annotation.style?.strokeDasharray ?? null\"\n >\n </svg:line>\n <svg:foreignObject\n class=\"position-absolute\"\n [attr.width]=\"node?.nativeElement.offsetWidth ?? 0\"\n [attr.height]=\"node?.nativeElement.offsetHeight ?? 0\"\n [attr.x]=\"data.x(annotation.point.x) + (annotation.dx ?? 0) - 10\"\n [attr.y]=\"data.y(annotation.point.y) + (annotation.dy ?? 0) - 10\">\n <div\n #annotationNode\n [style.background-color]=\"annotation.style?.fill ?? 'var(--color-text-90)'\"\n [style.cursor]=\"annotation?.draggable ? 'move' : 'default'\"\n [className]=\"'padding-h-2 ' + annotation.className ?? ''\"\n style=\"border-radius: 2px; display: inline-block;\">\n <ng-container *ngIf=\"annotation.template;else default\">\n <ng-container *ngTemplateOutlet=\"annotation.template;context: {$implicit: annotation}\"></ng-container>\n </ng-container>\n </div>\n </svg:foreignObject>\n</ng-container>\n<ng-template #default>\n {{ annotation.note?.label}}\n</ng-template>\n" }]
67
67
  }], ctorParameters: function () { return [{ type: i1.ScaleService }, { type: i0.ChangeDetectorRef }, { type: i2.ChartService }]; }, propDecorators: { annotation: [{
@@ -76,4 +76,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImpor
76
76
  type: HostListener,
77
77
  args: ['contextmenu', ['$event']]
78
78
  }] } });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3RhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL2Fubm90YXRpb24vYW5ub3RhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL2Fubm90YXRpb24vYW5ub3RhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDRyxZQUFZLEVBQ3hCLEtBQUssRUFDTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFDLEdBQUcsRUFBYSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFVckMsTUFBTSxPQUFPLG1CQUFtQjtJQTJCOUIsWUFDVSxZQUEwQixFQUMxQixHQUFzQixFQUN0QixZQUEwQjtRQUYxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUNsQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUYsSUFBSSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQWpDRCxJQUFhLFVBQVUsQ0FBQyxVQUFzQjtRQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUNJLElBQUksQ0FBQyxJQUFnQjtRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQWtCa0MsS0FBSyxDQUFDLEtBQWlCO1FBQ3hELElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDO1lBQy9CLEtBQUs7WUFDTCxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVU7U0FDeEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUV3QyxXQUFXLENBQUMsS0FBaUI7UUFDcEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7WUFDL0IsS0FBSztZQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsV0FBVztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU8sSUFBSTtRQUVWLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTFELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUU7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsS0FBSyxFQUFFLENBQWEsRUFBRSxFQUFFO2dCQUNoRCxDQUFDLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQztvQkFDbkMsS0FBSztvQkFDTCxNQUFNLEVBQUUsQ0FBQztpQkFDVixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3BEO0lBQ0gsQ0FBQzs7Z0hBdkVVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLGdTQ25CaEMseXVEQXlDQTsyRkR0QmEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNOzhKQUdsQyxVQUFVO3NCQUF0QixLQUFLO2dCQVNGLElBQUk7c0JBRFAsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUM7Z0JBMkJULEtBQUs7c0JBQXZDLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU9RLFdBQVc7c0JBQW5ELFlBQVk7dUJBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsIE9uRGVzdHJveSxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QW5ub3RhdGlvbn0gZnJvbSAnLi4vLi4vbW9kZWwvYW5ub3RhdGlvbic7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5pbXBvcnQge21hcCwgT2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1NjYWxlU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZS9zY2FsZS5zZXJ2aWNlJztcbmltcG9ydCB7Q2hhcnRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL2NoYXJ0LnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbdGV0YS1hbm5vdGF0aW9uXScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbm5vdGF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYW5ub3RhdGlvbi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBbm5vdGF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCkgc2V0IGFubm90YXRpb24oYW5ub3RhdGlvbjogQW5ub3RhdGlvbikge1xuICAgIHRoaXMuX2Fubm90YXRpb24gPSBhbm5vdGF0aW9uO1xuICB9XG5cbiAgZ2V0IGFubm90YXRpb24oKTogQW5ub3RhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Fubm90YXRpb247XG4gIH1cblxuICBAVmlld0NoaWxkKCdhbm5vdGF0aW9uTm9kZScsIHtzdGF0aWM6IGZhbHNlfSlcbiAgc2V0IG5vZGUobm9kZTogRWxlbWVudFJlZikge1xuICAgIHRoaXMuX25vZGUgPSBub2RlO1xuICAgIHRoaXMuaW5pdCgpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGdldCBub2RlKCkge1xuICAgIHJldHVybiB0aGlzLl9ub2RlO1xuICB9XG5cbiAgeDogT2JzZXJ2YWJsZTxhbnk+O1xuICB5OiBPYnNlcnZhYmxlPGFueT47XG5cbiAgcHJpdmF0ZSBkcmFnOiBkMy5EcmFnQmVoYXZpb3I8YW55LCBhbnksIGFueT47XG4gIHByaXZhdGUgX2Fubm90YXRpb246IEFubm90YXRpb247XG4gIHByaXZhdGUgX25vZGU6IEVsZW1lbnRSZWY7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzY2FsZVNlcnZpY2U6IFNjYWxlU2VydmljZSxcbiAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjaGFydFNlcnZpY2U6IENoYXJ0U2VydmljZSkge1xuICAgIHRoaXMueCA9IHRoaXMuc2NhbGVTZXJ2aWNlLnhTY2FsZU1hcC5waXBlKG1hcCgoXykgPT4gXy5nZXQodGhpcy5hbm5vdGF0aW9uLnhBeGlzSW5kZXggPz8gMCkpKTtcbiAgICB0aGlzLnkgPSB0aGlzLnNjYWxlU2VydmljZS55U2NhbGVNYXAucGlwZShtYXAoKF8pID0+IF8uZ2V0KHRoaXMuYW5ub3RhdGlvbi55QXhpc0luZGV4ID8/IDApKSk7XG4gICAgdGhpcy5kcmFnID0gZDMuZHJhZygpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKSBjbGljayhldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuY2hhcnRTZXJ2aWNlLmVtaXRBbm5vdGF0aW9uKHtcbiAgICAgIGV2ZW50LFxuICAgICAgdGFyZ2V0OiB0aGlzLmFubm90YXRpb25cbiAgICB9KTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgWyckZXZlbnQnXSkgY29udGV4dE1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmNoYXJ0U2VydmljZS5lbWl0QW5ub3RhdGlvbih7XG4gICAgICBldmVudCxcbiAgICAgIHRhcmdldDogdGhpcy5hbm5vdGF0aW9uXG4gICAgfSk7XG4gIH1cblxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZHJhZy5vbignZHJhZyBlbmQnLCBudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdCgpIHtcblxuICAgIGQzLnNlbGVjdCh0aGlzLm5vZGUubmF0aXZlRWxlbWVudCkuZGF0dW0odGhpcy5hbm5vdGF0aW9uKTtcblxuICAgIGlmICh0aGlzLmFubm90YXRpb24uZHJhZ2dhYmxlKSB7XG4gICAgICB0aGlzLmRyYWcub24oJ2RyYWcgZW5kJywgKGV2ZW50LCBkOiBBbm5vdGF0aW9uKSA9PiB7XG4gICAgICAgIGQuZHggKz0gZXZlbnQuZHg7XG4gICAgICAgIGQuZHkgKz0gZXZlbnQuZHk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy5jaGFydFNlcnZpY2UuZW1pdE1vdmVBbm5vdGF0aW9uKHtcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICB0YXJnZXQ6IGRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIGQzLnNlbGVjdCh0aGlzLm5vZGUubmF0aXZlRWxlbWVudCkuY2FsbCh0aGlzLmRyYWcpO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIntcbiAgICAgIHg6IHggfCBhc3luYyxcbiAgICAgIHk6IHkgfCBhc3luY1xuICAgIH0gYXMgZGF0YVwiPlxuICA8c3ZnOmNpcmNsZVxuICAgIFthdHRyLnJdPVwiYW5ub3RhdGlvbi5zdHlsZT8ucmFkaXVzID8/IDVcIlxuICAgIFthdHRyLmN4XT1cImRhdGEueChhbm5vdGF0aW9uLnBvaW50LngpXCJcbiAgICBbYXR0ci5maWxsXT1cImFubm90YXRpb24/LnN0eWxlPy5maWxsID8/ICd2YXIoLS1jb2xvci10ZXh0LTkwKSdcIlxuICAgIFthdHRyLmN5XT1cImRhdGEueShhbm5vdGF0aW9uLnBvaW50LnkpXCI+XG4gIDwvc3ZnOmNpcmNsZT5cbiAgPHN2ZzpsaW5lXG4gICAgW2F0dHIueDFdPVwiZGF0YS54KGFubm90YXRpb24ucG9pbnQueClcIlxuICAgIFthdHRyLnkxXT1cImRhdGEueShhbm5vdGF0aW9uLnBvaW50LnkpXCJcbiAgICBbYXR0ci54Ml09XCJkYXRhLngoYW5ub3RhdGlvbi5wb2ludC54KSArIChhbm5vdGF0aW9uLmR4ID8/IDApXCJcbiAgICBbYXR0ci55Ml09XCJkYXRhLnkoYW5ub3RhdGlvbi5wb2ludC55KSArIChhbm5vdGF0aW9uLmR5ID8/IDApXCJcbiAgICBbYXR0ci5zdHJva2VdPVwiYW5ub3RhdGlvbi5zdHlsZT8uc3Ryb2tlID8/ICd2YXIoLS1jb2xvci10ZXh0LTkwKSdcIlxuICAgIFthdHRyLnN0cm9rZS13aWR0aF09XCJhbm5vdGF0aW9uLnN0eWxlPy5zdHJva2VXaWR0aCA/PyAxXCJcbiAgICBbYXR0ci5zdHJva2UtZGFzaGFycmF5XT1cImFubm90YXRpb24uc3R5bGU/LnN0cm9rZURhc2hhcnJheSA/PyBudWxsXCJcbiAgPlxuICA8L3N2ZzpsaW5lPlxuICA8c3ZnOmZvcmVpZ25PYmplY3RcbiAgICBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlXCJcbiAgICBbYXR0ci53aWR0aF09XCJub2RlPy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoID8/IDBcIlxuICAgIFthdHRyLmhlaWdodF09XCJub2RlPy5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCA/PyAwXCJcbiAgICBbYXR0ci54XT1cImRhdGEueChhbm5vdGF0aW9uLnBvaW50LngpICsgKGFubm90YXRpb24uZHggPz8gMCkgLSAxMFwiXG4gICAgW2F0dHIueV09XCJkYXRhLnkoYW5ub3RhdGlvbi5wb2ludC55KSArIChhbm5vdGF0aW9uLmR5ID8/IDApIC0gMTBcIj5cbiAgICA8ZGl2XG4gICAgICAjYW5ub3RhdGlvbk5vZGVcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cImFubm90YXRpb24uc3R5bGU/LmZpbGwgPz8gJ3ZhcigtLWNvbG9yLXRleHQtOTApJ1wiXG4gICAgICBbc3R5bGUuY3Vyc29yXT1cImFubm90YXRpb24/LmRyYWdnYWJsZSA/ICdtb3ZlJyA6ICdkZWZhdWx0J1wiXG4gICAgICBbY2xhc3NOYW1lXT1cIidwYWRkaW5nLWgtMiAnICsgYW5ub3RhdGlvbi5jbGFzc05hbWUgPz8gJydcIlxuICAgICAgc3R5bGU9XCJib3JkZXItcmFkaXVzOiAycHg7IGRpc3BsYXk6IGlubGluZS1ibG9jaztcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhbm5vdGF0aW9uLnRlbXBsYXRlO2Vsc2UgZGVmYXVsdFwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYW5ub3RhdGlvbi50ZW1wbGF0ZTtjb250ZXh0OiB7JGltcGxpY2l0OiBhbm5vdGF0aW9ufVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvc3ZnOmZvcmVpZ25PYmplY3Q+XG48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdD5cbiAge3sgYW5ub3RhdGlvbi5ub3RlPy5sYWJlbH19XG48L25nLXRlbXBsYXRlPlxuIl19
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ub3RhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL2Fubm90YXRpb24vYW5ub3RhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9zcmMvY2hhcnQvY2hhcnQtY29udGFpbmVyL2Fubm90YXRpb24vYW5ub3RhdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDRyxZQUFZLEVBQ3hCLEtBQUssRUFDTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFDekIsT0FBTyxFQUFDLEdBQUcsRUFBYSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFVckMsTUFBTSxPQUFPLG1CQUFtQjtJQTJCOUIsWUFDVSxZQUEwQixFQUMxQixHQUFzQixFQUN0QixZQUEwQjtRQUYxQixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUNsQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUMvRixJQUFJLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBakNELElBQWEsVUFBVSxDQUFDLFVBQXNCO1FBQzVDLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQ0ksSUFBSSxDQUFDLElBQWdCO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBa0JrQyxLQUFLLENBQUMsS0FBaUI7UUFDeEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUM7WUFDL0IsS0FBSztZQUNMLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVTtTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRXdDLFdBQVcsQ0FBQyxLQUFpQjtRQUNwRSxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQztZQUMvQixLQUFLO1lBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1NBQ3hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxJQUFJO1FBRVYsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFMUQsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRTtZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBYSxFQUFFLEVBQUU7Z0JBQ2hELENBQUMsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDO29CQUNuQyxLQUFLO29CQUNMLE1BQU0sRUFBRSxDQUFDO2lCQUNWLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEQ7SUFDSCxDQUFDOztnSEF2RVUsbUJBQW1CO29HQUFuQixtQkFBbUIsZ1NDbkJoQyx5dURBeUNBOzJGRHRCYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsbUJBQW1CLG1CQUdaLHVCQUF1QixDQUFDLE1BQU07OEpBR2xDLFVBQVU7c0JBQXRCLEtBQUs7Z0JBU0YsSUFBSTtzQkFEUCxTQUFTO3VCQUFDLGdCQUFnQixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztnQkEyQlQsS0FBSztzQkFBdkMsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBT1EsV0FBVztzQkFBbkQsWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLFxuICBJbnB1dCwgT25EZXN0cm95LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBbm5vdGF0aW9ufSBmcm9tICcuLi8uLi9tb2RlbC9hbm5vdGF0aW9uJztcbmltcG9ydCAqIGFzIGQzIGZyb20gJ2QzJztcbmltcG9ydCB7bWFwLCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7U2NhbGVTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlL3NjYWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtDaGFydFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2UvY2hhcnQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1t0ZXRhLWFubm90YXRpb25dJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Fubm90YXRpb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9hbm5vdGF0aW9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFubm90YXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBzZXQgYW5ub3RhdGlvbihhbm5vdGF0aW9uOiBBbm5vdGF0aW9uKSB7XG4gICAgdGhpcy5fYW5ub3RhdGlvbiA9IGFubm90YXRpb247XG4gIH1cblxuICBnZXQgYW5ub3RhdGlvbigpOiBBbm5vdGF0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fYW5ub3RhdGlvbjtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ2Fubm90YXRpb25Ob2RlJywge3N0YXRpYzogZmFsc2V9KVxuICBzZXQgbm9kZShub2RlOiBFbGVtZW50UmVmKSB7XG4gICAgdGhpcy5fbm9kZSA9IG5vZGU7XG4gICAgdGhpcy5pbml0KCk7XG4gICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgZ2V0IG5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25vZGU7XG4gIH1cblxuICB4OiBPYnNlcnZhYmxlPGFueT47XG4gIHk6IE9ic2VydmFibGU8YW55PjtcblxuICBwcml2YXRlIGRyYWc6IGQzLkRyYWdCZWhhdmlvcjxhbnksIGFueSwgYW55PjtcbiAgcHJpdmF0ZSBfYW5ub3RhdGlvbjogQW5ub3RhdGlvbjtcbiAgcHJpdmF0ZSBfbm9kZTogRWxlbWVudFJlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNjYWxlU2VydmljZTogU2NhbGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNoYXJ0U2VydmljZTogQ2hhcnRTZXJ2aWNlKSB7XG4gICAgdGhpcy54ID0gdGhpcy5zY2FsZVNlcnZpY2UueE1hcC5waXBlKG1hcCgoXykgPT4gXy5nZXQodGhpcy5hbm5vdGF0aW9uLnhBeGlzSW5kZXggPz8gMCkuc2NhbGUpKTtcbiAgICB0aGlzLnkgPSB0aGlzLnNjYWxlU2VydmljZS55TWFwLnBpcGUobWFwKChfKSA9PiBfLmdldCh0aGlzLmFubm90YXRpb24ueUF4aXNJbmRleCA/PyAwKS5zY2FsZSkpO1xuICAgIHRoaXMuZHJhZyA9IGQzLmRyYWcoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSkgY2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmNoYXJ0U2VydmljZS5lbWl0QW5ub3RhdGlvbih7XG4gICAgICBldmVudCxcbiAgICAgIHRhcmdldDogdGhpcy5hbm5vdGF0aW9uXG4gICAgfSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdjb250ZXh0bWVudScsIFsnJGV2ZW50J10pIGNvbnRleHRNZW51KGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5jaGFydFNlcnZpY2UuZW1pdEFubm90YXRpb24oe1xuICAgICAgZXZlbnQsXG4gICAgICB0YXJnZXQ6IHRoaXMuYW5ub3RhdGlvblxuICAgIH0pO1xuICB9XG5cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmRyYWcub24oJ2RyYWcgZW5kJywgbnVsbCk7XG4gIH1cblxuICBwcml2YXRlIGluaXQoKSB7XG5cbiAgICBkMy5zZWxlY3QodGhpcy5ub2RlLm5hdGl2ZUVsZW1lbnQpLmRhdHVtKHRoaXMuYW5ub3RhdGlvbik7XG5cbiAgICBpZiAodGhpcy5hbm5vdGF0aW9uLmRyYWdnYWJsZSkge1xuICAgICAgdGhpcy5kcmFnLm9uKCdkcmFnIGVuZCcsIChldmVudCwgZDogQW5ub3RhdGlvbikgPT4ge1xuICAgICAgICBkLmR4ICs9IGV2ZW50LmR4O1xuICAgICAgICBkLmR5ICs9IGV2ZW50LmR5O1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIHRoaXMuY2hhcnRTZXJ2aWNlLmVtaXRNb3ZlQW5ub3RhdGlvbih7XG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgdGFyZ2V0OiBkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBkMy5zZWxlY3QodGhpcy5ub2RlLm5hdGl2ZUVsZW1lbnQpLmNhbGwodGhpcy5kcmFnKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJ7XG4gICAgICB4OiB4IHwgYXN5bmMsXG4gICAgICB5OiB5IHwgYXN5bmNcbiAgICB9IGFzIGRhdGFcIj5cbiAgPHN2ZzpjaXJjbGVcbiAgICBbYXR0ci5yXT1cImFubm90YXRpb24uc3R5bGU/LnJhZGl1cyA/PyA1XCJcbiAgICBbYXR0ci5jeF09XCJkYXRhLngoYW5ub3RhdGlvbi5wb2ludC54KVwiXG4gICAgW2F0dHIuZmlsbF09XCJhbm5vdGF0aW9uPy5zdHlsZT8uZmlsbCA/PyAndmFyKC0tY29sb3ItdGV4dC05MCknXCJcbiAgICBbYXR0ci5jeV09XCJkYXRhLnkoYW5ub3RhdGlvbi5wb2ludC55KVwiPlxuICA8L3N2ZzpjaXJjbGU+XG4gIDxzdmc6bGluZVxuICAgIFthdHRyLngxXT1cImRhdGEueChhbm5vdGF0aW9uLnBvaW50LngpXCJcbiAgICBbYXR0ci55MV09XCJkYXRhLnkoYW5ub3RhdGlvbi5wb2ludC55KVwiXG4gICAgW2F0dHIueDJdPVwiZGF0YS54KGFubm90YXRpb24ucG9pbnQueCkgKyAoYW5ub3RhdGlvbi5keCA/PyAwKVwiXG4gICAgW2F0dHIueTJdPVwiZGF0YS55KGFubm90YXRpb24ucG9pbnQueSkgKyAoYW5ub3RhdGlvbi5keSA/PyAwKVwiXG4gICAgW2F0dHIuc3Ryb2tlXT1cImFubm90YXRpb24uc3R5bGU/LnN0cm9rZSA/PyAndmFyKC0tY29sb3ItdGV4dC05MCknXCJcbiAgICBbYXR0ci5zdHJva2Utd2lkdGhdPVwiYW5ub3RhdGlvbi5zdHlsZT8uc3Ryb2tlV2lkdGggPz8gMVwiXG4gICAgW2F0dHIuc3Ryb2tlLWRhc2hhcnJheV09XCJhbm5vdGF0aW9uLnN0eWxlPy5zdHJva2VEYXNoYXJyYXkgPz8gbnVsbFwiXG4gID5cbiAgPC9zdmc6bGluZT5cbiAgPHN2Zzpmb3JlaWduT2JqZWN0XG4gICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiXG4gICAgW2F0dHIud2lkdGhdPVwibm9kZT8ubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCA/PyAwXCJcbiAgICBbYXR0ci5oZWlnaHRdPVwibm9kZT8ubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgPz8gMFwiXG4gICAgW2F0dHIueF09XCJkYXRhLngoYW5ub3RhdGlvbi5wb2ludC54KSArIChhbm5vdGF0aW9uLmR4ID8/IDApIC0gMTBcIlxuICAgIFthdHRyLnldPVwiZGF0YS55KGFubm90YXRpb24ucG9pbnQueSkgKyAoYW5ub3RhdGlvbi5keSA/PyAwKSAtIDEwXCI+XG4gICAgPGRpdlxuICAgICAgI2Fubm90YXRpb25Ob2RlXG4gICAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJhbm5vdGF0aW9uLnN0eWxlPy5maWxsID8/ICd2YXIoLS1jb2xvci10ZXh0LTkwKSdcIlxuICAgICAgW3N0eWxlLmN1cnNvcl09XCJhbm5vdGF0aW9uPy5kcmFnZ2FibGUgPyAnbW92ZScgOiAnZGVmYXVsdCdcIlxuICAgICAgW2NsYXNzTmFtZV09XCIncGFkZGluZy1oLTIgJyArIGFubm90YXRpb24uY2xhc3NOYW1lID8/ICcnXCJcbiAgICAgIHN0eWxlPVwiYm9yZGVyLXJhZGl1czogMnB4OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYW5ub3RhdGlvbi50ZW1wbGF0ZTtlbHNlIGRlZmF1bHRcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFubm90YXRpb24udGVtcGxhdGU7Y29udGV4dDogeyRpbXBsaWNpdDogYW5ub3RhdGlvbn1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L3N2Zzpmb3JlaWduT2JqZWN0PlxuPC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI2RlZmF1bHQ+XG4gIHt7IGFubm90YXRpb24ubm90ZT8ubGFiZWx9fVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==