raain-app 1.2.2 → 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.
@@ -1,5 +1,5 @@
1
1
  import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
2
- import { ConfigurationElementInput, ElementsFactory } from 'raain-ui';
2
+ import { ChartScaleColors, ConfigurationElementInput, ElementsFactory, Tools } from 'raain-ui';
3
3
  import { XYType } from '../xytype';
4
4
  import * as i0 from "@angular/core";
5
5
  import * as i1 from "@ionic/angular";
@@ -9,6 +9,7 @@ export class RaainConfigurationComponent {
9
9
  this.changedPoints = new EventEmitter();
10
10
  this.minPoint = { x: 0, y: 0 };
11
11
  this.maxPoint = { x: 300, y: 100 };
12
+ this.logStyle = false;
12
13
  this.onSizeChanged = () => {
13
14
  };
14
15
  this.onDrag = (e) => {
@@ -41,10 +42,47 @@ export class RaainConfigurationComponent {
41
42
  return;
42
43
  }
43
44
  this.created = true;
45
+ let inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, false, [], this.onDrag);
46
+ if (this.logStyle) {
47
+ inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, true, [
48
+ {
49
+ color: Tools.getTransparency(ChartScaleColors['0.4'], 0.8),
50
+ yStart: Math.log10(0.1),
51
+ yEnd: Math.log10(0.4)
52
+ },
53
+ { color: Tools.getTransparency(ChartScaleColors['1'], 0.8), yStart: Math.log10(0.4), yEnd: Math.log10(1) },
54
+ { color: Tools.getTransparency(ChartScaleColors['3'], 0.8), yStart: Math.log10(1), yEnd: Math.log10(3) },
55
+ { color: Tools.getTransparency(ChartScaleColors['10'], 0.8), yStart: Math.log10(3), yEnd: Math.log10(10) },
56
+ { color: Tools.getTransparency(ChartScaleColors['20'], 0.8), yStart: Math.log10(10), yEnd: Math.log10(20) },
57
+ { color: Tools.getTransparency(ChartScaleColors['30'], 0.8), yStart: Math.log10(20), yEnd: Math.log10(30) },
58
+ { color: Tools.getTransparency(ChartScaleColors['50'], 0.8), yStart: Math.log10(30), yEnd: Math.log10(50) },
59
+ { color: Tools.getTransparency(ChartScaleColors['100'], 0.8), yStart: Math.log10(50), yEnd: Math.log10(100) },
60
+ {
61
+ color: Tools.getTransparency(ChartScaleColors['150'], 0.8),
62
+ yStart: Math.log10(100),
63
+ yEnd: Math.log10(150)
64
+ },
65
+ {
66
+ color: Tools.getTransparency(ChartScaleColors['200'], 0.8),
67
+ yStart: Math.log10(150),
68
+ yEnd: Math.log10(200)
69
+ },
70
+ {
71
+ color: Tools.getTransparency(ChartScaleColors['250'], 0.8),
72
+ yStart: Math.log10(200),
73
+ yEnd: Math.log10(250)
74
+ },
75
+ {
76
+ color: Tools.getTransparency(ChartScaleColors['300'], 0.8),
77
+ yStart: Math.log10(250),
78
+ yEnd: Math.log10(300)
79
+ },
80
+ ], this.onDrag);
81
+ }
44
82
  this.ngZone.runOutsideAngular(() => {
45
83
  setTimeout(() => {
46
84
  const factory = new ElementsFactory();
47
- this.configurationElement = factory.createConfiguration(this.canvasElement.nativeElement, new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, this.onDrag));
85
+ this.configurationElement = factory.createConfiguration(this.canvasElement.nativeElement, inputs);
48
86
  }, 10);
49
87
  });
50
88
  }
@@ -73,7 +111,7 @@ export class RaainConfigurationComponent {
73
111
  }
74
112
  }
75
113
  RaainConfigurationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainConfigurationComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
