raain-app 1.2.1 → 1.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/profile.service.mjs +20 -13
- package/esm2020/raain-compare-stack/raain-compare-stack.component.mjs +1 -1
- package/esm2020/raain-date-focus/raain-date-focus.component.mjs +7 -4
- package/esm2020/raain-map/raain-map.component.mjs +4 -2
- package/fesm2015/raain-app.mjs +35 -24
- package/fesm2015/raain-app.mjs.map +1 -1
- package/fesm2020/raain-app.mjs +35 -24
- package/fesm2020/raain-app.mjs.map +1 -1
- package/package.json +1 -1
- package/raain-compare-stack/raain-compare-stack.component.d.ts +1 -1
- package/raain-date-focus/raain-date-focus.component.d.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raain-app.mjs","sources":["../../src/app/shared/raain-map/raain-map.component.ts","../../src/app/shared/raain-map/raain-map.component.html","../../src/app/shared/raain-compare/raain-compare.component.ts","../../src/app/shared/raain-compare/raain-compare.component.html","../../src/app/shared/xytype.ts","../../src/app/shared/raain-configuration/raain-configuration.component.ts","../../src/app/shared/raain-configuration/raain-configuration.component.html","../../src/app/shared/raain-date-focus/raain-date-focus.component.ts","../../src/app/shared/raain-date-focus/raain-date-focus.component.html","../../src/app/shared/raain-speed/raain-speed.component.ts","../../src/app/shared/raain-speed/raain-speed.component.html","../../src/app/shared/raain-compare-stack/raain-compare-stack.component.ts","../../src/app/shared/raain-compare-stack/raain-compare-stack.component.html","../../src/app/shared/tools/CompareManager.ts","../../src/app/shared/tools/FrameSet.ts","../../src/app/shared/tools/GaugeNodeFilter.ts","../../src/app/shared/tools/RefreshManager.ts","../../src/app/shared/tools/ReportManager.ts","../../src/app/shared/cache.service.ts","../../src/app/shared/fidj-storage.model.ts","../../src/app/shared/storage.service.ts","../../src/app/shared/profile.service.ts","../../src/app/shared/radar.service.ts","../../src/app/shared/shared.const.ts","../../src/app/shared/shared.pipe.ts","../../src/app/shared/shared.module.ts","../../src/app/shared/raain-app.ts"],"sourcesContent":["import {\n AfterViewChecked,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {IconOptions} from 'leaflet';\nimport {CartesianMapValue, ElementsFactory, FrameContainer, MapElement, MapLatLng, TimeframeContainers} from 'raain-ui';\n\n@Component({\n selector: 'raain-map',\n templateUrl: './raain-map.component.html',\n styleUrls: ['./raain-map.component.scss'],\n})\nexport class RaainMapComponent implements AfterViewChecked, OnDestroy, OnChanges {\n\n @Input()\n public coordinates: MapLatLng;\n @Input()\n public markers: {\n gauges: MapLatLng[],\n selectedGauges: MapLatLng[],\n pixels: MapLatLng[],\n borders: MapLatLng[],\n gaugesInCompare: MapLatLng[],\n pixelsSolution: MapLatLng[],\n };\n @Input()\n public timeframeContainers: TimeframeContainers;\n @Input()\n public autoplay = false;\n @Input()\n public showMarkers = true;\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n\n @Input()\n public timeframeDates: Date[] = [];\n @Input()\n public defaultDate: Date;\n\n @Input()\n public sumValues: any;\n @Input()\n public sumFn: any;\n public sumResult: string;\n\n @Output()\n public selectedMarker = new EventEmitter<MapLatLng>();\n\n @Output()\n public changedDate = new EventEmitter<Date>();\n\n public mcText;\n public nextDate: Date;\n public possibleNames: string[];\n public possibleDates: Date[];\n public dateToShow: Date;\n public dateToShowAsString: string;\n public timeframeNameToShow: string;\n protected currentFrameContainer: FrameContainer;\n\n @ViewChild('primaryMap')\n protected mapDivRef: ElementRef;\n\n private mapElement: MapElement;\n private onSizeChanged;\n private created;\n private iconOptions: {\n gauges: IconOptions,\n selectedGauges: IconOptions,\n pixels: IconOptions,\n borders: IconOptions,\n gaugesInCompare: IconOptions,\n pixelsSolution: IconOptions,\n };\n\n constructor(private ngZone: NgZone) {\n this.delete();\n\n // shadowUrl ?\n const iconSize = [40, 40]; // size of the icon\n const iconAnchor = [20, 20]; // point of the icon which will correspond to marker's location\n const pixelSize = [41, 41];\n const pixelAnchor = [20, 20];\n const popupAnchor = [0, -20]; // point from which the popup should open relative to the iconAnchor\n this.iconOptions = {\n gauges: {iconUrl: './assets/maps/marker-pluvio.png', iconSize, iconAnchor, popupAnchor},\n gaugesInCompare: {iconUrl: './assets/maps/marker-pluvio-diag.png', iconSize, iconAnchor, popupAnchor},\n selectedGauges: {iconUrl: './assets/maps/marker-pluvio-diag-select.png', iconSize, iconAnchor, popupAnchor},\n pixels: {iconUrl: './assets/maps/marker-rain.png', iconSize, iconAnchor, popupAnchor},\n pixelsSolution: {iconUrl: './assets/maps/marker-rain2.png', iconSize: pixelSize, iconAnchor: pixelAnchor, popupAnchor},\n borders: {iconUrl: './assets/maps/marker-shadow.png', iconSize, iconAnchor, popupAnchor},\n };\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n public showTimeframe(force = false) {\n\n // const {frameContainer, layer} = this.timeframeContainers.showTimeframe(this.timeframeNameToShow);\n // this.currentFrameContainer = frameContainer;\n\n if (!this.dateToShowAsString\n || (!force && new Date(this.dateToShowAsString).getTime() === this.dateToShow?.getTime())) {\n return;\n }\n\n this.dateToShow = new Date(this.dateToShowAsString);\n this.changedDate.emit(this.dateToShow);\n }\n\n public next() {\n if (!this.possibleDates || this.possibleDates.length === 0) {\n return;\n }\n\n const index = this.getDateToShowIndex();\n this.dateToShow = (index + 1) < this.possibleDates.length ? this.possibleDates[index + 1] : this.possibleDates[0];\n this.dateToShowAsString = this.dateToShow.toISOString();\n\n this.showTimeframe(true);\n if (this.autoplay) {\n window.setTimeout(() => this.next(), 2000);\n }\n }\n\n public previous() {\n this.stop();\n if (!this.possibleDates || this.possibleDates.length === 0) {\n return;\n }\n\n const index = this.getDateToShowIndex();\n this.dateToShow = index > 0 ? this.possibleDates[index - 1] : this.possibleDates[0];\n this.dateToShowAsString = this.dateToShow.toISOString();\n\n this.showTimeframe(true);\n }\n\n public play() {\n this.autoplay = true;\n this.next();\n }\n\n public stop() {\n this.autoplay = false;\n }\n\n public changeShowMarkers() {\n if (!this.mapElement?.markersLayer || !this.mapElement?.mapLeaflet) {\n return;\n }\n\n if (this.showMarkers) {\n this.mapElement.markersLayer.addToMap(this.mapElement.mapLeaflet);\n } else {\n this.mapElement.markersLayer.removeFromMap(this.mapElement.mapLeaflet);\n }\n }\n\n private create() {\n\n const created = this.created;\n if (created) {\n return;\n }\n this.created = true;\n const markers = [\n {iconsLatLng: this.markers.gauges, iconsOptions: this.iconOptions.gauges},\n {iconsLatLng: this.markers.selectedGauges, iconsOptions: this.iconOptions.selectedGauges},\n {iconsLatLng: this.markers.gaugesInCompare, iconsOptions: this.iconOptions.gaugesInCompare},\n {iconsLatLng: this.markers.pixels, iconsOptions: this.iconOptions.pixels},\n {iconsLatLng: this.markers.pixelsSolution, iconsOptions: this.iconOptions.pixelsSolution},\n // {iconsLatLng: this.markers.borders, iconsOptions: this.iconOptions.borders},\n ];\n\n const factory = new ElementsFactory(this.coordinates, true);\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n\n const createdOutside = this.created;\n if (!createdOutside) {\n return;\n }\n\n this.mapElement = factory.createMap(this.mapDivRef.nativeElement, {timeframeContainers: this.timeframeContainers, markers});\n\n this.mapElement.mapLeaflet?.on('mousemove', (evt) => this.onMapMouseMove(evt));\n this.mapElement.markersProduced?.forEach(m => m.on('click', evt => this.onMapClick(evt)));\n this.onSizeChanged = () => {\n this.mapElement.markersLayer?.setCurrentWidth(this.currentWidth);\n this.mapElement.markersLayer?.setCurrentHeight(this.currentHeight);\n this.mapElement.compositeLayer?.setCurrentWidth(this.currentWidth);\n this.mapElement.compositeLayer?.setCurrentHeight(this.currentHeight);\n this.mapElement.mapLeaflet?.invalidateSize({animate: true});\n }\n this.updateMapSize();\n // this.timeframeNameToShow = this.possibleNames.length > 0 ? this.possibleNames[0] : null;\n // this.toggleHideMarkers(!this.hideMarkers);\n this.changeNavigation(this.defaultDate);\n }, 100);\n });\n\n }\n\n private delete() {\n this.mapElement?.mapLeaflet?.remove();\n this.mapElement = undefined;\n this.mcText = '';\n this.nextDate = undefined;\n this.possibleNames = [];\n this.possibleDates = [];\n this.timeframeNameToShow = undefined;\n this.dateToShow = undefined;\n this.dateToShowAsString = undefined;\n this.onSizeChanged = () => {\n };\n this.currentFrameContainer = null;\n\n this.created = false;\n }\n\n private change(changes: SimpleChanges) {\n // console.log('map changes', changes);\n\n let possibleNewDefaultDate: Date;\n if (changes.defaultDate) {\n if (new Date(changes.defaultDate.currentValue).getTime() === new Date(changes.defaultDate.previousValue).getTime()) {\n return;\n }\n possibleNewDefaultDate = this.defaultDate;\n }\n\n if (changes.markers && this.mapElement?.markersLayer) {\n\n const markers = [\n {iconsLatLng: this.markers.gauges, iconOptions: this.iconOptions.gauges},\n {iconsLatLng: this.markers.selectedGauges, iconOptions: this.iconOptions.selectedGauges},\n {iconsLatLng: this.markers.gaugesInCompare, iconOptions: this.iconOptions.gaugesInCompare},\n {iconsLatLng: this.markers.pixels, iconOptions: this.iconOptions.pixels},\n {iconsLatLng: this.markers.pixelsSolution, iconOptions: this.iconOptions.pixelsSolution},\n // {iconsLatLng: this.markers.borders, iconOptions: this.iconOptions.borders},\n ];\n const markersProduced = this.mapElement.markersLayer.render(markers).markers;\n if (markersProduced) {\n markersProduced.forEach(m => m.on('click', evt => this.onMapClick(evt)));\n if (this.showMarkers) {\n this.mapElement.markersLayer.removeFromMap(this.mapElement.mapLeaflet);\n this.mapElement.markersLayer.addToMap(this.mapElement.mapLeaflet);\n }\n }\n }\n\n if (changes.markers && this.markers.selectedGauges.length === 1) {\n const selectedGauge = this.markers.selectedGauges[0];\n this.mapElement.mapLeaflet.setView(selectedGauge, 10);\n }\n\n if (this.mapElement && changes.timeframeContainers) {\n this.mapElement.updateMapTimeframe(this.timeframeContainers);\n this.currentFrameContainer = this.timeframeContainers?.containers[0]?.timeframe[0];\n }\n\n if (this.mapElement?.compositeLayer && changes.sumValues) {\n const drawer = this.mapElement.compositeLayer.getFirstDrawer();\n this.sumResult = drawer?.getExecOfVisiblePoints(this.sumValues, this.sumFn);\n }\n\n this.changeNavigation(possibleNewDefaultDate);\n }\n\n private changeNavigation(defaultDate?: Date) {\n // update possible names\n if (this.timeframeContainers && this.timeframeContainers.containers.length) {\n this.possibleNames = [];\n this.timeframeContainers?.containers.forEach(c => {\n if (this.possibleNames.indexOf(c.name) < 0) {\n this.possibleNames.push(c.name);\n }\n });\n this.timeframeNameToShow = this.possibleNames.length > 0 ? this.possibleNames[0] : null;\n }\n\n // update possible dates\n this.possibleDates = this.timeframeDates;\n if (!this.possibleDates || this.possibleDates.length === 0) {\n return;\n }\n\n // update dateToShow\n if (defaultDate && this.possibleDates.filter(d => d.getTime() === defaultDate.getTime()).length === 1) {\n this.dateToShow = defaultDate;\n }\n if (!this.dateToShow && this.possibleDates.length > 0 &&\n this.possibleDates.filter(d => d.getTime() === this.dateToShow?.getTime()).length !== 1) {\n this.dateToShow = this.possibleDates[0];\n }\n this.dateToShowAsString = this.dateToShow.toISOString();\n }\n\n private getDateToShowIndex(): number {\n\n let index = 0;\n for (const date of this.possibleDates) {\n if (date.toISOString().substring(0, 19) === this.dateToShowAsString.substring(0, 19)) {\n break;\n }\n index++;\n }\n return index;\n }\n\n private onMapMouseMove(evt: { latlng: { lat: number, lng: number } }): void {\n\n const lat: string = evt.latlng.lat.toFixed(3);\n const lng: string = evt.latlng.lng.toFixed(3);\n\n let value = NaN;\n let valueLat = NaN, valueLng = NaN, valueLat2 = NaN, valueLng2 = NaN;\n if (this.currentFrameContainer) {\n const valueSelected = (this.currentFrameContainer.values as CartesianMapValue[])\n .filter((v: CartesianMapValue) => {\n return v.lat <= evt.latlng.lat && evt.latlng.lat < v.lat2 &&\n v.lng <= evt.latlng.lng && evt.latlng.lng < v.lng2;\n });\n\n if (valueSelected.length === 1) {\n value = Math.round(valueSelected[0].value * 1000) / 1000;\n valueLat = Math.round(valueSelected[0].lat * 1000) / 1000;\n valueLng = Math.round(valueSelected[0].lng * 1000) / 1000;\n valueLat2 = Math.round(valueSelected[0].lat2 * 1000) / 1000;\n valueLng2 = Math.round(valueSelected[0].lng2 * 1000) / 1000;\n } else {\n // console.warn('valueSelected issue ?', valueSelected);\n }\n }\n\n this.ngZone.run(() => {\n this.mcText = `Latitude: ${lat} Longitude: ${lng} Value: [${valueLat} ${valueLng} | ${valueLat2} ${valueLng2}] ${value}`;\n });\n }\n\n private onMapClick(evt: any): void {\n this.selectedMarker.emit(new MapLatLng(\n evt.latlng?.lat, evt.latlng?.lng, undefined,\n evt.id, evt.name));\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private updateMapSize(): void {\n\n const mapDivWidth = this.mapDivRef.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 21;\n let currentWidth = mapDivWidth ||\n (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth);\n const currentHeight = this.currentHeight ||\n (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n\n}\n","<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","import {\n AfterViewChecked,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {CompareElement, CompareElementInput, ElementsFactory} from 'raain-ui';\nimport {XYType} from '../xytype';\n\n@Component({\n selector: 'raain-compare',\n templateUrl: './raain-compare.component.html',\n styleUrls: ['./raain-compare.component.scss'],\n})\nexport class RaainCompareComponent implements AfterViewChecked, OnDestroy, OnChanges {\n\n @Input()\n public points: Array<XYType>;\n\n @Input()\n public pointMax: XYType;\n\n @Input()\n public remarks: string;\n\n @Input()\n public compareIndex: number;\n\n @Input()\n public currentHeight: number;\n\n @Input()\n public currentWidth: number;\n\n @Output()\n public selectedPoint = new EventEmitter<{ point: XYType, compareIndex: number }>();\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private compareElement: CompareElement;\n private onSizeChanged;\n private created;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {\n };\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n protected onClick(point: XYType): void {\n this.selectedPoint.emit({point, compareIndex: this.compareIndex});\n }\n\n protected changeData(newData: XYType[], newMaxLine?: XYType[]) {\n\n let changed = false;\n const dataset = this.compareElement?.chart?.data?.datasets[0];\n if (dataset) {\n dataset.data = newData;\n changed = true;\n }\n\n const line = this.compareElement?.chart?.data?.datasets[1];\n if (line) {\n line.data = newMaxLine;\n changed = true;\n }\n\n if (changed) {\n this.compareElement?.chart?.update();\n }\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n const factory = new ElementsFactory();\n this.compareElement = factory.createCompare(this.canvasElement.nativeElement,\n new CompareElementInput(this.points.map(p => {\n return {x: p.x, y: p.y, r: p.r, name: p.name, id: p.id};\n }),\n this.pointMax, this.onClick.bind(this)));\n }\n\n private delete() {\n if (this.compareElement) {\n this.compareElement?.chart?.destroy();\n }\n this.created = false;\n }\n\n private change(changes: SimpleChanges) {\n if (changes.points) {\n this.changeData(this.points, [{x: 0, y: 0}, this.pointMax]);\n }\n }\n\n private updateMapSize(): void {\n\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth = mapDivWidth ||\n (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth);\n const currentHeight = this.currentHeight ||\n (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n\n}\n","<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\">\n <div id=\"canvas-container\">\n <h1 *ngIf=\"remarks\">{{ remarks }}</h1>\n\n <!-- [style.height.px]=\"currentHeight\" [style.width.px]=\"currentWidth\" [width]=\"currentWidth\" [height]=\"currentHeight\"-->\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n</ion-grid>\n","export class XYType {\n constructor(public x: number,\n public y: number,\n public r?: number,\n public name?: string,\n public id?: string) {\n }\n}\n\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {ConfigurationElement, ConfigurationElementInput, ElementsFactory} from 'raain-ui';\nimport {XYType} from '../xytype';\n\n@Component({\n selector: 'raain-configuration',\n templateUrl: './raain-configuration.component.html',\n styleUrls: ['./raain-configuration.component.scss'],\n})\nexport class RaainConfigurationComponent implements AfterViewChecked, OnDestroy, OnChanges {\n\n @Input()\n public points: XYType[];\n\n @Output()\n public changedPoints = new EventEmitter<XYType[]>();\n\n @Input()\n public currentHeight: number;\n\n @Input()\n public currentWidth: number;\n\n @Input()\n public minPoint: XYType = {x: 0, y: 0};\n\n @Input()\n public maxPoint: XYType = {x: 300, y: 100};\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private configurationElement: ConfigurationElement;\n private onDrag;\n private onSizeChanged;\n private created;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {\n };\n this.onDrag = (e: any) => {\n this.changedPoints.emit(this.points);\n }\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n async reset(count = 4) {\n const points = [];\n for (let c = 0; c < count; c++) {\n points.push(new XYType((c + 1) * 10, (c + 1) * 10));\n }\n this.points = points;\n\n await this.delete();\n this.create();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n // this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const factory = new ElementsFactory();\n this.configurationElement = factory.createConfiguration(this.canvasElement.nativeElement,\n new ConfigurationElementInput(this.points,\n this.minPoint,\n this.maxPoint,\n this.onDrag));\n }, 10);\n });\n\n }\n\n private async delete() {\n await this.configurationElement?.chart?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n // console.log('changed', changes);\n await this.delete();\n this.create();\n }\n\n private updateMapSize(): void {\n\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth = mapDivWidth ||\n (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth);\n const currentHeight = this.currentHeight ||\n (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<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","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {DateRange, DateStatusElement, DateStatusElementInput, ElementsFactory} from 'raain-ui';\n\n@Component({\n selector: 'raain-date-focus',\n templateUrl: './raain-date-focus.component.html',\n styleUrls: ['./raain-date-focus.component.scss'],\n})\nexport class RaainDateFocusComponent implements AfterViewChecked, OnDestroy, OnChanges {\n\n @Input()\n public points: {\n label: string,\n style: string,\n values: { date: Date, value: number }[],\n }[];\n\n @Input()\n public focusDate: Date;\n @Input()\n public focusRange: DateRange;\n\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private dateStatusElement: DateStatusElement;\n private onSizeChanged;\n private created: boolean;\n\n constructor(private ngZone: NgZone) {\n this.focusDate = new Date()\n this.focusRange = DateRange.CENTURY;\n this.onSizeChanged = () => {\n };\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n focusPrevious() {\n this.dateStatusElement.focusPrevious();\n }\n\n focusReset() {\n this.dateStatusElement.focusReset();\n }\n\n focusNext() {\n this.dateStatusElement.focusNext();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n // this.ngZone.runOutsideAngular(() => {\n // setTimeout(() => {\n const factory = new ElementsFactory();\n try {\n this.dateStatusElement = factory.createDateStatus(this.canvasElement.nativeElement,\n new DateStatusElementInput(this.points, this.focusDate, this.focusRange));\n } catch (e) {\n console.warn('focus creation issue', e);\n }\n // }, 50);\n // });\n\n }\n\n private async delete() {\n await this.dateStatusElement?.chart?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n await this.delete();\n this.create();\n }\n\n private updateMapSize(): void {\n\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth = mapDivWidth ||\n (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth);\n const currentHeight = this.currentHeight ||\n (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<ion-grid>\n\n <ion-row>\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusReset()\">\n View all dates\n </ion-button>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-end\">\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusPrevious()\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-col>\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-col>\n <ion-col class=\"ion-text-left\">\n <ion-button (click)=\"focusNext()\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n </ion-row>\n</ion-grid>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {ElementsFactory, SpeedMatrixElementInput} from 'raain-ui';\nimport {PositionValue} from 'raain-model';\n\n@Component({\n selector: 'raain-speed',\n templateUrl: './raain-speed.component.html',\n styleUrls: ['./raain-speed.component.scss'],\n})\nexport class RaainSpeedComponent implements AfterViewChecked, OnDestroy, OnChanges {\n\n @Input()\n public compareSpeedMatrix: PositionValue[];\n\n @Input()\n public compareTrustedIndicator: number;\n\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n public hide = false;\n @ViewChild('canvasSpeedElement')\n protected canvasSpeedElement: ElementRef;\n private onSizeChanged;\n private created;\n\n constructor(private ngZone: NgZone) {\n this.delete();\n this.onSizeChanged = () => {\n };\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created || !this.compareSpeedMatrix?.length) {\n return;\n }\n this.created = true;\n\n // this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const factory = new ElementsFactory();\n factory.createSpeedMatrixIndicator(this.canvasSpeedElement.nativeElement,\n new SpeedMatrixElementInput(this.compareSpeedMatrix, this.compareTrustedIndicator));\n }, 10);\n // });\n\n }\n\n private delete() {\n this.created = false;\n this.hide = false;\n }\n\n private change(changes: SimpleChanges) {\n if (changes.compareSpeedMatrix) {\n if (!this.compareSpeedMatrix?.length) {\n this.hide = true;\n return;\n }\n }\n\n setTimeout(() => {\n this.delete();\n this.create();\n }, 10);\n }\n\n private updateMapSize(): void {\n\n const mapDivWidth = this.canvasSpeedElement.nativeElement.parentNode?.parentNode['clientWidth'];\n\n const currentWidth = mapDivWidth ||\n (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth);\n const currentHeight = this.currentHeight ||\n (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<div id=\"container\">\n <div id=\"canvas-speed-matrix\">\n <div [hidden]=\"hide\">\n <canvas #canvasSpeedElement id=\"indic1\"></canvas>\n </div>\n <div [hidden]=\"!hide\">\n <span id=\"hiddenSquare\"> </span>\n </div>\n <!-- <span>compareTrustedIndicator {{ compareTrustedIndicator }}</span> -->\n </div>\n</div>\n","import {Component, EventEmitter, Input, NgZone, Output} from '@angular/core';\nimport {XYType} from '../xytype';\nimport {CompareManager} from '../tools/CompareManager';\n\n@Component({\n selector: 'raain-compare-stack',\n templateUrl: './raain-compare-stack.component.html',\n styleUrls: ['./raain-compare-stack.component.scss'],\n})\nexport class RaainCompareStackComponent {\n\n @Input()\n public compareManager: CompareManager;\n\n @Input()\n public currentHeight: number;\n\n @Output()\n public selectedPoint = new EventEmitter<{ point: XYType, compareIndex: number }>();\n\n @Input()\n public cumulative: boolean;\n\n\n constructor(private ngZone: NgZone) {\n }\n\n protected onClick(e: { point: XYType, compareIndex: number }): void {\n this.selectedPoint.emit({point: e.point, compareIndex: e.compareIndex});\n }\n\n\n}\n","<ion-grid>\n <ion-row *ngIf=\"cumulative\">\n <ion-col size=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>Cumulative</ion-card-header>\n <ion-card-content>\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"0\"\n [currentHeight]=\"500\"\n [pointMax]=\"compareManager.globalComparePointsMax\"\n [points]=\"compareManager.globalComparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row *ngIf=\"!cumulative\">\n\n <!--\n <ion-col>\n <ion-card id=\"card-matrix\">\n <div *ngIf=\"compareManager?.compareNames?.length\">\n <raain-speed [compareSpeedMatrix]=\"compareManager.compareSpeedMatrix\"\n [compareTrustedIndicator]=\"compareManager.compareTrustedIndicator\"\n [currentHeight]=\"300\"\n ></raain-speed>\n </div>\n <ion-card-content>\n {{ compareManager?.compareVersion }}\n </ion-card-content>\n </ion-card>\n </ion-col> -->\n\n <ion-col *ngFor=\"let compare of compareManager?.uiCompares; index as compareIndex\" size=\"12\" size-md=\"6\">\n <ion-card class=\"card-compare\">\n <ion-card-header>{{ compare.name }} {{ compare.remarks }}\n </ion-card-header>\n <ion-card-content *ngIf=\"compare.comparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"compareIndex\"\n [currentHeight]=\"500\"\n [pointMax]=\"compare.comparePointsMax\"\n [points]=\"compare.comparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!--\n <ion-card id=\"card-selected-gauge\" slot=\"end\">\n <ion-card-content>\n <ion-accordion-group>\n\n <ion-accordion value=\"selected\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>debug</ion-label>\n </ion-item>\n\n <div class=\"ion-padding\" slot=\"content\">\n date: {{ currentTimeframeTarget.date | date:'yyyy-MM-dd HH:mm:ss' }}<br>\n radarMeasureId: {{ currentTimeframeTarget.radarMeasureId }}<br>\n rainComputationId: {{ currentTimeframeTarget.rainComputationId }}<br>\n rainComputationVersion: {{ currentTimeframeTarget.rainComputationVersion }}<br>\n rainComputationQualitiesPerDate :\n <ul>\n <li *ngFor=\"let rcq of currentTimeframeTarget.rainComputationQualitiesPerDate\">\n {{ rcq.version }} - {{ rcq.id }}\n </li>\n </ul>\n </div>\n\n </ion-accordion>\n <ion-accordion *ngIf=\"selectedGauge\" value=\"context\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>{{ selectedGaugeInPointsDetail }}</ion-label>\n </ion-item>\n <div [innerHTML]=\"formatLabelOfSelectedGauge(selectedGaugeInPoints)\" class=\"ion-padding\"\n slot=\"content\"></div>\n </ion-accordion>\n </ion-accordion-group>\n </ion-card-content>\n </ion-card>\n -->\n </ion-row>\n</ion-grid>\n","import {MapLatLng} from 'raain-ui';\nimport {IComparePerDate, ICompares, PositionValue, QualityPoint, RainComputationQuality, RainNode, SpeedMatrixContainer} from 'raain-model';\nimport {XYType} from '../xytype';\nimport {ProfileService} from '../profile.service';\nimport {FrameSet} from './FrameSet';\n\nexport interface ICompareTarget {\n date: Date;\n rainComputationId: string;\n rainComputationQualityId: string;\n}\n\nexport interface IUICompare {\n name: string;\n comparePoints: XYType[];\n comparePointsMax: XYType;\n comparePointsHistory: QualityPoint[];\n remarks: string;\n}\n\nexport class CompareManager {\n\n // public computed$: Observable<boolean>;\n\n public gaugesInCompare: MapLatLng[];\n public selectedGauges: MapLatLng[];\n public selectedPixels: MapLatLng[];\n public pixelsSolutions: MapLatLng[][];\n\n // from comparesTimeline\n public compareNames: string[];\n public uiCompares: IUICompare[];\n public compareSpeedMatrix: PositionValue[];\n public compareVersion: string;\n public compareTrustedIndicator: number;\n\n public currentQualityDoneDate: Date;\n public currentQualityLaunchedBy: string;\n public currentQualityTimeSpentInMs: number;\n public globalComparePoints: XYType[];\n public globalComparePointsMax: XYType;\n\n protected buildCompares: ICompares;\n protected selectedGauge: QualityPoint;\n protected selectedGaugeInPoints: QualityPoint;\n protected selectedGaugeInPointsDetail: string;\n protected rainComputationQualitiesPerDate: any;\n\n constructor(\n protected rainNode: RainNode,\n protected profileService: ProfileService,\n public onChanges: () => void = () => {\n }\n ) {\n this.cleanAll();\n }\n\n protected static CompareDate(date1: Date, date2: Date, minutes: number): boolean {\n\n const date1AsDate: Date = new Date(date1.getTime());\n const date2Diff = new Date(date2.getTime());\n date2Diff.setMinutes(date2Diff.getMinutes() + minutes);\n const diff = Math.round((date1AsDate.getTime() - date2Diff.getTime()) / (60 * 1000));\n return diff === 0;\n }\n\n public cleanAll() {\n this.gaugesInCompare = [];\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n\n this.buildCompares = {\n comparesPerDate: [],\n compareCumulative: null\n };\n this.globalComparePoints = [];\n this.globalComparePointsMax = new XYType(0, 0);\n this.rainComputationQualitiesPerDate = {};\n\n this.selectedGauge = null;\n this.selectedGaugeInPoints = null;\n this.cleanCompareQuality('no compare yet');\n }\n\n async refreshCompareQuality(frameSet: FrameSet) {\n\n const comparePerDate = this.getComparePerDate(frameSet.date);\n\n if (!comparePerDate || !comparePerDate.rainComputationQuality?.qualitySpeedMatrixContainer) {\n this.cleanCompareQuality('no current quality ' + Object.keys(this.rainComputationQualitiesPerDate));\n this.onChanges();\n return;\n }\n\n const uiCompares: IUICompare[] = comparePerDate.compareTimeline.map(c => {\n return {\n name: c.name,\n comparePoints: c.qualityPoints.map(p => new XYType(p.getGaugeValue(), p.getRainValue(), 2, p.gaugeLabel, p.gaugeId)),\n comparePointsMax: new XYType(c.maxValue + 20, c.maxValue + 20),\n comparePointsHistory: c.qualityPointsLegacy,\n remarks: c.remarks\n };\n });\n\n this.currentQualityDoneDate = comparePerDate.rainComputationQuality.isDoneDate;\n this.currentQualityTimeSpentInMs = comparePerDate.rainComputationQuality.timeSpentInMs;\n this.currentQualityLaunchedBy = comparePerDate.rainComputationQuality.launchedBy;\n this.compareVersion = comparePerDate.rainComputationQuality.getVersion();\n this.compareSpeedMatrix = comparePerDate.rainComputationQuality.qualitySpeedMatrixContainer.renderMergedMatrix({normalize: true});\n this.compareTrustedIndicator = comparePerDate.rainComputationQuality.qualitySpeedMatrixContainer.getTrustedIndicators()[0];\n this.compareNames = uiCompares.map(c => c.name);\n this.uiCompares = uiCompares;\n\n this.onChanges();\n }\n\n async refreshGlobalCompareQuality(targetsOrdered: ICompareTarget[],\n withCompareDuplicate: boolean) {\n\n try {\n await this.fetchRainComputationQualities(targetsOrdered);\n\n await this.buildComparesTimeline(targetsOrdered, withCompareDuplicate);\n\n if (!this.buildCompares.compareCumulative) {\n // throw Error('needs cumulative compare');\n return;\n }\n\n this.globalComparePoints = this.buildCompares.compareCumulative.qualityPoints\n .map(qp => new XYType(qp.getGaugeValue(), qp.getRainValue(), 2, qp.gaugeLabel, qp.gaugeId));\n this.globalComparePointsMax = new XYType(\n this.buildCompares.compareCumulative.maxValue + 20,\n this.buildCompares.compareCumulative.maxValue + 20);\n } catch (e) {\n console.warn(e);\n }\n }\n\n async setGauges() {\n // console.log('setGauges');\n\n const qualityPoints: QualityPoint[] = [];\n for (const compare of this.uiCompares) {\n for (const qualityPoint of compare.comparePointsHistory) {\n const alreadyAdded = qualityPoints.filter(p => p?.gaugeId === qualityPoint.gaugeId);\n if (alreadyAdded.length === 0) {\n qualityPoints.push(qualityPoint);\n }\n }\n }\n\n this.gaugesInCompare = qualityPoints.map(p => {\n return new MapLatLng(p.gaugeCartesianValue.lat, p.gaugeCartesianValue.lng, 0,\n p.gaugeId, p.gaugeLabel + '>' + p.getGaugeValue(),\n p.getGaugeValue());\n });\n\n this.resetSelectedGauges();\n }\n\n async selectGauge(gaugeId: string, compareIndex: number) {\n // console.log('selectGauge', gaugeId, compareIndex);\n\n if (gaugeId) {\n const xys = this.getCurrentQualityPoints(compareIndex).filter(p => p.gaugeId === gaugeId);\n this.selectedGauge = xys.length === 1 ? xys[0] : null;\n } else {\n this.selectedGauge = null;\n }\n\n if (!this.selectedGauge) {\n return this.resetSelectedGauges();\n }\n\n const selectedGaugeInPoints = this.getCurrentQualityPoints(compareIndex).filter(p => p.gaugeId === this.selectedGauge.gaugeId);\n let pixelsSolutions: MapLatLng[][] = [];\n\n if (selectedGaugeInPoints.length === 1) {\n const remarks = JSON.parse(selectedGaugeInPoints[0].remark)\n .sort((a, b) => a.criteriaAttemptedToBeMinimum - b.criteriaAttemptedToBeMinimum);\n console.log(remarks);\n pixelsSolutions = remarks\n .map(remark => remark.solutionForGauge.pixels\n .map(p => new MapLatLng(p.y + 0.005, p.x + 0.01, 0, '' + !remark.notPossible, '' + !remark.notPossible, 1)));\n\n const timeDeltaInMinutes = selectedGaugeInPoints[0].getTimeDeltaInMinutes();\n this.selectedGaugeInPointsDetail = '' + selectedGaugeInPoints[0].gaugeLabel + ' > '\n + Math.round(selectedGaugeInPoints[0].getGaugeValue() * 100) / 100 + ' / '\n + Math.round(selectedGaugeInPoints[0].getRainValue() * 100) / 100\n + ' dT=' + timeDeltaInMinutes;\n\n this.selectedGaugeInPoints = selectedGaugeInPoints[0];\n\n } else {\n this.selectedGaugeInPoints = null;\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n return;\n }\n\n this.selectedGauges = [\n new MapLatLng(this.selectedGaugeInPoints.gaugeCartesianValue.lat, this.selectedGaugeInPoints.gaugeCartesianValue.lng, undefined,\n this.selectedGaugeInPoints.gaugeId,\n this.selectedGaugeInPoints.gaugeLabel + '>' + this.selectedGaugeInPoints.gaugeCartesianValue.value,\n this.selectedGaugeInPoints.gaugeCartesianValue.value),\n ];\n\n this.selectGaugeInCompare();\n\n const pixels: MapLatLng[] = [];\n for (const rainCartesianValue of this.selectedGaugeInPoints.rainCartesianValues) {\n pixels.push(new MapLatLng(rainCartesianValue.lat + 0.005, rainCartesianValue.lng + 0.01));\n }\n this.selectedPixels = pixels;\n\n this.pixelsSolutions = pixelsSolutions;\n }\n\n protected async buildComparesTimeline(targetsOrdered: ICompareTarget[], withCompareDuplicate: boolean): Promise<ICompares> {\n const dates: Date[] = targetsOrdered.map(t => t.date);\n const qualities: RainComputationQuality[] = dates\n .map(d => this.getRainComputationQuality(d))\n .filter(d => !!d);\n this.buildCompares = SpeedMatrixContainer.BuildCompares(qualities, !withCompareDuplicate);\n return this.buildCompares;\n }\n\n protected getComparePerDate(date: Date): IComparePerDate {\n const existing = this.buildCompares.comparesPerDate.filter(c => c.date.getTime() === date.getTime());\n if (existing.length === 1) {\n return existing[0];\n }\n return null;\n }\n\n protected getCurrentQualityPoints(compareIndex: number) {\n if (compareIndex < 0 || this.compareNames.length < compareIndex) {\n return [];\n }\n\n return this.uiCompares[compareIndex].comparePointsHistory;\n }\n\n protected cleanCompareQuality(details?: string) {\n this.compareVersion = details;\n this.compareNames = [];\n this.uiCompares = [];\n this.compareSpeedMatrix = [];\n this.compareTrustedIndicator = undefined;\n\n this.currentQualityDoneDate = new Date(-1);\n this.currentQualityLaunchedBy = '';\n this.currentQualityTimeSpentInMs = -1;\n }\n\n protected async fetchRainComputationQualities(targetsOrdered: ICompareTarget[]) {\n for (const target of targetsOrdered) {\n if (!this.rainComputationQualitiesPerDate[target.date.toISOString()] && target.rainComputationQualityId) {\n try {\n this.rainComputationQualitiesPerDate[target.date.toISOString()] = await this.profileService\n .getRainCompareById(this.rainNode.getId(), target.rainComputationId, target.rainComputationQualityId);\n } catch (e) {\n console.log(e);\n }\n }\n }\n }\n\n protected getRainComputationQuality(date: Date): RainComputationQuality {\n return this.rainComputationQualitiesPerDate[date.toISOString()];\n }\n\n protected selectGaugeInCompare() {\n for (const compare of this.uiCompares) {\n const comparePoints = JSON.parse(JSON.stringify(compare.comparePoints));\n comparePoints.forEach(p => {\n if (p.id === this.selectedGaugeInPoints?.gaugeId) {\n p.r = 10;\n } else {\n p.r = 3;\n }\n });\n compare.comparePoints = comparePoints;\n }\n }\n\n protected resetSelectedGauges() {\n // console.log('resetSelectedGauges reset');\n this.selectedGauge = null;\n this.selectedGaugeInPoints = null;\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n this.selectGaugeInCompare();\n }\n}\n","export class FrameSet {\n constructor(public date: Date,\n public radarMeasureIds: string[] = [],\n public rainComputationId: string = null,\n public rainComputationVersion: string = null,\n public rainComputationQualities: {\n version: string,\n id: string\n }[] = []) {\n }\n}\n","import {GaugeNode, LatLng} from 'raain-model';\n\nexport class GaugeNodeFilter extends GaugeNode {\n\n public isIn = true;\n public distance = 0;\n\n constructor(json: any) {\n super(json);\n }\n\n approxDistanceFrom(center: LatLng): number {\n this.distance = Math.round((Math.pow(this.latitude - center.lat, 2) + Math.pow(this.longitude - center.lng, 2)) * 100 * 100) / 100;\n return this.distance;\n }\n\n add() {\n this.isIn = true;\n }\n\n remove() {\n this.isIn = false;\n }\n}\n","import {FrameSet} from './FrameSet';\nimport {Subject, takeUntil, timer} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\nimport {RainNode} from 'raain-model';\nimport {TimeframeContainer, TimeframeContainers} from 'raain-ui';\nimport {RadarService} from '../radar.service';\nimport {ProfileService} from '../profile.service';\nimport {CompareManager} from './CompareManager';\n\nexport class RefreshManager {\n\n public rainComputationMapDate: Date;\n public rainComputationMapDoneDate: Date;\n public rainComputationMapLaunchedBy: string;\n public rainComputationMapTimeSpentInMs: number;\n\n protected closeRefreshTimer: Subject<any>;\n protected countsPeriod: any;\n protected timeframesFromRadars: FrameSet[];\n protected timeframesFromRadarsExtended: FrameSet[];\n protected timeframeDates: Date[];\n protected begin: Date;\n protected end: Date;\n protected removeDuplicate: boolean;\n protected dataInternal: boolean;\n\n constructor(\n protected rainNode: RainNode,\n protected radarService: RadarService,\n protected profileService: ProfileService,\n protected compareManager: CompareManager,\n protected onRefreshInProgress: (countPeriods: any, timeframeDates: Date[]) => Promise<void>,\n protected onRefreshDone: (timeframeDates: Date[]) => Promise<void>,\n protected onFetchDone: (timeframeContainers: TimeframeContainers) => Promise<void>,\n ) {\n this.closeRefreshTimer = new Subject<any>();\n this.cleanAll();\n }\n\n public static Delay(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n cleanAll() {\n\n this.countsPeriod = {};\n this.timeframesFromRadars = [];\n this.timeframesFromRadarsExtended = [];\n this.timeframeDates = [];\n this.closeRefreshTimer?.next(null);\n }\n\n async fetch(dateShown: Date, withGaugesMeasures: boolean): Promise<FrameSet> {\n // set the target\n const currents = this.timeframesFromRadarsExtended.filter(t => t.date.getTime() === dateShown.getTime());\n if (currents.length !== 1) {\n console.log('no correct dateShown', dateShown, this.timeframesFromRadarsExtended);\n return;\n }\n\n // build [current, previous, next] targets\n const current: FrameSet = currents[0];\n const position = this.timeframesFromRadarsExtended.indexOf(current);\n let previous: FrameSet = null, next: FrameSet = null;\n const positionNames: string[] = ['' + current.date.getTime()];\n const frameSets = {};\n frameSets['' + current.date.getTime()] = current;\n if (position > 0) {\n previous = this.timeframesFromRadarsExtended[position - 1];\n positionNames.push('' + previous.date.getTime());\n frameSets['' + previous.date.getTime()] = previous;\n }\n if (position < this.timeframesFromRadarsExtended.length) {\n next = this.timeframesFromRadarsExtended[position + 1];\n if (next?.date) {\n positionNames.push('' + next.date.getTime());\n frameSets['' + next.date.getTime()] = next;\n }\n }\n\n // align Map with targets\n const targets: {\n date: Date,\n rainComputationId: string,\n rainComputationQualityId: string,\n }[] = [];\n for (const positionName of positionNames) {\n if (frameSets[positionName]) {\n const target = frameSets[positionName];\n target.rainComputationQualityId = this.getRainComputationQualityTarget(target);\n target.withGauge = withGaugesMeasures;\n targets.push(target);\n\n const timeframeContainers = await this.refreshMapTimeframeContainers(target);\n\n if (positionName === ('' + current.date.getTime())) {\n this.onFetchDone(timeframeContainers).then(ignored => {\n });\n }\n }\n }\n\n // align Compare with current date\n this.refreshCompareQuality(current).then((ignored) => {\n });\n\n return current;\n }\n\n async setPeriod(begin: Date, end: Date) {\n this.begin = begin;\n this.end = end;\n\n return this.refreshCounts();\n }\n\n async refresh(launchQualityAfter: boolean, dataInternal: boolean) {\n\n if (!this.begin || !this.end) {\n throw new Error('need a period');\n }\n\n this.dataInternal = dataInternal;\n this.compareManager.cleanAll();\n let refreshInProgress = false;\n let refreshDone = false;\n\n timer(1000, 15000)\n .pipe(\n switchMap(async () => {\n if (refreshInProgress) {\n return refreshDone;\n }\n\n refreshInProgress = true;\n this.onRefreshInProgress(await this.refreshCounts(), this.timeframeDates).then(ignored => {\n });\n refreshDone = await this.refreshPeriodInsidePolling();\n if (!refreshDone) {\n refreshInProgress = false;\n }\n return refreshDone;\n }),\n takeUntil(this.closeRefreshTimer),\n )\n .subscribe({\n next: async (refreshFinished: boolean) => {\n console.log('refreshFinished', refreshFinished, launchQualityAfter);\n if (refreshFinished) {\n this.closeRefreshTimer.next(null);\n await this.onRefreshDone(this.timeframeDates);\n }\n },\n error: (error: any) => {\n console.error('error in refresh', error);\n }\n });\n\n }\n\n async selectGauge(gaugeId: string, compareIndex: number) {\n return this.compareManager.selectGauge(gaugeId, compareIndex);\n }\n\n setRemoveDuplicate(b: boolean) {\n this.removeDuplicate = b;\n }\n\n protected async refreshCounts() {\n const counts = await this.profileService.getCounts(this.rainNode.id, this.begin, this.end, true);\n this.countsPeriod = {\n radarMeasures: counts.radarMeasures.reduce((partialSum, a) => partialSum + a.x, 0),\n gaugeMeasures: counts.gaugeMeasures.reduce((partialSum, a) => partialSum + a.x, 0),\n computationsByTeam: counts.computationsByTeam.reduce((partialSum, a) => partialSum + a.x, 0),\n };\n return this.countsPeriod;\n }\n\n protected getRainComputationQualityTarget(frameset: FrameSet): string {\n if (frameset.rainComputationQualities.length <= 0) {\n return undefined;\n }\n return frameset.rainComputationQualities[0].id;\n }\n\n protected async refreshPeriodInsidePolling(): Promise<boolean> {\n\n let done = false;\n try {\n done = this.refreshCheckIfDone();\n\n // behind refresh\n await this.refreshTimeframesFromRadars(done);\n this.refreshGlobalCompareReport(done).then(ignored => {\n });\n\n return done;\n } catch (e) {\n console.warn(e);\n }\n\n return done;\n }\n\n protected refreshCheckIfDone(): boolean {\n // console.log('refreshPeriodInsidePolling', this.countsPeriod.computationsByTeam, this.countsPeriod.radarMeasures)\n return this.countsPeriod.computationsByTeam === this.countsPeriod.radarMeasures;\n }\n\n protected async refreshTimeframesFromRadars(done: boolean) {\n\n if (!done) {\n return [];\n }\n\n const beginExtended = new Date(this.begin);\n const endExtended = new Date(this.end);\n beginExtended.setMinutes(beginExtended.getMinutes() - 7);\n endExtended.setMinutes(endExtended.getMinutes() + 7);\n this.rainNode = await this.profileService.getRainTimeframe(this.rainNode.getId(), beginExtended, endExtended, this.dataInternal);\n\n this.timeframesFromRadarsExtended = await this.radarService.getTimeline(this.rainNode);\n this.timeframesFromRadars = this.timeframesFromRadarsExtended\n .filter((frameSet) => this.begin.getTime() <= frameSet.date.getTime() && frameSet.date.getTime() <= this.end.getTime())\n .sort((a, b) => a.date.getTime() - b.date.getTime());\n\n // console.log('timeframesFromRadarsExtended:', this.timeframesFromRadarsExtended);\n\n this.timeframeDates = this.timeframesFromRadars.map(frameSet => frameSet.date);\n return this.timeframesFromRadars;\n }\n\n protected async refreshGlobalCompareReport(done: boolean) {\n if (!done) {\n return;\n }\n\n const targets = [];\n for (const frameSet of this.timeframesFromRadarsExtended) {\n const target = JSON.parse(JSON.stringify(frameSet));\n target.date = new Date(target.date);\n target.rainComputationQualityId = this.getRainComputationQualityTarget(frameSet);\n targets.push(target);\n }\n await this.compareManager.refreshGlobalCompareQuality(targets, !this.removeDuplicate);\n }\n\n protected async refreshMapTimeframeContainers(target: {\n date: Date,\n rainComputationId: string,\n withGauge: boolean\n }) {\n if (!target || !target.rainComputationId) {\n console.warn('Pb with refreshMapTimeframeContainers insights');\n return;\n }\n\n const rainNode = this.rainNode;\n const containers: TimeframeContainer[] = [];\n const newCreatedTimeframeContainers = new TimeframeContainers(containers);\n try {\n const rainNodeCartesianMap = await this.profileService\n .getRainComputationCartesianMapById(rainNode.getId(), target.rainComputationId);\n if (rainNodeCartesianMap) {\n newCreatedTimeframeContainers.addFromRainComputationMap(rainNodeCartesianMap, false);\n\n this.rainComputationMapDate = rainNodeCartesianMap.date;\n this.rainComputationMapDoneDate = rainNodeCartesianMap.isDoneDate;\n this.rainComputationMapLaunchedBy = rainNodeCartesianMap.launchedBy;\n this.rainComputationMapTimeSpentInMs = rainNodeCartesianMap.timeSpentInMs;\n }\n } catch (e) {\n console.warn('Pb with computations for id:', target.rainComputationId, e);\n }\n\n return newCreatedTimeframeContainers;\n }\n\n protected async refreshCompareQuality(frameSet: FrameSet) {\n await this.compareManager.refreshCompareQuality(frameSet);\n await this.compareManager.setGauges();\n }\n}\n","import {CartesianMeasureValue, ICartesianMeasureValue, RainNode} from 'raain-model';\nimport {CartesianMapValue, TimeframeContainer, TimeframeContainers} from 'raain-ui';\nimport {RadarService} from '../radar.service';\nimport {ProfileService} from '../profile.service';\n\nexport class ReportManager {\n\n public sumFn: any;\n public sumValues: any;\n\n constructor(\n protected rainNode: RainNode,\n protected radarService: RadarService,\n protected profileService: ProfileService) {\n }\n\n async setDate(dateShown: Date) {\n const {values, timeframesFromRadars} = await this.refreshTimeframesFromRadars(dateShown, dateShown);\n this.sumFn = (cartesianMapValues: CartesianMapValue[]) => {\n const sumResult = cartesianMapValues.reduce((p, v) =>\n p + (v.value * 5 / 60), 0);\n return 'w:' + Math.round(sumResult * 10) / 10;\n }\n this.sumValues = values;\n }\n\n async setPeriod(begin: Date, end: Date) {\n const {values, timeframesFromRadars} = await this.refreshTimeframesFromRadars(begin, end);\n this.sumFn = (cartesianMapValues: CartesianMapValue[]) => {\n const sumResult = cartesianMapValues.reduce((p, v) =>\n p + ((v.value * 5 / 60) / timeframesFromRadars.length), 0);\n return 'wt:' + Math.round(sumResult * 10) / 10;\n }\n this.sumValues = values;\n }\n\n protected async refreshTimeframesFromRadars(begin: Date, end: Date) {\n\n this.rainNode = await this.profileService.getRainTimeframe(this.rainNode.getId(), begin, end);\n\n const timeframesFromRadarsExtended = await this.radarService.getTimeline(this.rainNode);\n const timeframesFromRadars = timeframesFromRadarsExtended\n .filter((frameSet) => begin.getTime() <= frameSet.date.getTime() && frameSet.date.getTime() <= end.getTime())\n .sort((a, b) => a.date.getTime() - b.date.getTime());\n\n let values: CartesianMapValue[] = [];\n for (const frameSet of timeframesFromRadars) {\n values = values.concat(await this.getValues(frameSet));\n }\n\n return {values, timeframesFromRadars};\n }\n\n protected async getValues(target: {\n rainComputationId: string\n }): Promise<CartesianMapValue[]> {\n if (!target || !target.rainComputationId) {\n console.warn('Pb with target insights');\n return [];\n }\n\n let values: CartesianMapValue[] = [];\n const rainNode = this.rainNode;\n const containers: TimeframeContainer[] = [];\n const newCreatedTimeframeContainers = new TimeframeContainers(containers);\n try {\n const rainNodeCartesianMap = await this.profileService\n .getRainComputationCartesianMapById(rainNode.getId(), target.rainComputationId);\n\n if (rainNodeCartesianMap) {\n rainNodeCartesianMap.getMapData().forEach(m => {\n if (m.values) {\n (m.values as ICartesianMeasureValue[]).forEach(v => {\n const cartesianMeasureValue = CartesianMeasureValue.From(v);\n values = values.concat(CartesianMapValue.From(\n cartesianMeasureValue.getCartesianValues(),\n cartesianMeasureValue.getCartesianPixelWidth()));\n });\n }\n });\n }\n } catch (e) {\n console.warn('Pb with computations for id:', target.rainComputationId, e);\n }\n\n return values;\n }\n\n}\n","import {Injectable} from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Cache {\n\n private readonly _cache: any;\n\n constructor() {\n this._cache = {};\n }\n\n public async getValue(key: string, asyncGetter): Promise<any> {\n if (!this._cache.hasOwnProperty(key)) {\n console.log('cache not done: ', key);\n this.putValue(key, await asyncGetter());\n } else {\n console.log('cache done: ', key);\n }\n return this._cache[key];\n }\n\n public putValue(key: string, value: any): void {\n this._cache[key] = value;\n\n const length = Object.getOwnPropertyNames(this._cache).length;\n if (length > 30) {\n console.warn('cache size exceed ? do a restart ?', length);\n }\n }\n\n}\n","import {FidjService} from 'fidj-angular';\nimport {EventNode, GaugeNode, Link, PeopleNode, RadarNode, RainNode} from 'raain-model';\nimport {Storage} from './storage.service';\n\nexport class FidjStorageNode {\n\n public radars: RadarNode[] = [];\n public rains: RainNode[] = [];\n public gauges: GaugeNode[] = [];\n public team: PeopleNode;\n public events: EventNode[] = [];\n\n public infos: any = {};\n\n static getEmptyNode() {\n return new FidjStorageNode();\n }\n\n static getDemoNode() {\n const demoNode = new FidjStorageNode();\n const link = new Link('rain', 'https://demo/api/rains/2');\n /*\n demoNode.radars = [\n new RadarNode({\n id: '5efd04569cb1f4161bd69dc7',\n name: 'demo radar A',\n links: [link],\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RadarNode({\n id: 'dr2',\n name: 'demo radar B',\n links: [link],\n latitude: 0.11,\n longitude: -0.753\n }),\n new RadarNode({\n id: 'dr3',\n name: 'demo radar C',\n latitude: 0.13,\n longitude: -0.753,\n links: []\n }),\n new RadarNode({\n id: 'dr4',\n name: 'demo radar D',\n latitude: 0.14,\n longitude: -0.74,\n links: []\n })];\n demoNode.rains = [\n new RainNode({\n id: '5efd04569cb1f4161bd69dc8',\n name: 'Demo rain zone A',\n links: [new Link('radar', 'https://demo/api/radars/5efcfe619cb1f4161bd69dc3')],\n status: 0,\n quality: 75,\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RainNode({\n id: 'dz2',\n name: 'Demo rain zone B',\n radars: [demoNode.radars[0], demoNode.radars[1]],\n status: 1,\n quality: 50,\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RainNode({\n id: 'dz3',\n name: 'Demo rain zone C',\n radars: [demoNode.radars[0], demoNode.radars[1]],\n status: 2,\n quality: 75,\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RainNode({\n id: 'dz4',\n name: 'Demo rain zone D',\n radars: [demoNode.radars[0], demoNode.radars[1]],\n status: 3,\n quality: 95,\n latitude: 48.774569,\n longitude: 2.008407\n })];\n\n demoNode.gauges = [\n new GaugeNode({\n id: 'g1',\n name: 'Gauge A',\n latitude: 48.7748,\n longitude: 2.28407,\n }),\n new GaugeNode({\n id: 'g2',\n name: 'Gauge B',\n latitude: 48.874569,\n longitude: 2.108407,\n })];\n demoNode.events = [{\n id: 'e2',\n title: 'Need support ?',\n status: 0,\n red: false,\n description: 'This area is dedicated to support you and your team. Support is made on Radar or Rain quality, ' +\n 'or any feedback we can have about your production system. Our goal : improving your data.',\n created: new Date(),\n modified: new Date()\n }];\n demoNode.team = {\n id: 'p1',\n email: 'demo@demo.com',\n name: 'demo guy',\n description: 'the demo guy'\n };\n\n */\n return demoNode;\n }\n}\n\nclass FidjStorageResult {\n data: FidjStorageNode;\n}\n\nexport class FidjStorage {\n\n private isDemoMode: boolean;\n private node: FidjStorageNode = FidjStorageNode.getEmptyNode();\n private fidjMetaResult: FidjStorageResult = {data: new FidjStorageNode()};\n\n constructor(private storage: Storage) {\n }\n\n public async storeData(fidjService: FidjService, data) {\n this.node = JSON.parse(JSON.stringify(data));\n this.fidjMetaResult.data = this.node;\n\n if (this.isDemoMode) {\n this.storage.set('fidjMetaResult', JSON.stringify(this.fidjMetaResult));\n return;\n }\n\n await fidjService.put(this.fidjMetaResult);\n }\n\n public async getRefreshedNodeCopy(fidjService: FidjService): Promise<FidjStorageNode> {\n\n if (this.isDemoMode) {\n const fidjMetaResult = this.storage.get('fidjMetaResult');\n if (fidjMetaResult) {\n this.fidjMetaResult = JSON.parse(fidjMetaResult);\n this.node = this.fidjMetaResult.data;\n }\n return JSON.parse(JSON.stringify(this.node));\n }\n\n const firstDemoData = async () => {\n this.node = FidjStorageNode.getDemoNode();\n await this.storeData(fidjService, this.node);\n };\n\n await fidjService.sync(firstDemoData);\n const fidjFindAllResults: any = await fidjService.findAll();\n\n if (fidjFindAllResults && fidjFindAllResults.length > 0) {\n if (fidjFindAllResults[0].data) {\n this.fidjMetaResult = fidjFindAllResults[0];\n this.node = this.fidjMetaResult.data;\n }\n }\n\n return JSON.parse(JSON.stringify(this.node));\n }\n\n setDemoMode(isDemo: boolean) {\n this.isDemoMode = isDemo;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {LocalStorage} from 'fidj-angular';\n\n@Injectable()\nexport class Storage extends LocalStorage {\n\n constructor() {\n super('raain-app.');\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {BehaviorSubject} from 'rxjs';\nimport {\n EventNode,\n GaugeMeasure,\n GaugeNode,\n RadarNode,\n RainComputation,\n RainComputationMap,\n RainComputationQuality,\n RainNode,\n SpeedMatrixContainer,\n TeamNode\n} from 'raain-model';\n\nimport {Storage} from './storage.service';\n\nimport {FidjStorage, FidjStorageNode} from './fidj-storage.model';\nimport {ErrorInterface, FidjService, LoggerLevelEnum} from 'fidj-angular';\nimport {XYType} from './xytype';\nimport {GaugeNodeFilter} from './tools';\nimport {Router} from '@angular/router';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProfileService {\n public readyForSync: BehaviorSubject<boolean>;\n public asTeamId: string;\n\n protected email: string;\n protected isDemo: boolean;\n protected roles: Array<string>;\n protected nodeData: FidjStorageNode;\n protected fidjStorage: FidjStorage;\n protected haveTryToReconnect: boolean;\n\n constructor(protected storage: Storage,\n protected fidjService: FidjService,\n protected httpClient: HttpClient,\n private router: Router,) {\n\n console.log('ProfileService: New####');\n\n this.email = this.storage.get('email') || null;\n this.asTeamId = this.storage.get('asTeamId') || null;\n this.readyForSync = new BehaviorSubject<boolean>(false);\n this.roles = [];\n this.fidjStorage = new FidjStorage(storage);\n this.isDemoMode = false;\n }\n\n get isDemoMode() {\n return this.isDemo;\n }\n\n set isDemoMode(mode) {\n this.isDemo = mode ? mode : true;\n this.fidjStorage.setDemoMode(this.isDemo);\n }\n\n get defaultUrlForAPI() {\n return this.storage.get('UrlForAPI');\n }\n\n set defaultUrlForAPI(url: string) {\n this.storage.set('UrlForAPI', url);\n }\n\n async refreshProfile(): Promise<FidjStorageNode> {\n try {\n this.nodeData = await this.fidjStorage.getRefreshedNodeCopy(this.fidjService);\n this.setRoles(await this.fidjService.getRoles());\n return this.nodeData;\n } catch (e) {\n await this.checkError(e);\n }\n }\n\n getEmail() {\n return this.email;\n }\n\n setEmail(email: string) {\n this.email = email;\n this.storage.set('email', this.email);\n }\n\n async logout(fidjKey: string, fidjProd: boolean) {\n\n this.storage.remove('email');\n await this.fidjService.logout(true);\n\n try {\n await this.fidjService.init(fidjKey,\n {\n logLevel: LoggerLevelEnum.INFO,\n crypto: false,\n prod: fidjProd,\n useDB: false,\n });\n\n console.log('initFidj done.');\n this.readyForSync.next(true);\n } catch (err) {\n console.error('initFidj catch pb: ', err);\n }\n\n }\n\n async checkError(error: ErrorInterface) {\n console.warn('checkError', error);\n if (error.code === 401) {\n console.log('looks not logged in');\n\n if (this.router.url.indexOf('login') < 0) {\n try {\n const sync = await this.fidjService.sync();\n } catch (e) {\n return this.gotoLout();\n }\n }\n }\n }\n\n async gotoLout() {\n if (this.router.url.indexOf('login') > -1) {\n return;\n }\n await this.router.navigateByUrl('/logout', {skipLocationChange: true});\n // await this.router.navigate(['/logout']);\n // await this.router.navigate(['/login']);\n }\n\n async gotoLogin() {\n if (this.router.url.indexOf('login') > -1) {\n return;\n }\n // await this.router.navigateByUrl('/', {skipLocationChange: true});\n await this.router.navigate(['/login']);\n }\n\n isLoggedIn() {\n return this.fidjService.isLoggedIn();\n }\n\n async storeAll() {\n return this.fidjStorage.storeData(this.fidjService, this.nodeData);\n }\n\n isAdmin(): boolean {\n return this.roles.indexOf('admin') > -1;\n }\n\n // === Notifications ===\n\n async createNotification(rainId: string, message: string) {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'notifications',\n verb: 'POST',\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n data: {\n rain: rainId,\n message,\n },\n });\n return new EventNode(resp.data);\n } catch (e) {\n console.error('createNotification error:', e);\n }\n\n return null;\n }\n\n async getNotifications(rainId: string) {\n try {\n const args = '?rain=' + rainId;\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'notifications',\n verb: 'GET',\n relativePath: args,\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n });\n\n return resp.data.notifications.map(n => new EventNode(n));\n } catch (e) {\n console.error('createNotification error:', e);\n }\n\n return null;\n }\n\n async getAllNotifications(): Promise<EventNode[]> {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'notifications',\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n });\n\n return resp.data.notifications.map(n => new EventNode(n));\n } catch (e) {\n await this.checkError(e);\n }\n\n return [];\n }\n\n // === Teams ===\n\n async getTeams(): Promise<Array<TeamNode>> {\n const teams = [];\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'teams_all',\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/teams_all'\n });\n for (const team of resp.data.teams) {\n teams.push(new TeamNode(team));\n }\n } catch (e) {\n console.error('getTeams error:', e);\n }\n return teams;\n }\n\n async getTeam(teamId: string): Promise<TeamNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'teams',\n verb: 'GET',\n relativePath: teamId,\n defaultKeyUrl: this.defaultUrlForAPI + '/teams'\n });\n return new TeamNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n // === Radars ===\n\n async getRadars(teamId: string): Promise<Array<RadarNode>> {\n const radars = [];\n const url = this.defaultUrlForAPI + '/radars' + (teamId ? '?teamId=' + teamId : '');\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'radars',\n verb: 'GET',\n defaultKeyUrl: url,\n });\n for (const r of resp.data.radars) {\n const radar = new RadarNode(r);\n radars.push(radar);\n }\n } catch (e) {\n await this.checkError(e);\n }\n return radars;\n }\n\n async getRadar(id: string): Promise<RadarNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'radars',\n verb: 'GET',\n relativePath: id,\n defaultKeyUrl: this.defaultUrlForAPI + '/radars'\n });\n return new RadarNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n async putRadar(radarNode: RadarNode, configurationAsJSON?: any): Promise<RadarNode> {\n const data = {\n name: radarNode.name,\n };\n\n if (configurationAsJSON) {\n data['configurationAsJSON'] = configurationAsJSON;\n }\n\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'radars',\n relativePath: radarNode.id,\n verb: 'PUT',\n data,\n defaultKeyUrl: this.defaultUrlForAPI + '/radars/'\n });\n\n return new RadarNode(resp.data);\n } catch (e) {\n console.error('removeRadar error:', e);\n }\n }\n\n async getLonelyRadars(rains: RainNode[]): Promise<RadarNode[]> {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'radars',\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/radars'\n });\n const lonelyRadars: RadarNode[] = [];\n const radars = resp.data.radars;\n radars.forEach(radar => {\n let found = false;\n rains.forEach(rain => {\n const rdId = rain.getLinkId('radar', 0);\n if (rdId === radar.id) {\n found = true;\n }\n });\n if (!found) {\n lonelyRadars.push(radar);\n }\n });\n return lonelyRadars;\n } catch (e) {\n await this.checkError(e);\n }\n return [];\n }\n\n async getRainTimeframe(rainId: string, begin: Date, end: Date, forced = false): Promise<RainNode> {\n try {\n let queryPath = '' + rainId + '?format=timeframe';\n if (begin) {\n queryPath += '&begin=' + begin.toISOString();\n }\n if (end) {\n queryPath += '&end=' + end.toISOString();\n }\n if (forced) {\n queryPath += '&forced=true';\n }\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains'\n });\n const rainNode = new RainNode(resp.data.timeframe);\n rainNode.name += '.radar.timeframe';\n return rainNode;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Rains ===\n\n async getRains(teamId: string): Promise<Array<RainNode>> {\n const rains = [];\n const url = this.defaultUrlForAPI + '/rains' + (teamId ? '?teamId=' + teamId : '');\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n defaultKeyUrl: url,\n });\n for (const rain of resp.data.rains) {\n rains.push(new RainNode(rain));\n }\n } catch (e) {\n await this.checkError(e);\n }\n return rains;\n }\n\n async getRain(id: string): Promise<RainNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n relativePath: id,\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains/'\n });\n return new RainNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Count\n\n async getCounts(rainId: string,\n periodBegin?: Date,\n periodEnd?: Date,\n withQualities?: boolean): Promise<{\n radarMeasures: XYType[],\n gaugeMeasures: XYType[],\n computationsByTeam: XYType[],\n computationsInternal: XYType[],\n }> {\n try {\n\n let args = '';\n if (periodBegin && periodEnd) {\n args = '?periodBegin=' + periodBegin.toISOString() + '&periodEnd=' + periodEnd.toISOString();\n }\n if (withQualities) {\n args += '&withQualities=' + withQualities;\n }\n\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n relativePath: rainId + '/counts' + args,\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains/',\n });\n\n const counts = resp.data.counts;\n const radarMeasures: XYType[] = [],\n gaugeMeasures: XYType[] = [],\n computationsByTeam: XYType[] = [],\n computationsInternal: XYType[] = [];\n\n counts.forEach(c => {\n radarMeasures.push(new XYType(1, NaN, NaN, c._id));\n gaugeMeasures.push(new XYType(c.gaugeMeasures, NaN, NaN, c._id));\n computationsByTeam.push(new XYType(c.computationsByTeam, NaN, NaN, c._id));\n computationsInternal.push(new XYType(c.computationsInternal, NaN, NaN, c._id));\n });\n\n return {\n radarMeasures,\n gaugeMeasures,\n computationsByTeam,\n computationsInternal,\n };\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Computing ===\n\n async launchRainComputation(rainId: string,\n date: Date): Promise<RainComputation[]> {\n const response = await this.fidjService.sendOnEndpoint({\n verb: 'POST',\n key: 'rains',\n relativePath: '' + rainId + '/computations',\n data: {\n date: date.toISOString(),\n },\n defaultKeyUrl: this.defaultUrlForAPI + '/rains'\n });\n\n return response.data.computations?.map(c => new RainComputation(c));\n }\n\n async getRainComputationCartesianMapById(rainId: string, rainComputationId: string): Promise<RainComputationMap> {\n const queryPath = '' + rainId + '/computations/' + rainComputationId + '?format=cartesian-map';\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains'\n });\n if (!response.data['cartesian-map']) {\n return null;\n }\n\n const rainComputationMap = new RainComputationMap(response.data['cartesian-map']);\n rainComputationMap.name = rainId + '.rain.cartesian-map';\n return rainComputationMap;\n }\n\n async getRainCompares(rainId: string, rainComputationId: string): Promise<{ id: string, version: string }[]> {\n const queryPath = '' + rainId + '/computations/' + rainComputationId;\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n // timeout: 200000,\n });\n\n const rainComputation = new RainComputation(response.data);\n const links = rainComputation.getLinks();\n const rainComputationQualities = [];\n for (const link of links) {\n if (link.rel === 'rain-computation-quality') {\n const id = link.getId();\n const version = link.href.substring(link.href.indexOf('version/') + 8, link.href.indexOf('/' + id));\n rainComputationQualities.push({id, version});\n }\n }\n return rainComputationQualities;\n }\n\n async getRainCompareById(rainId: string,\n rainComputationId: string,\n rainComputationQualityId: string): Promise<RainComputationQuality> {\n const queryPath = '' + rainId + '/computations/' + rainComputationId + '/compares/' + rainComputationQualityId;\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n const rainComputationQuality = new RainComputationQuality(response.data);\n rainComputationQuality.qualitySpeedMatrixContainer = SpeedMatrixContainer\n .CreateFromJson(rainComputationQuality.qualitySpeedMatrixContainer);\n return rainComputationQuality;\n }\n\n // === Gauges ===\n\n async getGauge(gaugeId: string): Promise<GaugeNode> {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: gaugeId,\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges'\n });\n return new GaugeNode(resp.data);\n }\n\n async getGauges(rainId?: string): Promise<Array<GaugeNodeFilter>> {\n let queryPath = '';\n if (this.asTeamId) {\n queryPath += '?teamId=' + this.asTeamId;\n }\n if (rainId) {\n if (queryPath) {\n queryPath += '&';\n } else {\n queryPath += '?';\n }\n queryPath += 'rainId=' + rainId;\n }\n\n const gauges = [];\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges'\n });\n\n for (const gauge of resp.data.gauges) {\n gauges.push(new GaugeNodeFilter(gauge));\n }\n } catch (e) {\n await this.checkError(e);\n }\n return gauges;\n }\n\n async getGaugeMeasures(gaugeId: string, begin: Date, end: Date): Promise<GaugeMeasure[]> {\n const queryPath = '' + gaugeId + '/measures?begin=' + begin.toISOString() + '&end=' + end.toISOString();\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges'\n });\n\n const gaugeMeasures: GaugeMeasure[] = [];\n for (const gaugeMeasure of resp.data.gaugeMeasures) {\n gaugeMeasures.push(new GaugeMeasure(gaugeMeasure));\n }\n return gaugeMeasures;\n }\n\n // === Private ===\n\n protected setRoles(roles: Array<string>): void {\n this.roles = roles;\n }\n\n}\n","import {Injectable} from '@angular/core';\nimport {MeasureValuePolarContainer, RadarPolarMeasureValue, RainNode, RainPolarMeasureValue} from 'raain-model';\nimport {PolarMapValue} from 'raain-ui';\nimport {ProfileService} from './profile.service';\nimport {FrameSet} from './tools';\n\n@Injectable()\nexport class RadarService {\n\n\n constructor(\n private profileService: ProfileService,\n ) {\n }\n\n static getGeoValuesFromRainMeasures(measureValue: RainPolarMeasureValue, rain: RainNode): PolarMapValue[] {\n return this.computeValues(measureValue.getPolars(), rain);\n }\n\n static getGeoValuesFromRadarMeasures(measureValue: RadarPolarMeasureValue, rain: RainNode): PolarMapValue[] {\n return this.computeValues(measureValue.getPolars(), rain);\n }\n\n private static computeValues(polarMeasureValues: MeasureValuePolarContainer[], rain: RainNode) {\n const values: PolarMapValue[] = [];\n polarMeasureValues.forEach(p => {\n const azimuth = p.azimuth;\n let distance = 0;\n const polarEdges = p.polarEdges;\n polarEdges.forEach(e => {\n const pmv = new PolarMapValue(e, azimuth, distance);\n\n // TODO rainNode.latLngRectsAsJSON\n // pmv.setCenter(rain);\n\n values.push(pmv);\n distance += p.distance;\n });\n });\n\n return values;\n }\n\n async getTimeline(rainNode: RainNode): Promise<FrameSet[]> {\n const timeline: FrameSet[] = [];\n const links = rainNode.getLinks();\n const rainId = rainNode.getId();\n\n // dates and radar measures\n for (const link of links) {\n const measureIndex = link.href.indexOf('measures/');\n if (measureIndex >= 0) {\n const start = measureIndex + 9;\n const str1 = link.href.substring(start);\n if (str1) {\n const end = str1.indexOf('/');\n const dateStr = str1.substring(0, end);\n const idStr = str1.substring(end + 1);\n\n const frameDate = new Date(dateStr);\n const existingTargets = timeline.filter(t => t.date.getTime() === frameDate.getTime());\n if (existingTargets.length) {\n existingTargets[0].radarMeasureIds.push(idStr);\n } else {\n timeline.push(new FrameSet(frameDate, [idStr]));\n }\n }\n }\n }\n\n // rain computations\n for (const link of links) {\n const computationIndex = link.href.indexOf('computations/');\n if (computationIndex >= 0) {\n const start = computationIndex + 13;\n const str1 = link.href.substring(start);\n if (str1) {\n const splitted = str1.split('/');\n const date = new Date(splitted[0]);\n const version = splitted[1];\n const rainComputationId = splitted[2];\n const existingTargets = timeline.filter(t => t.date.getTime() === date.getTime());\n for (const target of existingTargets) {\n target.rainComputationId = rainComputationId;\n target.rainComputationVersion = version;\n target.rainComputationQualities = await this.getBuilds(rainId, rainComputationId);\n }\n }\n }\n }\n\n return timeline;\n }\n\n async getBuilds(rainId: string, rainComputationId: string): Promise<{ id: string, version: string, }[]> {\n return await this.profileService.getRainCompares(rainId, rainComputationId);\n }\n}\n","// TODO remove constants but preferred progress indicator [0 to 1]\nexport const CONSTANTS = {\n\n _RAIN_STATUS_0_NOT_STARTED: 0,\n _RAIN_STATUS_0_WAIT_FOR_ECHOES: 0.1,\n _RAIN_STATUS_0_WAIT_FOR_INPUT: 0.2,\n _RAIN_STATUS_0_WAIT_FOR_INTERNAL_VALIDATION: 0.3,\n _RAIN_STATUS_0_READY_TO_BUILD: 0.4,\n _RAIN_STATUS_1_BUILDING: 0.5,\n _RAIN_STATUS_1_READY_TO_COMPUTE: 0.6,\n\n _RAIN_COMPUTATION_IS_READY: 0,\n _RAIN_COMPUTATION_IN_PROGRESS: 0.5,\n _RAIN_COMPUTATION_DONE: 1,\n\n _INPUT_VALIDITY_NOT_CHECKED_YET: -1,\n _INPUT_VALIDITY_CHECK_IN_PROGRESS: -0.5,\n _INPUT_VALIDITY_NOT_VALID: 0,\n _INPUT_VALIDITY_NOT_CONFIDENT: 0.5,\n _INPUT_VALIDITY_VALID: 1,\n\n _VERIFY_STATUS_FIND_RADARS: 0.3,\n _VERIFY_STATUS_FIND_SIMILAR: 0.6,\n _VERIFY_STATUS_FIND_GAUGES: 0.7,\n\n _COMPUTATION_STATUS_UNKNOWN: 0,\n _COMPUTATION_STATUS_IN_PROGRESS: 0.4,\n _COMPUTATION_STATUS_FINISHED: 1,\n\n};\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {EventNode, RainNode} from 'raain-model';\nimport {CONSTANTS} from './shared.const';\nimport {FrameSet} from './tools';\n\n@Pipe({name: 'areStopped'})\nexport class AreStopped implements PipeTransform {\n transform(rains: RainNode[]): RainNode[] {\n return rains.filter((rain) => (rain.status <= CONSTANTS._RAIN_STATUS_0_NOT_STARTED));\n }\n}\n\n@Pipe({name: 'areInProgress'})\nexport class AreInProgressPipe implements PipeTransform {\n transform(rains: RainNode[]): RainNode[] {\n return rains.filter((rain) => (\n CONSTANTS._RAIN_STATUS_0_NOT_STARTED < rain.status && rain.status < CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE\n ));\n }\n}\n\n@Pipe({name: 'areReady'})\nexport class AreReady implements PipeTransform {\n transform(rains: RainNode[]): RainNode[] {\n return rains.filter((rain) => (\n rain.status >= CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE && rain.quality > CONSTANTS._INPUT_VALIDITY_NOT_CONFIDENT\n ));\n }\n}\n\n@Pipe({name: 'isReady'})\nexport class IsReady implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.status >= CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'isNotReady'})\nexport class IsNotReady implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.status < CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'waitForValidation'})\nexport class WaitForValidation implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.status === CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'hasGoodQuality'})\nexport class HasGoodQuality implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.quality > CONSTANTS._INPUT_VALIDITY_NOT_CONFIDENT) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'hasNotGoodQuality'})\nexport class HasNotGoodQuality implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.quality < CONSTANTS._INPUT_VALIDITY_VALID) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'progressValue'})\nexport class ProgressValue implements PipeTransform {\n transform(rain: RainNode): number {\n if (rain.status < 0) {\n return 0;\n }\n\n // const value = (rain.progressIngest + rain.progressComputing) / 2;\n const value = rain.status / 2; // 0\n // if (rain.status === CONSTANTS._RAIN_STATUS_0_READY_TO_BUILD) {\n // value = 0.3;\n // } else if (rain.status === CONSTANTS._RAIN_STATUS_1_BUILDING) {\n // value = 0.6;\n // } else if (rain.status === CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n // value = 1;\n // }\n return value;\n }\n}\n\n@Pipe({name: 'progressBuffer'})\nexport class ProgressBuffer implements PipeTransform {\n transform(rain: RainNode): number {\n if (rain.quality < 0) {\n return 0;\n }\n\n const value = rain.quality / 2;\n return value;\n }\n}\n\n@Pipe({name: 'timeframeComputationProgress'})\nexport class TimeframeComputationProgress implements PipeTransform {\n transform(frameSets: FrameSet[]): number {\n let progress = 0;\n if (!frameSets || frameSets.length === 0) {\n return 1;\n }\n\n for (const frameset of frameSets) {\n if (frameset.radarMeasureIds.length && frameset.rainComputationId) {\n progress++;\n }\n }\n\n return progress / frameSets.length;\n }\n}\n\n@Pipe({name: 'timeframeQualityProgress'})\nexport class TimeframeQualityProgress implements PipeTransform {\n transform(frameSets: FrameSet[]): number {\n let progress = 0;\n if (!frameSets || frameSets.length === 0) {\n return 1;\n }\n\n for (const frameset of frameSets) {\n const qualities = frameset.rainComputationQualities ? frameset.rainComputationQualities : [];\n const atLeastOneIsNotOutdated = qualities\n .filter(q => q.version.indexOf('outdated') < 0);\n if (frameset.radarMeasureIds.length && frameset.rainComputationId && atLeastOneIsNotOutdated.length) {\n progress++;\n }\n }\n\n return progress / frameSets.length;\n }\n}\n\n@Pipe({\n name: 'haveNotBeenRed',\n pure: false\n})\nexport class HaveNotBeenRed implements PipeTransform {\n transform(events: EventNode[]): EventNode[] {\n const haveNotBeenRed = events.filter((event) => (!event.red));\n return haveNotBeenRed;\n }\n}\n","import {CommonModule, NgOptimizedImage, NgStyle} from '@angular/common';\nimport {NgModule, Optional, SkipSelf} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\n\nimport {ProfileService} from './profile.service';\nimport {Storage} from './storage.service';\nimport {RadarService} from './radar.service';\nimport {Cache} from './cache.service';\nimport {IonicModule, IonRange} from '@ionic/angular';\nimport {\n AreInProgressPipe,\n AreReady,\n AreStopped,\n HasGoodQuality,\n HasNotGoodQuality,\n HaveNotBeenRed,\n IsNotReady,\n IsReady,\n ProgressBuffer,\n ProgressValue,\n TimeframeComputationProgress,\n TimeframeQualityProgress,\n WaitForValidation\n} from './shared.pipe';\nimport {RaainMapComponent} from './raain-map/raain-map.component';\nimport {RaainCompareComponent} from './raain-compare/raain-compare.component';\nimport {RaainConfigurationComponent} from './raain-configuration/raain-configuration.component';\nimport {RaainDateFocusComponent} from './raain-date-focus/raain-date-focus.component';\nimport {RaainSpeedComponent} from './raain-speed/raain-speed.component';\nimport {RaainCompareStackComponent} from './raain-compare-stack/raain-compare-stack.component';\n\n@NgModule({\n declarations: [\n RaainMapComponent,\n RaainCompareComponent,\n RaainCompareStackComponent,\n RaainDateFocusComponent,\n RaainConfigurationComponent,\n RaainSpeedComponent,\n\n AreStopped,\n AreInProgressPipe,\n AreReady,\n IsReady,\n IsNotReady,\n WaitForValidation,\n HasGoodQuality,\n HasNotGoodQuality,\n ProgressValue,\n ProgressBuffer,\n HaveNotBeenRed,\n TimeframeComputationProgress,\n TimeframeQualityProgress,\n ],\n imports: [\n CommonModule,\n FormsModule,\n IonicModule,\n NgOptimizedImage,\n ],\n providers: [\n Storage,\n RadarService,\n ProfileService,\n Cache,\n IonRange,\n TimeframeComputationProgress,\n TimeframeQualityProgress,\n ],\n exports: [\n CommonModule,\n NgStyle,\n\n RaainMapComponent,\n RaainCompareComponent,\n RaainCompareStackComponent,\n RaainDateFocusComponent,\n RaainConfigurationComponent,\n RaainSpeedComponent,\n\n AreStopped,\n AreInProgressPipe,\n AreReady,\n IsReady,\n IsNotReady,\n WaitForValidation,\n HasGoodQuality,\n HasNotGoodQuality,\n ProgressValue,\n ProgressBuffer,\n HaveNotBeenRed,\n TimeframeComputationProgress,\n TimeframeQualityProgress,\n ]\n})\nexport class SharedModule {\n constructor(@Optional() @SkipSelf() parentModule?: SharedModule) {\n if (parentModule) {\n // throw new Error(\n console.log(\n 'SharedModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i3.RaainCompareComponent","i1.Storage","i3","i1.ProfileService"],"mappings":";;;;;;;;;;;;;;;;;MAsBa,iBAAiB,CAAA;AAgE5B,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAhD3B,IAAQ,CAAA,QAAA,GAAG,KAAK,CAAC;QAEjB,IAAW,CAAA,WAAA,GAAG,IAAI,CAAC;QAMnB,IAAc,CAAA,cAAA,GAAW,EAAE,CAAC;AAW5B,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAa,CAAC;AAG/C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAQ,CAAC;QA2B5C,IAAI,CAAC,MAAM,EAAE,CAAC;;QAGd,MAAM,QAAQ,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1B,MAAM,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5B,QAAA,MAAM,SAAS,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3B,QAAA,MAAM,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7B,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG;YACjB,MAAM,EAAE,EAAC,OAAO,EAAE,iCAAiC,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAC;YACvF,eAAe,EAAE,EAAC,OAAO,EAAE,sCAAsC,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAC;YACrG,cAAc,EAAE,EAAC,OAAO,EAAE,6CAA6C,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAC;YAC3G,MAAM,EAAE,EAAC,OAAO,EAAE,+BAA+B,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAC;AACrF,YAAA,cAAc,EAAE,EAAC,OAAO,EAAE,gCAAgC,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAC;YACtH,OAAO,EAAE,EAAC,OAAO,EAAE,iCAAiC,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAC;SACzF,CAAC;KACH;IAEM,kBAAkB,GAAA;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAEM,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACtB;IAEM,WAAW,GAAA;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAEM,aAAa,CAAC,KAAK,GAAG,KAAK,EAAA;;;QAKhC,IAAI,CAAC,IAAI,CAAC,kBAAkB;gBACtB,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,EAAE;YAC3F,OAAO;AACR,SAAA;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACpD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACxC;IAEM,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1D,OAAO;AACR,SAAA;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AACxC,QAAA,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QAClH,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;AAExD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;AAC5C,SAAA;KACF;IAEM,QAAQ,GAAA;QACb,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1D,OAAO;AACR,SAAA;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACpF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;AAExD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;KAC1B;IAEM,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;KACb;IAEM,IAAI,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;KACvB;IAEM,iBAAiB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE;YAClE,OAAO;AACR,SAAA;QAED,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACnE,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACxE,SAAA;KACF;IAEO,MAAM,GAAA;AAEZ,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;AAC7B,QAAA,IAAI,OAAO,EAAE;YACX,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACpB,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,EAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAC;AACzE,YAAA,EAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAC;AACzF,YAAA,EAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAC;AAC3F,YAAA,EAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAC;AACzE,YAAA,EAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAC;;SAE1F,CAAC;QAEF,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAC5D,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YACjC,UAAU,CAAC,MAAK;AAEd,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC;gBACpC,IAAI,CAAC,cAAc,EAAE;oBACnB,OAAO;AACR,iBAAA;gBAED,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,EAAC,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE,OAAO,EAAC,CAAC,CAAC;gBAE5H,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/E,gBAAA,IAAI,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC1F,gBAAA,IAAI,CAAC,aAAa,GAAG,MAAK;oBACxB,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACjE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBACnE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;oBACnE,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACrE,oBAAA,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,cAAc,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC;AAC9D,iBAAC,CAAA;gBACD,IAAI,CAAC,aAAa,EAAE,CAAC;;;AAGrB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACzC,EAAE,GAAG,CAAC,CAAC;AACV,SAAC,CAAC,CAAC;KAEJ;IAEO,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACtC,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5B,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;AACrC,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5B,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAAC;AACpC,QAAA,IAAI,CAAC,aAAa,GAAG,MAAK;AAC1B,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAElC,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;AAEO,IAAA,MAAM,CAAC,OAAsB,EAAA;;AAGnC,QAAA,IAAI,sBAA4B,CAAC;QACjC,IAAI,OAAO,CAAC,WAAW,EAAE;YACvB,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,OAAO,EAAE,EAAE;gBAClH,OAAO;AACR,aAAA;AACD,YAAA,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAAC;AAC3C,SAAA;QAED,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE;AAEpD,YAAA,MAAM,OAAO,GAAG;AACd,gBAAA,EAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAC;AACxE,gBAAA,EAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAC;AACxF,gBAAA,EAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,eAAe,EAAC;AAC1F,gBAAA,EAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAC;AACxE,gBAAA,EAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,cAAc,EAAC;;aAEzF,CAAC;AACF,YAAA,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;AAC7E,YAAA,IAAI,eAAe,EAAE;gBACnB,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACzE,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,oBAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACvE,oBAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AACnE,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,IAAI,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AACvD,SAAA;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,mBAAmB,EAAE;YAClD,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAC7D,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AACpF,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,cAAc,IAAI,OAAO,CAAC,SAAS,EAAE;YACxD,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,cAAc,EAAE,CAAC;AAC/D,YAAA,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,sBAAsB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7E,SAAA;AAED,QAAA,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;KAC/C;AAEO,IAAA,gBAAgB,CAAC,WAAkB,EAAA;;QAEzC,IAAI,IAAI,CAAC,mBAAmB,IAAI,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,MAAM,EAAE;AAC1E,YAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;YACxB,IAAI,CAAC,mBAAmB,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,IAAG;AAC/C,gBAAA,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;oBAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACjC,iBAAA;AACH,aAAC,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACzF,SAAA;;AAGD,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC;AACzC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;YAC1D,OAAO;AACR,SAAA;;QAGD,IAAI,WAAW,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACrG,YAAA,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC;AAC/B,SAAA;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YACnD,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;YACzF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;AACzC,SAAA;QACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;KACzD;IAEO,kBAAkB,GAAA;QAExB,IAAI,KAAK,GAAG,CAAC,CAAC;AACd,QAAA,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE;YACrC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;gBACpF,MAAM;AACP,aAAA;AACD,YAAA,KAAK,EAAE,CAAC;AACT,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;AAEO,IAAA,cAAc,CAAC,GAA6C,EAAA;AAElE,QAAA,MAAM,GAAG,GAAW,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9C,QAAA,MAAM,GAAG,GAAW,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE9C,IAAI,KAAK,GAAG,GAAG,CAAC;AAChB,QAAA,IAAI,QAAQ,GAAG,GAAG,EAAE,QAAQ,GAAG,GAAG,EAAE,SAAS,GAAG,GAAG,EAAE,SAAS,GAAG,GAAG,CAAC;QACrE,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC9B,YAAA,MAAM,aAAa,GAAI,IAAI,CAAC,qBAAqB,CAAC,MAA8B;AAC7E,iBAAA,MAAM,CAAC,CAAC,CAAoB,KAAI;AAC/B,gBAAA,OAAO,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI;AACvD,oBAAA,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;AACvD,aAAC,CAAC,CAAC;AAEL,YAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,gBAAA,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AACzD,gBAAA,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAC1D,gBAAA,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAC1D,gBAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAC5D,gBAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAC7D,aAAA;AAAM,iBAAA;;AAEN,aAAA;AACF,SAAA;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACnB,YAAA,IAAI,CAAC,MAAM,GAAG,aAAa,GAAG,CAAA,0BAAA,EAA6B,GAAG,CAA0B,uBAAA,EAAA,QAAQ,CAAI,CAAA,EAAA,QAAQ,MAAM,SAAS,CAAA,CAAA,EAAI,SAAS,CAAK,EAAA,EAAA,KAAK,EAAE,CAAC;AACvJ,SAAC,CAAC,CAAC;KACJ;AAEO,IAAA,UAAU,CAAC,GAAQ,EAAA;AACzB,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,SAAS,CACpC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,EAC3C,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;KACtB;AAGO,IAAA,QAAQ,CAAC,KAAU,EAAA;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,aAAa,GAAA;AAEnB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,YAAY,GAAG,WAAW;AAC5B,aAAC,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3F,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;AACtC,aAAC,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9F,YAAY,IAAI,OAAO,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AAEnC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;YACnB,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB,SAAC,CAAC,CAAC;KACJ;;+GA9WU,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,wlBCtB9B,8mFAoEA,EAAA,MAAA,EAAA,CAAA,wQAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,KAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,aAAA,EAAA,UAAA,EAAA,WAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,aAAA,EAAA,cAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,OAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,mEAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FD9Ca,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACE,WAAW,EAAA,QAAA,EAAA,8mFAAA,EAAA,MAAA,EAAA,CAAA,wQAAA,CAAA,EAAA,CAAA;6FAOd,WAAW,EAAA,CAAA;sBADjB,KAAK;gBAGC,OAAO,EAAA,CAAA;sBADb,KAAK;gBAUC,mBAAmB,EAAA,CAAA;sBADzB,KAAK;gBAGC,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAGC,WAAW,EAAA,CAAA;sBADjB,KAAK;gBAGC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAKC,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAGC,WAAW,EAAA,CAAA;sBADjB,KAAK;gBAIC,SAAS,EAAA,CAAA;sBADf,KAAK;gBAGC,KAAK,EAAA,CAAA;sBADX,KAAK;gBAKC,cAAc,EAAA,CAAA;sBADpB,MAAM;gBAIA,WAAW,EAAA,CAAA;sBADjB,MAAM;gBAaG,SAAS,EAAA,CAAA;sBADlB,SAAS;uBAAC,YAAY,CAAA;gBA0Sf,QAAQ,EAAA,CAAA;sBADf,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ME1V9B,qBAAqB,CAAA;AA8BhC,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAT3B,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA2C,CAAC;AAUjF,QAAA,IAAI,CAAC,aAAa,GAAG,MAAK;AAC1B,SAAC,CAAC;KACH;IAEM,kBAAkB,GAAA;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAEM,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACtB;IAEM,WAAW,GAAA;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAES,IAAA,OAAO,CAAC,KAAa,EAAA;AAC7B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAC,CAAC,CAAC;KACnE;IAES,UAAU,CAAC,OAAiB,EAAE,UAAqB,EAAA;QAE3D,IAAI,OAAO,GAAG,KAAK,CAAC;AACpB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9D,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;YACvB,OAAO,GAAG,IAAI,CAAC;AAChB,SAAA;AAED,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3D,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;YACvB,OAAO,GAAG,IAAI,CAAC;AAChB,SAAA;AAED,QAAA,IAAI,OAAO,EAAE;AACX,YAAA,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACtC,SAAA;KACF;AAGO,IAAA,QAAQ,CAAC,KAAU,EAAA;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,MAAM,GAAA;QACZ,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAEpB,QAAA,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAC1E,IAAI,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAG;AACxC,YAAA,OAAO,EAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAC,CAAC;AAC1D,SAAC,CAAC,EACF,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KAC9C;IAEO,MAAM,GAAA;QACZ,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AACvC,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;AAEO,IAAA,MAAM,CAAC,OAAsB,EAAA;QACnC,IAAI,OAAO,CAAC,MAAM,EAAE;YAClB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC7D,SAAA;KACF;IAEO,aAAa,GAAA;AAEnB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QAC3F,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,YAAY,GAAG,WAAW;AAC5B,aAAC,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3F,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;AACtC,aAAC,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9F,YAAY,IAAI,OAAO,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AAEnC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;YACnB,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB,SAAC,CAAC,CAAC;KACJ;;mHAtHU,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAArB,qBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,ycCtBlC,sYAYA,EAAA,MAAA,EAAA,CAAA,+DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDUa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,SAAS;+BACE,eAAe,EAAA,QAAA,EAAA,sYAAA,EAAA,MAAA,EAAA,CAAA,+DAAA,CAAA,EAAA,CAAA;6FAOlB,MAAM,EAAA,CAAA;sBADZ,KAAK;gBAIC,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAIC,OAAO,EAAA,CAAA;sBADb,KAAK;gBAIC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAIC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,MAAM;gBAIG,aAAa,EAAA,CAAA;sBADtB,SAAS;uBAAC,eAAe,CAAA;gBAiDlB,QAAQ,EAAA,CAAA;sBADf,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ME7F9B,MAAM,CAAA;IACjB,WAAmB,CAAA,CAAS,EACT,CAAS,EACT,CAAU,EACV,IAAa,EACb,EAAW,EAAA;QAJX,IAAC,CAAA,CAAA,GAAD,CAAC,CAAQ;QACT,IAAC,CAAA,CAAA,GAAD,CAAC,CAAQ;QACT,IAAC,CAAA,CAAA,GAAD,CAAC,CAAS;QACV,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAS;QACb,IAAE,CAAA,EAAA,GAAF,EAAE,CAAS;KAC7B;AACF;;MCeY,2BAA2B,CAAA;AA4BtC,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAtB3B,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAY,CAAC;QAS7C,IAAQ,CAAA,QAAA,GAAW,EAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC,CAAC;QAGhC,IAAQ,CAAA,QAAA,GAAW,EAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAC,CAAC;AAWzC,QAAA,IAAI,CAAC,aAAa,GAAG,MAAK;AAC1B,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,CAAC,CAAM,KAAI;YACvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvC,SAAC,CAAA;KACF;IAEM,kBAAkB,GAAA;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAEM,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACtB;IAEM,WAAW,GAAA;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAED,IAAA,MAAM,KAAK,CAAC,KAAK,GAAG,CAAC,EAAA;QACnB,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACrD,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AAErB,QAAA,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAGO,IAAA,QAAQ,CAAC,KAAU,EAAA;;KAE1B;IAEO,MAAM,GAAA;QACZ,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AAEpB,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YACjC,UAAU,CAAC,MAAK;AACd,gBAAA,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;AACtC,gBAAA,IAAI,CAAC,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EACtF,IAAI,yBAAyB,CAAC,IAAI,CAAC,MAAM,EACvC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;aACnB,EAAE,EAAE,CAAC,CAAC;AACT,SAAC,CAAC,CAAC;KAEJ;AAEO,IAAA,MAAM,MAAM,GAAA;QAClB,MAAM,IAAI,CAAC,oBAAoB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAClD,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;IAEO,MAAM,MAAM,CAAC,OAAsB,EAAA;;AAEzC,QAAA,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAEO,aAAa,GAAA;AAEnB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QAC3F,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,YAAY,GAAG,WAAW;AAC5B,aAAC,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3F,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;AACtC,aAAC,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9F,YAAY,IAAI,OAAO,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AAEnC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;YACnB,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB,SAAC,CAAC,CAAC;KACJ;;yHA7GU,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA3B,2BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,2BAA2B,mbCtBxC,ifAYA,EAAA,MAAA,EAAA,CAAA,+DAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDUa,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBALvC,SAAS;+BACE,qBAAqB,EAAA,QAAA,EAAA,ifAAA,EAAA,MAAA,EAAA,CAAA,+DAAA,CAAA,EAAA,CAAA;6FAOxB,MAAM,EAAA,CAAA;sBADZ,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,MAAM;gBAIA,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAIC,YAAY,EAAA,CAAA;sBADlB,KAAK;gBAIC,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAIC,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAII,aAAa,EAAA,CAAA;sBADtB,SAAS;uBAAC,eAAe,CAAA;gBAwClB,QAAQ,EAAA,CAAA;sBADf,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ME9D9B,uBAAuB,CAAA;AAyBlC,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAChC,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAA;AAC3B,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,OAAO,CAAC;AACpC,QAAA,IAAI,CAAC,aAAa,GAAG,MAAK;AAC1B,SAAC,CAAC;KACH;IAEM,kBAAkB,GAAA;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAEM,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACtB;IAEM,WAAW,GAAA;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAED,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;KACxC;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;KACrC;IAED,SAAS,GAAA;AACP,QAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC;KACpC;AAGO,IAAA,QAAQ,CAAC,KAAU,EAAA;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,MAAM,GAAA;QACZ,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;;;AAIpB,QAAA,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;QACtC,IAAI;AACF,YAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAChF,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AAC7E,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,IAAI,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;AACzC,SAAA;;;KAIF;AAEO,IAAA,MAAM,MAAM,GAAA;QAClB,MAAM,IAAI,CAAC,iBAAiB,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;KACtB;IAEO,MAAM,MAAM,CAAC,OAAsB,EAAA;AACzC,QAAA,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACpB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;IAEO,aAAa,GAAA;AAEnB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QAC3F,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,YAAY,GAAG,WAAW;AAC5B,aAAC,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3F,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;AACtC,aAAC,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9F,YAAY,IAAI,OAAO,CAAC;AACxB,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AAEnC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;YACnB,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB,SAAC,CAAC,CAAC;KACJ;;qHA1GU,uBAAuB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAvB,uBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,uBAAuB,2WCnBpC,s2BA2BA,EAAA,MAAA,EAAA,CAAA,+FAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAAA,EAAA,IAAA,EAAA,MAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,KAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDRa,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBALnC,SAAS;+BACE,kBAAkB,EAAA,QAAA,EAAA,s2BAAA,EAAA,MAAA,EAAA,CAAA,+FAAA,CAAA,EAAA,CAAA;6FAOrB,MAAM,EAAA,CAAA;sBADZ,KAAK;gBAQC,SAAS,EAAA,CAAA;sBADf,KAAK;gBAGC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAKI,aAAa,EAAA,CAAA;sBADtB,SAAS;uBAAC,eAAe,CAAA;gBAuClB,QAAQ,EAAA,CAAA;sBADf,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;;;MEvD9B,mBAAmB,CAAA;AAiB9B,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAN3B,IAAI,CAAA,IAAA,GAAG,KAAK,CAAC;QAOlB,IAAI,CAAC,MAAM,EAAE,CAAC;AACd,QAAA,IAAI,CAAC,aAAa,GAAG,MAAK;AAC1B,SAAC,CAAC;KACH;IAEM,kBAAkB,GAAA;QACvB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAEM,IAAA,WAAW,CAAC,OAAsB,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACtB;IAEM,WAAW,GAAA;QAChB,IAAI,CAAC,MAAM,EAAE,CAAC;KACf;AAGO,IAAA,QAAQ,CAAC,KAAU,EAAA;QACzB,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;IAEO,MAAM,GAAA;QACZ,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE;YACpD,OAAO;AACR,SAAA;AACD,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;;QAGpB,UAAU,CAAC,MAAK;AACd,YAAA,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;YACtC,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,EACtE,IAAI,uBAAuB,CAAC,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;SACvF,EAAE,EAAE,CAAC,CAAC;;KAGR;IAEO,MAAM,GAAA;AACZ,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;KACnB;AAEO,IAAA,MAAM,CAAC,OAAsB,EAAA;QACnC,IAAI,OAAO,CAAC,kBAAkB,EAAE;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,EAAE;AACpC,gBAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;gBACjB,OAAO;AACR,aAAA;AACF,SAAA;QAED,UAAU,CAAC,MAAK;YACd,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,EAAE,CAAC;SACf,EAAE,EAAE,CAAC,CAAC;KACR;IAEO,aAAa,GAAA;AAEnB,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QAEhG,MAAM,YAAY,GAAG,WAAW;AAC9B,aAAC,MAAM,CAAC,UAAU,IAAI,QAAQ,CAAC,eAAe,CAAC,WAAW,IAAI,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3F,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa;AACtC,aAAC,MAAM,CAAC,WAAW,IAAI,QAAQ,CAAC,eAAe,CAAC,YAAY,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;AAEnC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;YACnB,IAAI,CAAC,aAAa,EAAE,CAAC;AACvB,SAAC,CAAC,CAAC;KACJ;;iHAzFU,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,mBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,0YCpBhC,gWAWA,EAAA,MAAA,EAAA,CAAA,0FAAA,CAAA,EAAA,CAAA,CAAA;4FDSa,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAL/B,SAAS;+BACE,aAAa,EAAA,QAAA,EAAA,gWAAA,EAAA,MAAA,EAAA,CAAA,0FAAA,CAAA,EAAA,CAAA;6FAOhB,kBAAkB,EAAA,CAAA;sBADxB,KAAK;gBAIC,uBAAuB,EAAA,CAAA;sBAD7B,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAKI,kBAAkB,EAAA,CAAA;sBAD3B,SAAS;uBAAC,oBAAoB,CAAA;gBAwBvB,QAAQ,EAAA,CAAA;sBADf,YAAY;uBAAC,eAAe,EAAE,CAAC,QAAQ,CAAC,CAAA;;;ME9C9B,0BAA0B,CAAA;AAerC,IAAA,WAAA,CAAoB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAN3B,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAA2C,CAAC;KAOlF;AAES,IAAA,OAAO,CAAC,CAA0C,EAAA;AAC1D,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAC,CAAC,CAAC;KACzE;;wHApBU,0BAA0B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA1B,0BAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,0BAA0B,gNCTvC,uwGAsFA,EAAA,MAAA,EAAA,CAAA,qFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAD,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,cAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,SAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAE,qBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,cAAA,EAAA,eAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FD7Ea,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBALtC,SAAS;+BACE,qBAAqB,EAAA,QAAA,EAAA,uwGAAA,EAAA,MAAA,EAAA,CAAA,qFAAA,CAAA,EAAA,CAAA;6FAOxB,cAAc,EAAA,CAAA;sBADpB,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAIC,aAAa,EAAA,CAAA;sBADnB,MAAM;gBAIA,UAAU,EAAA,CAAA;sBADhB,KAAK;;;MEAK,cAAc,CAAA;AA4BzB,IAAA,WAAA,CACY,QAAkB,EAClB,cAA8B,EACjC,SAAA,GAAwB,MAAK;KACnC,EAAA;QAHS,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;QAClB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QACjC,IAAS,CAAA,SAAA,GAAT,SAAS,CACf;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;AAES,IAAA,OAAO,WAAW,CAAC,KAAW,EAAE,KAAW,EAAE,OAAe,EAAA;QAEpE,MAAM,WAAW,GAAS,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5C,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QACrF,OAAO,IAAI,KAAK,CAAC,CAAC;KACnB;IAEM,QAAQ,GAAA;AACb,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAE1B,IAAI,CAAC,aAAa,GAAG;AACnB,YAAA,eAAe,EAAE,EAAE;AACnB,YAAA,iBAAiB,EAAE,IAAI;SACxB,CAAC;AACF,QAAA,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,sBAAsB,GAAG,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/C,QAAA,IAAI,CAAC,+BAA+B,GAAG,EAAE,CAAC;AAE1C,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;KAC5C;IAED,MAAM,qBAAqB,CAAC,QAAkB,EAAA;QAE5C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE7D,IAAI,CAAC,cAAc,IAAI,CAAC,cAAc,CAAC,sBAAsB,EAAE,2BAA2B,EAAE;AAC1F,YAAA,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACpG,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,OAAO;AACR,SAAA;QAED,MAAM,UAAU,GAAiB,cAAc,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAG;YACtE,OAAO;gBACL,IAAI,EAAE,CAAC,CAAC,IAAI;AACZ,gBAAA,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AACpH,gBAAA,gBAAgB,EAAE,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,GAAG,EAAE,EAAE,CAAC,CAAC,QAAQ,GAAG,EAAE,CAAC;gBAC9D,oBAAoB,EAAE,CAAC,CAAC,mBAAmB;gBAC3C,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC;AACJ,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,sBAAsB,GAAG,cAAc,CAAC,sBAAsB,CAAC,UAAU,CAAC;QAC/E,IAAI,CAAC,2BAA2B,GAAG,cAAc,CAAC,sBAAsB,CAAC,aAAa,CAAC;QACvF,IAAI,CAAC,wBAAwB,GAAG,cAAc,CAAC,sBAAsB,CAAC,UAAU,CAAC;QACjF,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,sBAAsB,CAAC,UAAU,EAAE,CAAC;AACzE,QAAA,IAAI,CAAC,kBAAkB,GAAG,cAAc,CAAC,sBAAsB,CAAC,2BAA2B,CAAC,kBAAkB,CAAC,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC,CAAC;AAClI,QAAA,IAAI,CAAC,uBAAuB,GAAG,cAAc,CAAC,sBAAsB,CAAC,2BAA2B,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3H,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAChD,QAAA,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,IAAI,CAAC,SAAS,EAAE,CAAC;KAClB;AAED,IAAA,MAAM,2BAA2B,CAAC,cAAgC,EAChC,oBAA6B,EAAA;QAE7D,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,6BAA6B,CAAC,cAAc,CAAC,CAAC;YAEzD,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,oBAAoB,CAAC,CAAC;AAEvE,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,EAAE;;gBAEzC,OAAO;AACR,aAAA;YAED,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,aAAa;AAC1E,iBAAA,GAAG,CAAC,EAAE,IAAI,IAAI,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,EAAE,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9F,IAAI,CAAC,sBAAsB,GAAG,IAAI,MAAM,CACtC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,GAAG,EAAE,EAClD,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;AACvD,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,SAAA;KACF;AAED,IAAA,MAAM,SAAS,GAAA;;QAGb,MAAM,aAAa,GAAmB,EAAE,CAAC;AACzC,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;AACrC,YAAA,KAAK,MAAM,YAAY,IAAI,OAAO,CAAC,oBAAoB,EAAE;AACvD,gBAAA,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,YAAY,CAAC,OAAO,CAAC,CAAC;AACpF,gBAAA,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,oBAAA,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAClC,iBAAA;AACF,aAAA;AACF,SAAA;QAED,IAAI,CAAC,eAAe,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAG;AAC3C,YAAA,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,CAAC,mBAAmB,CAAC,GAAG,EAAE,CAAC,EAC1E,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,aAAa,EAAE,EACjD,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;AACvB,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED,IAAA,MAAM,WAAW,CAAC,OAAe,EAAE,YAAoB,EAAA;;AAGrD,QAAA,IAAI,OAAO,EAAE;YACX,MAAM,GAAG,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC;AAC1F,YAAA,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACvD,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC3B,SAAA;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE,CAAC;AACnC,SAAA;QAED,MAAM,qBAAqB,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC/H,IAAI,eAAe,GAAkB,EAAE,CAAC;AAExC,QAAA,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE;AACtC,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AACxD,iBAAA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,4BAA4B,GAAG,CAAC,CAAC,4BAA4B,CAAC,CAAC;AACnF,YAAA,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrB,YAAA,eAAe,GAAG,OAAO;iBACtB,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAC,MAAM;AAC1C,iBAAA,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjH,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC,qBAAqB,EAAE,CAAC;AAC5E,YAAA,IAAI,CAAC,2BAA2B,GAAG,EAAE,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,KAAK;AAC/E,kBAAA,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK;AACxE,kBAAA,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG;kBAC/D,MAAM,GAAG,kBAAkB,CAAC;AAEhC,YAAA,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAEvD,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAClC,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,YAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,OAAO;AACR,SAAA;QAED,IAAI,CAAC,cAAc,GAAG;YACpB,IAAI,SAAS,CAAC,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,GAAG,EAAE,SAAS,EAC7H,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAClC,IAAI,CAAC,qBAAqB,CAAC,UAAU,GAAG,GAAG,GAAG,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,KAAK,EAClG,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,KAAK,CAAC;SACxD,CAAC;QAEF,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,MAAM,MAAM,GAAgB,EAAE,CAAC;QAC/B,KAAK,MAAM,kBAAkB,IAAI,IAAI,CAAC,qBAAqB,CAAC,mBAAmB,EAAE;AAC/E,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,kBAAkB,CAAC,GAAG,GAAG,KAAK,EAAE,kBAAkB,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC;AAC3F,SAAA;AACD,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;AAE7B,QAAA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;KACxC;AAES,IAAA,MAAM,qBAAqB,CAAC,cAAgC,EAAE,oBAA6B,EAAA;AACnG,QAAA,MAAM,KAAK,GAAW,cAAc,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,SAAS,GAA6B,KAAK;aAC9C,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;aAC3C,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,aAAa,GAAG,oBAAoB,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,oBAAoB,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,aAAa,CAAC;KAC3B;AAES,IAAA,iBAAiB,CAAC,IAAU,EAAA;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACrG,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;AACpB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;AAES,IAAA,uBAAuB,CAAC,YAAoB,EAAA;QACpD,IAAI,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,YAAY,EAAE;AAC/D,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC;KAC3D;AAES,IAAA,mBAAmB,CAAC,OAAgB,EAAA;AAC5C,QAAA,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;AAC9B,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;AAC7B,QAAA,IAAI,CAAC,uBAAuB,GAAG,SAAS,CAAC;QAEzC,IAAI,CAAC,sBAAsB,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAA,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;AACnC,QAAA,IAAI,CAAC,2BAA2B,GAAG,CAAC,CAAC,CAAC;KACvC;IAES,MAAM,6BAA6B,CAAC,cAAgC,EAAA;AAC5E,QAAA,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;AACnC,YAAA,IAAI,CAAC,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,MAAM,CAAC,wBAAwB,EAAE;gBACvG,IAAI;AACF,oBAAA,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,GAAG,MAAM,IAAI,CAAC,cAAc;AACxF,yBAAA,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,wBAAwB,CAAC,CAAC;AACzG,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;AACV,oBAAA,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChB,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AAES,IAAA,yBAAyB,CAAC,IAAU,EAAA;QAC5C,OAAO,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;KACjE;IAES,oBAAoB,GAAA;AAC5B,QAAA,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,UAAU,EAAE;AACrC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC;AACxE,YAAA,aAAa,CAAC,OAAO,CAAC,CAAC,IAAG;gBACxB,IAAI,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,qBAAqB,EAAE,OAAO,EAAE;AAChD,oBAAA,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACV,iBAAA;AAAM,qBAAA;AACL,oBAAA,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACT,iBAAA;AACH,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,CAAC,aAAa,GAAG,aAAa,CAAC;AACvC,SAAA;KACF;IAES,mBAAmB,GAAA;;AAE3B,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;AAClC,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC,oBAAoB,EAAE,CAAC;KAC7B;AACF;;MC1SY,QAAQ,CAAA;AACnB,IAAA,WAAA,CAAmB,IAAU,EACV,eAA4B,GAAA,EAAE,EAC9B,iBAAA,GAA4B,IAAI,EAChC,sBAAiC,GAAA,IAAI,EACrC,wBAAA,GAGD,EAAE,EAAA;QAPD,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAM;QACV,IAAe,CAAA,eAAA,GAAf,eAAe,CAAe;QAC9B,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB,CAAe;QAChC,IAAsB,CAAA,sBAAA,GAAtB,sBAAsB,CAAe;QACrC,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB,CAGvB;KACnB;AACF;;ACRK,MAAO,eAAgB,SAAQ,SAAS,CAAA;AAK5C,IAAA,WAAA,CAAY,IAAS,EAAA;QACnB,KAAK,CAAC,IAAI,CAAC,CAAC;QAJP,IAAI,CAAA,IAAA,GAAG,IAAI,CAAC;QACZ,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;KAInB;AAED,IAAA,kBAAkB,CAAC,MAAc,EAAA;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;QACnI,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;IAED,GAAG,GAAA;AACD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;KAClB;IAED,MAAM,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;KACnB;AACF;;MCdY,cAAc,CAAA;AAiBzB,IAAA,WAAA,CACY,QAAkB,EAClB,YAA0B,EAC1B,cAA8B,EAC9B,cAA8B,EAC9B,mBAAiF,EACjF,aAAwD,EACxD,WAAwE,EAAA;QANxE,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;QAClB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC9B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAC9B,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB,CAA8D;QACjF,IAAa,CAAA,aAAA,GAAb,aAAa,CAA2C;QACxD,IAAW,CAAA,WAAA,GAAX,WAAW,CAA6D;AAElF,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,OAAO,EAAO,CAAC;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;KACjB;IAEM,OAAO,KAAK,CAAC,EAAU,EAAA;AAC5B,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;KACxD;IAED,QAAQ,GAAA;AAEN,QAAA,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;AAC/B,QAAA,IAAI,CAAC,4BAA4B,GAAG,EAAE,CAAC;AACvC,QAAA,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;KACpC;AAED,IAAA,MAAM,KAAK,CAAC,SAAe,EAAE,kBAA2B,EAAA;;QAEtD,MAAM,QAAQ,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;AACzG,QAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YACzB,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,SAAS,EAAE,IAAI,CAAC,4BAA4B,CAAC,CAAC;YAClF,OAAO;AACR,SAAA;;AAGD,QAAA,MAAM,OAAO,GAAa,QAAQ,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACpE,QAAA,IAAI,QAAQ,GAAa,IAAI,EAAE,IAAI,GAAa,IAAI,CAAC;AACrD,QAAA,MAAM,aAAa,GAAa,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,QAAA,SAAS,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;QACjD,IAAI,QAAQ,GAAG,CAAC,EAAE;YAChB,QAAQ,GAAG,IAAI,CAAC,4BAA4B,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;AAC3D,YAAA,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AACjD,YAAA,SAAS,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,QAAQ,CAAC;AACpD,SAAA;AACD,QAAA,IAAI,QAAQ,GAAG,IAAI,CAAC,4BAA4B,CAAC,MAAM,EAAE;YACvD,IAAI,GAAG,IAAI,CAAC,4BAA4B,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;YACvD,IAAI,IAAI,EAAE,IAAI,EAAE;AACd,gBAAA,aAAa,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAC7C,gBAAA,SAAS,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC;AAC5C,aAAA;AACF,SAAA;;QAGD,MAAM,OAAO,GAIP,EAAE,CAAC;AACT,QAAA,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE;AACxC,YAAA,IAAI,SAAS,CAAC,YAAY,CAAC,EAAE;AAC3B,gBAAA,MAAM,MAAM,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;gBACvC,MAAM,CAAC,wBAAwB,GAAG,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,CAAC;AAC/E,gBAAA,MAAM,CAAC,SAAS,GAAG,kBAAkB,CAAC;AACtC,gBAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAErB,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC;AAE7E,gBAAA,IAAI,YAAY,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE;oBAClD,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,OAAO,IAAG;AACrD,qBAAC,CAAC,CAAC;AACJ,iBAAA;AACF,aAAA;AACF,SAAA;;QAGD,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;AACrD,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,OAAO,CAAC;KAChB;AAED,IAAA,MAAM,SAAS,CAAC,KAAW,EAAE,GAAS,EAAA;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AAEf,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;KAC7B;AAED,IAAA,MAAM,OAAO,CAAC,kBAA2B,EAAE,YAAqB,EAAA;QAE9D,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;AAClC,SAAA;AAED,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;AACjC,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC/B,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAC9B,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,QAAA,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;AACf,aAAA,IAAI,CACH,SAAS,CAAC,YAAW;AACnB,YAAA,IAAI,iBAAiB,EAAE;AACrB,gBAAA,OAAO,WAAW,CAAC;AACpB,aAAA;YAED,iBAAiB,GAAG,IAAI,CAAC;AACzB,YAAA,IAAI,CAAC,mBAAmB,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,OAAO,IAAG;AACzF,aAAC,CAAC,CAAC;AACH,YAAA,WAAW,GAAG,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC;YACtD,IAAI,CAAC,WAAW,EAAE;gBAChB,iBAAiB,GAAG,KAAK,CAAC;AAC3B,aAAA;AACD,YAAA,OAAO,WAAW,CAAC;SACpB,CAAC,EACF,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAClC;AACA,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,OAAO,eAAwB,KAAI;gBACvC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,eAAe,EAAE,kBAAkB,CAAC,CAAC;AACpE,gBAAA,IAAI,eAAe,EAAE;AACnB,oBAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAClC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AAC/C,iBAAA;aACF;AACD,YAAA,KAAK,EAAE,CAAC,KAAU,KAAI;AACpB,gBAAA,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;aAC1C;AACF,SAAA,CAAC,CAAC;KAEN;AAED,IAAA,MAAM,WAAW,CAAC,OAAe,EAAE,YAAoB,EAAA;QACrD,OAAO,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;KAC/D;AAED,IAAA,kBAAkB,CAAC,CAAU,EAAA;AAC3B,QAAA,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;KAC1B;AAES,IAAA,MAAM,aAAa,GAAA;QAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjG,IAAI,CAAC,YAAY,GAAG;YAClB,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClF,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClF,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAC,KAAK,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC7F,CAAC;QACF,OAAO,IAAI,CAAC,YAAY,CAAC;KAC1B;AAES,IAAA,+BAA+B,CAAC,QAAkB,EAAA;AAC1D,QAAA,IAAI,QAAQ,CAAC,wBAAwB,CAAC,MAAM,IAAI,CAAC,EAAE;AACjD,YAAA,OAAO,SAAS,CAAC;AAClB,SAAA;QACD,OAAO,QAAQ,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD;AAES,IAAA,MAAM,0BAA0B,GAAA;QAExC,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI;AACF,YAAA,IAAI,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;;AAGjC,YAAA,MAAM,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,IAAG;AACrD,aAAC,CAAC,CAAC;AAEH,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;IAES,kBAAkB,GAAA;;QAE1B,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,KAAK,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC;KACjF;IAES,MAAM,2BAA2B,CAAC,IAAa,EAAA;QAEvD,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QAED,MAAM,aAAa,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,aAAa,CAAC,UAAU,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;QACzD,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,aAAa,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAEjI,QAAA,IAAI,CAAC,4BAA4B,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvF,QAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,4BAA4B;AAC1D,aAAA,MAAM,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;aACtH,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;;AAIvD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/E,OAAO,IAAI,CAAC,oBAAoB,CAAC;KAClC;IAES,MAAM,0BAA0B,CAAC,IAAa,EAAA;QACtD,IAAI,CAAC,IAAI,EAAE;YACT,OAAO;AACR,SAAA;QAED,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,QAAA,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,4BAA4B,EAAE;AACxD,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,wBAAwB,GAAG,IAAI,CAAC,+BAA+B,CAAC,QAAQ,CAAC,CAAC;AACjF,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,SAAA;AACD,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,2BAA2B,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;KACvF;IAES,MAAM,6BAA6B,CAAC,MAI7C,EAAA;AACC,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;AACxC,YAAA,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAC/D,OAAO;AACR,SAAA;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,UAAU,GAAyB,EAAE,CAAC;AAC5C,QAAA,MAAM,6BAA6B,GAAG,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI;AACF,YAAA,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,cAAc;iBACnD,kCAAkC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAClF,YAAA,IAAI,oBAAoB,EAAE;AACxB,gBAAA,6BAA6B,CAAC,yBAAyB,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;AAErF,gBAAA,IAAI,CAAC,sBAAsB,GAAG,oBAAoB,CAAC,IAAI,CAAC;AACxD,gBAAA,IAAI,CAAC,0BAA0B,GAAG,oBAAoB,CAAC,UAAU,CAAC;AAClE,gBAAA,IAAI,CAAC,4BAA4B,GAAG,oBAAoB,CAAC,UAAU,CAAC;AACpE,gBAAA,IAAI,CAAC,+BAA+B,GAAG,oBAAoB,CAAC,aAAa,CAAC;AAC3E,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;AAC3E,SAAA;AAED,QAAA,OAAO,6BAA6B,CAAC;KACtC;IAES,MAAM,qBAAqB,CAAC,QAAkB,EAAA;QACtD,MAAM,IAAI,CAAC,cAAc,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AAC1D,QAAA,MAAM,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;KACvC;AACF;;MCrRY,aAAa,CAAA;AAKxB,IAAA,WAAA,CACY,QAAkB,EAClB,YAA0B,EAC1B,cAA8B,EAAA;QAF9B,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;QAClB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAc;QAC1B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;KACzC;IAED,MAAM,OAAO,CAAC,SAAe,EAAA;AAC3B,QAAA,MAAM,EAAC,MAAM,EAAE,oBAAoB,EAAC,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACpG,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,kBAAuC,KAAI;YACvD,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAC/C,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7B,YAAA,OAAO,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AAChD,SAAC,CAAA;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;KACzB;AAED,IAAA,MAAM,SAAS,CAAC,KAAW,EAAE,GAAS,EAAA;AACpC,QAAA,MAAM,EAAC,MAAM,EAAE,oBAAoB,EAAC,GAAG,MAAM,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC1F,QAAA,IAAI,CAAC,KAAK,GAAG,CAAC,kBAAuC,KAAI;AACvD,YAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAC/C,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,oBAAoB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,YAAA,OAAO,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACjD,SAAC,CAAA;AACD,QAAA,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC;KACzB;AAES,IAAA,MAAM,2BAA2B,CAAC,KAAW,EAAE,GAAS,EAAA;QAEhE,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAE9F,QAAA,MAAM,4BAA4B,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxF,MAAM,oBAAoB,GAAG,4BAA4B;AACtD,aAAA,MAAM,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;aAC5G,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAEvD,IAAI,MAAM,GAAwB,EAAE,CAAC;AACrC,QAAA,KAAK,MAAM,QAAQ,IAAI,oBAAoB,EAAE;AAC3C,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxD,SAAA;AAED,QAAA,OAAO,EAAC,MAAM,EAAE,oBAAoB,EAAC,CAAC;KACvC;IAES,MAAM,SAAS,CAAC,MAEzB,EAAA;AACC,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;AACxC,YAAA,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;AACxC,YAAA,OAAO,EAAE,CAAC;AACX,SAAA;QAED,IAAI,MAAM,GAAwB,EAAE,CAAC;AACrC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,MAAM,UAAU,GAAyB,EAAE,CAAC;AAC5C,QAAA,MAAM,6BAA6B,GAAG,IAAI,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAC1E,IAAI;AACF,YAAA,MAAM,oBAAoB,GAAG,MAAM,IAAI,CAAC,cAAc;iBACnD,kCAAkC,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAElF,YAAA,IAAI,oBAAoB,EAAE;gBACxB,oBAAoB,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAC,IAAG;oBAC5C,IAAI,CAAC,CAAC,MAAM,EAAE;AACX,wBAAA,CAAC,CAAC,MAAmC,CAAC,OAAO,CAAC,CAAC,IAAG;4BACjD,MAAM,qBAAqB,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;4BAC5D,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAC3C,qBAAqB,CAAC,kBAAkB,EAAE,EAC1C,qBAAqB,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC;AACrD,yBAAC,CAAC,CAAC;AACJ,qBAAA;AACH,iBAAC,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;AAC3E,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACf;AAEF;;MCnFY,KAAK,CAAA;AAIhB,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;KAClB;AAEM,IAAA,MAAM,QAAQ,CAAC,GAAW,EAAE,WAAW,EAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AACpC,YAAA,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,WAAW,EAAE,CAAC,CAAC;AACzC,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;AAClC,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;KACzB;IAEM,QAAQ,CAAC,GAAW,EAAE,KAAU,EAAA;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAEzB,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QAC9D,IAAI,MAAM,GAAG,EAAE,EAAE;AACf,YAAA,OAAO,CAAC,IAAI,CAAC,oCAAoC,EAAE,MAAM,CAAC,CAAC;AAC5D,SAAA;KACF;;mGAzBU,KAAK,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAL,KAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,KAAK,cAFJ,MAAM,EAAA,CAAA,CAAA;4FAEP,KAAK,EAAA,UAAA,EAAA,CAAA;kBAHjB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCAY,eAAe,CAAA;AAA5B,IAAA,WAAA,GAAA;QAES,IAAM,CAAA,MAAA,GAAgB,EAAE,CAAC;QACzB,IAAK,CAAA,KAAA,GAAe,EAAE,CAAC;QACvB,IAAM,CAAA,MAAA,GAAgB,EAAE,CAAC;QAEzB,IAAM,CAAA,MAAA,GAAgB,EAAE,CAAC;QAEzB,IAAK,CAAA,KAAA,GAAQ,EAAE,CAAC;KA8GxB;AA5GC,IAAA,OAAO,YAAY,GAAA;QACjB,OAAO,IAAI,eAAe,EAAE,CAAC;KAC9B;AAED,IAAA,OAAO,WAAW,GAAA;AAChB,QAAA,MAAM,QAAQ,GAAG,IAAI,eAAe,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC;AAC1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkGG;AACH,QAAA,OAAO,QAAQ,CAAC;KACjB;AACF,CAAA;AAED,MAAM,iBAAiB,CAAA;AAEtB,CAAA;MAEY,WAAW,CAAA;AAMtB,IAAA,WAAA,CAAoB,OAAgB,EAAA;QAAhB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;AAH5B,QAAA,IAAA,CAAA,IAAI,GAAoB,eAAe,CAAC,YAAY,EAAE,CAAC;QACvD,IAAc,CAAA,cAAA,GAAsB,EAAC,IAAI,EAAE,IAAI,eAAe,EAAE,EAAC,CAAC;KAGzE;AAEM,IAAA,MAAM,SAAS,CAAC,WAAwB,EAAE,IAAI,EAAA;AACnD,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAErC,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;YACxE,OAAO;AACR,SAAA;QAED,MAAM,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;KAC5C;IAEM,MAAM,oBAAoB,CAAC,WAAwB,EAAA;QAExD,IAAI,IAAI,CAAC,UAAU,EAAE;YACnB,MAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC1D,YAAA,IAAI,cAAc,EAAE;gBAClB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;gBACjD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACtC,aAAA;AACD,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9C,SAAA;AAED,QAAA,MAAM,aAAa,GAAG,YAAW;AAC/B,YAAA,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;YAC1C,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C,SAAC,CAAC;AAEF,QAAA,MAAM,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACtC,QAAA,MAAM,kBAAkB,GAAQ,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;AAE5D,QAAA,IAAI,kBAAkB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;AACvD,YAAA,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAC9B,gBAAA,IAAI,CAAC,cAAc,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC;gBAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AACtC,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KAC9C;AAED,IAAA,WAAW,CAAC,MAAe,EAAA;AACzB,QAAA,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;KAC1B;AACF;;ACjLK,MAAO,OAAQ,SAAQ,YAAY,CAAA;AAEvC,IAAA,WAAA,GAAA;QACE,KAAK,CAAC,YAAY,CAAC,CAAC;KACrB;;qGAJU,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;yGAAP,OAAO,EAAA,CAAA,CAAA;4FAAP,OAAO,EAAA,UAAA,EAAA,CAAA;kBADnB,UAAU;;;MCwBE,cAAc,CAAA;AAWzB,IAAA,WAAA,CAAsB,OAAgB,EAChB,WAAwB,EACxB,UAAsB,EACxB,MAAc,EAAA;QAHZ,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;QAChB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAU,CAAA,UAAA,GAAV,UAAU,CAAY;QACxB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;AAEhC,QAAA,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAEvC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AAC/C,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;QACrD,IAAI,CAAC,YAAY,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AACxD,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;AAC5C,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;KACzB;AAED,IAAA,IAAI,UAAU,GAAA;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,IAAI,UAAU,CAAC,IAAI,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC3C;AAED,IAAA,IAAI,gBAAgB,GAAA;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;KACtC;IAED,IAAI,gBAAgB,CAAC,GAAW,EAAA;QAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;KACpC;AAED,IAAA,MAAM,cAAc,GAAA;QAClB,IAAI;AACF,YAAA,IAAI,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC9E,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC,QAAQ,CAAC;AACtB,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;KACF;IAED,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AAED,IAAA,QAAQ,CAAC,KAAa,EAAA;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;KACvC;AAED,IAAA,MAAM,MAAM,CAAC,OAAe,EAAE,QAAiB,EAAA;AAE7C,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC7B,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI;AACF,YAAA,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EACjC;gBACE,QAAQ,EAAE,eAAe,CAAC,IAAI;AAC9B,gBAAA,MAAM,EAAE,KAAK;AACb,gBAAA,IAAI,EAAE,QAAQ;AACd,gBAAA,KAAK,EAAE,KAAK;AACb,aAAA,CAAC,CAAC;AAEL,YAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAC9B,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,SAAA;AAAC,QAAA,OAAO,GAAG,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;AAC3C,SAAA;KAEF;IAED,MAAM,UAAU,CAAC,KAAqB,EAAA;AACpC,QAAA,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAClC,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,GAAG,EAAE;AACtB,YAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAEnC,YAAA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;gBACxC,IAAI;oBACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;AAC5C,iBAAA;AAAC,gBAAA,OAAO,CAAC,EAAE;AACV,oBAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AACxB,iBAAA;AACF,aAAA;AACF,SAAA;KACF;AAED,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;YACzC,OAAO;AACR,SAAA;AACD,QAAA,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,EAAC,kBAAkB,EAAE,IAAI,EAAC,CAAC,CAAC;;;KAGxE;AAED,IAAA,MAAM,SAAS,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE;YACzC,OAAO;AACR,SAAA;;QAED,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;KACxC;IAED,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC;KACtC;AAED,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KACpE;IAED,OAAO,GAAA;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;KACzC;;AAID,IAAA,MAAM,kBAAkB,CAAC,MAAc,EAAE,OAAe,EAAA;QACtD,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AACvD,gBAAA,IAAI,EAAE;AACJ,oBAAA,IAAI,EAAE,MAAM;oBACZ,OAAO;AACR,iBAAA;AACF,aAAA,CAAC,CAAC;AACH,YAAA,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;AAC/C,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;IAED,MAAM,gBAAgB,CAAC,MAAc,EAAA;QACnC,IAAI;AACF,YAAA,MAAM,IAAI,GAAG,QAAQ,GAAG,MAAM,CAAC;YAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AACxD,aAAA,CAAC,CAAC;AAEH,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;AAC/C,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,MAAM,mBAAmB,GAAA;QACvB,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,eAAe;AACpB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,gBAAgB;AACxD,aAAA,CAAC,CAAC;AAEH,YAAA,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3D,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AAED,QAAA,OAAO,EAAE,CAAC;KACX;;AAID,IAAA,MAAM,QAAQ,GAAA;QACZ,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,WAAW;AAChB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,YAAY;AACpD,aAAA,CAAC,CAAC;YACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAClC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;AACrC,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAED,MAAM,OAAO,CAAC,MAAc,EAAA;QAC1B,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,YAAY,EAAE,MAAM;AACpB,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,QAAQ;AAChD,aAAA,CAAC,CAAC;AACH,YAAA,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;;IAID,MAAM,SAAS,CAAC,MAAc,EAAA;QAC5B,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,GAAG,SAAS,IAAI,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC;QACpF,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,aAAa,EAAE,GAAG;AACnB,aAAA,CAAC,CAAC;YACH,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChC,gBAAA,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/B,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpB,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;IAED,MAAM,QAAQ,CAAC,EAAU,EAAA;QACvB,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,YAAY,EAAE,EAAE;AAChB,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACjD,aAAA,CAAC,CAAC;AACH,YAAA,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAED,IAAA,MAAM,QAAQ,CAAC,SAAoB,EAAE,mBAAyB,EAAA;AAC5D,QAAA,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,SAAS,CAAC,IAAI;SACrB,CAAC;AAEF,QAAA,IAAI,mBAAmB,EAAE;AACvB,YAAA,IAAI,CAAC,qBAAqB,CAAC,GAAG,mBAAmB,CAAC;AACnD,SAAA;QAED,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,QAAQ;gBACb,YAAY,EAAE,SAAS,CAAC,EAAE;AAC1B,gBAAA,IAAI,EAAE,KAAK;gBACX,IAAI;AACJ,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,UAAU;AAClD,aAAA,CAAC,CAAC;AAEH,YAAA,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC;AACxC,SAAA;KACF;IAED,MAAM,eAAe,CAAC,KAAiB,EAAA;QACrC,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACjD,aAAA,CAAC,CAAC;YACH,MAAM,YAAY,GAAgB,EAAE,CAAC;AACrC,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,YAAA,MAAM,CAAC,OAAO,CAAC,KAAK,IAAG;gBACrB,IAAI,KAAK,GAAG,KAAK,CAAC;AAClB,gBAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;oBACnB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACxC,oBAAA,IAAI,IAAI,KAAK,KAAK,CAAC,EAAE,EAAE;wBACrB,KAAK,GAAG,IAAI,CAAC;AACd,qBAAA;AACH,iBAAC,CAAC,CAAC;gBACH,IAAI,CAAC,KAAK,EAAE;AACV,oBAAA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,iBAAA;AACH,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,YAAY,CAAC;AACrB,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,EAAE,CAAC;KACX;IAED,MAAM,gBAAgB,CAAC,MAAc,EAAE,KAAW,EAAE,GAAS,EAAE,MAAM,GAAG,KAAK,EAAA;QAC3E,IAAI;AACF,YAAA,IAAI,SAAS,GAAG,EAAE,GAAG,MAAM,GAAG,mBAAmB,CAAC;AAClD,YAAA,IAAI,KAAK,EAAE;AACT,gBAAA,SAAS,IAAI,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;AAC9C,aAAA;AACD,YAAA,IAAI,GAAG,EAAE;AACP,gBAAA,SAAS,IAAI,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;AAC1C,aAAA;AACD,YAAA,IAAI,MAAM,EAAE;gBACV,SAAS,IAAI,cAAc,CAAC;AAC7B,aAAA;YACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,YAAY,EAAE,SAAS;AACvB,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,QAAQ;AAChD,aAAA,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AACnD,YAAA,QAAQ,CAAC,IAAI,IAAI,kBAAkB,CAAC;AACpC,YAAA,OAAO,QAAQ,CAAC;AACjB,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;IAID,MAAM,QAAQ,CAAC,MAAc,EAAA;QAC3B,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,GAAG,QAAQ,IAAI,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC;QACnF,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,aAAa,EAAE,GAAG;AACnB,aAAA,CAAC,CAAC;YACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;gBAClC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAChC,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd;IAED,MAAM,OAAO,CAAC,EAAU,EAAA;QACtB,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,YAAY,EAAE,EAAE;AAChB,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACjD,aAAA,CAAC,CAAC;AACH,YAAA,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;IAID,MAAM,SAAS,CAAC,MAAc,EACd,WAAkB,EAClB,SAAgB,EAChB,aAAuB,EAAA;QAMrC,IAAI;YAEF,IAAI,IAAI,GAAG,EAAE,CAAC;YACd,IAAI,WAAW,IAAI,SAAS,EAAE;AAC5B,gBAAA,IAAI,GAAG,eAAe,GAAG,WAAW,CAAC,WAAW,EAAE,GAAG,aAAa,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC;AAC9F,aAAA;AACD,YAAA,IAAI,aAAa,EAAE;AACjB,gBAAA,IAAI,IAAI,iBAAiB,GAAG,aAAa,CAAC;AAC3C,aAAA;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,OAAO;AACZ,gBAAA,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;AACvC,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACjD,aAAA,CAAC,CAAC;AAEH,YAAA,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;AAChC,YAAA,MAAM,aAAa,GAAa,EAAE,EAChC,aAAa,GAAa,EAAE,EAC5B,kBAAkB,GAAa,EAAE,EACjC,oBAAoB,GAAa,EAAE,CAAC;AAEtC,YAAA,MAAM,CAAC,OAAO,CAAC,CAAC,IAAG;AACjB,gBAAA,aAAa,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD,gBAAA,aAAa,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjE,gBAAA,kBAAkB,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,kBAAkB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3E,gBAAA,oBAAoB,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,oBAAoB,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjF,aAAC,CAAC,CAAC;YAEH,OAAO;gBACL,aAAa;gBACb,aAAa;gBACb,kBAAkB;gBAClB,oBAAoB;aACrB,CAAC;AACH,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;AAID,IAAA,MAAM,qBAAqB,CAAC,MAAc,EACd,IAAU,EAAA;QACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACrD,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,YAAY,EAAE,EAAE,GAAG,MAAM,GAAG,eAAe;AAC3C,YAAA,IAAI,EAAE;AACJ,gBAAA,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE;AACzB,aAAA;AACD,YAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,QAAQ;AAChD,SAAA,CAAC,CAAC;AAEH,QAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;KACrE;AAED,IAAA,MAAM,kCAAkC,CAAC,MAAc,EAAE,iBAAyB,EAAA;QAChF,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,uBAAuB,CAAC;QAC/F,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACrD,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,QAAQ;AAChD,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;AACnC,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AAED,QAAA,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;AAClF,QAAA,kBAAkB,CAAC,IAAI,GAAG,MAAM,GAAG,qBAAqB,CAAC;AACzD,QAAA,OAAO,kBAAkB,CAAC;KAC3B;AAED,IAAA,MAAM,eAAe,CAAC,MAAc,EAAE,iBAAyB,EAAA;QAC7D,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;QACrE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACrD,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,QAAQ;;AAEhD,SAAA,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3D,QAAA,MAAM,KAAK,GAAG,eAAe,CAAC,QAAQ,EAAE,CAAC;QACzC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACpC,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AACxB,YAAA,IAAI,IAAI,CAAC,GAAG,KAAK,0BAA0B,EAAE;AAC3C,gBAAA,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AACxB,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;gBACpG,wBAAwB,CAAC,IAAI,CAAC,EAAC,EAAE,EAAE,OAAO,EAAC,CAAC,CAAC;AAC9C,aAAA;AACF,SAAA;AACD,QAAA,OAAO,wBAAwB,CAAC;KACjC;AAED,IAAA,MAAM,kBAAkB,CAAC,MAAc,EACd,iBAAyB,EACzB,wBAAgC,EAAA;AACvD,QAAA,MAAM,SAAS,GAAG,EAAE,GAAG,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,YAAY,GAAG,wBAAwB,CAAC;QAC/G,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACrD,YAAA,GAAG,EAAE,OAAO;AACZ,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,QAAQ;AAChD,SAAA,CAAC,CAAC;QAEH,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACzE,sBAAsB,CAAC,2BAA2B,GAAG,oBAAoB;AACtE,aAAA,cAAc,CAAC,sBAAsB,CAAC,2BAA2B,CAAC,CAAC;AACtE,QAAA,OAAO,sBAAsB,CAAC;KAC/B;;IAID,MAAM,QAAQ,CAAC,OAAe,EAAA;QAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,YAAY,EAAE,OAAO;AACrB,YAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACjD,SAAA,CAAC,CAAC;AACH,QAAA,OAAO,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACjC;IAED,MAAM,SAAS,CAAC,MAAe,EAAA;QAC7B,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,SAAS,IAAI,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC;AACzC,SAAA;AACD,QAAA,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,SAAS,EAAE;gBACb,SAAS,IAAI,GAAG,CAAC;AAClB,aAAA;AAAM,iBAAA;gBACL,SAAS,IAAI,GAAG,CAAC;AAClB,aAAA;AACD,YAAA,SAAS,IAAI,SAAS,GAAG,MAAM,CAAC;AACjC,SAAA;QAED,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,gBAAA,GAAG,EAAE,QAAQ;AACb,gBAAA,IAAI,EAAE,KAAK;AACX,gBAAA,YAAY,EAAE,SAAS;AACvB,gBAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACjD,aAAA,CAAC,CAAC;YAEH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACpC,MAAM,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,aAAA;AACF,SAAA;AAAC,QAAA,OAAO,CAAC,EAAE;AACV,YAAA,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAC1B,SAAA;AACD,QAAA,OAAO,MAAM,CAAC;KACf;AAED,IAAA,MAAM,gBAAgB,CAAC,OAAe,EAAE,KAAW,EAAE,GAAS,EAAA;AAC5D,QAAA,MAAM,SAAS,GAAG,EAAE,GAAG,OAAO,GAAG,kBAAkB,GAAG,KAAK,CAAC,WAAW,EAAE,GAAG,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACxG,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC;AACjD,YAAA,GAAG,EAAE,QAAQ;AACb,YAAA,IAAI,EAAE,KAAK;AACX,YAAA,YAAY,EAAE,SAAS;AACvB,YAAA,aAAa,EAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS;AACjD,SAAA,CAAC,CAAC;QAEH,MAAM,aAAa,GAAmB,EAAE,CAAC;QACzC,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;YAClD,aAAa,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;AACpD,SAAA;AACD,QAAA,OAAO,aAAa,CAAC;KACtB;;AAIS,IAAA,QAAQ,CAAC,KAAoB,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;KACpB;;4GAhjBU,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,OAAA,EAAA,EAAA,EAAA,KAAA,EAAAH,IAAA,CAAA,WAAA,EAAA,EAAA,EAAA,KAAA,EAAAI,IAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA,CAAA;4FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA,CAAA;;;MCnBY,YAAY,CAAA;AAGvB,IAAA,WAAA,CACU,cAA8B,EAAA;QAA9B,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;KAEvC;AAED,IAAA,OAAO,4BAA4B,CAAC,YAAmC,EAAE,IAAc,EAAA;QACrF,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;KAC3D;AAED,IAAA,OAAO,6BAA6B,CAAC,YAAoC,EAAE,IAAc,EAAA;QACvF,OAAO,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;KAC3D;AAEO,IAAA,OAAO,aAAa,CAAC,kBAAgD,EAAE,IAAc,EAAA;QAC3F,MAAM,MAAM,GAAoB,EAAE,CAAC;AACnC,QAAA,kBAAkB,CAAC,OAAO,CAAC,CAAC,IAAG;AAC7B,YAAA,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YAC1B,IAAI,QAAQ,GAAG,CAAC,CAAC;AACjB,YAAA,MAAM,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC;AAChC,YAAA,UAAU,CAAC,OAAO,CAAC,CAAC,IAAG;gBACrB,MAAM,GAAG,GAAG,IAAI,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;;;AAKpD,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjB,gBAAA,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC;AACzB,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,MAAM,CAAC;KACf;IAED,MAAM,WAAW,CAAC,QAAkB,EAAA;QAClC,MAAM,QAAQ,GAAe,EAAE,CAAC;AAChC,QAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC;AAClC,QAAA,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;;AAGhC,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YACpD,IAAI,YAAY,IAAI,CAAC,EAAE;AACrB,gBAAA,MAAM,KAAK,GAAG,YAAY,GAAG,CAAC,CAAC;gBAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAA,IAAI,IAAI,EAAE;oBACR,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;oBACvC,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAEtC,oBAAA,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;oBACpC,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;oBACvF,IAAI,eAAe,CAAC,MAAM,EAAE;wBAC1B,eAAe,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChD,qBAAA;AAAM,yBAAA;AACL,wBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjD,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;;AAGD,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;YAC5D,IAAI,gBAAgB,IAAI,CAAC,EAAE;AACzB,gBAAA,MAAM,KAAK,GAAG,gBAAgB,GAAG,EAAE,CAAC;gBACpC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACxC,gBAAA,IAAI,IAAI,EAAE;oBACR,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBACjC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,oBAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC5B,oBAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACtC,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;AAClF,oBAAA,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE;AACpC,wBAAA,MAAM,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;AAC7C,wBAAA,MAAM,CAAC,sBAAsB,GAAG,OAAO,CAAC;AACxC,wBAAA,MAAM,CAAC,wBAAwB,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;AACnF,qBAAA;AACF,iBAAA;AACF,aAAA;AACF,SAAA;AAED,QAAA,OAAO,QAAQ,CAAC;KACjB;AAED,IAAA,MAAM,SAAS,CAAC,MAAc,EAAE,iBAAyB,EAAA;QACvD,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;KAC7E;;0GAzFU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;8GAAZ,YAAY,EAAA,CAAA,CAAA;4FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;;;ACNX;AACa,MAAA,SAAS,GAAG;AAEvB,IAAA,0BAA0B,EAAE,CAAC;AAC7B,IAAA,8BAA8B,EAAE,GAAG;AACnC,IAAA,6BAA6B,EAAE,GAAG;AAClC,IAAA,2CAA2C,EAAE,GAAG;AAChD,IAAA,6BAA6B,EAAE,GAAG;AAClC,IAAA,uBAAuB,EAAE,GAAG;AAC5B,IAAA,+BAA+B,EAAE,GAAG;AAEpC,IAAA,0BAA0B,EAAE,CAAC;AAC7B,IAAA,6BAA6B,EAAE,GAAG;AAClC,IAAA,sBAAsB,EAAE,CAAC;IAEzB,+BAA+B,EAAE,CAAC,CAAC;IACnC,iCAAiC,EAAE,CAAC,GAAG;AACvC,IAAA,yBAAyB,EAAE,CAAC;AAC5B,IAAA,6BAA6B,EAAE,GAAG;AAClC,IAAA,qBAAqB,EAAE,CAAC;AAExB,IAAA,0BAA0B,EAAE,GAAG;AAC/B,IAAA,2BAA2B,EAAE,GAAG;AAChC,IAAA,0BAA0B,EAAE,GAAG;AAE/B,IAAA,2BAA2B,EAAE,CAAC;AAC9B,IAAA,+BAA+B,EAAE,GAAG;AACpC,IAAA,4BAA4B,EAAE,CAAC;;;MCrBpB,UAAU,CAAA;AACrB,IAAA,SAAS,CAAC,KAAiB,EAAA;AACzB,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,MAAM,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC;KACtF;;wGAHU,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;sGAAV,UAAU,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,IAAI;mBAAC,EAAC,IAAI,EAAE,YAAY,EAAC,CAAA;;MAQb,iBAAiB,CAAA;AAC5B,IAAA,SAAS,CAAC,KAAiB,EAAA;QACzB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,MACvB,SAAS,CAAC,0BAA0B,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,+BAA+B,CAC9G,CAAC,CAAC;KACJ;;+GALU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAjB,iBAAiB,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,IAAI;mBAAC,EAAC,IAAI,EAAE,eAAe,EAAC,CAAA;;MAUhB,QAAQ,CAAA;AACnB,IAAA,SAAS,CAAC,KAAiB,EAAA;QACzB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,MACvB,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,+BAA+B,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,6BAA6B,CACnH,CAAC,CAAC;KACJ;;sGALU,QAAQ,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;oGAAR,QAAQ,EAAA,IAAA,EAAA,UAAA,EAAA,CAAA,CAAA;4FAAR,QAAQ,EAAA,UAAA,EAAA,CAAA;kBADpB,IAAI;mBAAC,EAAC,IAAI,EAAE,UAAU,EAAC,CAAA;;MAUX,OAAO,CAAA;AAClB,IAAA,SAAS,CAAC,IAAc,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,+BAA+B,EAAE;AAC5D,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;qGANU,OAAO,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;mGAAP,OAAO,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,CAAA;4FAAP,OAAO,EAAA,UAAA,EAAA,CAAA;kBADnB,IAAI;mBAAC,EAAC,IAAI,EAAE,SAAS,EAAC,CAAA;;MAWV,UAAU,CAAA;AACrB,IAAA,SAAS,CAAC,IAAc,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,+BAA+B,EAAE;AAC3D,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;wGANU,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;sGAAV,UAAU,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,CAAA;4FAAV,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,IAAI;mBAAC,EAAC,IAAI,EAAE,YAAY,EAAC,CAAA;;MAWb,iBAAiB,CAAA;AAC5B,IAAA,SAAS,CAAC,IAAc,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,+BAA+B,EAAE;AAC7D,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;+GANU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAjB,iBAAiB,EAAA,IAAA,EAAA,mBAAA,EAAA,CAAA,CAAA;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,IAAI;mBAAC,EAAC,IAAI,EAAE,mBAAmB,EAAC,CAAA;;MAWpB,cAAc,CAAA;AACzB,IAAA,SAAS,CAAC,IAAc,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,6BAA6B,EAAE;AAC1D,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;4GANU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;0GAAd,cAAc,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,IAAI;mBAAC,EAAC,IAAI,EAAE,gBAAgB,EAAC,CAAA;;MAWjB,iBAAiB,CAAA;AAC5B,IAAA,SAAS,CAAC,IAAc,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,qBAAqB,EAAE;AAClD,YAAA,OAAO,IAAI,CAAC;AACb,SAAA;AACD,QAAA,OAAO,IAAI,CAAC;KACb;;+GANU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;6GAAjB,iBAAiB,EAAA,IAAA,EAAA,mBAAA,EAAA,CAAA,CAAA;4FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,IAAI;mBAAC,EAAC,IAAI,EAAE,mBAAmB,EAAC,CAAA;;MAWpB,aAAa,CAAA;AACxB,IAAA,SAAS,CAAC,IAAc,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACnB,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;;QAGD,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;;;;;;;;AAQ9B,QAAA,OAAO,KAAK,CAAC;KACd;;2GAhBU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;yGAAb,aAAa,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;4FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,IAAI;mBAAC,EAAC,IAAI,EAAE,eAAe,EAAC,CAAA;;MAqBhB,cAAc,CAAA;AACzB,IAAA,SAAS,CAAC,IAAc,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE;AACpB,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;AAED,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AAC/B,QAAA,OAAO,KAAK,CAAC;KACd;;4GARU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;0GAAd,cAAc,EAAA,IAAA,EAAA,gBAAA,EAAA,CAAA,CAAA;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,IAAI;mBAAC,EAAC,IAAI,EAAE,gBAAgB,EAAC,CAAA;;MAajB,4BAA4B,CAAA;AACvC,IAAA,SAAS,CAAC,SAAqB,EAAA;QAC7B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;AAED,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,IAAI,QAAQ,CAAC,iBAAiB,EAAE;AACjE,gBAAA,QAAQ,EAAE,CAAC;AACZ,aAAA;AACF,SAAA;AAED,QAAA,OAAO,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC;KACpC;;0HAdU,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;wHAA5B,4BAA4B,EAAA,IAAA,EAAA,8BAAA,EAAA,CAAA,CAAA;4FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC,IAAI;mBAAC,EAAC,IAAI,EAAE,8BAA8B,EAAC,CAAA;;MAmB/B,wBAAwB,CAAA;AACnC,IAAA,SAAS,CAAC,SAAqB,EAAA;QAC7B,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC,YAAA,OAAO,CAAC,CAAC;AACV,SAAA;AAED,QAAA,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AAChC,YAAA,MAAM,SAAS,GAAG,QAAQ,CAAC,wBAAwB,GAAG,QAAQ,CAAC,wBAAwB,GAAG,EAAE,CAAC;YAC7F,MAAM,uBAAuB,GAAG,SAAS;AACtC,iBAAA,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,YAAA,IAAI,QAAQ,CAAC,eAAe,CAAC,MAAM,IAAI,QAAQ,CAAC,iBAAiB,IAAI,uBAAuB,CAAC,MAAM,EAAE;AACnG,gBAAA,QAAQ,EAAE,CAAC;AACZ,aAAA;AACF,SAAA;AAED,QAAA,OAAO,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC;KACpC;;sHAjBU,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;oHAAxB,wBAAwB,EAAA,IAAA,EAAA,0BAAA,EAAA,CAAA,CAAA;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,IAAI;mBAAC,EAAC,IAAI,EAAE,0BAA0B,EAAC,CAAA;;MAyB3B,cAAc,CAAA;AACzB,IAAA,SAAS,CAAC,MAAmB,EAAA;AAC3B,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,QAAA,OAAO,cAAc,CAAC;KACvB;;4GAJU,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;0GAAd,cAAc,EAAA,IAAA,EAAA,gBAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAJ1B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,gBAAgB;AACtB,oBAAA,IAAI,EAAE,KAAK;AACZ,iBAAA,CAAA;;;MC3DY,YAAY,CAAA;AACvB,IAAA,WAAA,CAAoC,YAA2B,EAAA;AAC7D,QAAA,IAAI,YAAY,EAAE;;AAEhB,YAAA,OAAO,CAAC,GAAG,CACT,iEAAiE,CAAC,CAAC;AACtE,SAAA;KACF;;0GAPU,YAAY,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAZ,YAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,iBA9DrB,iBAAiB;QACjB,qBAAqB;QACrB,0BAA0B;QAC1B,uBAAuB;QACvB,2BAA2B;QAC3B,mBAAmB;QAEnB,UAAU;QACV,iBAAiB;QACjB,QAAQ;QACR,OAAO;QACP,UAAU;QACV,iBAAiB;QACjB,cAAc;QACd,iBAAiB;QACjB,aAAa;QACb,cAAc;QACd,cAAc;QACd,4BAA4B;AAC5B,QAAA,wBAAwB,aAGxB,YAAY;QACZ,WAAW;QACX,WAAW;AACX,QAAA,gBAAgB,aAYhB,YAAY;QACZ,OAAO;QAEP,iBAAiB;QACjB,qBAAqB;QACrB,0BAA0B;QAC1B,uBAAuB;QACvB,2BAA2B;QAC3B,mBAAmB;QAEnB,UAAU;QACV,iBAAiB;QACjB,QAAQ;QACR,OAAO;QACP,UAAU;QACV,iBAAiB;QACjB,cAAc;QACd,iBAAiB;QACjB,aAAa;QACb,cAAc;QACd,cAAc;QACd,4BAA4B;QAC5B,wBAAwB,CAAA,EAAA,CAAA,CAAA;AAGf,YAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,EAnCZ,SAAA,EAAA;QACT,OAAO;QACP,YAAY;QACZ,cAAc;QACd,KAAK;QACL,QAAQ;QACR,4BAA4B;QAC5B,wBAAwB;AACzB,KAAA,EAAA,OAAA,EAAA,CAbC,YAAY;QACZ,WAAW;AACX,QAAA,WAAW,EAaX,YAAY,CAAA,EAAA,CAAA,CAAA;4FAyBH,YAAY,EAAA,UAAA,EAAA,CAAA;kBAhExB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,iBAAiB;wBACjB,qBAAqB;wBACrB,0BAA0B;wBAC1B,uBAAuB;wBACvB,2BAA2B;wBAC3B,mBAAmB;wBAEnB,UAAU;wBACV,iBAAiB;wBACjB,QAAQ;wBACR,OAAO;wBACP,UAAU;wBACV,iBAAiB;wBACjB,cAAc;wBACd,iBAAiB;wBACjB,aAAa;wBACb,cAAc;wBACd,cAAc;wBACd,4BAA4B;wBAC5B,wBAAwB;AACzB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,WAAW;wBACX,WAAW;wBACX,gBAAgB;AACjB,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,OAAO;wBACP,YAAY;wBACZ,cAAc;wBACd,KAAK;wBACL,QAAQ;wBACR,4BAA4B;wBAC5B,wBAAwB;AACzB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,OAAO;wBAEP,iBAAiB;wBACjB,qBAAqB;wBACrB,0BAA0B;wBAC1B,uBAAuB;wBACvB,2BAA2B;wBAC3B,mBAAmB;wBAEnB,UAAU;wBACV,iBAAiB;wBACjB,QAAQ;wBACR,OAAO;wBACP,UAAU;wBACV,iBAAiB;wBACjB,cAAc;wBACd,iBAAiB;wBACjB,aAAa;wBACb,cAAc;wBACd,cAAc;wBACd,4BAA4B;wBAC5B,wBAAwB;AACzB,qBAAA;AACF,iBAAA,CAAA;;0BAEc,QAAQ;;0BAAI,QAAQ;;;AChGnC;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"raain-app.mjs","sources":["../../src/app/shared/raain-map/raain-map.component.ts","../../src/app/shared/raain-map/raain-map.component.html","../../src/app/shared/raain-compare/raain-compare.component.ts","../../src/app/shared/raain-compare/raain-compare.component.html","../../src/app/shared/xytype.ts","../../src/app/shared/raain-configuration/raain-configuration.component.ts","../../src/app/shared/raain-configuration/raain-configuration.component.html","../../src/app/shared/raain-date-focus/raain-date-focus.component.ts","../../src/app/shared/raain-date-focus/raain-date-focus.component.html","../../src/app/shared/raain-speed/raain-speed.component.ts","../../src/app/shared/raain-speed/raain-speed.component.html","../../src/app/shared/raain-compare-stack/raain-compare-stack.component.ts","../../src/app/shared/raain-compare-stack/raain-compare-stack.component.html","../../src/app/shared/tools/CompareManager.ts","../../src/app/shared/tools/FrameSet.ts","../../src/app/shared/tools/GaugeNodeFilter.ts","../../src/app/shared/tools/RefreshManager.ts","../../src/app/shared/tools/ReportManager.ts","../../src/app/shared/cache.service.ts","../../src/app/shared/fidj-storage.model.ts","../../src/app/shared/storage.service.ts","../../src/app/shared/profile.service.ts","../../src/app/shared/radar.service.ts","../../src/app/shared/shared.const.ts","../../src/app/shared/shared.pipe.ts","../../src/app/shared/shared.module.ts","../../src/app/shared/raain-app.ts"],"sourcesContent":["import {\n AfterViewChecked,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {IconOptions} from 'leaflet';\nimport {CartesianMapValue, ElementsFactory, FrameContainer, MapElement, MapLatLng, TimeframeContainers} from 'raain-ui';\n\n@Component({\n selector: 'raain-map',\n templateUrl: './raain-map.component.html',\n styleUrls: ['./raain-map.component.scss'],\n})\nexport class RaainMapComponent implements AfterViewChecked, OnDestroy, OnChanges {\n\n @Input()\n public coordinates: MapLatLng;\n @Input()\n public markers: {\n gauges: MapLatLng[],\n selectedGauges: MapLatLng[],\n pixels: MapLatLng[],\n borders: MapLatLng[],\n gaugesInCompare: MapLatLng[],\n pixelsSolution: MapLatLng[],\n };\n @Input()\n public timeframeContainers: TimeframeContainers;\n @Input()\n public autoplay = false;\n @Input()\n public showMarkers = true;\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n\n @Input()\n public timeframeDates: Date[] = [];\n @Input()\n public defaultDate: Date;\n\n @Input()\n public sumValues: any;\n @Input()\n public sumFn: any;\n public sumResult: string;\n\n @Output()\n public selectedMarker = new EventEmitter<MapLatLng>();\n\n @Output()\n public changedDate = new EventEmitter<Date>();\n\n public mcText;\n public nextDate: Date;\n public possibleNames: string[];\n public possibleDates: Date[];\n public dateToShow: Date;\n public dateToShowAsString: string;\n public timeframeNameToShow: string;\n protected currentFrameContainer: FrameContainer;\n\n @ViewChild('primaryMap')\n protected mapDivRef: ElementRef;\n\n private mapElement: MapElement;\n private onSizeChanged;\n private created;\n private iconOptions: {\n gauges: IconOptions,\n selectedGauges: IconOptions,\n pixels: IconOptions,\n borders: IconOptions,\n gaugesInCompare: IconOptions,\n pixelsSolution: IconOptions,\n };\n\n constructor(private ngZone: NgZone) {\n this.delete();\n\n // shadowUrl ?\n const iconSize = [40, 40]; // size of the icon\n const iconAnchor = [20, 20]; // point of the icon which will correspond to marker's location\n const pixelSize = [41, 41];\n const pixelAnchor = [20, 20];\n const popupAnchor = [0, -20]; // point from which the popup should open relative to the iconAnchor\n this.iconOptions = {\n gauges: {iconUrl: './assets/maps/marker-pluvio.png', iconSize, iconAnchor, popupAnchor},\n gaugesInCompare: {iconUrl: './assets/maps/marker-pluvio-diag.png', iconSize, iconAnchor, popupAnchor},\n selectedGauges: {iconUrl: './assets/maps/marker-pluvio-diag-select.png', iconSize, iconAnchor, popupAnchor},\n pixels: {iconUrl: './assets/maps/marker-rain.png', iconSize, iconAnchor, popupAnchor},\n pixelsSolution: {iconUrl: './assets/maps/marker-rain2.png', iconSize: pixelSize, iconAnchor: pixelAnchor, popupAnchor},\n borders: {iconUrl: './assets/maps/marker-shadow.png', iconSize, iconAnchor, popupAnchor},\n };\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n public showTimeframe(force = false) {\n\n // const {frameContainer, layer} = this.timeframeContainers.showTimeframe(this.timeframeNameToShow);\n // this.currentFrameContainer = frameContainer;\n\n if (!this.dateToShowAsString\n || (!force && new Date(this.dateToShowAsString).getTime() === this.dateToShow?.getTime())) {\n return;\n }\n\n this.dateToShow = new Date(this.dateToShowAsString);\n this.changedDate.emit(this.dateToShow);\n }\n\n public next() {\n if (!this.possibleDates || this.possibleDates.length === 0) {\n return;\n }\n\n const index = this.getDateToShowIndex();\n this.dateToShow = (index + 1) < this.possibleDates.length ? this.possibleDates[index + 1] : this.possibleDates[0];\n this.dateToShowAsString = this.dateToShow.toISOString();\n\n this.showTimeframe(true);\n if (this.autoplay) {\n window.setTimeout(() => this.next(), 2000);\n }\n }\n\n public previous() {\n this.stop();\n if (!this.possibleDates || this.possibleDates.length === 0) {\n return;\n }\n\n const index = this.getDateToShowIndex();\n this.dateToShow = index > 0 ? this.possibleDates[index - 1] : this.possibleDates[0];\n this.dateToShowAsString = this.dateToShow.toISOString();\n\n this.showTimeframe(true);\n }\n\n public play() {\n this.autoplay = true;\n this.next();\n }\n\n public stop() {\n this.autoplay = false;\n }\n\n public changeShowMarkers() {\n if (!this.mapElement?.markersLayer || !this.mapElement?.mapLeaflet) {\n return;\n }\n\n if (this.showMarkers) {\n this.mapElement.markersLayer.addToMap(this.mapElement.mapLeaflet);\n } else {\n this.mapElement.markersLayer.removeFromMap(this.mapElement.mapLeaflet);\n }\n }\n\n private create() {\n\n const created = this.created;\n if (created) {\n return;\n }\n this.created = true;\n const markers = [\n {iconsLatLng: this.markers.gauges, iconsOptions: this.iconOptions.gauges},\n {iconsLatLng: this.markers.selectedGauges, iconsOptions: this.iconOptions.selectedGauges},\n {iconsLatLng: this.markers.gaugesInCompare, iconsOptions: this.iconOptions.gaugesInCompare},\n {iconsLatLng: this.markers.pixels, iconsOptions: this.iconOptions.pixels},\n {iconsLatLng: this.markers.pixelsSolution, iconsOptions: this.iconOptions.pixelsSolution},\n // {iconsLatLng: this.markers.borders, iconsOptions: this.iconOptions.borders},\n ];\n\n const factory = new ElementsFactory(this.coordinates, true);\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n\n const createdOutside = this.created;\n if (!createdOutside) {\n return;\n }\n\n this.mapElement = factory.createMap(this.mapDivRef.nativeElement, {timeframeContainers: this.timeframeContainers, markers});\n\n this.mapElement.mapLeaflet?.on('mousemove', (evt) => this.onMapMouseMove(evt));\n this.mapElement.markersProduced?.forEach(m => m.on('click', evt => this.onMapClick(evt)));\n this.onSizeChanged = () => {\n this.mapElement.markersLayer?.setCurrentWidth(this.currentWidth);\n this.mapElement.markersLayer?.setCurrentHeight(this.currentHeight);\n this.mapElement.compositeLayer?.setCurrentWidth(this.currentWidth);\n this.mapElement.compositeLayer?.setCurrentHeight(this.currentHeight);\n this.mapElement.mapLeaflet?.invalidateSize({animate: true});\n }\n this.updateMapSize();\n // this.timeframeNameToShow = this.possibleNames.length > 0 ? this.possibleNames[0] : null;\n // this.toggleHideMarkers(!this.hideMarkers);\n this.changeNavigation(this.defaultDate);\n }, 100);\n });\n\n }\n\n private delete() {\n this.mapElement?.mapLeaflet?.remove();\n this.mapElement = undefined;\n this.mcText = '';\n this.nextDate = undefined;\n this.possibleNames = [];\n this.possibleDates = [];\n this.timeframeNameToShow = undefined;\n this.dateToShow = undefined;\n this.dateToShowAsString = undefined;\n this.onSizeChanged = () => {\n };\n this.currentFrameContainer = null;\n\n this.created = false;\n }\n\n private change(changes: SimpleChanges) {\n // console.log('map changes', changes);\n\n let possibleNewDefaultDate: Date;\n if (changes.defaultDate) {\n if (new Date(changes.defaultDate.currentValue).getTime() === new Date(changes.defaultDate.previousValue).getTime()) {\n return;\n }\n possibleNewDefaultDate = this.defaultDate;\n }\n\n if (changes.markers && this.mapElement?.markersLayer) {\n\n const markers = [\n {iconsLatLng: this.markers.gauges, iconOptions: this.iconOptions.gauges},\n {iconsLatLng: this.markers.selectedGauges, iconOptions: this.iconOptions.selectedGauges},\n {iconsLatLng: this.markers.gaugesInCompare, iconOptions: this.iconOptions.gaugesInCompare},\n {iconsLatLng: this.markers.pixels, iconOptions: this.iconOptions.pixels},\n {iconsLatLng: this.markers.pixelsSolution, iconOptions: this.iconOptions.pixelsSolution},\n // {iconsLatLng: this.markers.borders, iconOptions: this.iconOptions.borders},\n ];\n const markersProduced = this.mapElement.markersLayer.render(markers).markers;\n if (markersProduced) {\n markersProduced.forEach(m => m.on('click', evt => this.onMapClick(evt)));\n if (this.showMarkers) {\n this.mapElement.markersLayer.removeFromMap(this.mapElement.mapLeaflet);\n this.mapElement.markersLayer.addToMap(this.mapElement.mapLeaflet);\n }\n }\n }\n\n if (changes.markers && this.markers.selectedGauges.length === 1) {\n const selectedGauge = this.markers.selectedGauges[0];\n this.mapElement.mapLeaflet.setView(selectedGauge, 10);\n }\n\n if (this.mapElement && changes.timeframeContainers) {\n this.mapElement.updateMapTimeframe(this.timeframeContainers);\n this.currentFrameContainer = this.timeframeContainers?.containers[0]?.timeframe[0];\n }\n\n if (this.mapElement?.compositeLayer && changes.sumValues) {\n const drawer = this.mapElement.compositeLayer.getFirstDrawer();\n this.sumResult = drawer?.getExecOfVisiblePoints(this.sumValues, this.sumFn);\n }\n\n this.changeNavigation(possibleNewDefaultDate);\n }\n\n private changeNavigation(defaultDate?: Date) {\n // update possible names\n if (this.timeframeContainers && this.timeframeContainers.containers.length) {\n this.possibleNames = [];\n this.timeframeContainers?.containers.forEach(c => {\n if (this.possibleNames.indexOf(c.name) < 0) {\n this.possibleNames.push(c.name);\n }\n });\n this.timeframeNameToShow = this.possibleNames.length > 0 ? this.possibleNames[0] : null;\n }\n\n // update possible dates\n this.possibleDates = this.timeframeDates;\n if (!this.possibleDates || this.possibleDates.length === 0) {\n return;\n }\n\n // update dateToShow\n if (defaultDate && this.possibleDates.filter(d => d.getTime() === defaultDate.getTime()).length === 1) {\n this.dateToShow = defaultDate;\n }\n if (!this.dateToShow && this.possibleDates.length > 0 &&\n this.possibleDates.filter(d => d.getTime() === this.dateToShow?.getTime()).length !== 1) {\n this.dateToShow = this.possibleDates[0];\n }\n this.dateToShowAsString = this.dateToShow.toISOString();\n }\n\n private getDateToShowIndex(): number {\n\n let index = 0;\n for (const date of this.possibleDates) {\n if (date.toISOString().substring(0, 19) === this.dateToShowAsString.substring(0, 19)) {\n break;\n }\n index++;\n }\n return index;\n }\n\n private onMapMouseMove(evt: { latlng: { lat: number, lng: number } }): void {\n\n const lat: string = evt.latlng.lat.toFixed(3);\n const lng: string = evt.latlng.lng.toFixed(3);\n\n let value = NaN;\n let valueLat = NaN, valueLng = NaN, valueLat2 = NaN, valueLng2 = NaN;\n if (this.currentFrameContainer) {\n const valueSelected = (this.currentFrameContainer.values as CartesianMapValue[])\n .filter((v: CartesianMapValue) => {\n return v.lat <= evt.latlng.lat && evt.latlng.lat < v.lat2 &&\n v.lng <= evt.latlng.lng && evt.latlng.lng < v.lng2;\n });\n\n if (valueSelected.length === 1) {\n value = Math.round(valueSelected[0].value * 1000) / 1000;\n valueLat = Math.round(valueSelected[0].lat * 1000) / 1000;\n valueLng = Math.round(valueSelected[0].lng * 1000) / 1000;\n valueLat2 = Math.round(valueSelected[0].lat2 * 1000) / 1000;\n valueLng2 = Math.round(valueSelected[0].lng2 * 1000) / 1000;\n } else {\n // console.warn('valueSelected issue ?', valueSelected);\n }\n }\n\n this.ngZone.run(() => {\n // this.mcText = `Latitude: ${lat} Longitude: ${lng} \n // Value: [${valueLat} ${valueLng} | ${valueLat2} ${valueLng2}] ${value}`;\n this.mcText = `Latitude: ${lat} Longitude: ${lng} Value: ${value}`;\n });\n }\n\n private onMapClick(evt: any): void {\n this.selectedMarker.emit(new MapLatLng(\n evt.latlng?.lat, evt.latlng?.lng, undefined,\n evt.id, evt.name));\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private updateMapSize(): void {\n\n const mapDivWidth = this.mapDivRef.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 21;\n let currentWidth = mapDivWidth ||\n (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth);\n const currentHeight = this.currentHeight ||\n (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n\n}\n","<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","import {\n AfterViewChecked,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {CompareElement, CompareElementInput, ElementsFactory} from 'raain-ui';\nimport {XYType} from '../xytype';\n\n@Component({\n selector: 'raain-compare',\n templateUrl: './raain-compare.component.html',\n styleUrls: ['./raain-compare.component.scss'],\n})\nexport class RaainCompareComponent implements AfterViewChecked, OnDestroy, OnChanges {\n\n @Input()\n public points: Array<XYType>;\n\n @Input()\n public pointMax: XYType;\n\n @Input()\n public remarks: string;\n\n @Input()\n public compareIndex: number;\n\n @Input()\n public currentHeight: number;\n\n @Input()\n public currentWidth: number;\n\n @Output()\n public selectedPoint = new EventEmitter<{ point: XYType, compareIndex: number }>();\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private compareElement: CompareElement;\n private onSizeChanged;\n private created;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {\n };\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n protected onClick(point: XYType): void {\n this.selectedPoint.emit({point, compareIndex: this.compareIndex});\n }\n\n protected changeData(newData: XYType[], newMaxLine?: XYType[]) {\n\n let changed = false;\n const dataset = this.compareElement?.chart?.data?.datasets[0];\n if (dataset) {\n dataset.data = newData;\n changed = true;\n }\n\n const line = this.compareElement?.chart?.data?.datasets[1];\n if (line) {\n line.data = newMaxLine;\n changed = true;\n }\n\n if (changed) {\n this.compareElement?.chart?.update();\n }\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n const factory = new ElementsFactory();\n this.compareElement = factory.createCompare(this.canvasElement.nativeElement,\n new CompareElementInput(this.points.map(p => {\n return {x: p.x, y: p.y, r: p.r, name: p.name, id: p.id};\n }),\n this.pointMax, this.onClick.bind(this)));\n }\n\n private delete() {\n if (this.compareElement) {\n this.compareElement?.chart?.destroy();\n }\n this.created = false;\n }\n\n private change(changes: SimpleChanges) {\n if (changes.points) {\n this.changeData(this.points, [{x: 0, y: 0}, this.pointMax]);\n }\n }\n\n private updateMapSize(): void {\n\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth = mapDivWidth ||\n (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth);\n const currentHeight = this.currentHeight ||\n (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n\n}\n","<ion-grid>\n <ion-row>\n <ion-col id=\"col-container\">\n <div id=\"canvas-container\">\n <h1 *ngIf=\"remarks\">{{ remarks }}</h1>\n\n <!-- [style.height.px]=\"currentHeight\" [style.width.px]=\"currentWidth\" [width]=\"currentWidth\" [height]=\"currentHeight\"-->\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n</ion-grid>\n","export class XYType {\n constructor(public x: number,\n public y: number,\n public r?: number,\n public name?: string,\n public id?: string) {\n }\n}\n\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n Output,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {ConfigurationElement, ConfigurationElementInput, ElementsFactory} from 'raain-ui';\nimport {XYType} from '../xytype';\n\n@Component({\n selector: 'raain-configuration',\n templateUrl: './raain-configuration.component.html',\n styleUrls: ['./raain-configuration.component.scss'],\n})\nexport class RaainConfigurationComponent implements AfterViewChecked, OnDestroy, OnChanges {\n\n @Input()\n public points: XYType[];\n\n @Output()\n public changedPoints = new EventEmitter<XYType[]>();\n\n @Input()\n public currentHeight: number;\n\n @Input()\n public currentWidth: number;\n\n @Input()\n public minPoint: XYType = {x: 0, y: 0};\n\n @Input()\n public maxPoint: XYType = {x: 300, y: 100};\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private configurationElement: ConfigurationElement;\n private onDrag;\n private onSizeChanged;\n private created;\n\n constructor(private ngZone: NgZone) {\n this.onSizeChanged = () => {\n };\n this.onDrag = (e: any) => {\n this.changedPoints.emit(this.points);\n }\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n async reset(count = 4) {\n const points = [];\n for (let c = 0; c < count; c++) {\n points.push(new XYType((c + 1) * 10, (c + 1) * 10));\n }\n this.points = points;\n\n await this.delete();\n this.create();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n // this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const factory = new ElementsFactory();\n this.configurationElement = factory.createConfiguration(this.canvasElement.nativeElement,\n new ConfigurationElementInput(this.points,\n this.minPoint,\n this.maxPoint,\n this.onDrag));\n }, 10);\n });\n\n }\n\n private async delete() {\n await this.configurationElement?.chart?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n // console.log('changed', changes);\n await this.delete();\n this.create();\n }\n\n private updateMapSize(): void {\n\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth = mapDivWidth ||\n (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth);\n const currentHeight = this.currentHeight ||\n (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<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","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {DateRange, DateStatusElement, DateStatusElementInput, ElementsFactory} from 'raain-ui';\n\n@Component({\n selector: 'raain-date-focus',\n templateUrl: './raain-date-focus.component.html',\n styleUrls: ['./raain-date-focus.component.scss'],\n})\nexport class RaainDateFocusComponent implements AfterViewChecked, OnDestroy, OnChanges {\n\n @Input()\n public points: {\n label: string,\n style: string,\n values: { date: Date, value: number }[],\n }[];\n\n @Input()\n public focusDate: Date;\n @Input()\n public focusRange: DateRange;\n @Input()\n public withoutAll: boolean;\n\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n\n @ViewChild('canvasElement')\n protected canvasElement: ElementRef;\n\n private dateStatusElement: DateStatusElement;\n private onSizeChanged;\n private created: boolean;\n\n constructor(private ngZone: NgZone) {\n this.focusDate = new Date()\n this.focusRange = DateRange.CENTURY;\n this.onSizeChanged = () => {\n };\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n focusPrevious() {\n this.dateStatusElement.focusPrevious();\n }\n\n focusReset() {\n this.dateStatusElement.focusReset();\n }\n\n focusNext() {\n this.dateStatusElement.focusNext();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created) {\n return;\n }\n this.created = true;\n\n // this.ngZone.runOutsideAngular(() => {\n // setTimeout(() => {\n const factory = new ElementsFactory();\n try {\n this.dateStatusElement = factory.createDateStatus(this.canvasElement.nativeElement,\n new DateStatusElementInput(this.points, this.focusDate, this.focusRange));\n } catch (e) {\n console.warn('focus creation issue', e);\n }\n // }, 50);\n // });\n\n }\n\n private async delete() {\n await this.dateStatusElement?.chart?.destroy();\n this.created = false;\n }\n\n private async change(changes: SimpleChanges) {\n await this.delete();\n this.create();\n }\n\n private updateMapSize(): void {\n\n const mapDivWidth = this.canvasElement.nativeElement.parentNode?.parentNode['clientWidth'];\n const padding = 20;\n let currentWidth = mapDivWidth ||\n (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth);\n const currentHeight = this.currentHeight ||\n (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);\n currentWidth -= padding;\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<ion-grid>\n <ion-row>\n <ion-col *ngIf=\"!withoutAll\" class=\"ion-text-center\" size-sm=\"2\">\n <ion-button (click)=\"focusReset()\">\n View all dates\n </ion-button>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-end\">\n <ion-col class=\"ion-text-right\" size-sm=\"1\">\n <ion-button (click)=\"focusPrevious()\">\n <ion-icon name=\"chevron-back-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-text-left\" size-sm=\"1\">\n <ion-button (click)=\"focusNext()\">\n <ion-icon name=\"chevron-forward-outline\"></ion-icon>\n </ion-button>\n </ion-col>\n <ion-col id=\"col-container\" size-sm=\"10\">\n <div [style.height.px]=\"currentHeight\" [style.width.px]=\"currentWidth\" id=\"canvas-container\">\n <canvas #canvasElement></canvas>\n </div>\n </ion-col>\n </ion-row>\n</ion-grid>\n","import {\n AfterViewChecked,\n Component,\n ElementRef,\n HostListener,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {ElementsFactory, SpeedMatrixElementInput} from 'raain-ui';\nimport {PositionValue} from 'raain-model';\n\n@Component({\n selector: 'raain-speed',\n templateUrl: './raain-speed.component.html',\n styleUrls: ['./raain-speed.component.scss'],\n})\nexport class RaainSpeedComponent implements AfterViewChecked, OnDestroy, OnChanges {\n\n @Input()\n public compareSpeedMatrix: PositionValue[];\n\n @Input()\n public compareTrustedIndicator: number;\n\n @Input()\n public currentHeight: number;\n public currentWidth: number;\n public hide = false;\n @ViewChild('canvasSpeedElement')\n protected canvasSpeedElement: ElementRef;\n private onSizeChanged;\n private created;\n\n constructor(private ngZone: NgZone) {\n this.delete();\n this.onSizeChanged = () => {\n };\n }\n\n public ngAfterViewChecked(): void {\n this.create();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.change(changes);\n }\n\n public ngOnDestroy(): void {\n this.delete();\n }\n\n @HostListener('window:resize', ['$event'])\n private onResize(event: any): void {\n this.updateMapSize();\n }\n\n private create() {\n if (this.created || !this.compareSpeedMatrix?.length) {\n return;\n }\n this.created = true;\n\n // this.ngZone.runOutsideAngular(() => {\n setTimeout(() => {\n const factory = new ElementsFactory();\n factory.createSpeedMatrixIndicator(this.canvasSpeedElement.nativeElement,\n new SpeedMatrixElementInput(this.compareSpeedMatrix, this.compareTrustedIndicator));\n }, 10);\n // });\n\n }\n\n private delete() {\n this.created = false;\n this.hide = false;\n }\n\n private change(changes: SimpleChanges) {\n if (changes.compareSpeedMatrix) {\n if (!this.compareSpeedMatrix?.length) {\n this.hide = true;\n return;\n }\n }\n\n setTimeout(() => {\n this.delete();\n this.create();\n }, 10);\n }\n\n private updateMapSize(): void {\n\n const mapDivWidth = this.canvasSpeedElement.nativeElement.parentNode?.parentNode['clientWidth'];\n\n const currentWidth = mapDivWidth ||\n (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth);\n const currentHeight = this.currentHeight ||\n (window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight);\n this.currentWidth = currentWidth;\n this.currentHeight = currentHeight;\n\n this.ngZone.run(() => {\n this.onSizeChanged();\n });\n }\n}\n","<div id=\"container\">\n <div id=\"canvas-speed-matrix\">\n <div [hidden]=\"hide\">\n <canvas #canvasSpeedElement id=\"indic1\"></canvas>\n </div>\n <div [hidden]=\"!hide\">\n <span id=\"hiddenSquare\"> </span>\n </div>\n <!-- <span>compareTrustedIndicator {{ compareTrustedIndicator }}</span> -->\n </div>\n</div>\n","import {Component, EventEmitter, Input, NgZone, Output} from '@angular/core';\nimport {XYType} from '../xytype';\nimport {CompareManager} from '../tools';\n\n@Component({\n selector: 'raain-compare-stack',\n templateUrl: './raain-compare-stack.component.html',\n styleUrls: ['./raain-compare-stack.component.scss'],\n})\nexport class RaainCompareStackComponent {\n\n @Input()\n public compareManager: CompareManager;\n\n @Input()\n public currentHeight: number;\n\n @Output()\n public selectedPoint = new EventEmitter<{ point: XYType, compareIndex: number }>();\n\n @Input()\n public cumulative: boolean;\n\n\n constructor(private ngZone: NgZone) {\n }\n\n protected onClick(e: { point: XYType, compareIndex: number }): void {\n this.selectedPoint.emit({point: e.point, compareIndex: e.compareIndex});\n }\n\n\n}\n","<ion-grid>\n <ion-row *ngIf=\"cumulative\">\n <ion-col size=\"12\">\n <ion-card class=\"card-compare\">\n <ion-card-header>Cumulative</ion-card-header>\n <ion-card-content>\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"0\"\n [currentHeight]=\"500\"\n [pointMax]=\"compareManager.globalComparePointsMax\"\n [points]=\"compareManager.globalComparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n\n <ion-row *ngIf=\"!cumulative\">\n\n <!--\n <ion-col>\n <ion-card id=\"card-matrix\">\n <div *ngIf=\"compareManager?.compareNames?.length\">\n <raain-speed [compareSpeedMatrix]=\"compareManager.compareSpeedMatrix\"\n [compareTrustedIndicator]=\"compareManager.compareTrustedIndicator\"\n [currentHeight]=\"300\"\n ></raain-speed>\n </div>\n <ion-card-content>\n {{ compareManager?.compareVersion }}\n </ion-card-content>\n </ion-card>\n </ion-col> -->\n\n <ion-col *ngFor=\"let compare of compareManager?.uiCompares; index as compareIndex\" size=\"12\" size-md=\"6\">\n <ion-card class=\"card-compare\">\n <ion-card-header>{{ compare.name }} {{ compare.remarks }}\n </ion-card-header>\n <ion-card-content *ngIf=\"compare.comparePoints?.length\">\n <raain-compare\n (selectedPoint)=\"onClick($event)\"\n [compareIndex]=\"compareIndex\"\n [currentHeight]=\"500\"\n [pointMax]=\"compare.comparePointsMax\"\n [points]=\"compare.comparePoints\"></raain-compare>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <!--\n <ion-card id=\"card-selected-gauge\" slot=\"end\">\n <ion-card-content>\n <ion-accordion-group>\n\n <ion-accordion value=\"selected\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>debug</ion-label>\n </ion-item>\n\n <div class=\"ion-padding\" slot=\"content\">\n date: {{ currentTimeframeTarget.date | date:'yyyy-MM-dd HH:mm:ss' }}<br>\n radarMeasureId: {{ currentTimeframeTarget.radarMeasureId }}<br>\n rainComputationId: {{ currentTimeframeTarget.rainComputationId }}<br>\n rainComputationVersion: {{ currentTimeframeTarget.rainComputationVersion }}<br>\n rainComputationQualitiesPerDate :\n <ul>\n <li *ngFor=\"let rcq of currentTimeframeTarget.rainComputationQualitiesPerDate\">\n {{ rcq.version }} - {{ rcq.id }}\n </li>\n </ul>\n </div>\n\n </ion-accordion>\n <ion-accordion *ngIf=\"selectedGauge\" value=\"context\">\n <ion-item color=\"light\" slot=\"header\">\n <ion-label>{{ selectedGaugeInPointsDetail }}</ion-label>\n </ion-item>\n <div [innerHTML]=\"formatLabelOfSelectedGauge(selectedGaugeInPoints)\" class=\"ion-padding\"\n slot=\"content\"></div>\n </ion-accordion>\n </ion-accordion-group>\n </ion-card-content>\n </ion-card>\n -->\n </ion-row>\n</ion-grid>\n","import {MapLatLng} from 'raain-ui';\nimport {IComparePerDate, ICompares, PositionValue, QualityPoint, RainComputationQuality, RainNode, SpeedMatrixContainer} from 'raain-model';\nimport {XYType} from '../xytype';\nimport {ProfileService} from '../profile.service';\nimport {FrameSet} from './FrameSet';\n\nexport interface ICompareTarget {\n date: Date;\n rainComputationId: string;\n rainComputationQualityId: string;\n}\n\nexport interface IUICompare {\n name: string;\n comparePoints: XYType[];\n comparePointsMax: XYType;\n comparePointsHistory: QualityPoint[];\n remarks: string;\n}\n\nexport class CompareManager {\n\n // public computed$: Observable<boolean>;\n\n public gaugesInCompare: MapLatLng[];\n public selectedGauges: MapLatLng[];\n public selectedPixels: MapLatLng[];\n public pixelsSolutions: MapLatLng[][];\n\n // from comparesTimeline\n public compareNames: string[];\n public uiCompares: IUICompare[];\n public compareSpeedMatrix: PositionValue[];\n public compareVersion: string;\n public compareTrustedIndicator: number;\n\n public currentQualityDoneDate: Date;\n public currentQualityLaunchedBy: string;\n public currentQualityTimeSpentInMs: number;\n public globalComparePoints: XYType[];\n public globalComparePointsMax: XYType;\n\n protected buildCompares: ICompares;\n protected selectedGauge: QualityPoint;\n protected selectedGaugeInPoints: QualityPoint;\n protected selectedGaugeInPointsDetail: string;\n protected rainComputationQualitiesPerDate: any;\n\n constructor(\n protected rainNode: RainNode,\n protected profileService: ProfileService,\n public onChanges: () => void = () => {\n }\n ) {\n this.cleanAll();\n }\n\n protected static CompareDate(date1: Date, date2: Date, minutes: number): boolean {\n\n const date1AsDate: Date = new Date(date1.getTime());\n const date2Diff = new Date(date2.getTime());\n date2Diff.setMinutes(date2Diff.getMinutes() + minutes);\n const diff = Math.round((date1AsDate.getTime() - date2Diff.getTime()) / (60 * 1000));\n return diff === 0;\n }\n\n public cleanAll() {\n this.gaugesInCompare = [];\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n\n this.buildCompares = {\n comparesPerDate: [],\n compareCumulative: null\n };\n this.globalComparePoints = [];\n this.globalComparePointsMax = new XYType(0, 0);\n this.rainComputationQualitiesPerDate = {};\n\n this.selectedGauge = null;\n this.selectedGaugeInPoints = null;\n this.cleanCompareQuality('no compare yet');\n }\n\n async refreshCompareQuality(frameSet: FrameSet) {\n\n const comparePerDate = this.getComparePerDate(frameSet.date);\n\n if (!comparePerDate || !comparePerDate.rainComputationQuality?.qualitySpeedMatrixContainer) {\n this.cleanCompareQuality('no current quality ' + Object.keys(this.rainComputationQualitiesPerDate));\n this.onChanges();\n return;\n }\n\n const uiCompares: IUICompare[] = comparePerDate.compareTimeline.map(c => {\n return {\n name: c.name,\n comparePoints: c.qualityPoints.map(p => new XYType(p.getGaugeValue(), p.getRainValue(), 2, p.gaugeLabel, p.gaugeId)),\n comparePointsMax: new XYType(c.maxValue + 20, c.maxValue + 20),\n comparePointsHistory: c.qualityPointsLegacy,\n remarks: c.remarks\n };\n });\n\n this.currentQualityDoneDate = comparePerDate.rainComputationQuality.isDoneDate;\n this.currentQualityTimeSpentInMs = comparePerDate.rainComputationQuality.timeSpentInMs;\n this.currentQualityLaunchedBy = comparePerDate.rainComputationQuality.launchedBy;\n this.compareVersion = comparePerDate.rainComputationQuality.getVersion();\n this.compareSpeedMatrix = comparePerDate.rainComputationQuality.qualitySpeedMatrixContainer.renderMergedMatrix({normalize: true});\n this.compareTrustedIndicator = comparePerDate.rainComputationQuality.qualitySpeedMatrixContainer.getTrustedIndicators()[0];\n this.compareNames = uiCompares.map(c => c.name);\n this.uiCompares = uiCompares;\n\n this.onChanges();\n }\n\n async refreshGlobalCompareQuality(targetsOrdered: ICompareTarget[],\n withCompareDuplicate: boolean) {\n\n try {\n await this.fetchRainComputationQualities(targetsOrdered);\n\n await this.buildComparesTimeline(targetsOrdered, withCompareDuplicate);\n\n if (!this.buildCompares.compareCumulative) {\n // throw Error('needs cumulative compare');\n return;\n }\n\n this.globalComparePoints = this.buildCompares.compareCumulative.qualityPoints\n .map(qp => new XYType(qp.getGaugeValue(), qp.getRainValue(), 2, qp.gaugeLabel, qp.gaugeId));\n this.globalComparePointsMax = new XYType(\n this.buildCompares.compareCumulative.maxValue + 20,\n this.buildCompares.compareCumulative.maxValue + 20);\n } catch (e) {\n console.warn(e);\n }\n }\n\n async setGauges() {\n // console.log('setGauges');\n\n const qualityPoints: QualityPoint[] = [];\n for (const compare of this.uiCompares) {\n for (const qualityPoint of compare.comparePointsHistory) {\n const alreadyAdded = qualityPoints.filter(p => p?.gaugeId === qualityPoint.gaugeId);\n if (alreadyAdded.length === 0) {\n qualityPoints.push(qualityPoint);\n }\n }\n }\n\n this.gaugesInCompare = qualityPoints.map(p => {\n return new MapLatLng(p.gaugeCartesianValue.lat, p.gaugeCartesianValue.lng, 0,\n p.gaugeId, p.gaugeLabel + '>' + p.getGaugeValue(),\n p.getGaugeValue());\n });\n\n this.resetSelectedGauges();\n }\n\n async selectGauge(gaugeId: string, compareIndex: number) {\n // console.log('selectGauge', gaugeId, compareIndex);\n\n if (gaugeId) {\n const xys = this.getCurrentQualityPoints(compareIndex).filter(p => p.gaugeId === gaugeId);\n this.selectedGauge = xys.length === 1 ? xys[0] : null;\n } else {\n this.selectedGauge = null;\n }\n\n if (!this.selectedGauge) {\n return this.resetSelectedGauges();\n }\n\n const selectedGaugeInPoints = this.getCurrentQualityPoints(compareIndex).filter(p => p.gaugeId === this.selectedGauge.gaugeId);\n let pixelsSolutions: MapLatLng[][] = [];\n\n if (selectedGaugeInPoints.length === 1) {\n const remarks = JSON.parse(selectedGaugeInPoints[0].remark)\n .sort((a, b) => a.criteriaAttemptedToBeMinimum - b.criteriaAttemptedToBeMinimum);\n console.log(remarks);\n pixelsSolutions = remarks\n .map(remark => remark.solutionForGauge.pixels\n .map(p => new MapLatLng(p.y + 0.005, p.x + 0.01, 0, '' + !remark.notPossible, '' + !remark.notPossible, 1)));\n\n const timeDeltaInMinutes = selectedGaugeInPoints[0].getTimeDeltaInMinutes();\n this.selectedGaugeInPointsDetail = '' + selectedGaugeInPoints[0].gaugeLabel + ' > '\n + Math.round(selectedGaugeInPoints[0].getGaugeValue() * 100) / 100 + ' / '\n + Math.round(selectedGaugeInPoints[0].getRainValue() * 100) / 100\n + ' dT=' + timeDeltaInMinutes;\n\n this.selectedGaugeInPoints = selectedGaugeInPoints[0];\n\n } else {\n this.selectedGaugeInPoints = null;\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n return;\n }\n\n this.selectedGauges = [\n new MapLatLng(this.selectedGaugeInPoints.gaugeCartesianValue.lat, this.selectedGaugeInPoints.gaugeCartesianValue.lng, undefined,\n this.selectedGaugeInPoints.gaugeId,\n this.selectedGaugeInPoints.gaugeLabel + '>' + this.selectedGaugeInPoints.gaugeCartesianValue.value,\n this.selectedGaugeInPoints.gaugeCartesianValue.value),\n ];\n\n this.selectGaugeInCompare();\n\n const pixels: MapLatLng[] = [];\n for (const rainCartesianValue of this.selectedGaugeInPoints.rainCartesianValues) {\n pixels.push(new MapLatLng(rainCartesianValue.lat + 0.005, rainCartesianValue.lng + 0.01));\n }\n this.selectedPixels = pixels;\n\n this.pixelsSolutions = pixelsSolutions;\n }\n\n protected async buildComparesTimeline(targetsOrdered: ICompareTarget[], withCompareDuplicate: boolean): Promise<ICompares> {\n const dates: Date[] = targetsOrdered.map(t => t.date);\n const qualities: RainComputationQuality[] = dates\n .map(d => this.getRainComputationQuality(d))\n .filter(d => !!d);\n this.buildCompares = SpeedMatrixContainer.BuildCompares(qualities, !withCompareDuplicate);\n return this.buildCompares;\n }\n\n protected getComparePerDate(date: Date): IComparePerDate {\n const existing = this.buildCompares.comparesPerDate.filter(c => c.date.getTime() === date.getTime());\n if (existing.length === 1) {\n return existing[0];\n }\n return null;\n }\n\n protected getCurrentQualityPoints(compareIndex: number) {\n if (compareIndex < 0 || this.compareNames.length < compareIndex) {\n return [];\n }\n\n return this.uiCompares[compareIndex].comparePointsHistory;\n }\n\n protected cleanCompareQuality(details?: string) {\n this.compareVersion = details;\n this.compareNames = [];\n this.uiCompares = [];\n this.compareSpeedMatrix = [];\n this.compareTrustedIndicator = undefined;\n\n this.currentQualityDoneDate = new Date(-1);\n this.currentQualityLaunchedBy = '';\n this.currentQualityTimeSpentInMs = -1;\n }\n\n protected async fetchRainComputationQualities(targetsOrdered: ICompareTarget[]) {\n for (const target of targetsOrdered) {\n if (!this.rainComputationQualitiesPerDate[target.date.toISOString()] && target.rainComputationQualityId) {\n try {\n this.rainComputationQualitiesPerDate[target.date.toISOString()] = await this.profileService\n .getRainCompareById(this.rainNode.getId(), target.rainComputationId, target.rainComputationQualityId);\n } catch (e) {\n console.log(e);\n }\n }\n }\n }\n\n protected getRainComputationQuality(date: Date): RainComputationQuality {\n return this.rainComputationQualitiesPerDate[date.toISOString()];\n }\n\n protected selectGaugeInCompare() {\n for (const compare of this.uiCompares) {\n const comparePoints = JSON.parse(JSON.stringify(compare.comparePoints));\n comparePoints.forEach(p => {\n if (p.id === this.selectedGaugeInPoints?.gaugeId) {\n p.r = 10;\n } else {\n p.r = 3;\n }\n });\n compare.comparePoints = comparePoints;\n }\n }\n\n protected resetSelectedGauges() {\n // console.log('resetSelectedGauges reset');\n this.selectedGauge = null;\n this.selectedGaugeInPoints = null;\n this.selectedGauges = [];\n this.selectedPixels = [];\n this.pixelsSolutions = [];\n this.selectGaugeInCompare();\n }\n}\n","export class FrameSet {\n constructor(public date: Date,\n public radarMeasureIds: string[] = [],\n public rainComputationId: string = null,\n public rainComputationVersion: string = null,\n public rainComputationQualities: {\n version: string,\n id: string\n }[] = []) {\n }\n}\n","import {GaugeNode, LatLng} from 'raain-model';\n\nexport class GaugeNodeFilter extends GaugeNode {\n\n public isIn = true;\n public distance = 0;\n\n constructor(json: any) {\n super(json);\n }\n\n approxDistanceFrom(center: LatLng): number {\n this.distance = Math.round((Math.pow(this.latitude - center.lat, 2) + Math.pow(this.longitude - center.lng, 2)) * 100 * 100) / 100;\n return this.distance;\n }\n\n add() {\n this.isIn = true;\n }\n\n remove() {\n this.isIn = false;\n }\n}\n","import {FrameSet} from './FrameSet';\nimport {Subject, takeUntil, timer} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\nimport {RainNode} from 'raain-model';\nimport {TimeframeContainer, TimeframeContainers} from 'raain-ui';\nimport {RadarService} from '../radar.service';\nimport {ProfileService} from '../profile.service';\nimport {CompareManager} from './CompareManager';\n\nexport class RefreshManager {\n\n public rainComputationMapDate: Date;\n public rainComputationMapDoneDate: Date;\n public rainComputationMapLaunchedBy: string;\n public rainComputationMapTimeSpentInMs: number;\n\n protected closeRefreshTimer: Subject<any>;\n protected countsPeriod: any;\n protected timeframesFromRadars: FrameSet[];\n protected timeframesFromRadarsExtended: FrameSet[];\n protected timeframeDates: Date[];\n protected begin: Date;\n protected end: Date;\n protected removeDuplicate: boolean;\n protected dataInternal: boolean;\n\n constructor(\n protected rainNode: RainNode,\n protected radarService: RadarService,\n protected profileService: ProfileService,\n protected compareManager: CompareManager,\n protected onRefreshInProgress: (countPeriods: any, timeframeDates: Date[]) => Promise<void>,\n protected onRefreshDone: (timeframeDates: Date[]) => Promise<void>,\n protected onFetchDone: (timeframeContainers: TimeframeContainers) => Promise<void>,\n ) {\n this.closeRefreshTimer = new Subject<any>();\n this.cleanAll();\n }\n\n public static Delay(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n }\n\n cleanAll() {\n\n this.countsPeriod = {};\n this.timeframesFromRadars = [];\n this.timeframesFromRadarsExtended = [];\n this.timeframeDates = [];\n this.closeRefreshTimer?.next(null);\n }\n\n async fetch(dateShown: Date, withGaugesMeasures: boolean): Promise<FrameSet> {\n // set the target\n const currents = this.timeframesFromRadarsExtended.filter(t => t.date.getTime() === dateShown.getTime());\n if (currents.length !== 1) {\n console.log('no correct dateShown', dateShown, this.timeframesFromRadarsExtended);\n return;\n }\n\n // build [current, previous, next] targets\n const current: FrameSet = currents[0];\n const position = this.timeframesFromRadarsExtended.indexOf(current);\n let previous: FrameSet = null, next: FrameSet = null;\n const positionNames: string[] = ['' + current.date.getTime()];\n const frameSets = {};\n frameSets['' + current.date.getTime()] = current;\n if (position > 0) {\n previous = this.timeframesFromRadarsExtended[position - 1];\n positionNames.push('' + previous.date.getTime());\n frameSets['' + previous.date.getTime()] = previous;\n }\n if (position < this.timeframesFromRadarsExtended.length) {\n next = this.timeframesFromRadarsExtended[position + 1];\n if (next?.date) {\n positionNames.push('' + next.date.getTime());\n frameSets['' + next.date.getTime()] = next;\n }\n }\n\n // align Map with targets\n const targets: {\n date: Date,\n rainComputationId: string,\n rainComputationQualityId: string,\n }[] = [];\n for (const positionName of positionNames) {\n if (frameSets[positionName]) {\n const target = frameSets[positionName];\n target.rainComputationQualityId = this.getRainComputationQualityTarget(target);\n target.withGauge = withGaugesMeasures;\n targets.push(target);\n\n const timeframeContainers = await this.refreshMapTimeframeContainers(target);\n\n if (positionName === ('' + current.date.getTime())) {\n this.onFetchDone(timeframeContainers).then(ignored => {\n });\n }\n }\n }\n\n // align Compare with current date\n this.refreshCompareQuality(current).then((ignored) => {\n });\n\n return current;\n }\n\n async setPeriod(begin: Date, end: Date) {\n this.begin = begin;\n this.end = end;\n\n return this.refreshCounts();\n }\n\n async refresh(launchQualityAfter: boolean, dataInternal: boolean) {\n\n if (!this.begin || !this.end) {\n throw new Error('need a period');\n }\n\n this.dataInternal = dataInternal;\n this.compareManager.cleanAll();\n let refreshInProgress = false;\n let refreshDone = false;\n\n timer(1000, 15000)\n .pipe(\n switchMap(async () => {\n if (refreshInProgress) {\n return refreshDone;\n }\n\n refreshInProgress = true;\n this.onRefreshInProgress(await this.refreshCounts(), this.timeframeDates).then(ignored => {\n });\n refreshDone = await this.refreshPeriodInsidePolling();\n if (!refreshDone) {\n refreshInProgress = false;\n }\n return refreshDone;\n }),\n takeUntil(this.closeRefreshTimer),\n )\n .subscribe({\n next: async (refreshFinished: boolean) => {\n console.log('refreshFinished', refreshFinished, launchQualityAfter);\n if (refreshFinished) {\n this.closeRefreshTimer.next(null);\n await this.onRefreshDone(this.timeframeDates);\n }\n },\n error: (error: any) => {\n console.error('error in refresh', error);\n }\n });\n\n }\n\n async selectGauge(gaugeId: string, compareIndex: number) {\n return this.compareManager.selectGauge(gaugeId, compareIndex);\n }\n\n setRemoveDuplicate(b: boolean) {\n this.removeDuplicate = b;\n }\n\n protected async refreshCounts() {\n const counts = await this.profileService.getCounts(this.rainNode.id, this.begin, this.end, true);\n this.countsPeriod = {\n radarMeasures: counts.radarMeasures.reduce((partialSum, a) => partialSum + a.x, 0),\n gaugeMeasures: counts.gaugeMeasures.reduce((partialSum, a) => partialSum + a.x, 0),\n computationsByTeam: counts.computationsByTeam.reduce((partialSum, a) => partialSum + a.x, 0),\n };\n return this.countsPeriod;\n }\n\n protected getRainComputationQualityTarget(frameset: FrameSet): string {\n if (frameset.rainComputationQualities.length <= 0) {\n return undefined;\n }\n return frameset.rainComputationQualities[0].id;\n }\n\n protected async refreshPeriodInsidePolling(): Promise<boolean> {\n\n let done = false;\n try {\n done = this.refreshCheckIfDone();\n\n // behind refresh\n await this.refreshTimeframesFromRadars(done);\n this.refreshGlobalCompareReport(done).then(ignored => {\n });\n\n return done;\n } catch (e) {\n console.warn(e);\n }\n\n return done;\n }\n\n protected refreshCheckIfDone(): boolean {\n // console.log('refreshPeriodInsidePolling', this.countsPeriod.computationsByTeam, this.countsPeriod.radarMeasures)\n return this.countsPeriod.computationsByTeam === this.countsPeriod.radarMeasures;\n }\n\n protected async refreshTimeframesFromRadars(done: boolean) {\n\n if (!done) {\n return [];\n }\n\n const beginExtended = new Date(this.begin);\n const endExtended = new Date(this.end);\n beginExtended.setMinutes(beginExtended.getMinutes() - 7);\n endExtended.setMinutes(endExtended.getMinutes() + 7);\n this.rainNode = await this.profileService.getRainTimeframe(this.rainNode.getId(), beginExtended, endExtended, this.dataInternal);\n\n this.timeframesFromRadarsExtended = await this.radarService.getTimeline(this.rainNode);\n this.timeframesFromRadars = this.timeframesFromRadarsExtended\n .filter((frameSet) => this.begin.getTime() <= frameSet.date.getTime() && frameSet.date.getTime() <= this.end.getTime())\n .sort((a, b) => a.date.getTime() - b.date.getTime());\n\n // console.log('timeframesFromRadarsExtended:', this.timeframesFromRadarsExtended);\n\n this.timeframeDates = this.timeframesFromRadars.map(frameSet => frameSet.date);\n return this.timeframesFromRadars;\n }\n\n protected async refreshGlobalCompareReport(done: boolean) {\n if (!done) {\n return;\n }\n\n const targets = [];\n for (const frameSet of this.timeframesFromRadarsExtended) {\n const target = JSON.parse(JSON.stringify(frameSet));\n target.date = new Date(target.date);\n target.rainComputationQualityId = this.getRainComputationQualityTarget(frameSet);\n targets.push(target);\n }\n await this.compareManager.refreshGlobalCompareQuality(targets, !this.removeDuplicate);\n }\n\n protected async refreshMapTimeframeContainers(target: {\n date: Date,\n rainComputationId: string,\n withGauge: boolean\n }) {\n if (!target || !target.rainComputationId) {\n console.warn('Pb with refreshMapTimeframeContainers insights');\n return;\n }\n\n const rainNode = this.rainNode;\n const containers: TimeframeContainer[] = [];\n const newCreatedTimeframeContainers = new TimeframeContainers(containers);\n try {\n const rainNodeCartesianMap = await this.profileService\n .getRainComputationCartesianMapById(rainNode.getId(), target.rainComputationId);\n if (rainNodeCartesianMap) {\n newCreatedTimeframeContainers.addFromRainComputationMap(rainNodeCartesianMap, false);\n\n this.rainComputationMapDate = rainNodeCartesianMap.date;\n this.rainComputationMapDoneDate = rainNodeCartesianMap.isDoneDate;\n this.rainComputationMapLaunchedBy = rainNodeCartesianMap.launchedBy;\n this.rainComputationMapTimeSpentInMs = rainNodeCartesianMap.timeSpentInMs;\n }\n } catch (e) {\n console.warn('Pb with computations for id:', target.rainComputationId, e);\n }\n\n return newCreatedTimeframeContainers;\n }\n\n protected async refreshCompareQuality(frameSet: FrameSet) {\n await this.compareManager.refreshCompareQuality(frameSet);\n await this.compareManager.setGauges();\n }\n}\n","import {CartesianMeasureValue, ICartesianMeasureValue, RainNode} from 'raain-model';\nimport {CartesianMapValue, TimeframeContainer, TimeframeContainers} from 'raain-ui';\nimport {RadarService} from '../radar.service';\nimport {ProfileService} from '../profile.service';\n\nexport class ReportManager {\n\n public sumFn: any;\n public sumValues: any;\n\n constructor(\n protected rainNode: RainNode,\n protected radarService: RadarService,\n protected profileService: ProfileService) {\n }\n\n async setDate(dateShown: Date) {\n const {values, timeframesFromRadars} = await this.refreshTimeframesFromRadars(dateShown, dateShown);\n this.sumFn = (cartesianMapValues: CartesianMapValue[]) => {\n const sumResult = cartesianMapValues.reduce((p, v) =>\n p + (v.value * 5 / 60), 0);\n return 'w:' + Math.round(sumResult * 10) / 10;\n }\n this.sumValues = values;\n }\n\n async setPeriod(begin: Date, end: Date) {\n const {values, timeframesFromRadars} = await this.refreshTimeframesFromRadars(begin, end);\n this.sumFn = (cartesianMapValues: CartesianMapValue[]) => {\n const sumResult = cartesianMapValues.reduce((p, v) =>\n p + ((v.value * 5 / 60) / timeframesFromRadars.length), 0);\n return 'wt:' + Math.round(sumResult * 10) / 10;\n }\n this.sumValues = values;\n }\n\n protected async refreshTimeframesFromRadars(begin: Date, end: Date) {\n\n this.rainNode = await this.profileService.getRainTimeframe(this.rainNode.getId(), begin, end);\n\n const timeframesFromRadarsExtended = await this.radarService.getTimeline(this.rainNode);\n const timeframesFromRadars = timeframesFromRadarsExtended\n .filter((frameSet) => begin.getTime() <= frameSet.date.getTime() && frameSet.date.getTime() <= end.getTime())\n .sort((a, b) => a.date.getTime() - b.date.getTime());\n\n let values: CartesianMapValue[] = [];\n for (const frameSet of timeframesFromRadars) {\n values = values.concat(await this.getValues(frameSet));\n }\n\n return {values, timeframesFromRadars};\n }\n\n protected async getValues(target: {\n rainComputationId: string\n }): Promise<CartesianMapValue[]> {\n if (!target || !target.rainComputationId) {\n console.warn('Pb with target insights');\n return [];\n }\n\n let values: CartesianMapValue[] = [];\n const rainNode = this.rainNode;\n const containers: TimeframeContainer[] = [];\n const newCreatedTimeframeContainers = new TimeframeContainers(containers);\n try {\n const rainNodeCartesianMap = await this.profileService\n .getRainComputationCartesianMapById(rainNode.getId(), target.rainComputationId);\n\n if (rainNodeCartesianMap) {\n rainNodeCartesianMap.getMapData().forEach(m => {\n if (m.values) {\n (m.values as ICartesianMeasureValue[]).forEach(v => {\n const cartesianMeasureValue = CartesianMeasureValue.From(v);\n values = values.concat(CartesianMapValue.From(\n cartesianMeasureValue.getCartesianValues(),\n cartesianMeasureValue.getCartesianPixelWidth()));\n });\n }\n });\n }\n } catch (e) {\n console.warn('Pb with computations for id:', target.rainComputationId, e);\n }\n\n return values;\n }\n\n}\n","import {Injectable} from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class Cache {\n\n private readonly _cache: any;\n\n constructor() {\n this._cache = {};\n }\n\n public async getValue(key: string, asyncGetter): Promise<any> {\n if (!this._cache.hasOwnProperty(key)) {\n console.log('cache not done: ', key);\n this.putValue(key, await asyncGetter());\n } else {\n console.log('cache done: ', key);\n }\n return this._cache[key];\n }\n\n public putValue(key: string, value: any): void {\n this._cache[key] = value;\n\n const length = Object.getOwnPropertyNames(this._cache).length;\n if (length > 30) {\n console.warn('cache size exceed ? do a restart ?', length);\n }\n }\n\n}\n","import {FidjService} from 'fidj-angular';\nimport {EventNode, GaugeNode, Link, PeopleNode, RadarNode, RainNode} from 'raain-model';\nimport {Storage} from './storage.service';\n\nexport class FidjStorageNode {\n\n public radars: RadarNode[] = [];\n public rains: RainNode[] = [];\n public gauges: GaugeNode[] = [];\n public team: PeopleNode;\n public events: EventNode[] = [];\n\n public infos: any = {};\n\n static getEmptyNode() {\n return new FidjStorageNode();\n }\n\n static getDemoNode() {\n const demoNode = new FidjStorageNode();\n const link = new Link('rain', 'https://demo/api/rains/2');\n /*\n demoNode.radars = [\n new RadarNode({\n id: '5efd04569cb1f4161bd69dc7',\n name: 'demo radar A',\n links: [link],\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RadarNode({\n id: 'dr2',\n name: 'demo radar B',\n links: [link],\n latitude: 0.11,\n longitude: -0.753\n }),\n new RadarNode({\n id: 'dr3',\n name: 'demo radar C',\n latitude: 0.13,\n longitude: -0.753,\n links: []\n }),\n new RadarNode({\n id: 'dr4',\n name: 'demo radar D',\n latitude: 0.14,\n longitude: -0.74,\n links: []\n })];\n demoNode.rains = [\n new RainNode({\n id: '5efd04569cb1f4161bd69dc8',\n name: 'Demo rain zone A',\n links: [new Link('radar', 'https://demo/api/radars/5efcfe619cb1f4161bd69dc3')],\n status: 0,\n quality: 75,\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RainNode({\n id: 'dz2',\n name: 'Demo rain zone B',\n radars: [demoNode.radars[0], demoNode.radars[1]],\n status: 1,\n quality: 50,\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RainNode({\n id: 'dz3',\n name: 'Demo rain zone C',\n radars: [demoNode.radars[0], demoNode.radars[1]],\n status: 2,\n quality: 75,\n latitude: 48.774569,\n longitude: 2.008407\n }),\n new RainNode({\n id: 'dz4',\n name: 'Demo rain zone D',\n radars: [demoNode.radars[0], demoNode.radars[1]],\n status: 3,\n quality: 95,\n latitude: 48.774569,\n longitude: 2.008407\n })];\n\n demoNode.gauges = [\n new GaugeNode({\n id: 'g1',\n name: 'Gauge A',\n latitude: 48.7748,\n longitude: 2.28407,\n }),\n new GaugeNode({\n id: 'g2',\n name: 'Gauge B',\n latitude: 48.874569,\n longitude: 2.108407,\n })];\n demoNode.events = [{\n id: 'e2',\n title: 'Need support ?',\n status: 0,\n red: false,\n description: 'This area is dedicated to support you and your team. Support is made on Radar or Rain quality, ' +\n 'or any feedback we can have about your production system. Our goal : improving your data.',\n created: new Date(),\n modified: new Date()\n }];\n demoNode.team = {\n id: 'p1',\n email: 'demo@demo.com',\n name: 'demo guy',\n description: 'the demo guy'\n };\n\n */\n return demoNode;\n }\n}\n\nclass FidjStorageResult {\n data: FidjStorageNode;\n}\n\nexport class FidjStorage {\n\n private isDemoMode: boolean;\n private node: FidjStorageNode = FidjStorageNode.getEmptyNode();\n private fidjMetaResult: FidjStorageResult = {data: new FidjStorageNode()};\n\n constructor(private storage: Storage) {\n }\n\n public async storeData(fidjService: FidjService, data) {\n this.node = JSON.parse(JSON.stringify(data));\n this.fidjMetaResult.data = this.node;\n\n if (this.isDemoMode) {\n this.storage.set('fidjMetaResult', JSON.stringify(this.fidjMetaResult));\n return;\n }\n\n await fidjService.put(this.fidjMetaResult);\n }\n\n public async getRefreshedNodeCopy(fidjService: FidjService): Promise<FidjStorageNode> {\n\n if (this.isDemoMode) {\n const fidjMetaResult = this.storage.get('fidjMetaResult');\n if (fidjMetaResult) {\n this.fidjMetaResult = JSON.parse(fidjMetaResult);\n this.node = this.fidjMetaResult.data;\n }\n return JSON.parse(JSON.stringify(this.node));\n }\n\n const firstDemoData = async () => {\n this.node = FidjStorageNode.getDemoNode();\n await this.storeData(fidjService, this.node);\n };\n\n await fidjService.sync(firstDemoData);\n const fidjFindAllResults: any = await fidjService.findAll();\n\n if (fidjFindAllResults && fidjFindAllResults.length > 0) {\n if (fidjFindAllResults[0].data) {\n this.fidjMetaResult = fidjFindAllResults[0];\n this.node = this.fidjMetaResult.data;\n }\n }\n\n return JSON.parse(JSON.stringify(this.node));\n }\n\n setDemoMode(isDemo: boolean) {\n this.isDemoMode = isDemo;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {LocalStorage} from 'fidj-angular';\n\n@Injectable()\nexport class Storage extends LocalStorage {\n\n constructor() {\n super('raain-app.');\n }\n}\n","import {Injectable} from '@angular/core';\nimport {HttpClient} from '@angular/common/http';\nimport {BehaviorSubject} from 'rxjs';\nimport {\n EventNode,\n GaugeMeasure,\n GaugeNode,\n RadarNode,\n RainComputation,\n RainComputationMap,\n RainComputationQuality,\n RainNode,\n SpeedMatrixContainer,\n TeamNode\n} from 'raain-model';\n\nimport {Storage} from './storage.service';\n\nimport {FidjStorage, FidjStorageNode} from './fidj-storage.model';\nimport {ErrorInterface, FidjService, LoggerLevelEnum} from 'fidj-angular';\nimport {XYType} from './xytype';\nimport {GaugeNodeFilter} from './tools';\nimport {Router} from '@angular/router';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ProfileService {\n public readyForSync: BehaviorSubject<boolean>;\n public asTeamId: string;\n\n protected email: string;\n protected isDemo: boolean;\n protected roles: Array<string>;\n protected nodeData: FidjStorageNode;\n protected fidjStorage: FidjStorage;\n protected haveTryToReconnect: boolean;\n\n constructor(protected storage: Storage,\n protected fidjService: FidjService,\n protected httpClient: HttpClient,\n private router: Router,) {\n\n console.log('ProfileService: New####');\n\n this.email = this.storage.get('email') || null;\n this.asTeamId = this.storage.get('asTeamId') || null;\n this.readyForSync = new BehaviorSubject<boolean>(false);\n this.roles = [];\n this.fidjStorage = new FidjStorage(storage);\n this.isDemoMode = false;\n }\n\n get isDemoMode() {\n return this.isDemo;\n }\n\n set isDemoMode(mode) {\n this.isDemo = mode ? mode : true;\n this.fidjStorage.setDemoMode(this.isDemo);\n }\n\n get defaultUrlForAPI() {\n return this.storage.get('UrlForAPI');\n }\n\n set defaultUrlForAPI(url: string) {\n this.storage.set('UrlForAPI', url);\n }\n\n async refreshProfile(): Promise<FidjStorageNode> {\n try {\n this.nodeData = await this.fidjStorage.getRefreshedNodeCopy(this.fidjService);\n this.setRoles(await this.fidjService.getRoles());\n return this.nodeData;\n } catch (e) {\n await this.checkError(e);\n }\n }\n\n getEmail() {\n let email = this.email;\n email = email || this.storage.get('email');\n return email;\n }\n\n setEmail(email: string) {\n this.email = email;\n this.storage.set('email', this.email);\n }\n\n async logout(fidjKey: string, fidjProd: boolean) {\n\n this.storage.remove('email');\n await this.fidjService.logout(true);\n\n try {\n await this.fidjService.init(fidjKey,\n {\n logLevel: LoggerLevelEnum.INFO,\n crypto: false,\n prod: fidjProd,\n useDB: false,\n });\n\n console.log('initFidj done.');\n this.readyForSync.next(true);\n } catch (err) {\n console.error('initFidj catch pb: ', err);\n }\n\n }\n\n async checkError(error: ErrorInterface) {\n console.warn('checkError', error);\n if (error.code === 401) {\n console.log('looks not logged in');\n\n if (this.router.url.indexOf('login') < 0) {\n try {\n const sync = await this.fidjService.sync();\n } catch (e) {\n return this.gotoLout();\n }\n }\n }\n }\n\n async gotoLout() {\n if (this.router.url.indexOf('login') > -1) {\n return;\n }\n await this.router.navigateByUrl('/logout', {skipLocationChange: true});\n // await this.router.navigate(['/logout']);\n // await this.router.navigate(['/login']);\n }\n\n async gotoLogin() {\n if (this.router.url.indexOf('login') > -1) {\n return;\n }\n // await this.router.navigateByUrl('/', {skipLocationChange: true});\n await this.router.navigate(['/login']);\n }\n\n isLoggedIn() {\n return this.fidjService.isLoggedIn();\n }\n\n async storeAll() {\n return this.fidjStorage.storeData(this.fidjService, this.nodeData);\n }\n\n isAdmin(): boolean {\n return this.roles.indexOf('admin') > -1;\n }\n\n // === Notifications ===\n\n async createNotification(rainId: string, message: string) {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'notifications',\n verb: 'POST',\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n data: {\n rain: rainId,\n message,\n },\n });\n return new EventNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n async getNotifications(rainId: string) {\n try {\n const args = '?rain=' + rainId;\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'notifications',\n verb: 'GET',\n relativePath: args,\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n });\n\n return resp.data.notifications.map(n => new EventNode(n));\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n async getAllNotifications(): Promise<EventNode[]> {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'notifications',\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/notifications',\n });\n\n return resp.data.notifications.map(n => new EventNode(n));\n } catch (e) {\n await this.checkError(e);\n }\n\n return [];\n }\n\n // === Teams ===\n\n async getTeams(): Promise<Array<TeamNode>> {\n const teams = [];\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'teams_all',\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/teams_all'\n });\n for (const team of resp.data.teams) {\n teams.push(new TeamNode(team));\n }\n } catch (e) {\n await this.checkError(e);\n }\n return teams;\n }\n\n async getTeam(teamId: string): Promise<TeamNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'teams',\n verb: 'GET',\n relativePath: teamId,\n defaultKeyUrl: this.defaultUrlForAPI + '/teams'\n });\n return new TeamNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n // === Radars ===\n\n async getRadars(teamId: string): Promise<Array<RadarNode>> {\n const radars = [];\n const url = this.defaultUrlForAPI + '/radars' + (teamId ? '?teamId=' + teamId : '');\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'radars',\n verb: 'GET',\n defaultKeyUrl: url,\n });\n for (const r of resp.data.radars) {\n const radar = new RadarNode(r);\n radars.push(radar);\n }\n } catch (e) {\n await this.checkError(e);\n }\n return radars;\n }\n\n async getRadar(id: string): Promise<RadarNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'radars',\n verb: 'GET',\n relativePath: id,\n defaultKeyUrl: this.defaultUrlForAPI + '/radars'\n });\n return new RadarNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n\n return null;\n }\n\n async putRadar(radarNode: RadarNode, configurationAsJSON?: any): Promise<RadarNode> {\n const data = {\n name: radarNode.name,\n };\n\n if (configurationAsJSON) {\n data['configurationAsJSON'] = configurationAsJSON;\n }\n\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'radars',\n relativePath: radarNode.id,\n verb: 'PUT',\n data,\n defaultKeyUrl: this.defaultUrlForAPI + '/radars/'\n });\n\n return new RadarNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n }\n\n async getLonelyRadars(rains: RainNode[]): Promise<RadarNode[]> {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'radars',\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/radars'\n });\n const lonelyRadars: RadarNode[] = [];\n const radars = resp.data.radars;\n radars.forEach(radar => {\n let found = false;\n rains.forEach(rain => {\n const rdId = rain.getLinkId('radar', 0);\n if (rdId === radar.id) {\n found = true;\n }\n });\n if (!found) {\n lonelyRadars.push(radar);\n }\n });\n return lonelyRadars;\n } catch (e) {\n await this.checkError(e);\n }\n return [];\n }\n\n async getRainTimeframe(rainId: string, begin: Date, end: Date, forced = false): Promise<RainNode> {\n try {\n let queryPath = '' + rainId + '?format=timeframe';\n if (begin) {\n queryPath += '&begin=' + begin.toISOString();\n }\n if (end) {\n queryPath += '&end=' + end.toISOString();\n }\n if (forced) {\n queryPath += '&forced=true';\n }\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains'\n });\n const rainNode = new RainNode(resp.data.timeframe);\n rainNode.name += '.radar.timeframe';\n return rainNode;\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Rains ===\n\n async getRains(teamId: string): Promise<Array<RainNode>> {\n const rains = [];\n const url = this.defaultUrlForAPI + '/rains' + (teamId ? '?teamId=' + teamId : '');\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n defaultKeyUrl: url,\n });\n for (const rain of resp.data.rains) {\n rains.push(new RainNode(rain));\n }\n } catch (e) {\n await this.checkError(e);\n }\n return rains;\n }\n\n async getRain(id: string): Promise<RainNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n relativePath: id,\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains/'\n });\n return new RainNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Count\n\n async getCounts(rainId: string,\n periodBegin?: Date,\n periodEnd?: Date,\n withQualities?: boolean): Promise<{\n radarMeasures: XYType[],\n gaugeMeasures: XYType[],\n computationsByTeam: XYType[],\n computationsInternal: XYType[],\n }> {\n try {\n\n let args = '';\n if (periodBegin && periodEnd) {\n args = '?periodBegin=' + periodBegin.toISOString() + '&periodEnd=' + periodEnd.toISOString();\n }\n if (withQualities) {\n args += '&withQualities=' + withQualities;\n }\n\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n relativePath: rainId + '/counts' + args,\n verb: 'GET',\n defaultKeyUrl: this.defaultUrlForAPI + '/rains/',\n });\n\n const counts = resp.data.counts;\n const radarMeasures: XYType[] = [],\n gaugeMeasures: XYType[] = [],\n computationsByTeam: XYType[] = [],\n computationsInternal: XYType[] = [];\n\n counts.forEach(c => {\n radarMeasures.push(new XYType(1, NaN, NaN, c._id));\n gaugeMeasures.push(new XYType(c.gaugeMeasures, NaN, NaN, c._id));\n computationsByTeam.push(new XYType(c.computationsByTeam, NaN, NaN, c._id));\n computationsInternal.push(new XYType(c.computationsInternal, NaN, NaN, c._id));\n });\n\n return {\n radarMeasures,\n gaugeMeasures,\n computationsByTeam,\n computationsInternal,\n };\n } catch (e) {\n await this.checkError(e);\n }\n return null;\n }\n\n // === Computing ===\n\n async launchRainComputation(rainId: string,\n date: Date): Promise<RainComputation[]> {\n const response = await this.fidjService.sendOnEndpoint({\n verb: 'POST',\n key: 'rains',\n relativePath: '' + rainId + '/computations',\n data: {\n date: date.toISOString(),\n },\n defaultKeyUrl: this.defaultUrlForAPI + '/rains'\n });\n\n return response.data.computations?.map(c => new RainComputation(c));\n }\n\n async getRainComputationCartesianMapById(rainId: string, rainComputationId: string): Promise<RainComputationMap> {\n const queryPath = '' + rainId + '/computations/' + rainComputationId + '?format=cartesian-map';\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains'\n });\n if (!response.data['cartesian-map']) {\n return null;\n }\n\n const rainComputationMap = new RainComputationMap(response.data['cartesian-map']);\n rainComputationMap.name = rainId + '.rain.cartesian-map';\n return rainComputationMap;\n }\n\n async getRainCompares(rainId: string, rainComputationId: string): Promise<{ id: string, version: string }[]> {\n const queryPath = '' + rainId + '/computations/' + rainComputationId;\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n // timeout: 200000,\n });\n\n const rainComputation = new RainComputation(response.data);\n const links = rainComputation.getLinks();\n const rainComputationQualities = [];\n for (const link of links) {\n if (link.rel === 'rain-computation-quality') {\n const id = link.getId();\n const version = link.href.substring(link.href.indexOf('version/') + 8, link.href.indexOf('/' + id));\n rainComputationQualities.push({id, version});\n }\n }\n return rainComputationQualities;\n }\n\n async getRainCompareById(rainId: string,\n rainComputationId: string,\n rainComputationQualityId: string): Promise<RainComputationQuality> {\n const queryPath = '' + rainId + '/computations/' + rainComputationId + '/compares/' + rainComputationQualityId;\n const response = await this.fidjService.sendOnEndpoint({\n key: 'rains',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/rains',\n });\n\n const rainComputationQuality = new RainComputationQuality(response.data);\n rainComputationQuality.qualitySpeedMatrixContainer = SpeedMatrixContainer\n .CreateFromJson(rainComputationQuality.qualitySpeedMatrixContainer);\n return rainComputationQuality;\n }\n\n // === Gauges ===\n\n async getGauge(gaugeId: string): Promise<GaugeNode> {\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: gaugeId,\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges'\n });\n return new GaugeNode(resp.data);\n } catch (e) {\n await this.checkError(e);\n }\n }\n\n async getGauges(rainId?: string): Promise<Array<GaugeNodeFilter>> {\n let queryPath = '';\n if (this.asTeamId) {\n queryPath += '?teamId=' + this.asTeamId;\n }\n if (rainId) {\n if (queryPath) {\n queryPath += '&';\n } else {\n queryPath += '?';\n }\n queryPath += 'rainId=' + rainId;\n }\n\n const gauges = [];\n try {\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges'\n });\n\n for (const gauge of resp.data.gauges) {\n gauges.push(new GaugeNodeFilter(gauge));\n }\n } catch (e) {\n await this.checkError(e);\n }\n return gauges;\n }\n\n async getGaugeMeasures(gaugeId: string, begin: Date, end: Date): Promise<GaugeMeasure[]> {\n const queryPath = '' + gaugeId + '/measures?begin=' + begin.toISOString() + '&end=' + end.toISOString();\n const resp = await this.fidjService.sendOnEndpoint({\n key: 'gauges',\n verb: 'GET',\n relativePath: queryPath,\n defaultKeyUrl: this.defaultUrlForAPI + '/gauges'\n });\n\n const gaugeMeasures: GaugeMeasure[] = [];\n for (const gaugeMeasure of resp.data.gaugeMeasures) {\n gaugeMeasures.push(new GaugeMeasure(gaugeMeasure));\n }\n return gaugeMeasures;\n }\n\n // === Private ===\n\n protected setRoles(roles: Array<string>): void {\n this.roles = roles;\n }\n\n}\n","import {Injectable} from '@angular/core';\nimport {MeasureValuePolarContainer, RadarPolarMeasureValue, RainNode, RainPolarMeasureValue} from 'raain-model';\nimport {PolarMapValue} from 'raain-ui';\nimport {ProfileService} from './profile.service';\nimport {FrameSet} from './tools';\n\n@Injectable()\nexport class RadarService {\n\n\n constructor(\n private profileService: ProfileService,\n ) {\n }\n\n static getGeoValuesFromRainMeasures(measureValue: RainPolarMeasureValue, rain: RainNode): PolarMapValue[] {\n return this.computeValues(measureValue.getPolars(), rain);\n }\n\n static getGeoValuesFromRadarMeasures(measureValue: RadarPolarMeasureValue, rain: RainNode): PolarMapValue[] {\n return this.computeValues(measureValue.getPolars(), rain);\n }\n\n private static computeValues(polarMeasureValues: MeasureValuePolarContainer[], rain: RainNode) {\n const values: PolarMapValue[] = [];\n polarMeasureValues.forEach(p => {\n const azimuth = p.azimuth;\n let distance = 0;\n const polarEdges = p.polarEdges;\n polarEdges.forEach(e => {\n const pmv = new PolarMapValue(e, azimuth, distance);\n\n // TODO rainNode.latLngRectsAsJSON\n // pmv.setCenter(rain);\n\n values.push(pmv);\n distance += p.distance;\n });\n });\n\n return values;\n }\n\n async getTimeline(rainNode: RainNode): Promise<FrameSet[]> {\n const timeline: FrameSet[] = [];\n const links = rainNode.getLinks();\n const rainId = rainNode.getId();\n\n // dates and radar measures\n for (const link of links) {\n const measureIndex = link.href.indexOf('measures/');\n if (measureIndex >= 0) {\n const start = measureIndex + 9;\n const str1 = link.href.substring(start);\n if (str1) {\n const end = str1.indexOf('/');\n const dateStr = str1.substring(0, end);\n const idStr = str1.substring(end + 1);\n\n const frameDate = new Date(dateStr);\n const existingTargets = timeline.filter(t => t.date.getTime() === frameDate.getTime());\n if (existingTargets.length) {\n existingTargets[0].radarMeasureIds.push(idStr);\n } else {\n timeline.push(new FrameSet(frameDate, [idStr]));\n }\n }\n }\n }\n\n // rain computations\n for (const link of links) {\n const computationIndex = link.href.indexOf('computations/');\n if (computationIndex >= 0) {\n const start = computationIndex + 13;\n const str1 = link.href.substring(start);\n if (str1) {\n const splitted = str1.split('/');\n const date = new Date(splitted[0]);\n const version = splitted[1];\n const rainComputationId = splitted[2];\n const existingTargets = timeline.filter(t => t.date.getTime() === date.getTime());\n for (const target of existingTargets) {\n target.rainComputationId = rainComputationId;\n target.rainComputationVersion = version;\n target.rainComputationQualities = await this.getBuilds(rainId, rainComputationId);\n }\n }\n }\n }\n\n return timeline;\n }\n\n async getBuilds(rainId: string, rainComputationId: string): Promise<{ id: string, version: string, }[]> {\n return await this.profileService.getRainCompares(rainId, rainComputationId);\n }\n}\n","// TODO remove constants but preferred progress indicator [0 to 1]\nexport const CONSTANTS = {\n\n _RAIN_STATUS_0_NOT_STARTED: 0,\n _RAIN_STATUS_0_WAIT_FOR_ECHOES: 0.1,\n _RAIN_STATUS_0_WAIT_FOR_INPUT: 0.2,\n _RAIN_STATUS_0_WAIT_FOR_INTERNAL_VALIDATION: 0.3,\n _RAIN_STATUS_0_READY_TO_BUILD: 0.4,\n _RAIN_STATUS_1_BUILDING: 0.5,\n _RAIN_STATUS_1_READY_TO_COMPUTE: 0.6,\n\n _RAIN_COMPUTATION_IS_READY: 0,\n _RAIN_COMPUTATION_IN_PROGRESS: 0.5,\n _RAIN_COMPUTATION_DONE: 1,\n\n _INPUT_VALIDITY_NOT_CHECKED_YET: -1,\n _INPUT_VALIDITY_CHECK_IN_PROGRESS: -0.5,\n _INPUT_VALIDITY_NOT_VALID: 0,\n _INPUT_VALIDITY_NOT_CONFIDENT: 0.5,\n _INPUT_VALIDITY_VALID: 1,\n\n _VERIFY_STATUS_FIND_RADARS: 0.3,\n _VERIFY_STATUS_FIND_SIMILAR: 0.6,\n _VERIFY_STATUS_FIND_GAUGES: 0.7,\n\n _COMPUTATION_STATUS_UNKNOWN: 0,\n _COMPUTATION_STATUS_IN_PROGRESS: 0.4,\n _COMPUTATION_STATUS_FINISHED: 1,\n\n};\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {EventNode, RainNode} from 'raain-model';\nimport {CONSTANTS} from './shared.const';\nimport {FrameSet} from './tools';\n\n@Pipe({name: 'areStopped'})\nexport class AreStopped implements PipeTransform {\n transform(rains: RainNode[]): RainNode[] {\n return rains.filter((rain) => (rain.status <= CONSTANTS._RAIN_STATUS_0_NOT_STARTED));\n }\n}\n\n@Pipe({name: 'areInProgress'})\nexport class AreInProgressPipe implements PipeTransform {\n transform(rains: RainNode[]): RainNode[] {\n return rains.filter((rain) => (\n CONSTANTS._RAIN_STATUS_0_NOT_STARTED < rain.status && rain.status < CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE\n ));\n }\n}\n\n@Pipe({name: 'areReady'})\nexport class AreReady implements PipeTransform {\n transform(rains: RainNode[]): RainNode[] {\n return rains.filter((rain) => (\n rain.status >= CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE && rain.quality > CONSTANTS._INPUT_VALIDITY_NOT_CONFIDENT\n ));\n }\n}\n\n@Pipe({name: 'isReady'})\nexport class IsReady implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.status >= CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'isNotReady'})\nexport class IsNotReady implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.status < CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'waitForValidation'})\nexport class WaitForValidation implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.status === CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'hasGoodQuality'})\nexport class HasGoodQuality implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.quality > CONSTANTS._INPUT_VALIDITY_NOT_CONFIDENT) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'hasNotGoodQuality'})\nexport class HasNotGoodQuality implements PipeTransform {\n transform(rain: RainNode): RainNode {\n if (rain.quality < CONSTANTS._INPUT_VALIDITY_VALID) {\n return rain;\n }\n return null;\n }\n}\n\n@Pipe({name: 'progressValue'})\nexport class ProgressValue implements PipeTransform {\n transform(rain: RainNode): number {\n if (rain.status < 0) {\n return 0;\n }\n\n // const value = (rain.progressIngest + rain.progressComputing) / 2;\n const value = rain.status / 2; // 0\n // if (rain.status === CONSTANTS._RAIN_STATUS_0_READY_TO_BUILD) {\n // value = 0.3;\n // } else if (rain.status === CONSTANTS._RAIN_STATUS_1_BUILDING) {\n // value = 0.6;\n // } else if (rain.status === CONSTANTS._RAIN_STATUS_1_READY_TO_COMPUTE) {\n // value = 1;\n // }\n return value;\n }\n}\n\n@Pipe({name: 'progressBuffer'})\nexport class ProgressBuffer implements PipeTransform {\n transform(rain: RainNode): number {\n if (rain.quality < 0) {\n return 0;\n }\n\n const value = rain.quality / 2;\n return value;\n }\n}\n\n@Pipe({name: 'timeframeComputationProgress'})\nexport class TimeframeComputationProgress implements PipeTransform {\n transform(frameSets: FrameSet[]): number {\n let progress = 0;\n if (!frameSets || frameSets.length === 0) {\n return 1;\n }\n\n for (const frameset of frameSets) {\n if (frameset.radarMeasureIds.length && frameset.rainComputationId) {\n progress++;\n }\n }\n\n return progress / frameSets.length;\n }\n}\n\n@Pipe({name: 'timeframeQualityProgress'})\nexport class TimeframeQualityProgress implements PipeTransform {\n transform(frameSets: FrameSet[]): number {\n let progress = 0;\n if (!frameSets || frameSets.length === 0) {\n return 1;\n }\n\n for (const frameset of frameSets) {\n const qualities = frameset.rainComputationQualities ? frameset.rainComputationQualities : [];\n const atLeastOneIsNotOutdated = qualities\n .filter(q => q.version.indexOf('outdated') < 0);\n if (frameset.radarMeasureIds.length && frameset.rainComputationId && atLeastOneIsNotOutdated.length) {\n progress++;\n }\n }\n\n return progress / frameSets.length;\n }\n}\n\n@Pipe({\n name: 'haveNotBeenRed',\n pure: false\n})\nexport class HaveNotBeenRed implements PipeTransform {\n transform(events: EventNode[]): EventNode[] {\n const haveNotBeenRed = events.filter((event) => (!event.red));\n return haveNotBeenRed;\n }\n}\n","import {CommonModule, NgOptimizedImage, NgStyle} from '@angular/common';\nimport {NgModule, Optional, SkipSelf} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\n\nimport {ProfileService} from './profile.service';\nimport {Storage} from './storage.service';\nimport {RadarService} from './radar.service';\nimport {Cache} from './cache.service';\nimport {IonicModule, IonRange} from '@ionic/angular';\nimport {\n AreInProgressPipe,\n AreReady,\n AreStopped,\n HasGoodQuality,\n HasNotGoodQuality,\n HaveNotBeenRed,\n IsNotReady,\n IsReady,\n ProgressBuffer,\n ProgressValue,\n TimeframeComputationProgress,\n TimeframeQualityProgress,\n WaitForValidation\n} from './shared.pipe';\nimport {RaainMapComponent} from './raain-map/raain-map.component';\nimport {RaainCompareComponent} from './raain-compare/raain-compare.component';\nimport {RaainConfigurationComponent} from './raain-configuration/raain-configuration.component';\nimport {RaainDateFocusComponent} from './raain-date-focus/raain-date-focus.component';\nimport {RaainSpeedComponent} from './raain-speed/raain-speed.component';\nimport {RaainCompareStackComponent} from './raain-compare-stack/raain-compare-stack.component';\n\n@NgModule({\n declarations: [\n RaainMapComponent,\n RaainCompareComponent,\n RaainCompareStackComponent,\n RaainDateFocusComponent,\n RaainConfigurationComponent,\n RaainSpeedComponent,\n\n AreStopped,\n AreInProgressPipe,\n AreReady,\n IsReady,\n IsNotReady,\n WaitForValidation,\n HasGoodQuality,\n HasNotGoodQuality,\n ProgressValue,\n ProgressBuffer,\n HaveNotBeenRed,\n TimeframeComputationProgress,\n TimeframeQualityProgress,\n ],\n imports: [\n CommonModule,\n FormsModule,\n IonicModule,\n NgOptimizedImage,\n ],\n providers: [\n Storage,\n RadarService,\n ProfileService,\n Cache,\n IonRange,\n TimeframeComputationProgress,\n TimeframeQualityProgress,\n ],\n exports: [\n CommonModule,\n NgStyle,\n\n RaainMapComponent,\n RaainCompareComponent,\n RaainCompareStackComponent,\n RaainDateFocusComponent,\n RaainConfigurationComponent,\n RaainSpeedComponent,\n\n AreStopped,\n AreInProgressPipe,\n AreReady,\n IsReady,\n IsNotReady,\n WaitForValidation,\n HasGoodQuality,\n HasNotGoodQuality,\n ProgressValue,\n ProgressBuffer,\n HaveNotBeenRed,\n TimeframeComputationProgress,\n TimeframeQualityProgress,\n ]\n})\nexport class SharedModule {\n constructor(@Optional() @SkipSelf() parentModule?: SharedModule) {\n if (parentModule) {\n // throw new Error(\n console.log(\n 'SharedModule is already loaded. Import it in the AppModule only');\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i3","i2","i1","i3.RaainCompareComponent","i1.Storage","i1.ProfileService"],"mappings":"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"}
|