76
- RaainConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainConfigurationComponent, selector: "raain-configuration", inputs: { points: "points", currentHeight: "currentHeight", currentWidth: "currentWidth", minPoint: "minPoint", maxPoint: "maxPoint" }, outputs: { changedPoints: "changedPoints" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"currentWidth\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n <ion-button (click)=\"reset(2)\" size=\"small\">reset 2</ion-button>\n <ion-button (click)=\"reset(4)\" size=\"small\">reset 4</ion-button>\n <ion-button (click)=\"reset(6)\" size=\"small\">reset 6</ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }] });
114
+ RaainConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainConfigurationComponent, selector: "raain-configuration", inputs: { points: "points", currentHeight: "currentHeight", currentWidth: "currentWidth", minPoint: "minPoint", maxPoint: "maxPoint", logStyle: "logStyle" }, outputs: { changedPoints: "changedPoints" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"currentWidth\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n <ion-button (click)=\"reset(2)\" size=\"small\">reset 2</ion-button>\n <ion-button (click)=\"reset(4)\" size=\"small\">reset 4</ion-button>\n <ion-button (click)=\"reset(6)\" size=\"small\">reset 6</ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }] });
77
115
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainConfigurationComponent, decorators: [{
78
116
  type: Component,
79
117
  args: [{ selector: 'raain-configuration', template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"currentWidth\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n <ion-button (click)=\"reset(2)\" size=\"small\">reset 2</ion-button>\n <ion-button (click)=\"reset(4)\" size=\"small\">reset 4</ion-button>\n <ion-button (click)=\"reset(6)\" size=\"small\">reset 6</ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"] }]
@@ -89,6 +127,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
89
127
  type: Input
90
128
  }], maxPoint: [{
91
129
  type: Input
130
+ }], logStyle: [{
131
+ type: Input
92
132
  }], canvasElement: [{
93
133
  type: ViewChild,
94
134
  args: ['canvasElement']
@@ -96,4 +136,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
96
136
  type: HostListener,
97
137
  args: ['window:resize', ['$event']]
98
138
  }] } });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tY29uZmlndXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9yYWFpbi1jb25maWd1cmF0aW9uL3JhYWluLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcmFhaW4tY29uZmlndXJhdGlvbi9yYWFpbi1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXVCLHlCQUF5QixFQUFFLGVBQWUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUMxRixPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDOzs7QUFPakMsTUFBTSxPQUFPLDJCQUEyQjtJQTRCdEMsWUFBb0IsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUF0QjNCLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQVM3QyxhQUFRLEdBQVcsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQztRQUdoQyxhQUFRLEdBQVcsRUFBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUMsQ0FBQztRQVd6QyxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsRUFBRTtRQUMxQixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQTtJQUNILENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFD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RyxDQUFDLEdBQUcsRUFBRTtZQUNuQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzt5SEE3R1UsMkJBQTJCOzZHQUEzQiwyQkFBMkIsbWJDdEJ4QyxpZkFZQTs0RkRVYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0UscUJBQXFCOzZGQU94QixNQUFNO3NCQURaLEtBQUs7Z0JBSUMsYUFBYTtzQkFEbkIsTUFBTTtnQkFJQSxhQUFhO3NCQURuQixLQUFLO2dCQUlDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLFFBQVE7c0JBRGQsS0FBSztnQkFJSSxhQUFhO3NCQUR0QixTQUFTO3VCQUFDLGVBQWU7Z0JBd0NsQixRQUFRO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb25maWd1cmF0aW9uRWxlbWVudCwgQ29uZmlndXJhdGlvbkVsZW1lbnRJbnB1dCwgRWxlbWVudHNGYWN0b3J5fSBmcm9tICdyYWFpbi11aSc7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi4veHl0eXBlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmFhaW4tY29uZmlndXJhdGlvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9yYWFpbi1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmFhaW4tY29uZmlndXJhdGlvbi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSYWFpbkNvbmZpZ3VyYXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkLCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHBvaW50czogWFlUeXBlW107XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBjaGFuZ2VkUG9pbnRzID0gbmV3IEV2ZW50RW1pdHRlcjxYWVR5cGVbXT4oKTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY3VycmVudEhlaWdodDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXJyZW50V2lkdGg6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWluUG9pbnQ6IFhZVHlwZSA9IHt4OiAwLCB5OiAwfTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgbWF4UG9pbnQ6IFhZVHlwZSA9IHt4OiAzMDAsIHk6IDEwMH07XG5cbiAgQFZpZXdDaGlsZCgnY2FudmFzRWxlbWVudCcpXG4gIHByb3RlY3RlZCBjYW52YXNFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgY29uZmlndXJhdGlvbkVsZW1lbnQ6IENvbmZpZ3VyYXRpb25FbGVtZW50O1xuICBwcml2YXRlIG9uRHJhZztcbiAgcHJpdmF0ZSBvblNpemVDaGFuZ2VkO1xuICBwcml2YXRlIGNyZWF0ZWQ7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSkge1xuICAgIHRoaXMub25TaXplQ2hhbmdlZCA9ICgpID0+IHtcbiAgICB9O1xuICAgIHRoaXMub25EcmFnID0gKGU6IGFueSkgPT4ge1xuICAgICAgdGhpcy5jaGFuZ2VkUG9pbnRzLmVtaXQodGhpcy5wb2ludHMpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2UoY2hhbmdlcyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGUoKTtcbiAgfVxuXG4gIGFzeW5jIHJlc2V0KGNvdW50ID0gNCkge1xuICAgIGNvbnN0IHBvaW50cyA9IFtdO1xuICAgIGZvciAobGV0IGMgPSAwOyBjIDwgY291bnQ7IGMrKykge1xuICAgICAgcG9pbnRzLnB1c2gobmV3IFhZVHlwZSgoYyArIDEpICogMTAsIChjICsgMSkgKiAxMCkpO1xuICAgIH1cbiAgICB0aGlzLnBvaW50cyA9IHBvaW50cztcblxuICAgIGF3YWl0IHRoaXMuZGVsZXRlKCk7XG4gICAgdGhpcy5jcmVhdGUoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbJyRldmVudCddKVxuICBwcml2YXRlIG9uUmVzaXplKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvLyB0aGlzLnVwZGF0ZU1hcFNpemUoKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlKCkge1xuICAgIGlmICh0aGlzLmNyZWF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVkID0gdHJ1ZTtcblxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEVsZW1lbnRzRmFjdG9yeSgpO1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25FbGVtZW50ID0gZmFjdG9yeS5jcmVhdGVDb25maWd1cmF0aW9uKHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgIG5ldyBDb25maWd1cmF0aW9uRWxlbWVudElucHV0KHRoaXMucG9pbnRzLFxuICAgICAgICAgICAgdGhpcy5taW5Qb2ludCxcbiAgICAgICAgICAgIHRoaXMubWF4UG9pbnQsXG4gICAgICAgICAgICB0aGlzLm9uRHJhZykpO1xuICAgICAgfSwgMTApO1xuICAgIH0pO1xuXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGRlbGV0ZSgpIHtcbiAgICBhd2FpdCB0aGlzLmNvbmZpZ3VyYXRpb25FbGVtZW50Py5jaGFydD8uZGVzdHJveSgpO1xuICAgIHRoaXMuY3JlYXRlZCA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjaGFuZ2UoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vIGNvbnNvbGUubG9nKCdjaGFuZ2VkJywgY2hhbmdlcyk7XG4gICAgYXdhaXQgdGhpcy5kZWxldGUoKTtcbiAgICB0aGlzLmNyZWF0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXBTaXplKCk6IHZvaWQge1xuXG4gICAgY29uc3QgbWFwRGl2V2lkdGggPSB0aGlzLmNhbnZhc0VsZW1lbnQubmF0aXZlRWxlbWVudC5wYXJlbnROb2RlPy5wYXJlbnROb2RlWydjbGllbnRXaWR0aCddO1xuICAgIGNvbnN0IHBhZGRpbmcgPSAyMDtcbiAgICBsZXQgY3VycmVudFdpZHRoID0gbWFwRGl2V2lkdGggfHxcbiAgICAgICh3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggfHwgZG9jdW1lbnQuYm9keS5jbGllbnRXaWR0aCk7XG4gICAgY29uc3QgY3VycmVudEhlaWdodCA9IHRoaXMuY3VycmVudEhlaWdodCB8fFxuICAgICAgKHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IHx8IGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0KTtcbiAgICBjdXJyZW50V2lkdGggLT0gcGFkZGluZztcbiAgICB0aGlzLmN1cnJlbnRXaWR0aCA9IGN1cnJlbnRXaWR0aDtcbiAgICB0aGlzLmN1cnJlbnRIZWlnaHQgPSBjdXJyZW50SGVpZ2h0O1xuXG4gICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgIHRoaXMub25TaXplQ2hhbmdlZCgpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8aW9uLWdyaWQ+XG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sIGlkPVwiY29sLWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiBbc3R5bGUuaGVpZ2h0LnB4XT1cImN1cnJlbnRIZWlnaHRcIiBbc3R5bGUud2lkdGgucHhdPVwiY3VycmVudFdpZHRoXCIgaWQ9XCJjYW52YXMtY29udGFpbmVyXCI+XG4gICAgICAgIDxjYW52YXMgI2NhbnZhc0VsZW1lbnQ+PC9jYW52YXM+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJyZXNldCgyKVwiIHNpemU9XCJzbWFsbFwiPnJlc2V0IDI8L2lvbi1idXR0b24+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwicmVzZXQoNClcIiBzaXplPVwic21hbGxcIj5yZXNldCA0PC9pb24tYnV0dG9uPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDYpXCIgc2l6ZT1cInNtYWxsXCI+cmVzZXQgNjwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cbjwvaW9uLWdyaWQ+XG4iXX0=
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tY29uZmlndXJhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9yYWFpbi1jb25maWd1cmF0aW9uL3JhYWluLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcmFhaW4tY29uZmlndXJhdGlvbi9yYWFpbi1jb25maWd1cmF0aW9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsZ0JBQWdCLEVBQXdCLHlCQUF5QixFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDbkgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQzs7O0FBT2pDLE1BQU0sT0FBTywyQkFBMkI7SUErQnRDLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBekIzQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFTN0MsYUFBUSxHQUFXLEVBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUM7UUFHaEMsYUFBUSxHQUFXLEVBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFDLENBQUM7UUFHcEMsYUFBUSxHQUFHLEtBQUssQ0FBQztRQVd0QixJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsRUFBRTtRQUMxQixDQUFDLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBTSxFQUFFLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQTtJQUNILENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxXQUFXLENBQUMsT0FBc0I7UUFDdkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QixDQUFDO0lBRU0sV0FBVztRQUNoQixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUM7UUFDbkIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBRXJCLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBR08sUUFBUSxDQUFDLEtBQVU7UUFDekIsd0JBQXdCO0lBQzFCLENBQUM7SUFFTyxNQUFNO1FBQ1osSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLE9BQU87U0FDUjtRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBRXBCLElBQUksTUFBTSxHQUFHLElBQUkseUJBQXlCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFDcEQsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLENBQUMsUUFBUSxFQUNiLEtBQUssRUFBRSxFQUFFLEVBQ1QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2YsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE1BQU0sR0FBRyxJQUFJLHlCQUF5QixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQ2hELElBQUksQ0FBQyxRQUFRLEVBQ2IsSUFBSSxDQUFDLFFBQVEsRUFDYixJQUFJLEVBQ0o7Z0JBQ0U7b0JBQ0UsS0FBSyxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDO29CQUMxRCxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7b0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztpQkFDdEI7Z0JBQ0QsRUFBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQztnQkFDeEcsRUFBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBQztnQkFDdEcsRUFBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBQztnQkFDeEcsRUFBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBQztnQkFDekcsRUFBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBQztnQkFDekcsRUFBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBQztnQkFDekcsRUFBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBQztnQkFDM0c7b0JBQ0UsS0FBSyxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDO29CQUMxRCxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7b0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztpQkFDdEI7Z0JBQ0Q7b0JBQ0UsS0FBSyxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDO29CQUMxRCxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxH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RGQsS0FBSztnQkFJSSxhQUFhO3NCQUR0QixTQUFTO3VCQUFDLGVBQWU7Z0JBd0NsQixRQUFRO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDaGFydFNjYWxlQ29sb3JzLCBDb25maWd1cmF0aW9uRWxlbWVudCwgQ29uZmlndXJhdGlvbkVsZW1lbnRJbnB1dCwgRWxlbWVudHNGYWN0b3J5LCBUb29sc30gZnJvbSAncmFhaW4tdWknO1xuaW1wb3J0IHtYWVR5cGV9IGZyb20gJy4uL3h5dHlwZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3JhYWluLWNvbmZpZ3VyYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcmFhaW4tY29uZmlndXJhdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhYWluLWNvbmZpZ3VyYXRpb24uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUmFhaW5Db25maWd1cmF0aW9uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwb2ludHM6IFhZVHlwZVtdO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2hhbmdlZFBvaW50cyA9IG5ldyBFdmVudEVtaXR0ZXI8WFlUeXBlW10+KCk7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGN1cnJlbnRIZWlnaHQ6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY3VycmVudFdpZHRoOiBudW1iZXI7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1pblBvaW50OiBYWVR5cGUgPSB7eDogMCwgeTogMH07XG5cbiAgQElucHV0KClcbiAgcHVibGljIG1heFBvaW50OiBYWVR5cGUgPSB7eDogMzAwLCB5OiAxMDB9O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsb2dTdHlsZSA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ2NhbnZhc0VsZW1lbnQnKVxuICBwcm90ZWN0ZWQgY2FudmFzRWxlbWVudDogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIGNvbmZpZ3VyYXRpb25FbGVtZW50OiBDb25maWd1cmF0aW9uRWxlbWVudDtcbiAgcHJpdmF0ZSBvbkRyYWc7XG4gIHByaXZhdGUgb25TaXplQ2hhbmdlZDtcbiAgcHJpdmF0ZSBjcmVhdGVkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHtcbiAgICB0aGlzLm9uU2l6ZUNoYW5nZWQgPSAoKSA9PiB7XG4gICAgfTtcbiAgICB0aGlzLm9uRHJhZyA9IChlOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuY2hhbmdlZFBvaW50cy5lbWl0KHRoaXMucG9pbnRzKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlKGNoYW5nZXMpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVsZXRlKCk7XG4gIH1cblxuICBhc3luYyByZXNldChjb3VudCA9IDQpIHtcbiAgICBjb25zdCBwb2ludHMgPSBbXTtcbiAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNvdW50OyBjKyspIHtcbiAgICAgIHBvaW50cy5wdXNoKG5ldyBYWVR5cGUoKGMgKyAxKSAqIDEwLCAoYyArIDEpICogMTApKTtcbiAgICB9XG4gICAgdGhpcy5wb2ludHMgPSBwb2ludHM7XG5cbiAgICBhd2FpdCB0aGlzLmRlbGV0ZSgpO1xuICAgIHRoaXMuY3JlYXRlKCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgWyckZXZlbnQnXSlcbiAgcHJpdmF0ZSBvblJlc2l6ZShldmVudDogYW55KTogdm9pZCB7XG4gICAgLy8gdGhpcy51cGRhdGVNYXBTaXplKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZSgpIHtcbiAgICBpZiAodGhpcy5jcmVhdGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY3JlYXRlZCA9IHRydWU7XG5cbiAgICBsZXQgaW5wdXRzID0gbmV3IENvbmZpZ3VyYXRpb25FbGVtZW50SW5wdXQodGhpcy5wb2ludHMsXG4gICAgICB0aGlzLm1pblBvaW50LFxuICAgICAgdGhpcy5tYXhQb2ludCxcbiAgICAgIGZhbHNlLCBbXSxcbiAgICAgIHRoaXMub25EcmFnKTtcbiAgICBpZiAodGhpcy5sb2dTdHlsZSkge1xuICAgICAgaW5wdXRzID0gbmV3IENvbmZpZ3VyYXRpb25FbGVtZW50SW5wdXQodGhpcy5wb2ludHMsXG4gICAgICAgIHRoaXMubWluUG9pbnQsXG4gICAgICAgIHRoaXMubWF4UG9pbnQsXG4gICAgICAgIHRydWUsXG4gICAgICAgIFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzAuNCddLCAwLjgpLFxuICAgICAgICAgICAgeVN0YXJ0OiBNYXRoLmxvZzEwKDAuMSksXG4gICAgICAgICAgICB5RW5kOiBNYXRoLmxvZzEwKDAuNClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzEnXSwgMC44KSwgeVN0YXJ0OiBNYXRoLmxvZzEwKDAuNCksIHlFbmQ6IE1hdGgubG9nMTAoMSl9LFxuICAgICAgICAgIHtjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzMnXSwgMC44KSwgeVN0YXJ0OiBNYXRoLmxvZzEwKDEpLCB5RW5kOiBNYXRoLmxvZzEwKDMpfSxcbiAgICAgICAgICB7Y29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWycxMCddLCAwLjgpLCB5U3RhcnQ6IE1hdGgubG9nMTAoMyksIHlFbmQ6IE1hdGgubG9nMTAoMTApfSxcbiAgICAgICAgICB7Y29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWycyMCddLCAwLjgpLCB5U3RhcnQ6IE1hdGgubG9nMTAoMTApLCB5RW5kOiBNYXRoLmxvZzEwKDIwKX0sXG4gICAgICAgICAge2NvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMzAnXSwgMC44KSwgeVN0YXJ0OiBNYXRoLmxvZzEwKDIwKSwgeUVuZDogTWF0aC5sb2cxMCgzMCl9LFxuICAgICAgICAgIHtjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzUwJ10sIDAuOCksIHlTdGFydDogTWF0aC5sb2cxMCgzMCksIHlFbmQ6IE1hdGgubG9nMTAoNTApfSxcbiAgICAgICAgICB7Y29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWycxMDAnXSwgMC44KSwgeVN0YXJ0OiBNYXRoLmxvZzEwKDUwKSwgeUVuZDogTWF0aC5sb2cxMCgxMDApfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzE1MCddLCAwLjgpLFxuICAgICAgICAgICAgeVN0YXJ0OiBNYXRoLmxvZzEwKDEwMCksXG4gICAgICAgICAgICB5RW5kOiBNYXRoLmxvZzEwKDE1MClcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvbG9yOiBUb29scy5nZXRUcmFuc3BhcmVuY3koQ2hhcnRTY2FsZUNvbG9yc1snMjAwJ10sIDAuOCksXG4gICAgICAgICAgICB5U3RhcnQ6IE1hdGgubG9nMTAoMTUwKSxcbiAgICAgICAgICAgIHlFbmQ6IE1hdGgubG9nMTAoMjAwKVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY29sb3I6IFRvb2xzLmdldFRyYW5zcGFyZW5jeShDaGFydFNjYWxlQ29sb3JzWycyNTAnXSwgMC44KSxcbiAgICAgICAgICAgIHlTdGFydDogTWF0aC5sb2cxMCgyMDApLFxuICAgICAgICAgICAgeUVuZDogTWF0aC5sb2cxMCgyNTApXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2xvcjogVG9vbHMuZ2V0VHJhbnNwYXJlbmN5KENoYXJ0U2NhbGVDb2xvcnNbJzMwMCddLCAwLjgpLFxuICAgICAgICAgICAgeVN0YXJ0OiBNYXRoLmxvZzEwKDI1MCksXG4gICAgICAgICAgICB5RW5kOiBNYXRoLmxvZzEwKDMwMClcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICB0aGlzLm9uRHJhZyk7XG4gICAgfVxuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgRWxlbWVudHNGYWN0b3J5KCk7XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbkVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZUNvbmZpZ3VyYXRpb24odGhpcy5jYW52YXNFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsIGlucHV0cyk7XG4gICAgICB9LCAxMCk7XG4gICAgfSk7XG5cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZGVsZXRlKCkge1xuICAgIGF3YWl0IHRoaXMuY29uZmlndXJhdGlvbkVsZW1lbnQ/LmNoYXJ0Py5kZXN0cm95KCk7XG4gICAgdGhpcy5jcmVhdGVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoYW5nZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ2NoYW5nZWQnLCBjaGFuZ2VzKTtcbiAgICBhd2FpdCB0aGlzLmRlbGV0ZSgpO1xuICAgIHRoaXMuY3JlYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1hcFNpemUoKTogdm9pZCB7XG5cbiAgICBjb25zdCBtYXBEaXZXaWR0aCA9IHRoaXMuY2FudmFzRWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU/LnBhcmVudE5vZGVbJ2NsaWVudFdpZHRoJ107XG4gICAgY29uc3QgcGFkZGluZyA9IDIwO1xuICAgIGxldCBjdXJyZW50V2lkdGggPSBtYXBEaXZXaWR0aCB8fFxuICAgICAgKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKTtcbiAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gdGhpcy5jdXJyZW50SGVpZ2h0IHx8XG4gICAgICAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQpO1xuICAgIGN1cnJlbnRXaWR0aCAtPSBwYWRkaW5nO1xuICAgIHRoaXMuY3VycmVudFdpZHRoID0gY3VycmVudFdpZHRoO1xuICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5vblNpemVDaGFuZ2VkKCk7XG4gICAgfSk7XG4gIH1cbn1cbiIsIjxpb24tZ3JpZD5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgaWQ9XCJjb2wtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2IFtzdHlsZS5oZWlnaHQucHhdPVwiY3VycmVudEhlaWdodFwiIFtzdHlsZS53aWR0aC5weF09XCJjdXJyZW50V2lkdGhcIiBpZD1cImNhbnZhcy1jb250YWluZXJcIj5cbiAgICAgICAgPGNhbnZhcyAjY2FudmFzRWxlbWVudD48L2NhbnZhcz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInJlc2V0KDIpXCIgc2l6ZT1cInNtYWxsXCI+cmVzZXQgMjwvaW9uLWJ1dHRvbj5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJyZXNldCg0KVwiIHNpemU9XCJzbWFsbFwiPnJlc2V0IDQ8L2lvbi1idXR0b24+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwicmVzZXQoNilcIiBzaXplPVwic21hbGxcIj5yZXNldCA2PC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuPC9pb24tZ3JpZD5cbiJdfQ==
@@ -267,10 +267,10 @@ export class RaainMapComponent {
267
267
  }
268
268
  }
269
269
  RaainMapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainMapComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
270
- RaainMapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainMapComponent, selector: "raain-map", inputs: { coordinates: "coordinates", markers: "markers", timeframeContainers: "timeframeContainers", autoplay: "autoplay", showMarkers: "showMarkers", currentHeight: "currentHeight", timeframeDates: "timeframeDates", defaultDate: "defaultDate", sumValues: "sumValues", sumFn: "sumFn" }, outputs: { selectedMarker: "selectedMarker", changedDate: "changedDate" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "mapDivRef", first: true, predicate: ["primaryMap"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-sm=\"3\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <!--\n <ion-button (click)=\"play()\" [hidden]=\"autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"play\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n -->\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n\n <!--\n <ion-col id=\"map-timeframe\" size-sm=\"4\">\n <ion-select (ionChange)=\"showTimeframe()\" [(ngModel)]=\"timeframeNameToShow\" [value]=\"timeframeNameToShow\"\n interface=\"popover\" placeholder=\"Name\">\n <ion-select-option *ngFor=\"let name of possibleNames\" [value]=\"name\">{{ name }}</ion-select-option>\n </ion-select>\n </ion-col> -->\n\n <ion-col class=\"ion-text-start\" id=\"map-date\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col>\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"></ion-toggle>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <div id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\">\n <ion-img id=\"map-range\" src=\"assets/r2r_range.svg\"/>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative;width:800px;height:400px}#map-div{position:absolute;inset:0}#map-range{height:400px}#map-buttons{min-width:180px}ion-select{width:100%;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonSelect, selector: "ion-select", inputs: ["cancelText", "compareWith", "disabled", "interface", "interfaceOptions", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "value"] }, { kind: "component", type: i3.IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: i3.IonToggle, selector: "ion-toggle", inputs: ["checked", "color", "disabled", "enableOnOffLabels", "mode", "name", "value"] }, { kind: "directive", type: i3.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i3.SelectValueAccessor, selector: "ion-range, ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
270
+ RaainMapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainMapComponent, selector: "raain-map", inputs: { coordinates: "coordinates", markers: "markers", timeframeContainers: "timeframeContainers", autoplay: "autoplay", showMarkers: "showMarkers", currentHeight: "currentHeight", timeframeDates: "timeframeDates", defaultDate: "defaultDate", sumValues: "sumValues", sumFn: "sumFn" }, outputs: { selectedMarker: "selectedMarker", changedDate: "changedDate" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "mapDivRef", first: true, predicate: ["primaryMap"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-xs=\"2\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <!--\n <ion-button (click)=\"play()\" [hidden]=\"autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"play\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n -->\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n\n <!--\n <ion-col id=\"map-timeframe\" size-sm=\"4\">\n <ion-select (ionChange)=\"showTimeframe()\" [(ngModel)]=\"timeframeNameToShow\" [value]=\"timeframeNameToShow\"\n interface=\"popover\" placeholder=\"Name\">\n <ion-select-option *ngFor=\"let name of possibleNames\" [value]=\"name\">{{ name }}</ion-select-option>\n </ion-select>\n </ion-col> -->\n\n <ion-col class=\"ion-text-start\" id=\"map-date\" size-xs=\"5\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col class=\"ion-hide-md-down\">\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"></ion-toggle>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <div id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\">\n <ion-img id=\"map-range\" src=\"assets/r2r_range.svg\"/>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative;width:800px;height:400px}#map-div{position:absolute;inset:0}#map-range{height:400px}#map-buttons{min-width:100px}ion-select{width:100%;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i3.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonSelect, selector: "ion-select", inputs: ["cancelText", "compareWith", "disabled", "interface", "interfaceOptions", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "value"] }, { kind: "component", type: i3.IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: i3.IonToggle, selector: "ion-toggle", inputs: ["checked", "color", "disabled", "enableOnOffLabels", "mode", "name", "value"] }, { kind: "directive", type: i3.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i3.SelectValueAccessor, selector: "ion-range, ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
271
271
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainMapComponent, decorators: [{
272
272
  type: Component,
273
- args: [{ selector: 'raain-map', template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-sm=\"3\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <!--\n <ion-button (click)=\"play()\" [hidden]=\"autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"play\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n -->\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n\n <!--\n <ion-col id=\"map-timeframe\" size-sm=\"4\">\n <ion-select (ionChange)=\"showTimeframe()\" [(ngModel)]=\"timeframeNameToShow\" [value]=\"timeframeNameToShow\"\n interface=\"popover\" placeholder=\"Name\">\n <ion-select-option *ngFor=\"let name of possibleNames\" [value]=\"name\">{{ name }}</ion-select-option>\n </ion-select>\n </ion-col> -->\n\n <ion-col class=\"ion-text-start\" id=\"map-date\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col>\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"></ion-toggle>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <div id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\">\n <ion-img id=\"map-range\" src=\"assets/r2r_range.svg\"/>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative;width:800px;height:400px}#map-div{position:absolute;inset:0}#map-range{height:400px}#map-buttons{min-width:180px}ion-select{width:100%;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}\n"] }]
273
+ args: [{ selector: 'raain-map', template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-xs=\"2\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <!--\n <ion-button (click)=\"play()\" [hidden]=\"autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"play\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n -->\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n\n <!--\n <ion-col id=\"map-timeframe\" size-sm=\"4\">\n <ion-select (ionChange)=\"showTimeframe()\" [(ngModel)]=\"timeframeNameToShow\" [value]=\"timeframeNameToShow\"\n interface=\"popover\" placeholder=\"Name\">\n <ion-select-option *ngFor=\"let name of possibleNames\" [value]=\"name\">{{ name }}</ion-select-option>\n </ion-select>\n </ion-col> -->\n\n <ion-col class=\"ion-text-start\" id=\"map-date\" size-xs=\"5\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col class=\"ion-hide-md-down\">\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"></ion-toggle>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <div id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\">\n <ion-img id=\"map-range\" src=\"assets/r2r_range.svg\"/>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative;width:800px;height:400px}#map-div{position:absolute;inset:0}#map-range{height:400px}#map-buttons{min-width:100px}ion-select{width:100%;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}\n"] }]
274
274
  }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { coordinates: [{
275
275
  type: Input
276
276
  }], markers: [{
@@ -302,4 +302,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
302
302
  type: HostListener,
303
303
  args: ['window:resize', ['$event']]
304
304
  }] } });
305
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3JhYWluLW1hcC9yYWFpbi1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcmFhaW4tbWFwL3JhYWluLW1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFvQixlQUFlLEVBQThCLFNBQVMsRUFBc0IsTUFBTSxVQUFVLENBQUM7Ozs7O0FBT3hILE1BQU0sT0FBTyxpQkFBaUI7SUFnRTVCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBaEQzQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBTW5CLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBVzVCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUcvQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUEyQjVDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVkLGNBQWM7UUFDZCxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUM5QyxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLCtEQUErRDtRQUM1RixNQUFNLFNBQVMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzQixNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUs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QU87c0JBRGIsS0FBSztnQkFVQyxtQkFBbUI7c0JBRHpCLEtBQUs7Z0JBR0MsUUFBUTtzQkFEZCxLQUFLO2dCQUdDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBR0MsYUFBYTtzQkFEbkIsS0FBSztnQkFLQyxjQUFjO3NCQURwQixLQUFLO2dCQUdDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsU0FBUztzQkFEZixLQUFLO2dCQUdDLEtBQUs7c0JBRFgsS0FBSztnQkFLQyxjQUFjO3NCQURwQixNQUFNO2dCQUlBLFdBQVc7c0JBRGpCLE1BQU07Z0JBYUcsU0FBUztzQkFEbEIsU0FBUzt1QkFBQyxZQUFZO2dCQTRTZixRQUFRO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJY29uT3B0aW9uc30gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQge0NhcnRlc2lhbk1hcFZhbHVlLCBFbGVtZW50c0ZhY3RvcnksIEZyYW1lQ29udGFpbmVyLCBNYXBFbGVtZW50LCBNYXBMYXRMbmcsIFRpbWVmcmFtZUNvbnRhaW5lcnN9IGZyb20gJ3JhYWluLXVpJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmFhaW4tbWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhYWluLW1hcC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhYWluLW1hcC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSYWFpbk1hcENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29vcmRpbmF0ZXM6IE1hcExhdExuZztcbiAgQElucHV0KClcbiAgcHVibGljIG1hcmtlcnM6IHtcbiAgICBnYXVnZXM6IE1hcExhdExuZ1tdLFxuICAgIHNlbGVjdGVkR2F1Z2VzOiBNYXBMYXRMbmdbXSxcbiAgICBwaXhlbHM6IE1hcExhdExuZ1tdLFxuICAgIGJvcmRlcnM6IE1hcExhdExuZ1tdLFxuICAgIGdhdWdlc0luQ29tcGFyZTogTWFwTGF0TG5nW10sXG4gICAgcGl4ZWxzU29sdXRpb246IE1hcExhdExuZ1tdLFxuICB9O1xuICBASW5wdXQoKVxuICBwdWJsaWMgdGltZWZyYW1lQ29udGFpbmVyczogVGltZWZyYW1lQ29udGFpbmVycztcbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9wbGF5ID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93TWFya2VycyA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXJyZW50SGVpZ2h0OiBudW1iZXI7XG4gIHB1YmxpYyBjdXJyZW50V2lkdGg6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdGltZWZyYW1lRGF0ZXM6IERhdGVbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGVmYXVsdERhdGU6IERhdGU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHN1bVZhbHVlczogYW55O1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3VtRm46IGFueTtcbiAgcHVibGljIHN1bVJlc3VsdDogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRNYXJrZXIgPSBuZXcgRXZlbnRFbWl0dGVyPE1hcExhdExuZz4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNoYW5nZWREYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gIHB1YmxpYyBtY1RleHQ7XG4gIHB1YmxpYyBuZXh0RGF0ZTogRGF0ZTtcbiAgcHVibGljIHBvc3NpYmxlTmFtZXM6IHN0cmluZ1tdO1xuICBwdWJsaWMgcG9zc2libGVEYXRlczogRGF0ZVtdO1xuICBwdWJsaWMgZGF0ZVRvU2hvdzogRGF0ZTtcbiAgcHVibGljIGRhdGVUb1Nob3dBc1N0cmluZzogc3RyaW5nO1xuICBwdWJsaWMgdGltZWZyYW1lTmFtZVRvU2hvdzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgY3VycmVudEZyYW1lQ29udGFpbmVyOiBGcmFtZUNvbnRhaW5lcjtcblxuICBAVmlld0NoaWxkKCdwcmltYXJ5TWFwJylcbiAgcHJvdGVjdGVkIG1hcERpdlJlZjogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIG1hcEVsZW1lbnQ6IE1hcEVsZW1lbnQ7XG4gIHByaXZhdGUgb25TaXplQ2hhbmdlZDtcbiAgcHJpdmF0ZSBjcmVhdGVkO1xuICBwcml2YXRlIGljb25PcHRpb25zOiB7XG4gICAgZ2F1Z2VzOiBJY29uT3B0aW9ucyxcbiAgICBzZWxlY3RlZEdhdWdlczogSWNvbk9wdGlvbnMsXG4gICAgcGl4ZWxzOiBJY29uT3B0aW9ucyxcbiAgICBib3JkZXJzOiBJY29uT3B0aW9ucyxcbiAgICBnYXVnZXNJbkNvbXBhcmU6IEljb25PcHRpb25zLFxuICAgIHBpeGVsc1NvbHV0aW9uOiBJY29uT3B0aW9ucyxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7XG4gICAgdGhpcy5kZWxldGUoKTtcblxuICAgIC8vIHNoYWRvd1VybCA/XG4gICAgY29uc3QgaWNvblNpemUgPSBbNDAsIDQwXTsgLy8gc2l6ZSBvZiB0aGUgaWNvblxuICAgIGNvbnN0IGljb25BbmNob3IgPSBbMjAsIDIwXTsgLy8gcG9pbnQgb2YgdGhlIGljb24gd2hpY2ggd2lsbCBjb3JyZXNwb25kIHRvIG1hcmtlcidzIGxvY2F0aW9uXG4gICAgY29uc3QgcGl4ZWxTaXplID0gWzQxLCA0MV07XG4gICAgY29uc3QgcGl4ZWxBbmNob3IgPSBbMjAsIDIwXTtcbiAgICBjb25zdCBwb3B1cEFuY2hvciA9IFswLCAtMjBdOyAvLyBwb2ludCBmcm9tIHdoaWNoIHRoZSBwb3B1cCBzaG91bGQgb3BlbiByZWxhdGl2ZSB0byB0aGUgaWNvbkFuY2hvclxuICAgIHRoaXMuaWNvbk9wdGlvbnMgPSB7XG4gICAgICBnYXVnZXM6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcGx1dmlvLnBuZycsIGljb25TaXplLCBpY29uQW5jaG9yLCBwb3B1cEFuY2hvcn0sXG4gICAgICBnYXVnZXNJbkNvbXBhcmU6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcGx1dmlvLWRpYWcucG5nJywgaWNvblNpemUsIGljb25BbmNob3IsIHBvcHVwQW5jaG9yfSxcbiAgICAgIHNlbGVjdGVkR2F1Z2VzOiB7aWNvblVybDogJy4vYXNzZXRzL21hcHMvbWFya2VyLXBsdXZpby1kaWFnLXNlbGVjdC5wbmcnLCBpY29uU2l6ZSwgaWNvbkFuY2hvciwgcG9wdXBBbmNob3J9LFxuICAgICAgcGl4ZWxzOiB7aWNvblVybDogJy4vYXNzZXRzL21hcHMvbWFya2VyLXJhaW4ucG5nJywgaWNvblNpemUsIGljb25BbmNob3IsIHBvcHVwQW5jaG9yfSxcbiAgICAgIHBpeGVsc1NvbHV0aW9uOiB7aWNvblVybDogJy4vYXNzZXRzL21hcHMvbWFya2VyLXJhaW4yLnBuZycsIGljb25TaXplOiBwaXhlbFNpemUsIGljb25BbmNob3I6IHBpeGVsQW5jaG9yLCBwb3B1cEFuY2hvcn0sXG4gICAgICBib3JkZXJzOiB7aWNvblVybDogJy4vYXNzZXRzL21hcHMvbWFya2VyLXNoYWRvdy5wbmcnLCBpY29uU2l6ZSwgaWNvbkFuY2hvciwgcG9wdXBBbmNob3J9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlKGNoYW5nZXMpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2hvd1RpbWVmcmFtZShmb3JjZSA9IGZhbHNlKSB7XG5cbiAgICAvLyBjb25zdCB7ZnJhbWVDb250YWluZXIsIGxheWVyfSA9IHRoaXMudGltZWZyYW1lQ29udGFpbmVycy5zaG93VGltZWZyYW1lKHRoaXMudGltZWZyYW1lTmFtZVRvU2hvdyk7XG4gICAgLy8gdGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIgPSBmcmFtZUNvbnRhaW5lcjtcblxuICAgIGlmICghdGhpcy5kYXRlVG9TaG93QXNTdHJpbmdcbiAgICAgIHx8ICghZm9yY2UgJiYgbmV3IERhdGUodGhpcy5kYXRlVG9TaG93QXNTdHJpbmcpLmdldFRpbWUoKSA9PT0gdGhpcy5kYXRlVG9TaG93Py5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRlVG9TaG93ID0gbmV3IERhdGUodGhpcy5kYXRlVG9TaG93QXNTdHJpbmcpO1xuICAgIHRoaXMuY2hhbmdlZERhdGUuZW1pdCh0aGlzLmRhdGVUb1Nob3cpO1xuICB9XG5cbiAgcHVibGljIG5leHQoKSB7XG4gICAgaWYgKCF0aGlzLnBvc3NpYmxlRGF0ZXMgfHwgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXREYXRlVG9TaG93SW5kZXgoKTtcbiAgICB0aGlzLmRhdGVUb1Nob3cgPSAoaW5kZXggKyAxKSA8IHRoaXMucG9zc2libGVEYXRlcy5sZW5ndGggPyB0aGlzLnBvc3NpYmxlRGF0ZXNbaW5kZXggKyAxXSA6IHRoaXMucG9zc2libGVEYXRlc1swXTtcbiAgICB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyA9IHRoaXMuZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuXG4gICAgdGhpcy5zaG93VGltZWZyYW1lKHRydWUpO1xuICAgIGlmICh0aGlzLmF1dG9wbGF5KSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLm5leHQoKSwgMjAwMCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByZXZpb3VzKCkge1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGlmICghdGhpcy5wb3NzaWJsZURhdGVzIHx8IHRoaXMucG9zc2libGVEYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RGF0ZVRvU2hvd0luZGV4KCk7XG4gICAgdGhpcy5kYXRlVG9TaG93ID0gaW5kZXggPiAwID8gdGhpcy5wb3NzaWJsZURhdGVzW2luZGV4IC0gMV0gOiB0aGlzLnBvc3NpYmxlRGF0ZXNbMF07XG4gICAgdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcgPSB0aGlzLmRhdGVUb1Nob3cudG9JU09TdHJpbmcoKTtcblxuICAgIHRoaXMuc2hvd1RpbWVmcmFtZSh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBwbGF5KCkge1xuICAgIHRoaXMuYXV0b3BsYXkgPSB0cnVlO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIHN0b3AoKSB7XG4gICAgdGhpcy5hdXRvcGxheSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVNob3dNYXJrZXJzKCkge1xuICAgIGlmICghdGhpcy5tYXBFbGVtZW50Py5tYXJrZXJzTGF5ZXIgfHwgIXRoaXMubWFwRWxlbWVudD8ubWFwTGVhZmxldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dNYXJrZXJzKSB7XG4gICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLmFkZFRvTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5yZW1vdmVGcm9tTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZSgpIHtcblxuICAgIGNvbnN0IGNyZWF0ZWQgPSB0aGlzLmNyZWF0ZWQ7XG4gICAgaWYgKGNyZWF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVkID0gdHJ1ZTtcbiAgICBjb25zdCBtYXJrZXJzID0gW1xuICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuZ2F1Z2VzLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuZ2F1Z2VzfSxcbiAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnNlbGVjdGVkR2F1Z2VzLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuc2VsZWN0ZWRHYXVnZXN9LFxuICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuZ2F1Z2VzSW5Db21wYXJlLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuZ2F1Z2VzSW5Db21wYXJlfSxcbiAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnBpeGVscywgaWNvbnNPcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnBpeGVsc30sXG4gICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5waXhlbHNTb2x1dGlvbiwgaWNvbnNPcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnBpeGVsc1NvbHV0aW9ufSxcbiAgICAgIC8vIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLmJvcmRlcnMsIGljb25zT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5ib3JkZXJzfSxcbiAgICBdO1xuXG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBFbGVtZW50c0ZhY3RvcnkodGhpcy5jb29yZGluYXRlcywgdHJ1ZSk7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgY29uc3QgY3JlYXRlZE91dHNpZGUgPSB0aGlzLmNyZWF0ZWQ7XG4gICAgICAgIGlmICghY3JlYXRlZE91dHNpZGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1hcEVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZU1hcCh0aGlzLm1hcERpdlJlZi5uYXRpdmVFbGVtZW50LCB7dGltZWZyYW1lQ29udGFpbmVyczogdGhpcy50aW1lZnJhbWVDb250YWluZXJzLCBtYXJrZXJzfSk7XG5cbiAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQ/Lm9uKCdtb3VzZW1vdmUnLCAoZXZ0KSA9PiB0aGlzLm9uTWFwTW91c2VNb3ZlKGV2dCkpO1xuICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc1Byb2R1Y2VkPy5mb3JFYWNoKG0gPT4gbS5vbignY2xpY2snLCBldnQgPT4gdGhpcy5vbk1hcENsaWNrKGV2dCkpKTtcbiAgICAgICAgdGhpcy5vblNpemVDaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXI/LnNldEN1cnJlbnRXaWR0aCh0aGlzLmN1cnJlbnRXaWR0aCk7XG4gICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllcj8uc2V0Q3VycmVudEhlaWdodCh0aGlzLmN1cnJlbnRIZWlnaHQpO1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5jb21wb3NpdGVMYXllcj8uc2V0Q3VycmVudFdpZHRoKHRoaXMuY3VycmVudFdpZHRoKTtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQuY29tcG9zaXRlTGF5ZXI/LnNldEN1cnJlbnRIZWlnaHQodGhpcy5jdXJyZW50SGVpZ2h0KTtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldD8uaW52YWxpZGF0ZVNpemUoe2FuaW1hdGU6IHRydWV9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZU1hcFNpemUoKTtcbiAgICAgICAgLy8gdGhpcy50aW1lZnJhbWVOYW1lVG9TaG93ID0gdGhpcy5wb3NzaWJsZU5hbWVzLmxlbmd0aCA+IDAgPyB0aGlzLnBvc3NpYmxlTmFtZXNbMF0gOiBudWxsO1xuICAgICAgICAvLyB0aGlzLnRvZ2dsZUhpZGVNYXJrZXJzKCF0aGlzLmhpZGVNYXJrZXJzKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VOYXZpZ2F0aW9uKHRoaXMuZGVmYXVsdERhdGUpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9KTtcblxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGUoKSB7XG4gICAgdGhpcy5tYXBFbGVtZW50Py5tYXBMZWFmbGV0Py5yZW1vdmUoKTtcbiAgICB0aGlzLm1hcEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tY1RleHQgPSAnJztcbiAgICB0aGlzLm5leHREYXRlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9zc2libGVOYW1lcyA9IFtdO1xuICAgIHRoaXMucG9zc2libGVEYXRlcyA9IFtdO1xuICAgIHRoaXMudGltZWZyYW1lTmFtZVRvU2hvdyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRhdGVUb1Nob3cgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vblNpemVDaGFuZ2VkID0gKCkgPT4ge1xuICAgIH07XG4gICAgdGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIgPSBudWxsO1xuXG4gICAgdGhpcy5jcmVhdGVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ21hcCBjaGFuZ2VzJywgY2hhbmdlcyk7XG5cbiAgICBsZXQgcG9zc2libGVOZXdEZWZhdWx0RGF0ZTogRGF0ZTtcbiAgICBpZiAoY2hhbmdlcy5kZWZhdWx0RGF0ZSkge1xuICAgICAgaWYgKG5ldyBEYXRlKGNoYW5nZXMuZGVmYXVsdERhdGUuY3VycmVudFZhbHVlKS5nZXRUaW1lKCkgPT09IG5ldyBEYXRlKGNoYW5nZXMuZGVmYXVsdERhdGUucHJldmlvdXNWYWx1ZSkuZ2V0VGltZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHBvc3NpYmxlTmV3RGVmYXVsdERhdGUgPSB0aGlzLmRlZmF1bHREYXRlO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLm1hcmtlcnMgJiYgdGhpcy5tYXBFbGVtZW50Py5tYXJrZXJzTGF5ZXIpIHtcblxuICAgICAgY29uc3QgbWFya2VycyA9IFtcbiAgICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuZ2F1Z2VzLCBpY29uT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5nYXVnZXN9LFxuICAgICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5zZWxlY3RlZEdhdWdlcywgaWNvbk9wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuc2VsZWN0ZWRHYXVnZXN9LFxuICAgICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5nYXVnZXNJbkNvbXBhcmUsIGljb25PcHRpb25zOiB0aGlzLmljb25PcHRpb25zLmdhdWdlc0luQ29tcGFyZX0sXG4gICAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnBpeGVscywgaWNvbk9wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMucGl4ZWxzfSxcbiAgICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMucGl4ZWxzU29sdXRpb24sIGljb25PcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnBpeGVsc1NvbHV0aW9ufSxcbiAgICAgICAgLy8gIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLmJvcmRlcnMsIGljb25PcHRpb25zOiB0aGlzLmljb25PcHRpb25zLmJvcmRlcnN9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IG1hcmtlcnNQcm9kdWNlZCA9IHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIucmVuZGVyKG1hcmtlcnMpLm1hcmtlcnM7XG4gICAgICBpZiAobWFya2Vyc1Byb2R1Y2VkKSB7XG4gICAgICAgIG1hcmtlcnNQcm9kdWNlZC5mb3JFYWNoKG0gPT4gbS5vbignY2xpY2snLCBldnQgPT4gdGhpcy5vbk1hcENsaWNrKGV2dCkpKTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd01hcmtlcnMpIHtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLnJlbW92ZUZyb21NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIuYWRkVG9NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMubWFya2VycyAmJiB0aGlzLm1hcmtlcnMuc2VsZWN0ZWRHYXVnZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEdhdWdlID0gdGhpcy5tYXJrZXJzLnNlbGVjdGVkR2F1Z2VzWzBdO1xuICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQuc2V0VmlldyhzZWxlY3RlZEdhdWdlLCAxMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFwRWxlbWVudCAmJiBjaGFuZ2VzLnRpbWVmcmFtZUNvbnRhaW5lcnMpIHtcbiAgICAgIHRoaXMubWFwRWxlbWVudC51cGRhdGVNYXBUaW1lZnJhbWUodGhpcy50aW1lZnJhbWVDb250YWluZXJzKTtcbiAgICAgIHRoaXMuY3VycmVudEZyYW1lQ29udGFpbmVyID0gdGhpcy50aW1lZnJhbWVDb250YWluZXJzPy5jb250YWluZXJzWzBdPy50aW1lZnJhbWVbMF07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFwRWxlbWVudD8uY29tcG9zaXRlTGF5ZXIgJiYgY2hhbmdlcy5zdW1WYWx1ZXMpIHtcbiAgICAgIGNvbnN0IGRyYXdlciA9IHRoaXMubWFwRWxlbWVudC5jb21wb3NpdGVMYXllci5nZXRGaXJzdERyYXdlcigpO1xuICAgICAgdGhpcy5zdW1SZXN1bHQgPSBkcmF3ZXI/LmdldEV4ZWNPZlZpc2libGVQb2ludHModGhpcy5zdW1WYWx1ZXMsIHRoaXMuc3VtRm4pO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlTmF2aWdhdGlvbihwb3NzaWJsZU5ld0RlZmF1bHREYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlTmF2aWdhdGlvbihkZWZhdWx0RGF0ZT86IERhdGUpIHtcbiAgICAvLyB1cGRhdGUgcG9zc2libGUgbmFtZXNcbiAgICBpZiAodGhpcy50aW1lZnJhbWVDb250YWluZXJzICYmIHRoaXMudGltZWZyYW1lQ29udGFpbmVycy5jb250YWluZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5wb3NzaWJsZU5hbWVzID0gW107XG4gICAgICB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnM/LmNvbnRhaW5lcnMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgaWYgKHRoaXMucG9zc2libGVOYW1lcy5pbmRleE9mKGMubmFtZSkgPCAwKSB7XG4gICAgICAgICAgdGhpcy5wb3NzaWJsZU5hbWVzLnB1c2goYy5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnRpbWVmcmFtZU5hbWVUb1Nob3cgPSB0aGlzLnBvc3NpYmxlTmFtZXMubGVuZ3RoID4gMCA/IHRoaXMucG9zc2libGVOYW1lc1swXSA6IG51bGw7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHBvc3NpYmxlIGRhdGVzXG4gICAgdGhpcy5wb3NzaWJsZURhdGVzID0gdGhpcy50aW1lZnJhbWVEYXRlcztcbiAgICBpZiAoIXRoaXMucG9zc2libGVEYXRlcyB8fCB0aGlzLnBvc3NpYmxlRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGRhdGVUb1Nob3dcbiAgICBpZiAoZGVmYXVsdERhdGUgJiYgdGhpcy5wb3NzaWJsZURhdGVzLmZpbHRlcihkID0+IGQuZ2V0VGltZSgpID09PSBkZWZhdWx0RGF0ZS5nZXRUaW1lKCkpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5kYXRlVG9TaG93ID0gZGVmYXVsdERhdGU7XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRlVG9TaG93ICYmIHRoaXMucG9zc2libGVEYXRlcy5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLnBvc3NpYmxlRGF0ZXMuZmlsdGVyKGQgPT4gZC5nZXRUaW1lKCkgPT09IHRoaXMuZGF0ZVRvU2hvdz8uZ2V0VGltZSgpKS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRoaXMuZGF0ZVRvU2hvdyA9IHRoaXMucG9zc2libGVEYXRlc1swXTtcbiAgICB9XG4gICAgdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcgPSB0aGlzLmRhdGVUb1Nob3cudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVRvU2hvd0luZGV4KCk6IG51bWJlciB7XG5cbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgZGF0ZSBvZiB0aGlzLnBvc3NpYmxlRGF0ZXMpIHtcbiAgICAgIGlmIChkYXRlLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDE5KSA9PT0gdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcuc3Vic3RyaW5nKDAsIDE5KSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHByaXZhdGUgb25NYXBNb3VzZU1vdmUoZXZ0OiB7IGxhdGxuZzogeyBsYXQ6IG51bWJlciwgbG5nOiBudW1iZXIgfSB9KTogdm9pZCB7XG5cbiAgICBjb25zdCBsYXQ6IHN0cmluZyA9IGV2dC5sYXRsbmcubGF0LnRvRml4ZWQoMyk7XG4gICAgY29uc3QgbG5nOiBzdHJpbmcgPSBldnQubGF0bG5nLmxuZy50b0ZpeGVkKDMpO1xuXG4gICAgbGV0IHZhbHVlID0gTmFOO1xuICAgIGxldCB2YWx1ZUxhdCA9IE5hTiwgdmFsdWVMbmcgPSBOYU4sIHZhbHVlTGF0MiA9IE5hTiwgdmFsdWVMbmcyID0gTmFOO1xuICAgIGlmICh0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lcikge1xuICAgICAgY29uc3QgdmFsdWVTZWxlY3RlZCA9ICh0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lci52YWx1ZXMgYXMgQ2FydGVzaWFuTWFwVmFsdWVbXSlcbiAgICAgICAgLmZpbHRlcigodjogQ2FydGVzaWFuTWFwVmFsdWUpID0+IHtcbiAgICAgICAgICByZXR1cm4gdi5sYXQgPD0gZXZ0LmxhdGxuZy5sYXQgJiYgZXZ0LmxhdGxuZy5sYXQgPCB2LmxhdDIgJiZcbiAgICAgICAgICAgIHYubG5nIDw9IGV2dC5sYXRsbmcubG5nICYmIGV2dC5sYXRsbmcubG5nIDwgdi5sbmcyO1xuICAgICAgICB9KTtcblxuICAgICAgaWYgKHZhbHVlU2VsZWN0ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZVNlbGVjdGVkWzBdLnZhbHVlICogMTAwMCkgLyAxMDAwO1xuICAgICAgICB2YWx1ZUxhdCA9IE1hdGgucm91bmQodmFsdWVTZWxlY3RlZFswXS5sYXQgKiAxMDAwKSAvIDEwMDA7XG4gICAgICAgIHZhbHVlTG5nID0gTWF0aC5yb3VuZCh2YWx1ZVNlbGVjdGVkWzBdLmxuZyAqIDEwMDApIC8gMTAwMDtcbiAgICAgICAgdmFsdWVMYXQyID0gTWF0aC5yb3VuZCh2YWx1ZVNlbGVjdGVkWzBdLmxhdDIgKiAxMDAwKSAvIDEwMDA7XG4gICAgICAgIHZhbHVlTG5nMiA9IE1hdGgucm91bmQodmFsdWVTZWxlY3RlZFswXS5sbmcyICogMTAwMCkgLyAxMDAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY29uc29sZS53YXJuKCd2YWx1ZVNlbGVjdGVkIGlzc3VlID8nLCB2YWx1ZVNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgLy8gdGhpcy5tY1RleHQgPSBgTGF0aXR1ZGU6ICR7bGF0fSAmbmJzcDsgJm5ic3A7IExvbmdpdHVkZTogJHtsbmd9ICZuYnNwOyAmbmJzcDtcbiAgICAgIC8vICAgIFZhbHVlOiBbJHt2YWx1ZUxhdH0gJHt2YWx1ZUxuZ30gfCAke3ZhbHVlTGF0Mn0gJHt2YWx1ZUxuZzJ9XSAke3ZhbHVlfWA7XG4gICAgICB0aGlzLm1jVGV4dCA9IGBMYXRpdHVkZTogJHtsYXR9ICZuYnNwOyAmbmJzcDsgTG9uZ2l0dWRlOiAke2xuZ30gJm5ic3A7ICZuYnNwOyBWYWx1ZTogJHt2YWx1ZX1gO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1hcENsaWNrKGV2dDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZE1hcmtlci5lbWl0KG5ldyBNYXBMYXRMbmcoXG4gICAgICBldnQubGF0bG5nPy5sYXQsIGV2dC5sYXRsbmc/LmxuZywgdW5kZWZpbmVkLFxuICAgICAgZXZ0LmlkLCBldnQubmFtZSkpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgb25SZXNpemUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTWFwU2l6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXBTaXplKCk6IHZvaWQge1xuXG4gICAgY29uc3QgbWFwRGl2V2lkdGggPSB0aGlzLm1hcERpdlJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU/LnBhcmVudE5vZGVbJ2NsaWVudFdpZHRoJ107XG4gICAgY29uc3QgcGFkZGluZyA9IDIxO1xuICAgIGxldCBjdXJyZW50V2lkdGggPSBtYXBEaXZXaWR0aCB8fFxuICAgICAgKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKTtcbiAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gdGhpcy5jdXJyZW50SGVpZ2h0IHx8XG4gICAgICAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQpO1xuICAgIGN1cnJlbnRXaWR0aCAtPSBwYWRkaW5nO1xuICAgIHRoaXMuY3VycmVudFdpZHRoID0gY3VycmVudFdpZHRoO1xuICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5vblNpemVDaGFuZ2VkKCk7XG4gICAgfSk7XG4gIH1cblxufVxuIiwiPGlvbi1ncmlkPlxuXG4gIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWVuZFwiPlxuICAgIDxpb24tY29sIGlkPVwibWFwLWJ1dHRvbnNcIiBzaXplLXNtPVwiM1wiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInByZXZpb3VzKClcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJvdXRsaW5lXCIgc2hhcGU9XCJyb3VuZFwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cInBsYXktYmFja1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPCEtLVxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInBsYXkoKVwiIFtoaWRkZW5dPVwiYXV0b3BsYXlcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwicm91bmRcIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJwbGF5XCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgICAtLT5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJzdG9wKClcIiBbaGlkZGVuXT1cIiFhdXRvcGxheVwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZFwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cInN0b3BcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cIm5leHQoKVwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cIm91dGxpbmVcIiBzaGFwZT1cInJvdW5kXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwicGxheS1mb3J3YXJkXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPCEtLVxuICAgIDxpb24tY29sIGlkPVwibWFwLXRpbWVmcmFtZVwiIHNpemUtc209XCI0XCI+XG4gICAgICA8aW9uLXNlbGVjdCAoaW9uQ2hhbmdlKT1cInNob3dUaW1lZnJhbWUoKVwiIFsobmdNb2RlbCldPVwidGltZWZyYW1lTmFtZVRvU2hvd1wiIFt2YWx1ZV09XCJ0aW1lZnJhbWVOYW1lVG9TaG93XCJcbiAgICAgICAgICAgICAgICAgIGludGVyZmFjZT1cInBvcG92ZXJcIiBwbGFjZWhvbGRlcj1cIk5hbWVcIj5cbiAgICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBuYW1lIG9mIHBvc3NpYmxlTmFtZXNcIiBbdmFsdWVdPVwibmFtZVwiPnt7IG5hbWUgfX08L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgPC9pb24tc2VsZWN0PlxuICAgIDwvaW9uLWNvbD4gLS0+XG5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LXN0YXJ0XCIgaWQ9XCJtYXAtZGF0ZVwiPlxuICAgICAgPGlvbi1zZWxlY3QgKGlvbkRpc21pc3MpPVwic2hvd1RpbWVmcmFtZSgpXCIgWyhuZ01vZGVsKV09XCJkYXRlVG9TaG93QXNTdHJpbmdcIiBpbnRlcmZhY2U9XCJwb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGVyaW9kXCIgdmFsdWU9XCJ7e2RhdGVUb1Nob3dBc1N0cmluZ319XCI+XG4gICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZGF0ZVRvU2VsZWN0IG9mIHBvc3NpYmxlRGF0ZXNcIiB2YWx1ZT1cInt7ZGF0ZVRvU2VsZWN0LnRvSVNPU3RyaW5nKCl9fVwiPlxuICAgICAgICAgIHt7IGRhdGVUb1NlbGVjdCB8IGRhdGU6J3l5eXktTU0tZGQgSEg6bW0nIH19XG4gICAgICAgIDwvaW9uLXNlbGVjdC1vcHRpb24+XG4gICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sPlxuICAgICAgPGlvbi10b2dnbGUgKGlvbkNoYW5nZSk9XCJjaGFuZ2VTaG93TWFya2VycygpXCIgWyhuZ01vZGVsKV09XCJzaG93TWFya2Vyc1wiIFtjaGVja2VkXT1cInNob3dNYXJrZXJzXCI+PC9pb24tdG9nZ2xlPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sPlxuICAgICAgPGRpdiBpZD1cIm1hcC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiAjcHJpbWFyeU1hcCBpZD1cIm1hcC1kaXZcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1oaWRlLXhsLWRvd25cIj5cbiAgICAgIDxpb24taW1nIGlkPVwibWFwLXJhbmdlXCIgc3JjPVwiYXNzZXRzL3Iycl9yYW5nZS5zdmdcIi8+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgc2l6ZS1zbT1cIjhcIj5cbiAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibWNUZXh0XCI+PC9zcGFuPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplLXNtPVwiMVwiPlxuICAgICAgPGlvbi1idXR0b24gZGlzYWJsZWQ9XCJ0cnVlXCIgZmlsbD1cImNsZWFyXCI+e3sgc3VtUmVzdWx0IH19PC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplLXNtPVwiM1wiPlxuICAgICAgPGlvbi1idXR0b24gZGlzYWJsZWQ9XCJ0cnVlXCIgZmlsbD1cImNsZWFyXCI+e3sgZGF0ZVRvU2hvdz8udG9JU09TdHJpbmcoKSB9fTwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cblxuPC9pb24tZ3JpZD5cbiJdfQ==
305
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3JhYWluLW1hcC9yYWFpbi1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcmFhaW4tbWFwL3JhYWluLW1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFvQixlQUFlLEVBQThCLFNBQVMsRUFBc0IsTUFBTSxVQUFVLENBQUM7Ozs7O0FBT3hILE1BQU0sT0FBTyxpQkFBaUI7SUFnRTVCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBaEQzQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBTW5CLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBVzVCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUcvQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUEyQjVDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVkLGNBQWM7UUFDZCxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUM5QyxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLCtEQUErRDtRQUM1RixNQUFNLFNBQVMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzQixNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUs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QU87c0JBRGIsS0FBSztnQkFVQyxtQkFBbUI7c0JBRHpCLEtBQUs7Z0JBR0MsUUFBUTtzQkFEZCxLQUFLO2dCQUdDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBR0MsYUFBYTtzQkFEbkIsS0FBSztnQkFLQyxjQUFjO3NCQURwQixLQUFLO2dCQUdDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBSUMsU0FBUztzQkFEZixLQUFLO2dCQUdDLEtBQUs7c0JBRFgsS0FBSztnQkFLQyxjQUFjO3NCQURwQixNQUFNO2dCQUlBLFdBQVc7c0JBRGpCLE1BQU07Z0JBYUcsU0FBUztzQkFEbEIsU0FBUzt1QkFBQyxZQUFZO2dCQTRTZixRQUFRO3NCQURmLFlBQVk7dUJBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtJY29uT3B0aW9uc30gZnJvbSAnbGVhZmxldCc7XG5pbXBvcnQge0NhcnRlc2lhbk1hcFZhbHVlLCBFbGVtZW50c0ZhY3RvcnksIEZyYW1lQ29udGFpbmVyLCBNYXBFbGVtZW50LCBNYXBMYXRMbmcsIFRpbWVmcmFtZUNvbnRhaW5lcnN9IGZyb20gJ3JhYWluLXVpJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncmFhaW4tbWFwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JhYWluLW1hcC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3JhYWluLW1hcC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBSYWFpbk1hcENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgY29vcmRpbmF0ZXM6IE1hcExhdExuZztcbiAgQElucHV0KClcbiAgcHVibGljIG1hcmtlcnM6IHtcbiAgICBnYXVnZXM6IE1hcExhdExuZ1tdLFxuICAgIHNlbGVjdGVkR2F1Z2VzOiBNYXBMYXRMbmdbXSxcbiAgICBwaXhlbHM6IE1hcExhdExuZ1tdLFxuICAgIGJvcmRlcnM6IE1hcExhdExuZ1tdLFxuICAgIGdhdWdlc0luQ29tcGFyZTogTWFwTGF0TG5nW10sXG4gICAgcGl4ZWxzU29sdXRpb246IE1hcExhdExuZ1tdLFxuICB9O1xuICBASW5wdXQoKVxuICBwdWJsaWMgdGltZWZyYW1lQ29udGFpbmVyczogVGltZWZyYW1lQ29udGFpbmVycztcbiAgQElucHV0KClcbiAgcHVibGljIGF1dG9wbGF5ID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzaG93TWFya2VycyA9IHRydWU7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjdXJyZW50SGVpZ2h0OiBudW1iZXI7XG4gIHB1YmxpYyBjdXJyZW50V2lkdGg6IG51bWJlcjtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgdGltZWZyYW1lRGF0ZXM6IERhdGVbXSA9IFtdO1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGVmYXVsdERhdGU6IERhdGU7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHN1bVZhbHVlczogYW55O1xuICBASW5wdXQoKVxuICBwdWJsaWMgc3VtRm46IGFueTtcbiAgcHVibGljIHN1bVJlc3VsdDogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgc2VsZWN0ZWRNYXJrZXIgPSBuZXcgRXZlbnRFbWl0dGVyPE1hcExhdExuZz4oKTtcblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNoYW5nZWREYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xuXG4gIHB1YmxpYyBtY1RleHQ7XG4gIHB1YmxpYyBuZXh0RGF0ZTogRGF0ZTtcbiAgcHVibGljIHBvc3NpYmxlTmFtZXM6IHN0cmluZ1tdO1xuICBwdWJsaWMgcG9zc2libGVEYXRlczogRGF0ZVtdO1xuICBwdWJsaWMgZGF0ZVRvU2hvdzogRGF0ZTtcbiAgcHVibGljIGRhdGVUb1Nob3dBc1N0cmluZzogc3RyaW5nO1xuICBwdWJsaWMgdGltZWZyYW1lTmFtZVRvU2hvdzogc3RyaW5nO1xuICBwcm90ZWN0ZWQgY3VycmVudEZyYW1lQ29udGFpbmVyOiBGcmFtZUNvbnRhaW5lcjtcblxuICBAVmlld0NoaWxkKCdwcmltYXJ5TWFwJylcbiAgcHJvdGVjdGVkIG1hcERpdlJlZjogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIG1hcEVsZW1lbnQ6IE1hcEVsZW1lbnQ7XG4gIHByaXZhdGUgb25TaXplQ2hhbmdlZDtcbiAgcHJpdmF0ZSBjcmVhdGVkO1xuICBwcml2YXRlIGljb25PcHRpb25zOiB7XG4gICAgZ2F1Z2VzOiBJY29uT3B0aW9ucyxcbiAgICBzZWxlY3RlZEdhdWdlczogSWNvbk9wdGlvbnMsXG4gICAgcGl4ZWxzOiBJY29uT3B0aW9ucyxcbiAgICBib3JkZXJzOiBJY29uT3B0aW9ucyxcbiAgICBnYXVnZXNJbkNvbXBhcmU6IEljb25PcHRpb25zLFxuICAgIHBpeGVsc1NvbHV0aW9uOiBJY29uT3B0aW9ucyxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIG5nWm9uZTogTmdab25lKSB7XG4gICAgdGhpcy5kZWxldGUoKTtcblxuICAgIC8vIHNoYWRvd1VybCA/XG4gICAgY29uc3QgaWNvblNpemUgPSBbNDAsIDQwXTsgLy8gc2l6ZSBvZiB0aGUgaWNvblxuICAgIGNvbnN0IGljb25BbmNob3IgPSBbMjAsIDIwXTsgLy8gcG9pbnQgb2YgdGhlIGljb24gd2hpY2ggd2lsbCBjb3JyZXNwb25kIHRvIG1hcmtlcidzIGxvY2F0aW9uXG4gICAgY29uc3QgcGl4ZWxTaXplID0gWzQxLCA0MV07XG4gICAgY29uc3QgcGl4ZWxBbmNob3IgPSBbMjAsIDIwXTtcbiAgICBjb25zdCBwb3B1cEFuY2hvciA9IFswLCAtMjBdOyAvLyBwb2ludCBmcm9tIHdoaWNoIHRoZSBwb3B1cCBzaG91bGQgb3BlbiByZWxhdGl2ZSB0byB0aGUgaWNvbkFuY2hvclxuICAgIHRoaXMuaWNvbk9wdGlvbnMgPSB7XG4gICAgICBnYXVnZXM6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcGx1dmlvLnBuZycsIGljb25TaXplLCBpY29uQW5jaG9yLCBwb3B1cEFuY2hvcn0sXG4gICAgICBnYXVnZXNJbkNvbXBhcmU6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcGx1dmlvLWRpYWcucG5nJywgaWNvblNpemUsIGljb25BbmNob3IsIHBvcHVwQW5jaG9yfSxcbiAgICAgIHNlbGVjdGVkR2F1Z2VzOiB7aWNvblVybDogJy4vYXNzZXRzL21hcHMvbWFya2VyLXBsdXZpby1kaWFnLXNlbGVjdC5wbmcnLCBpY29uU2l6ZSwgaWNvbkFuY2hvciwgcG9wdXBBbmNob3J9LFxuICAgICAgcGl4ZWxzOiB7aWNvblVybDogJy4vYXNzZXRzL21hcHMvbWFya2VyLXJhaW4ucG5nJywgaWNvblNpemUsIGljb25BbmNob3IsIHBvcHVwQW5jaG9yfSxcbiAgICAgIHBpeGVsc1NvbHV0aW9uOiB7aWNvblVybDogJy4vYXNzZXRzL21hcHMvbWFya2VyLXJhaW4yLnBuZycsIGljb25TaXplOiBwaXhlbFNpemUsIGljb25BbmNob3I6IHBpeGVsQW5jaG9yLCBwb3B1cEFuY2hvcn0sXG4gICAgICBib3JkZXJzOiB7aWNvblVybDogJy4vYXNzZXRzL21hcHMvbWFya2VyLXNoYWRvdy5wbmcnLCBpY29uU2l6ZSwgaWNvbkFuY2hvciwgcG9wdXBBbmNob3J9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdDaGVja2VkKCk6IHZvaWQge1xuICAgIHRoaXMuY3JlYXRlKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlKGNoYW5nZXMpO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgc2hvd1RpbWVmcmFtZShmb3JjZSA9IGZhbHNlKSB7XG5cbiAgICAvLyBjb25zdCB7ZnJhbWVDb250YWluZXIsIGxheWVyfSA9IHRoaXMudGltZWZyYW1lQ29udGFpbmVycy5zaG93VGltZWZyYW1lKHRoaXMudGltZWZyYW1lTmFtZVRvU2hvdyk7XG4gICAgLy8gdGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIgPSBmcmFtZUNvbnRhaW5lcjtcblxuICAgIGlmICghdGhpcy5kYXRlVG9TaG93QXNTdHJpbmdcbiAgICAgIHx8ICghZm9yY2UgJiYgbmV3IERhdGUodGhpcy5kYXRlVG9TaG93QXNTdHJpbmcpLmdldFRpbWUoKSA9PT0gdGhpcy5kYXRlVG9TaG93Py5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kYXRlVG9TaG93ID0gbmV3IERhdGUodGhpcy5kYXRlVG9TaG93QXNTdHJpbmcpO1xuICAgIHRoaXMuY2hhbmdlZERhdGUuZW1pdCh0aGlzLmRhdGVUb1Nob3cpO1xuICB9XG5cbiAgcHVibGljIG5leHQoKSB7XG4gICAgaWYgKCF0aGlzLnBvc3NpYmxlRGF0ZXMgfHwgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXREYXRlVG9TaG93SW5kZXgoKTtcbiAgICB0aGlzLmRhdGVUb1Nob3cgPSAoaW5kZXggKyAxKSA8IHRoaXMucG9zc2libGVEYXRlcy5sZW5ndGggPyB0aGlzLnBvc3NpYmxlRGF0ZXNbaW5kZXggKyAxXSA6IHRoaXMucG9zc2libGVEYXRlc1swXTtcbiAgICB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyA9IHRoaXMuZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuXG4gICAgdGhpcy5zaG93VGltZWZyYW1lKHRydWUpO1xuICAgIGlmICh0aGlzLmF1dG9wbGF5KSB7XG4gICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB0aGlzLm5leHQoKSwgMjAwMCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHByZXZpb3VzKCkge1xuICAgIHRoaXMuc3RvcCgpO1xuICAgIGlmICghdGhpcy5wb3NzaWJsZURhdGVzIHx8IHRoaXMucG9zc2libGVEYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RGF0ZVRvU2hvd0luZGV4KCk7XG4gICAgdGhpcy5kYXRlVG9TaG93ID0gaW5kZXggPiAwID8gdGhpcy5wb3NzaWJsZURhdGVzW2luZGV4IC0gMV0gOiB0aGlzLnBvc3NpYmxlRGF0ZXNbMF07XG4gICAgdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcgPSB0aGlzLmRhdGVUb1Nob3cudG9JU09TdHJpbmcoKTtcblxuICAgIHRoaXMuc2hvd1RpbWVmcmFtZSh0cnVlKTtcbiAgfVxuXG4gIHB1YmxpYyBwbGF5KCkge1xuICAgIHRoaXMuYXV0b3BsYXkgPSB0cnVlO1xuICAgIHRoaXMubmV4dCgpO1xuICB9XG5cbiAgcHVibGljIHN0b3AoKSB7XG4gICAgdGhpcy5hdXRvcGxheSA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVNob3dNYXJrZXJzKCkge1xuICAgIGlmICghdGhpcy5tYXBFbGVtZW50Py5tYXJrZXJzTGF5ZXIgfHwgIXRoaXMubWFwRWxlbWVudD8ubWFwTGVhZmxldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dNYXJrZXJzKSB7XG4gICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLmFkZFRvTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5yZW1vdmVGcm9tTWFwKHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZSgpIHtcblxuICAgIGNvbnN0IGNyZWF0ZWQgPSB0aGlzLmNyZWF0ZWQ7XG4gICAgaWYgKGNyZWF0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jcmVhdGVkID0gdHJ1ZTtcbiAgICBjb25zdCBtYXJrZXJzID0gW1xuICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuZ2F1Z2VzLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuZ2F1Z2VzfSxcbiAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnNlbGVjdGVkR2F1Z2VzLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuc2VsZWN0ZWRHYXVnZXN9LFxuICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuZ2F1Z2VzSW5Db21wYXJlLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuZ2F1Z2VzSW5Db21wYXJlfSxcbiAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnBpeGVscywgaWNvbnNPcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnBpeGVsc30sXG4gICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5waXhlbHNTb2x1dGlvbiwgaWNvbnNPcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnBpeGVsc1NvbHV0aW9ufSxcbiAgICAgIC8vIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLmJvcmRlcnMsIGljb25zT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5ib3JkZXJzfSxcbiAgICBdO1xuXG4gICAgY29uc3QgZmFjdG9yeSA9IG5ldyBFbGVtZW50c0ZhY3RvcnkodGhpcy5jb29yZGluYXRlcywgdHJ1ZSk7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgY29uc3QgY3JlYXRlZE91dHNpZGUgPSB0aGlzLmNyZWF0ZWQ7XG4gICAgICAgIGlmICghY3JlYXRlZE91dHNpZGUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm1hcEVsZW1lbnQgPSBmYWN0b3J5LmNyZWF0ZU1hcCh0aGlzLm1hcERpdlJlZi5uYXRpdmVFbGVtZW50LCB7dGltZWZyYW1lQ29udGFpbmVyczogdGhpcy50aW1lZnJhbWVDb250YWluZXJzLCBtYXJrZXJzfSk7XG5cbiAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQ/Lm9uKCdtb3VzZW1vdmUnLCAoZXZ0KSA9PiB0aGlzLm9uTWFwTW91c2VNb3ZlKGV2dCkpO1xuICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc1Byb2R1Y2VkPy5mb3JFYWNoKG0gPT4gbS5vbignY2xpY2snLCBldnQgPT4gdGhpcy5vbk1hcENsaWNrKGV2dCkpKTtcbiAgICAgICAgdGhpcy5vblNpemVDaGFuZ2VkID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXI/LnNldEN1cnJlbnRXaWR0aCh0aGlzLmN1cnJlbnRXaWR0aCk7XG4gICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllcj8uc2V0Q3VycmVudEhlaWdodCh0aGlzLmN1cnJlbnRIZWlnaHQpO1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5jb21wb3NpdGVMYXllcj8uc2V0Q3VycmVudFdpZHRoKHRoaXMuY3VycmVudFdpZHRoKTtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQuY29tcG9zaXRlTGF5ZXI/LnNldEN1cnJlbnRIZWlnaHQodGhpcy5jdXJyZW50SGVpZ2h0KTtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldD8uaW52YWxpZGF0ZVNpemUoe2FuaW1hdGU6IHRydWV9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZU1hcFNpemUoKTtcbiAgICAgICAgLy8gdGhpcy50aW1lZnJhbWVOYW1lVG9TaG93ID0gdGhpcy5wb3NzaWJsZU5hbWVzLmxlbmd0aCA+IDAgPyB0aGlzLnBvc3NpYmxlTmFtZXNbMF0gOiBudWxsO1xuICAgICAgICAvLyB0aGlzLnRvZ2dsZUhpZGVNYXJrZXJzKCF0aGlzLmhpZGVNYXJrZXJzKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VOYXZpZ2F0aW9uKHRoaXMuZGVmYXVsdERhdGUpO1xuICAgICAgfSwgMTAwKTtcbiAgICB9KTtcblxuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGUoKSB7XG4gICAgdGhpcy5tYXBFbGVtZW50Py5tYXBMZWFmbGV0Py5yZW1vdmUoKTtcbiAgICB0aGlzLm1hcEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5tY1RleHQgPSAnJztcbiAgICB0aGlzLm5leHREYXRlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucG9zc2libGVOYW1lcyA9IFtdO1xuICAgIHRoaXMucG9zc2libGVEYXRlcyA9IFtdO1xuICAgIHRoaXMudGltZWZyYW1lTmFtZVRvU2hvdyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRhdGVUb1Nob3cgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vblNpemVDaGFuZ2VkID0gKCkgPT4ge1xuICAgIH07XG4gICAgdGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIgPSBudWxsO1xuXG4gICAgdGhpcy5jcmVhdGVkID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ21hcCBjaGFuZ2VzJywgY2hhbmdlcyk7XG5cbiAgICBsZXQgcG9zc2libGVOZXdEZWZhdWx0RGF0ZTogRGF0ZTtcbiAgICBpZiAoY2hhbmdlcy5kZWZhdWx0RGF0ZSkge1xuICAgICAgaWYgKG5ldyBEYXRlKGNoYW5nZXMuZGVmYXVsdERhdGUuY3VycmVudFZhbHVlKS5nZXRUaW1lKCkgPT09IG5ldyBEYXRlKGNoYW5nZXMuZGVmYXVsdERhdGUucHJldmlvdXNWYWx1ZSkuZ2V0VGltZSgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHBvc3NpYmxlTmV3RGVmYXVsdERhdGUgPSB0aGlzLmRlZmF1bHREYXRlO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLm1hcmtlcnMgJiYgdGhpcy5tYXBFbGVtZW50Py5tYXJrZXJzTGF5ZXIpIHtcblxuICAgICAgY29uc3QgbWFya2VycyA9IFtcbiAgICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuZ2F1Z2VzLCBpY29uT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5nYXVnZXN9LFxuICAgICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5zZWxlY3RlZEdhdWdlcywgaWNvbk9wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuc2VsZWN0ZWRHYXVnZXN9LFxuICAgICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5nYXVnZXNJbkNvbXBhcmUsIGljb25PcHRpb25zOiB0aGlzLmljb25PcHRpb25zLmdhdWdlc0luQ29tcGFyZX0sXG4gICAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnBpeGVscywgaWNvbk9wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMucGl4ZWxzfSxcbiAgICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMucGl4ZWxzU29sdXRpb24sIGljb25PcHRpb25zOiB0aGlzLmljb25PcHRpb25zLnBpeGVsc1NvbHV0aW9ufSxcbiAgICAgICAgLy8gIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLmJvcmRlcnMsIGljb25PcHRpb25zOiB0aGlzLmljb25PcHRpb25zLmJvcmRlcnN9LFxuICAgICAgXTtcbiAgICAgIGNvbnN0IG1hcmtlcnNQcm9kdWNlZCA9IHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIucmVuZGVyKG1hcmtlcnMpLm1hcmtlcnM7XG4gICAgICBpZiAobWFya2Vyc1Byb2R1Y2VkKSB7XG4gICAgICAgIG1hcmtlcnNQcm9kdWNlZC5mb3JFYWNoKG0gPT4gbS5vbignY2xpY2snLCBldnQgPT4gdGhpcy5vbk1hcENsaWNrKGV2dCkpKTtcbiAgICAgICAgaWYgKHRoaXMuc2hvd01hcmtlcnMpIHtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLnJlbW92ZUZyb21NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIuYWRkVG9NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMubWFya2VycyAmJiB0aGlzLm1hcmtlcnMuc2VsZWN0ZWRHYXVnZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEdhdWdlID0gdGhpcy5tYXJrZXJzLnNlbGVjdGVkR2F1Z2VzWzBdO1xuICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQuc2V0VmlldyhzZWxlY3RlZEdhdWdlLCAxMCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFwRWxlbWVudCAmJiBjaGFuZ2VzLnRpbWVmcmFtZUNvbnRhaW5lcnMpIHtcbiAgICAgIHRoaXMubWFwRWxlbWVudC51cGRhdGVNYXBUaW1lZnJhbWUodGhpcy50aW1lZnJhbWVDb250YWluZXJzKTtcbiAgICAgIHRoaXMuY3VycmVudEZyYW1lQ29udGFpbmVyID0gdGhpcy50aW1lZnJhbWVDb250YWluZXJzPy5jb250YWluZXJzWzBdPy50aW1lZnJhbWVbMF07XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubWFwRWxlbWVudD8uY29tcG9zaXRlTGF5ZXIgJiYgY2hhbmdlcy5zdW1WYWx1ZXMpIHtcbiAgICAgIGNvbnN0IGRyYXdlciA9IHRoaXMubWFwRWxlbWVudC5jb21wb3NpdGVMYXllci5nZXRGaXJzdERyYXdlcigpO1xuICAgICAgdGhpcy5zdW1SZXN1bHQgPSBkcmF3ZXI/LmdldEV4ZWNPZlZpc2libGVQb2ludHModGhpcy5zdW1WYWx1ZXMsIHRoaXMuc3VtRm4pO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlTmF2aWdhdGlvbihwb3NzaWJsZU5ld0RlZmF1bHREYXRlKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlTmF2aWdhdGlvbihkZWZhdWx0RGF0ZT86IERhdGUpIHtcbiAgICAvLyB1cGRhdGUgcG9zc2libGUgbmFtZXNcbiAgICBpZiAodGhpcy50aW1lZnJhbWVDb250YWluZXJzICYmIHRoaXMudGltZWZyYW1lQ29udGFpbmVycy5jb250YWluZXJzLmxlbmd0aCkge1xuICAgICAgdGhpcy5wb3NzaWJsZU5hbWVzID0gW107XG4gICAgICB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnM/LmNvbnRhaW5lcnMuZm9yRWFjaChjID0+IHtcbiAgICAgICAgaWYgKHRoaXMucG9zc2libGVOYW1lcy5pbmRleE9mKGMubmFtZSkgPCAwKSB7XG4gICAgICAgICAgdGhpcy5wb3NzaWJsZU5hbWVzLnB1c2goYy5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICB0aGlzLnRpbWVmcmFtZU5hbWVUb1Nob3cgPSB0aGlzLnBvc3NpYmxlTmFtZXMubGVuZ3RoID4gMCA/IHRoaXMucG9zc2libGVOYW1lc1swXSA6IG51bGw7XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIHBvc3NpYmxlIGRhdGVzXG4gICAgdGhpcy5wb3NzaWJsZURhdGVzID0gdGhpcy50aW1lZnJhbWVEYXRlcztcbiAgICBpZiAoIXRoaXMucG9zc2libGVEYXRlcyB8fCB0aGlzLnBvc3NpYmxlRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGRhdGVUb1Nob3dcbiAgICBpZiAoZGVmYXVsdERhdGUgJiYgdGhpcy5wb3NzaWJsZURhdGVzLmZpbHRlcihkID0+IGQuZ2V0VGltZSgpID09PSBkZWZhdWx0RGF0ZS5nZXRUaW1lKCkpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5kYXRlVG9TaG93ID0gZGVmYXVsdERhdGU7XG4gICAgfVxuICAgIGlmICghdGhpcy5kYXRlVG9TaG93ICYmIHRoaXMucG9zc2libGVEYXRlcy5sZW5ndGggPiAwICYmXG4gICAgICB0aGlzLnBvc3NpYmxlRGF0ZXMuZmlsdGVyKGQgPT4gZC5nZXRUaW1lKCkgPT09IHRoaXMuZGF0ZVRvU2hvdz8uZ2V0VGltZSgpKS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRoaXMuZGF0ZVRvU2hvdyA9IHRoaXMucG9zc2libGVEYXRlc1swXTtcbiAgICB9XG4gICAgdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcgPSB0aGlzLmRhdGVUb1Nob3cudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGF0ZVRvU2hvd0luZGV4KCk6IG51bWJlciB7XG5cbiAgICBsZXQgaW5kZXggPSAwO1xuICAgIGZvciAoY29uc3QgZGF0ZSBvZiB0aGlzLnBvc3NpYmxlRGF0ZXMpIHtcbiAgICAgIGlmIChkYXRlLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDE5KSA9PT0gdGhpcy5kYXRlVG9TaG93QXNTdHJpbmcuc3Vic3RyaW5nKDAsIDE5KSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIHByaXZhdGUgb25NYXBNb3VzZU1vdmUoZXZ0OiB7IGxhdGxuZzogeyBsYXQ6IG51bWJlciwgbG5nOiBudW1iZXIgfSB9KTogdm9pZCB7XG5cbiAgICBjb25zdCBsYXQ6IHN0cmluZyA9IGV2dC5sYXRsbmcubGF0LnRvRml4ZWQoMyk7XG4gICAgY29uc3QgbG5nOiBzdHJpbmcgPSBldnQubGF0bG5nLmxuZy50b0ZpeGVkKDMpO1xuXG4gICAgbGV0IHZhbHVlID0gTmFOO1xuICAgIGxldCB2YWx1ZUxhdCA9IE5hTiwgdmFsdWVMbmcgPSBOYU4sIHZhbHVlTGF0MiA9IE5hTiwgdmFsdWVMbmcyID0gTmFOO1xuICAgIGlmICh0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lcikge1xuICAgICAgY29uc3QgdmFsdWVTZWxlY3RlZCA9ICh0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lci52YWx1ZXMgYXMgQ2FydGVzaWFuTWFwVmFsdWVbXSlcbiAgICAgICAgLmZpbHRlcigodjogQ2FydGVzaWFuTWFwVmFsdWUpID0+IHtcbiAgICAgICAgICByZXR1cm4gdi5sYXQgPD0gZXZ0LmxhdGxuZy5sYXQgJiYgZXZ0LmxhdGxuZy5sYXQgPCB2LmxhdDIgJiZcbiAgICAgICAgICAgIHYubG5nIDw9IGV2dC5sYXRsbmcubG5nICYmIGV2dC5sYXRsbmcubG5nIDwgdi5sbmcyO1xuICAgICAgICB9KTtcblxuICAgICAgaWYgKHZhbHVlU2VsZWN0ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZVNlbGVjdGVkWzBdLnZhbHVlICogMTAwMCkgLyAxMDAwO1xuICAgICAgICB2YWx1ZUxhdCA9IE1hdGgucm91bmQodmFsdWVTZWxlY3RlZFswXS5sYXQgKiAxMDAwKSAvIDEwMDA7XG4gICAgICAgIHZhbHVlTG5nID0gTWF0aC5yb3VuZCh2YWx1ZVNlbGVjdGVkWzBdLmxuZyAqIDEwMDApIC8gMTAwMDtcbiAgICAgICAgdmFsdWVMYXQyID0gTWF0aC5yb3VuZCh2YWx1ZVNlbGVjdGVkWzBdLmxhdDIgKiAxMDAwKSAvIDEwMDA7XG4gICAgICAgIHZhbHVlTG5nMiA9IE1hdGgucm91bmQodmFsdWVTZWxlY3RlZFswXS5sbmcyICogMTAwMCkgLyAxMDAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY29uc29sZS53YXJuKCd2YWx1ZVNlbGVjdGVkIGlzc3VlID8nLCB2YWx1ZVNlbGVjdGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgLy8gdGhpcy5tY1RleHQgPSBgTGF0aXR1ZGU6ICR7bGF0fSAmbmJzcDsgJm5ic3A7IExvbmdpdHVkZTogJHtsbmd9ICZuYnNwOyAmbmJzcDtcbiAgICAgIC8vICAgIFZhbHVlOiBbJHt2YWx1ZUxhdH0gJHt2YWx1ZUxuZ30gfCAke3ZhbHVlTGF0Mn0gJHt2YWx1ZUxuZzJ9XSAke3ZhbHVlfWA7XG4gICAgICB0aGlzLm1jVGV4dCA9IGBMYXRpdHVkZTogJHtsYXR9ICZuYnNwOyAmbmJzcDsgTG9uZ2l0dWRlOiAke2xuZ30gJm5ic3A7ICZuYnNwOyBWYWx1ZTogJHt2YWx1ZX1gO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1hcENsaWNrKGV2dDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZE1hcmtlci5lbWl0KG5ldyBNYXBMYXRMbmcoXG4gICAgICBldnQubGF0bG5nPy5sYXQsIGV2dC5sYXRsbmc/LmxuZywgdW5kZWZpbmVkLFxuICAgICAgZXZ0LmlkLCBldnQubmFtZSkpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgb25SZXNpemUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTWFwU2l6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXBTaXplKCk6IHZvaWQge1xuXG4gICAgY29uc3QgbWFwRGl2V2lkdGggPSB0aGlzLm1hcERpdlJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU/LnBhcmVudE5vZGVbJ2NsaWVudFdpZHRoJ107XG4gICAgY29uc3QgcGFkZGluZyA9IDIxO1xuICAgIGxldCBjdXJyZW50V2lkdGggPSBtYXBEaXZXaWR0aCB8fFxuICAgICAgKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKTtcbiAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gdGhpcy5jdXJyZW50SGVpZ2h0IHx8XG4gICAgICAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQpO1xuICAgIGN1cnJlbnRXaWR0aCAtPSBwYWRkaW5nO1xuICAgIHRoaXMuY3VycmVudFdpZHRoID0gY3VycmVudFdpZHRoO1xuICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5vblNpemVDaGFuZ2VkKCk7XG4gICAgfSk7XG4gIH1cblxufVxuIiwiPGlvbi1ncmlkPlxuXG4gIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWVuZFwiPlxuICAgIDxpb24tY29sIGlkPVwibWFwLWJ1dHRvbnNcIiBzaXplLXhzPVwiMlwiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInByZXZpb3VzKClcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJvdXRsaW5lXCIgc2hhcGU9XCJyb3VuZFwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cInBsYXktYmFja1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPCEtLVxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInBsYXkoKVwiIFtoaWRkZW5dPVwiYXV0b3BsYXlcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwicm91bmRcIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJwbGF5XCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgICAtLT5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJzdG9wKClcIiBbaGlkZGVuXT1cIiFhdXRvcGxheVwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZFwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cInN0b3BcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cIm5leHQoKVwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cIm91dGxpbmVcIiBzaGFwZT1cInJvdW5kXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwicGxheS1mb3J3YXJkXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPCEtLVxuICAgIDxpb24tY29sIGlkPVwibWFwLXRpbWVmcmFtZVwiIHNpemUtc209XCI0XCI+XG4gICAgICA8aW9uLXNlbGVjdCAoaW9uQ2hhbmdlKT1cInNob3dUaW1lZnJhbWUoKVwiIFsobmdNb2RlbCldPVwidGltZWZyYW1lTmFtZVRvU2hvd1wiIFt2YWx1ZV09XCJ0aW1lZnJhbWVOYW1lVG9TaG93XCJcbiAgICAgICAgICAgICAgICAgIGludGVyZmFjZT1cInBvcG92ZXJcIiBwbGFjZWhvbGRlcj1cIk5hbWVcIj5cbiAgICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBuYW1lIG9mIHBvc3NpYmxlTmFtZXNcIiBbdmFsdWVdPVwibmFtZVwiPnt7IG5hbWUgfX08L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgPC9pb24tc2VsZWN0PlxuICAgIDwvaW9uLWNvbD4gLS0+XG5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LXN0YXJ0XCIgaWQ9XCJtYXAtZGF0ZVwiIHNpemUteHM9XCI1XCI+XG4gICAgICA8aW9uLXNlbGVjdCAoaW9uRGlzbWlzcyk9XCJzaG93VGltZWZyYW1lKClcIiBbKG5nTW9kZWwpXT1cImRhdGVUb1Nob3dBc1N0cmluZ1wiIGludGVyZmFjZT1cInBvcG92ZXJcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJQZXJpb2RcIiB2YWx1ZT1cInt7ZGF0ZVRvU2hvd0FzU3RyaW5nfX1cIj5cbiAgICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBkYXRlVG9TZWxlY3Qgb2YgcG9zc2libGVEYXRlc1wiIHZhbHVlPVwie3tkYXRlVG9TZWxlY3QudG9JU09TdHJpbmcoKX19XCI+XG4gICAgICAgICAge3sgZGF0ZVRvU2VsZWN0IHwgZGF0ZToneXl5eS1NTS1kZCBISDptbScgfX1cbiAgICAgICAgPC9pb24tc2VsZWN0LW9wdGlvbj5cbiAgICAgIDwvaW9uLXNlbGVjdD5cbiAgICA8L2lvbi1jb2w+XG4gICAgPGlvbi1jb2wgY2xhc3M9XCJpb24taGlkZS1tZC1kb3duXCI+XG4gICAgICA8aW9uLXRvZ2dsZSAoaW9uQ2hhbmdlKT1cImNoYW5nZVNob3dNYXJrZXJzKClcIiBbKG5nTW9kZWwpXT1cInNob3dNYXJrZXJzXCIgW2NoZWNrZWRdPVwic2hvd01hcmtlcnNcIj48L2lvbi10b2dnbGU+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2w+XG4gICAgICA8ZGl2IGlkPVwibWFwLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2ICNwcmltYXJ5TWFwIGlkPVwibWFwLWRpdlwiPjwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLWhpZGUteGwtZG93blwiPlxuICAgICAgPGlvbi1pbWcgaWQ9XCJtYXAtcmFuZ2VcIiBzcmM9XCJhc3NldHMvcjJyX3JhbmdlLnN2Z1wiLz5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cblxuICA8aW9uLXJvdz5cbiAgICA8aW9uLWNvbCBzaXplLXNtPVwiOFwiPlxuICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJtY1RleHRcIj48L3NwYW4+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sIHNpemUtc209XCIxXCI+XG4gICAgICA8aW9uLWJ1dHRvbiBkaXNhYmxlZD1cInRydWVcIiBmaWxsPVwiY2xlYXJcIj57eyBzdW1SZXN1bHQgfX08L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sIHNpemUtc209XCIzXCI+XG4gICAgICA8aW9uLWJ1dHRvbiBkaXNhYmxlZD1cInRydWVcIiBmaWxsPVwiY2xlYXJcIj57eyBkYXRlVG9TaG93Py50b0lTT1N0cmluZygpIH19PC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG48L2lvbi1ncmlkPlxuIl19
@@ -1,6 +1,6 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { EventEmitter, Component, Input, Output, ViewChild, HostListener, Injectable, Pipe, NgModule, Optional, SkipSelf } from '@angular/core';
3
- import { ElementsFactory, MapLatLng, CompareElementInput, ConfigurationElementInput, DateRange, DateStatusElementInput, SpeedMatrixElementInput, TimeframeContainers, CartesianMapValue, PolarMapValue } from 'raain-ui';
3
+ import { ElementsFactory, MapLatLng, CompareElementInput, ConfigurationElementInput, Tools, ChartScaleColors, DateRange, DateStatusElementInput, SpeedMatrixElementInput, TimeframeContainers, CartesianMapValue, PolarMapValue } from 'raain-ui';
4
4
  import * as i1 from '@angular/common';
5
5
  import { CommonModule, NgOptimizedImage, NgStyle } from '@angular/common';
6
6
  import * as i2 from '@angular/forms';
@@ -288,10 +288,10 @@ class RaainMapComponent {
288
288
  }
289
289
  }
290
290
  RaainMapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainMapComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
291
- RaainMapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainMapComponent, selector: "raain-map", inputs: { coordinates: "coordinates", markers: "markers", timeframeContainers: "timeframeContainers", autoplay: "autoplay", showMarkers: "showMarkers", currentHeight: "currentHeight", timeframeDates: "timeframeDates", defaultDate: "defaultDate", sumValues: "sumValues", sumFn: "sumFn" }, outputs: { selectedMarker: "selectedMarker", changedDate: "changedDate" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "mapDivRef", first: true, predicate: ["primaryMap"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-sm=\"3\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <!--\n <ion-button (click)=\"play()\" [hidden]=\"autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"play\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n -->\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n\n <!--\n <ion-col id=\"map-timeframe\" size-sm=\"4\">\n <ion-select (ionChange)=\"showTimeframe()\" [(ngModel)]=\"timeframeNameToShow\" [value]=\"timeframeNameToShow\"\n interface=\"popover\" placeholder=\"Name\">\n <ion-select-option *ngFor=\"let name of possibleNames\" [value]=\"name\">{{ name }}</ion-select-option>\n </ion-select>\n </ion-col> -->\n\n <ion-col class=\"ion-text-start\" id=\"map-date\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col>\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"></ion-toggle>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <div id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\">\n <ion-img id=\"map-range\" src=\"assets/r2r_range.svg\"/>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative;width:800px;height:400px}#map-div{position:absolute;inset:0}#map-range{height:400px}#map-buttons{min-width:180px}ion-select{width:100%;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2$1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2$1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2$1.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i2$1.IonRow, selector: "ion-row" }, { kind: "component", type: i2$1.IonSelect, selector: "ion-select", inputs: ["cancelText", "compareWith", "disabled", "interface", "interfaceOptions", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "value"] }, { kind: "component", type: i2$1.IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: i2$1.IonToggle, selector: "ion-toggle", inputs: ["checked", "color", "disabled", "enableOnOffLabels", "mode", "name", "value"] }, { kind: "directive", type: i2$1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i2$1.SelectValueAccessor, selector: "ion-range, ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
291
+ RaainMapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainMapComponent, selector: "raain-map", inputs: { coordinates: "coordinates", markers: "markers", timeframeContainers: "timeframeContainers", autoplay: "autoplay", showMarkers: "showMarkers", currentHeight: "currentHeight", timeframeDates: "timeframeDates", defaultDate: "defaultDate", sumValues: "sumValues", sumFn: "sumFn" }, outputs: { selectedMarker: "selectedMarker", changedDate: "changedDate" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "mapDivRef", first: true, predicate: ["primaryMap"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-xs=\"2\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <!--\n <ion-button (click)=\"play()\" [hidden]=\"autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"play\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n -->\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n\n <!--\n <ion-col id=\"map-timeframe\" size-sm=\"4\">\n <ion-select (ionChange)=\"showTimeframe()\" [(ngModel)]=\"timeframeNameToShow\" [value]=\"timeframeNameToShow\"\n interface=\"popover\" placeholder=\"Name\">\n <ion-select-option *ngFor=\"let name of possibleNames\" [value]=\"name\">{{ name }}</ion-select-option>\n </ion-select>\n </ion-col> -->\n\n <ion-col class=\"ion-text-start\" id=\"map-date\" size-xs=\"5\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col class=\"ion-hide-md-down\">\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"></ion-toggle>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <div id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\">\n <ion-img id=\"map-range\" src=\"assets/r2r_range.svg\"/>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative;width:800px;height:400px}#map-div{position:absolute;inset:0}#map-range{height:400px}#map-buttons{min-width:100px}ion-select{width:100%;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2$1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2$1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2$1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2$1.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i2$1.IonRow, selector: "ion-row" }, { kind: "component", type: i2$1.IonSelect, selector: "ion-select", inputs: ["cancelText", "compareWith", "disabled", "interface", "interfaceOptions", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "value"] }, { kind: "component", type: i2$1.IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: i2$1.IonToggle, selector: "ion-toggle", inputs: ["checked", "color", "disabled", "enableOnOffLabels", "mode", "name", "value"] }, { kind: "directive", type: i2$1.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i2$1.SelectValueAccessor, selector: "ion-range, ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
292
292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainMapComponent, decorators: [{
293
293
  type: Component,
294
- args: [{ selector: 'raain-map', template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-sm=\"3\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <!--\n <ion-button (click)=\"play()\" [hidden]=\"autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"play\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n -->\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n\n <!--\n <ion-col id=\"map-timeframe\" size-sm=\"4\">\n <ion-select (ionChange)=\"showTimeframe()\" [(ngModel)]=\"timeframeNameToShow\" [value]=\"timeframeNameToShow\"\n interface=\"popover\" placeholder=\"Name\">\n <ion-select-option *ngFor=\"let name of possibleNames\" [value]=\"name\">{{ name }}</ion-select-option>\n </ion-select>\n </ion-col> -->\n\n <ion-col class=\"ion-text-start\" id=\"map-date\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col>\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"></ion-toggle>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <div id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\">\n <ion-img id=\"map-range\" src=\"assets/r2r_range.svg\"/>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative;width:800px;height:400px}#map-div{position:absolute;inset:0}#map-range{height:400px}#map-buttons{min-width:180px}ion-select{width:100%;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}\n"] }]
294
+ args: [{ selector: 'raain-map', template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-xs=\"2\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <!--\n <ion-button (click)=\"play()\" [hidden]=\"autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"play\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n -->\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n\n <!--\n <ion-col id=\"map-timeframe\" size-sm=\"4\">\n <ion-select (ionChange)=\"showTimeframe()\" [(ngModel)]=\"timeframeNameToShow\" [value]=\"timeframeNameToShow\"\n interface=\"popover\" placeholder=\"Name\">\n <ion-select-option *ngFor=\"let name of possibleNames\" [value]=\"name\">{{ name }}</ion-select-option>\n </ion-select>\n </ion-col> -->\n\n <ion-col class=\"ion-text-start\" id=\"map-date\" size-xs=\"5\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col class=\"ion-hide-md-down\">\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"></ion-toggle>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <div id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\">\n <ion-img id=\"map-range\" src=\"assets/r2r_range.svg\"/>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative;width:800px;height:400px}#map-div{position:absolute;inset:0}#map-range{height:400px}#map-buttons{min-width:100px}ion-select{width:100%;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}\n"] }]
295
295
  }], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { coordinates: [{
296
296
  type: Input
297
297
  }], markers: [{
@@ -444,6 +444,7 @@ class RaainConfigurationComponent {
444
444
  this.changedPoints = new EventEmitter();
445
445
  this.minPoint = { x: 0, y: 0 };
446
446
  this.maxPoint = { x: 300, y: 100 };
447
+ this.logStyle = false;
447
448
  this.onSizeChanged = () => {
448
449
  };
449
450
  this.onDrag = (e) => {
@@ -478,10 +479,47 @@ class RaainConfigurationComponent {
478
479
  return;
479
480
  }
480
481
  this.created = true;
482
+ let inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, false, [], this.onDrag);
483
+ if (this.logStyle) {
484
+ inputs = new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, true, [
485
+ {
486
+ color: Tools.getTransparency(ChartScaleColors['0.4'], 0.8),
487
+ yStart: Math.log10(0.1),
488
+ yEnd: Math.log10(0.4)
489
+ },
490
+ { color: Tools.getTransparency(ChartScaleColors['1'], 0.8), yStart: Math.log10(0.4), yEnd: Math.log10(1) },
491
+ { color: Tools.getTransparency(ChartScaleColors['3'], 0.8), yStart: Math.log10(1), yEnd: Math.log10(3) },
492
+ { color: Tools.getTransparency(ChartScaleColors['10'], 0.8), yStart: Math.log10(3), yEnd: Math.log10(10) },
493
+ { color: Tools.getTransparency(ChartScaleColors['20'], 0.8), yStart: Math.log10(10), yEnd: Math.log10(20) },
494
+ { color: Tools.getTransparency(ChartScaleColors['30'], 0.8), yStart: Math.log10(20), yEnd: Math.log10(30) },
495
+ { color: Tools.getTransparency(ChartScaleColors['50'], 0.8), yStart: Math.log10(30), yEnd: Math.log10(50) },
496
+ { color: Tools.getTransparency(ChartScaleColors['100'], 0.8), yStart: Math.log10(50), yEnd: Math.log10(100) },
497
+ {
498
+ color: Tools.getTransparency(ChartScaleColors['150'], 0.8),
499
+ yStart: Math.log10(100),
500
+ yEnd: Math.log10(150)
501
+ },
502
+ {
503
+ color: Tools.getTransparency(ChartScaleColors['200'], 0.8),
504
+ yStart: Math.log10(150),
505
+ yEnd: Math.log10(200)
506
+ },
507
+ {
508
+ color: Tools.getTransparency(ChartScaleColors['250'], 0.8),
509
+ yStart: Math.log10(200),
510
+ yEnd: Math.log10(250)
511
+ },
512
+ {
513
+ color: Tools.getTransparency(ChartScaleColors['300'], 0.8),
514
+ yStart: Math.log10(250),
515
+ yEnd: Math.log10(300)
516
+ },
517
+ ], this.onDrag);
518
+ }
481
519
  this.ngZone.runOutsideAngular(() => {
482
520
  setTimeout(() => {
483
521
  const factory = new ElementsFactory();
484
- this.configurationElement = factory.createConfiguration(this.canvasElement.nativeElement, new ConfigurationElementInput(this.points, this.minPoint, this.maxPoint, this.onDrag));
522
+ this.configurationElement = factory.createConfiguration(this.canvasElement.nativeElement, inputs);
485
523
  }, 10);
486
524
  });
487
525
  }
@@ -516,7 +554,7 @@ class RaainConfigurationComponent {
516
554
  }
517
555
  }
518
556
  RaainConfigurationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainConfigurationComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
519
- RaainConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainConfigurationComponent, selector: "raain-configuration", inputs: { points: "points", currentHeight: "currentHeight", currentWidth: "currentWidth", minPoint: "minPoint", maxPoint: "maxPoint" }, outputs: { changedPoints: "changedPoints" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"currentWidth\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n <ion-button (click)=\"reset(2)\" size=\"small\">reset 2</ion-button>\n <ion-button (click)=\"reset(4)\" size=\"small\">reset 4</ion-button>\n <ion-button (click)=\"reset(6)\" size=\"small\">reset 6</ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: i2$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2$1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2$1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2$1.IonRow, selector: "ion-row" }] });
557
+ RaainConfigurationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainConfigurationComponent, selector: "raain-configuration", inputs: { points: "points", currentHeight: "currentHeight", currentWidth: "currentWidth", minPoint: "minPoint", maxPoint: "maxPoint", logStyle: "logStyle" }, outputs: { changedPoints: "changedPoints" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "canvasElement", first: true, predicate: ["canvasElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"currentWidth\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n <ion-button (click)=\"reset(2)\" size=\"small\">reset 2</ion-button>\n <ion-button (click)=\"reset(4)\" size=\"small\">reset 4</ion-button>\n <ion-button (click)=\"reset(6)\" size=\"small\">reset 6</ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"], dependencies: [{ kind: "component", type: i2$1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2$1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2$1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2$1.IonRow, selector: "ion-row" }] });
520
558
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainConfigurationComponent, decorators: [{
521
559
  type: Component,
522
560
  args: [{ selector: 'raain-configuration', template: "<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"currentWidth\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n <ion-button (click)=\"reset(2)\" size=\"small\">reset 2</ion-button>\n <ion-button (click)=\"reset(4)\" size=\"small\">reset 4</ion-button>\n <ion-button (click)=\"reset(6)\" size=\"small\">reset 6</ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n", styles: ["#canvas-container{position:relative;width:100%;height:100%}\n"] }]
@@ -532,6 +570,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
532
570
  type: Input
533
571
  }], maxPoint: [{
534
572
  type: Input
573
+ }], logStyle: [{
574
+ type: Input
535
575
  }], canvasElement: [{
536
576
  type: ViewChild,
537
577
  args: ['canvasElement']