From 29a8d08378eed0cdfa9ffc0eb327c916b5552aee Mon Sep 17 00:00:00 2001 From: cepurwin Date: Thu, 21 Sep 2023 10:40:02 +0200 Subject: [PATCH 01/24] Chart working with Mock-Data --- .../chart-container.component.html | 2 - .../chart-container/chart/chart.component.ts | 66 +- .../home/chart-container/chart/mock-daten.ts | 12040 ++++++++++++++++ src/app/interfaces/chartDataset-interface.ts | 11 + src/app/interfaces/response-interface.ts | 26 + 5 files changed, 12128 insertions(+), 17 deletions(-) create mode 100644 src/app/home/chart-container/chart/mock-daten.ts create mode 100644 src/app/interfaces/chartDataset-interface.ts create mode 100644 src/app/interfaces/response-interface.ts diff --git a/src/app/home/chart-container/chart-container.component.html b/src/app/home/chart-container/chart-container.component.html index a333303..df7ab95 100644 --- a/src/app/home/chart-container/chart-container.component.html +++ b/src/app/home/chart-container/chart-container.component.html @@ -1,3 +1 @@ -

Chart Container

-

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

diff --git a/src/app/home/chart-container/chart/chart.component.ts b/src/app/home/chart-container/chart/chart.component.ts index e27ba54..43cab90 100644 --- a/src/app/home/chart-container/chart/chart.component.ts +++ b/src/app/home/chart-container/chart/chart.component.ts @@ -1,5 +1,8 @@ import {AfterViewInit, Component} from '@angular/core'; -import {Chart} from "chart.js/auto"; +import {Chart, plugins} from "chart.js/auto"; +import {Points, ResponseInterface} from "../../../interfaces/response-interface"; +import {CentroidDatesetInterface, ChartDatasetInterface} from "../../../interfaces/chartDataset-interface"; +import {MockDaten} from "./mock-daten"; @Component({ selector: 'app-chart', @@ -8,31 +11,44 @@ import {Chart} from "chart.js/auto"; }) export class ChartComponent implements AfterViewInit{ public chart: any; - chartImage: string = ''; - datensatz1: Array<{}> = [{ "x": 1.2, "y": 3.4 }, { "x": 3.1, "y": 4.7 }, { "x": 4.5, "y": 2.8 }, { "x": 2.3, "y": 1.6 }, { "x": 1.8, "y": 4.2 }, { "x": 4.7, "y": 3.2 }, { "x": 3.9, "y": 1.9 }, { "x": 2.6, "y": 4.5 }, { "x": 1.5, "y": 3.1 }, { "x": 2.8, "y": 2.1 }, { "x": 4.3, "y": 3.8 }, { "x": 1.4, "y": 4.9 }, { "x": 3.7, "y": 2.7 }, { "x": 1.9, "y": 1.5 }, { "x": 4.0, "y": 4.3 }, { "x": 2.2, "y": 1.7 }, { "x": 3.4, "y": 3.5 }, { "x": 2.0, "y": 4.8 }, { "x": 1.7, "y": 2.4 }, { "x": 4.6, "y": 1.3 }, { "x": 3.3, "y": 2.2 }, { "x": 2.5, "y": 3.9 }, { "x": 4.2, "y": 4.1 }, { "x": 1.1, "y": 1.2 }, { "x": 3.0, "y": 5.0 }, { "x": 2.4, "y": 3.3 }, { "x": 4.4, "y": 2.0 }, { "x": 1.3, "y": 4.6 }, { "x": 3.6, "y": 2.3 }, { "x": 2.9, "y": 1.4 }, { "x": 4.8, "y": 3.7 }, { "x": 1.6, "y": 2.6 },{ "x": 3.5, "y": 4.4 },]; - datensatz2: Array<{}> = [ { "x": 1.7, "y": 2.8 }, { "x": 4.3, "y": 3.1 }, { "x": 2.5, "y": 1.4 }, { "x": 1.9, "y": 4.2 }, { "x": 3.6, "y": 2.3 }, { "x": 4.0, "y": 1.6 }, { "x": 2.1, "y": 3.9 }, { "x": 1.3, "y": 4.8 }, { "x": 4.7, "y": 2.0 }, { "x": 2.0, "y": 3.2 }, { "x": 3.9, "y": 4.7 }, { "x": 1.4, "y": 2.6 }, { "x": 2.8, "y": 1.1 }, { "x": 4.5, "y": 4.0 }, { "x": 3.0, "y": 2.7 }, { "x": 2.2, "y": 5.0 }, { "x": 1.1, "y": 3.4 }, { "x": 4.6, "y": 3.5 }, { "x": 3.7, "y": 1.3 }, { "x": 1.5, "y": 4.5 }, { "x": 4.2, "y": 1.9 }, { "x": 3.3, "y": 2.9 }, { "x": 2.4, "y": 4.3 }, { "x": 1.6, "y": 3.8 }, { "x": 4.4, "y": 2.4 }, { "x": 2.7, "y": 1.5 }, { "x": 3.4, "y": 4.6 }, { "x": 1.2, "y": 2.1 }, { "x": 4.1, "y": 3.0 }, { "x": 3.5, "y": 1.7 }, { "x": 2.3, "y": 5.0 }]; + MockData: ResponseInterface = MockDaten + datasets: Array = []; ngAfterViewInit() { this.renderChart(); } + generateDatasets() { + let centroids: Array = []; + let clusterArray: Array = []; + this.MockData.cluster.map(cluster => { + let dataset: ChartDatasetInterface = { + label: "Cluster " + (cluster.clusterNr + 1), + data: cluster.points + } + centroids.push(cluster.centroid) + clusterArray.push(dataset) + }) + const centroidDataset: CentroidDatesetInterface = { + label: "Centroids", + data: centroids, + pointStyle: "rectRot", + radius: 10 + } + this.datasets.push(centroidDataset) + clusterArray.map(cluster => { + this.datasets.push(cluster); + }) + } + renderChart(){ + this.generateDatasets() var image: string; this.chart = new Chart("Chart", { type: 'scatter', //this denotes tha type of chart data: { - datasets: [ - { - label: 'test1', - data: this.datensatz1 - }, - { - label: 'test2', - data: this.datensatz2 - }, - - ] + datasets: this.datasets }, options: { aspectRatio:1, @@ -43,6 +59,26 @@ export class ChartComponent implements AfterViewInit{ a.href = this.toBase64Image(); a.download = 'chart.png'; }, + }, + plugins: { + title: { + display: true, + text: MockDaten.name + }, + }, + scales: { + y: { + title: { + display: true, + text: MockDaten.y_label + } + }, + x: { + title: { + display: true, + text: MockDaten.x_label + } + } } } }); diff --git a/src/app/home/chart-container/chart/mock-daten.ts b/src/app/home/chart-container/chart/mock-daten.ts new file mode 100644 index 0000000..bb8f886 --- /dev/null +++ b/src/app/home/chart-container/chart/mock-daten.ts @@ -0,0 +1,12040 @@ +import {ResponseInterface} from "../../../interfaces/response-interface"; + +export const MockDaten: ResponseInterface = { + "name": "K-Means Ergebnis von: xclara", + "cluster": [ + { + "clusterNr": 0, + "centroid": { + "x": 9.478045899766407, + "y": 10.686052004816457 + }, + "points": [ + { + "x": 2.072345, + "y": -3.241693 + }, + { + "x": 17.93671, + "y": 15.78481 + }, + { + "x": 1.083576, + "y": 7.319176 + }, + { + "x": 11.12067, + "y": 14.40678 + }, + { + "x": 23.71155, + "y": 2.557729 + }, + { + "x": 24.16993, + "y": 32.02478 + }, + { + "x": 21.66578, + "y": 4.892855 + }, + { + "x": 4.693683999999998, + "y": 12.34217 + }, + { + "x": 19.21191, + "y": -1.121366 + }, + { + "x": 4.230391, + "y": -4.441536 + }, + { + "x": 9.12713, + "y": 23.60572 + }, + { + "x": 0.4075031, + "y": 15.29705 + }, + { + "x": 7.314846000000001, + "y": 3.3093120000000003 + }, + { + "x": -3.438403, + "y": -12.02527 + }, + { + "x": 17.63935, + "y": -3.212345 + }, + { + "x": 4.415292, + "y": 22.81555 + }, + { + "x": 11.94122, + "y": 8.122487 + }, + { + "x": 0.7258532, + "y": 1.806819 + }, + { + "x": 8.185273, + "y": 28.1326 + }, + { + "x": -5.773587, + "y": 1.0248 + }, + { + "x": 18.76943, + "y": 24.16946 + }, + { + "x": 7.752016, + "y": -3.3349910000000005 + }, + { + "x": 10.61132, + "y": 28.44378 + }, + { + "x": 2.02165, + "y": -4.6871220000000005 + }, + { + "x": 5.145525, + "y": 11.186 + }, + { + "x": 6.24331, + "y": 19.47716 + }, + { + "x": -11.70671, + "y": 8.073185 + }, + { + "x": 7.255978, + "y": 14.63704 + }, + { + "x": 3.3923730000000005, + "y": 1.220712 + }, + { + "x": 4.094005, + "y": 6.944694999999999 + }, + { + "x": 11.80358, + "y": -2.445336 + }, + { + "x": 0.09228785, + "y": -6.651035 + }, + { + "x": 28.50607, + "y": -9.091833 + }, + { + "x": 23.40831, + "y": 7.931438000000001 + }, + { + "x": 10.56305, + "y": 12.54468 + }, + { + "x": 20.14157, + "y": 11.11789 + }, + { + "x": -1.871265, + "y": 8.60885 + }, + { + "x": 29.30237, + "y": 14.02176 + }, + { + "x": 18.65383, + "y": 17.216720000000002 + }, + { + "x": -2.972188, + "y": 6.370998999999999 + }, + { + "x": 10.32313, + "y": 12.11574 + }, + { + "x": 16.90539, + "y": -1.355044 + }, + { + "x": 6.753710000000001, + "y": 12.02797 + }, + { + "x": 23.94777, + "y": 13.35047 + }, + { + "x": 6.8835130000000015, + "y": 6.188562999999999 + }, + { + "x": -1.241542, + "y": 10.08179 + }, + { + "x": 20.50827, + "y": -1.57887 + }, + { + "x": -3.75683, + "y": 1.60851 + }, + { + "x": 17.9176, + "y": 13.09896 + }, + { + "x": 2.002537, + "y": -0.656524 + }, + { + "x": 10.7768, + "y": 15.5336 + }, + { + "x": 24.15819, + "y": 5.3303660000000015 + }, + { + "x": 0.3268727, + "y": 7.288786999999999 + }, + { + "x": 21.64777, + "y": 14.00506 + }, + { + "x": 6.871417, + "y": 21.51998 + }, + { + "x": 15.14264, + "y": 5.111947 + }, + { + "x": 11.54712, + "y": 4.75756 + }, + { + "x": 0.6611676, + "y": -10.14263 + }, + { + "x": -13.66531, + "y": 16.93903 + }, + { + "x": 24.90937000000001, + "y": -10.82038 + }, + { + "x": -4.53022, + "y": -6.173767 + }, + { + "x": 3.163677, + "y": 8.051480999999999 + }, + { + "x": 1.495172, + "y": -7.261601 + }, + { + "x": 7.097637, + "y": 2.105751 + }, + { + "x": 3.5094830000000004, + "y": 24.58487 + }, + { + "x": 12.99879, + "y": 24.91248 + }, + { + "x": 0.3593824, + "y": 6.3879150000000005 + }, + { + "x": 14.35429, + "y": -2.252421 + }, + { + "x": 3.831208, + "y": -2.000873 + }, + { + "x": 31.40462, + "y": 26.77209 + }, + { + "x": -5.501097, + "y": 13.391279999999998 + }, + { + "x": -1.04476, + "y": 5.955898 + }, + { + "x": 4.409013, + "y": 9.323681 + }, + { + "x": 2.917201, + "y": 16.53999 + }, + { + "x": 7.265954, + "y": 10.64794 + }, + { + "x": 10.32038, + "y": 13.368570000000002 + }, + { + "x": 9.35213, + "y": 10.42427 + }, + { + "x": 6.648532, + "y": 11.07535 + }, + { + "x": -1.922306, + "y": 4.888493 + }, + { + "x": 7.2260399999999985, + "y": 13.02948 + }, + { + "x": 8.327288000000001, + "y": 8.540999000000001 + }, + { + "x": 17.69046, + "y": 21.59555 + }, + { + "x": 16.58353, + "y": 18.16115 + }, + { + "x": 12.35425, + "y": 31.96708 + }, + { + "x": 2.4711380000000003, + "y": 5.482761 + }, + { + "x": 18.4925, + "y": 29.42421 + }, + { + "x": 10.1196, + "y": 7.162078 + }, + { + "x": 20.40245, + "y": 3.943319 + }, + { + "x": 12.71589, + "y": 4.531656 + }, + { + "x": 24.35859, + "y": -4.0644 + }, + { + "x": 21.74312, + "y": 15.90887 + }, + { + "x": 12.27208, + "y": -9.612116 + }, + { + "x": 18.29681, + "y": 22.38563 + }, + { + "x": 3.530957, + "y": 8.673297 + }, + { + "x": 5.026042, + "y": 36.03767 + }, + { + "x": -0.8633009, + "y": -7.586249 + }, + { + "x": 26.83892, + "y": 13.13713 + }, + { + "x": 19.11999, + "y": 7.209714999999999 + }, + { + "x": -0.8841636999999999, + "y": 27.15254 + }, + { + "x": -5.191529, + "y": 29.65612 + }, + { + "x": 9.796095, + "y": 15.43598 + }, + { + "x": 11.66314, + "y": 10.63428 + }, + { + "x": 9.925199, + "y": 26.80364 + }, + { + "x": 33.90998, + "y": 15.02652 + }, + { + "x": 9.57004, + "y": 9.2481 + }, + { + "x": -16.2653, + "y": 13.90024 + }, + { + "x": 15.10579, + "y": 3.350049 + }, + { + "x": -4.186504, + "y": 7.964410000000001 + }, + { + "x": 12.54816, + "y": 32.51867 + }, + { + "x": -7.733469, + "y": 9.634491 + }, + { + "x": 18.91337, + "y": 15.7414 + }, + { + "x": -1.050022, + "y": -4.0034550000000015 + }, + { + "x": -6.894765, + "y": 1.041802 + }, + { + "x": 23.05031, + "y": -12.76934 + }, + { + "x": 25.96073, + "y": 11.44522 + }, + { + "x": 7.9507949999999985, + "y": 6.811407000000001 + }, + { + "x": -3.669517, + "y": -4.329696 + }, + { + "x": 10.52266, + "y": 23.3561 + }, + { + "x": 26.29452, + "y": 10.51806 + }, + { + "x": 12.42904, + "y": 23.15663 + }, + { + "x": 0.1170239, + "y": 24.65274 + }, + { + "x": -1.040023, + "y": 1.629857 + }, + { + "x": 11.16266, + "y": 9.0201 + }, + { + "x": 13.61452, + "y": 0.8832188 + }, + { + "x": 8.028045, + "y": 14.82966 + }, + { + "x": 20.40253, + "y": 22.0472 + }, + { + "x": 8.818028, + "y": 18.90424 + }, + { + "x": -0.3163152999999999, + "y": 21.40601 + }, + { + "x": 7.190192999999999, + "y": 9.13962 + }, + { + "x": -0.4711474, + "y": -8.29095 + }, + { + "x": 16.6546, + "y": -1.519889 + }, + { + "x": 10.51711, + "y": -5.018592 + }, + { + "x": 17.963060000000006, + "y": 14.46713 + }, + { + "x": -1.315535, + "y": 11.6027 + }, + { + "x": 5.113728, + "y": 3.961434 + }, + { + "x": 32.25842, + "y": -2.712702 + }, + { + "x": -10.59094, + "y": 15.402920000000002 + }, + { + "x": 21.60892, + "y": 17.750020000000006 + }, + { + "x": 11.31144, + "y": 1.031762 + }, + { + "x": 11.30595, + "y": 3.0689580000000003 + }, + { + "x": 15.51137, + "y": 8.943091 + }, + { + "x": 15.37201, + "y": 18.17922 + }, + { + "x": 3.77755, + "y": 13.33419 + }, + { + "x": 17.279889999999998, + "y": 13.97798 + }, + { + "x": -3.349734, + "y": 26.6599 + }, + { + "x": 15.72571, + "y": 6.373983 + }, + { + "x": 25.50999, + "y": 15.15837 + }, + { + "x": 16.68281, + "y": 18.95937 + }, + { + "x": -4.734694, + "y": 24.09568 + }, + { + "x": 25.08795, + "y": 19.69376 + }, + { + "x": 7.038364, + "y": 10.6667 + }, + { + "x": 4.521214, + "y": -6.635304 + }, + { + "x": 6.454509, + "y": 13.662720000000002 + }, + { + "x": 5.322541, + "y": 22.3855 + }, + { + "x": 0.6316529000000001, + "y": 19.79414 + }, + { + "x": -5.669132, + "y": 11.32511 + }, + { + "x": 9.843806, + "y": -4.695499 + }, + { + "x": 15.39168, + "y": 14.145270000000002 + }, + { + "x": 1.289581, + "y": 10.09948 + }, + { + "x": 17.10334, + "y": 6.207793 + }, + { + "x": 17.13273, + "y": 6.609228 + }, + { + "x": 9.70176, + "y": 12.33497 + }, + { + "x": 18.80351, + "y": -3.160759 + }, + { + "x": 6.08478, + "y": 4.689186 + }, + { + "x": -6.025192, + "y": 26.61258 + }, + { + "x": 4.237603, + "y": 7.315439 + }, + { + "x": 16.82231, + "y": 8.133560000000001 + }, + { + "x": -4.768829, + "y": 28.65819 + }, + { + "x": 0.5061416, + "y": 4.9462980000000005 + }, + { + "x": 12.57349, + "y": 10.41494 + }, + { + "x": 16.35374, + "y": 6.874306 + }, + { + "x": 0.1009743999999999, + "y": 2.590253 + }, + { + "x": 13.67556, + "y": -12.72959 + }, + { + "x": 2.477362, + "y": 8.42026 + }, + { + "x": 14.99279, + "y": 15.16393 + }, + { + "x": 29.71711, + "y": 15.62874 + }, + { + "x": 17.48491, + "y": 3.3823 + }, + { + "x": 13.45815, + "y": -4.13764 + }, + { + "x": 2.2072, + "y": -1.554494 + }, + { + "x": 23.05134, + "y": 24.39491 + }, + { + "x": 32.74222, + "y": 25.56641 + }, + { + "x": 15.562970000000002, + "y": 24.94262 + }, + { + "x": 8.132651, + "y": 8.998712 + }, + { + "x": 0.4580866, + "y": -9.891244 + }, + { + "x": -9.164294, + "y": 5.029294 + }, + { + "x": -3.031709, + "y": 20.23346 + }, + { + "x": 12.12393, + "y": 15.103 + }, + { + "x": 19.95281, + "y": 29.14982 + }, + { + "x": 13.00477, + "y": 27.23093 + }, + { + "x": 10.4399, + "y": 25.7741 + }, + { + "x": 0.351724, + "y": 12.2222 + }, + { + "x": 10.37312, + "y": 6.863772999999999 + }, + { + "x": 17.95419, + "y": 4.455694 + }, + { + "x": 21.06292, + "y": 3.607867 + }, + { + "x": 6.069686, + "y": 9.325338 + }, + { + "x": 14.00808, + "y": 11.5225 + }, + { + "x": -1.7777919999999998, + "y": 14.62108 + }, + { + "x": 0.7525703, + "y": -7.381838 + }, + { + "x": -2.3295470000000003, + "y": 5.070321 + }, + { + "x": 1.77457, + "y": 6.2785720000000005 + }, + { + "x": 10.69576, + "y": 16.30571 + }, + { + "x": 18.11151, + "y": 34.12422 + }, + { + "x": 0.2417766, + "y": 27.04643 + }, + { + "x": -0.4202355, + "y": 4.105829 + }, + { + "x": 15.41425, + "y": 14.782570000000002 + }, + { + "x": 8.463556, + "y": 23.04895 + }, + { + "x": 12.03072, + "y": 17.41157 + }, + { + "x": 18.68731, + "y": 6.949078999999999 + }, + { + "x": 6.3693550000000005, + "y": 5.700326 + }, + { + "x": 21.82924, + "y": 5.564074 + }, + { + "x": 7.615410000000002, + "y": -5.024376999999999 + }, + { + "x": 5.823252, + "y": 18.40279 + }, + { + "x": 22.35203, + "y": 8.526174000000001 + }, + { + "x": 6.434616, + "y": 21.16974 + }, + { + "x": 0.5560946, + "y": -4.8660760000000005 + }, + { + "x": 6.737062, + "y": -11.7331 + }, + { + "x": -1.392677, + "y": 14.64543 + }, + { + "x": 4.935136, + "y": 24.86809 + }, + { + "x": 20.35508, + "y": 26.981240000000003 + }, + { + "x": 8.624667, + "y": 10.67174 + }, + { + "x": 16.31749, + "y": 11.64083 + }, + { + "x": 9.014875, + "y": 14.42246 + }, + { + "x": 17.598329999999994, + "y": 26.66023 + }, + { + "x": 2.636649, + "y": 24.04782 + }, + { + "x": 13.82606, + "y": 16.27159 + }, + { + "x": 10.39783, + "y": 3.804893 + }, + { + "x": -6.27359, + "y": 3.878999 + }, + { + "x": -11.88057, + "y": 0.1788024 + }, + { + "x": 21.02048, + "y": 9.690716 + }, + { + "x": 18.25632, + "y": 16.941270000000006 + }, + { + "x": 24.96351, + "y": -1.158215 + }, + { + "x": 10.13696, + "y": 6.446662 + }, + { + "x": 3.509066, + "y": 16.55414 + }, + { + "x": 2.409921, + "y": -0.3445188 + }, + { + "x": 16.0843, + "y": 7.562616 + }, + { + "x": 5.987025, + "y": 7.456533 + }, + { + "x": 12.63902, + "y": 14.35081 + }, + { + "x": 7.392535, + "y": 22.61304 + }, + { + "x": 10.37212, + "y": -1.25827 + }, + { + "x": -19.01791, + "y": 0.6507304 + }, + { + "x": 3.030817, + "y": 4.580993 + }, + { + "x": 34.0303, + "y": -3.716423 + }, + { + "x": -5.843476, + "y": 13.79137 + }, + { + "x": 36.95611, + "y": -1.245269 + }, + { + "x": -0.188409, + "y": -1.86653 + }, + { + "x": 17.28285, + "y": 1.558553 + }, + { + "x": 8.9204, + "y": 29.19455 + }, + { + "x": -5.873556, + "y": 6.456733 + }, + { + "x": 17.76259, + "y": 24.02293 + }, + { + "x": 12.49482, + "y": 22.47067 + }, + { + "x": 12.6087, + "y": 3.212588 + }, + { + "x": 3.606599, + "y": 14.24789 + }, + { + "x": 20.48342, + "y": 13.74531 + }, + { + "x": 31.6423, + "y": 13.04685 + }, + { + "x": 4.745898, + "y": 7.317133 + }, + { + "x": -5.295478, + "y": 6.0010080000000015 + }, + { + "x": 7.238307000000002, + "y": 19.98631 + }, + { + "x": 6.144599, + "y": 19.91034 + }, + { + "x": 9.837835, + "y": 8.336385 + }, + { + "x": 18.64695, + "y": 5.146764 + }, + { + "x": -0.5638628000000001, + "y": 9.673976 + }, + { + "x": 5.21368, + "y": 21.83143 + }, + { + "x": -0.1993878, + "y": 9.176207000000002 + }, + { + "x": 22.42831, + "y": 8.390862 + }, + { + "x": 19.39561, + "y": -7.412824 + }, + { + "x": 31.28428, + "y": 4.131464 + }, + { + "x": 8.380888, + "y": 0.2647594 + }, + { + "x": 7.840689999999999, + "y": 13.20062 + }, + { + "x": 23.85992, + "y": 6.171501 + }, + { + "x": 6.188661, + "y": 24.92638 + }, + { + "x": 18.08387, + "y": 19.74208 + }, + { + "x": 14.23096, + "y": 12.43815 + }, + { + "x": 14.4807, + "y": 8.661634 + }, + { + "x": 30.91987, + "y": 17.57755 + }, + { + "x": 4.117051, + "y": 3.299065 + }, + { + "x": 18.10072000000001, + "y": 9.572447 + }, + { + "x": -3.777019, + "y": 1.115207 + }, + { + "x": 18.47156, + "y": 8.861407 + }, + { + "x": 30.69195, + "y": 21.9132 + }, + { + "x": 1.838687, + "y": 13.1765 + }, + { + "x": 14.22135, + "y": 16.96163 + }, + { + "x": 27.70961, + "y": 10.52575 + }, + { + "x": 9.956135, + "y": 7.890053999999999 + }, + { + "x": 11.7273, + "y": 14.00086 + }, + { + "x": 2.154482, + "y": 14.163470000000002 + }, + { + "x": -0.2120433999999999, + "y": 1.330881 + }, + { + "x": -1.7389830000000002, + "y": 16.9849 + }, + { + "x": 2.299075, + "y": -0.2934257999999999 + }, + { + "x": 22.01149, + "y": -0.4469464 + }, + { + "x": 4.275241, + "y": 16.67383 + }, + { + "x": 19.38943, + "y": 4.436821 + }, + { + "x": 8.80722, + "y": 13.23823 + }, + { + "x": -0.7658179, + "y": -4.004811 + }, + { + "x": 12.69128, + "y": 13.52916 + }, + { + "x": 12.73131, + "y": 7.050802 + }, + { + "x": 8.388222, + "y": 23.45347000000001 + }, + { + "x": 23.42708, + "y": 4.5986410000000015 + }, + { + "x": 4.046104, + "y": 7.634936 + }, + { + "x": 7.667025, + "y": 3.193633 + }, + { + "x": 22.60801, + "y": 5.130319999999998 + }, + { + "x": 14.74391, + "y": 28.76733 + }, + { + "x": 20.53201, + "y": 8.01565 + }, + { + "x": 16.46037, + "y": 16.81531 + }, + { + "x": 12.70669, + "y": 11.48214 + }, + { + "x": -1.474059, + "y": 3.329562 + }, + { + "x": 35.049609999999994, + "y": 14.4484 + }, + { + "x": 2.529177, + "y": 15.56721 + }, + { + "x": 28.9961, + "y": -15.57834 + }, + { + "x": 10.57878, + "y": 6.307686 + }, + { + "x": 5.52815, + "y": 14.12427 + }, + { + "x": 12.48016, + "y": 2.7289220000000003 + }, + { + "x": 18.10028, + "y": 3.891689 + }, + { + "x": 11.17125, + "y": 11.10063 + }, + { + "x": 14.58538, + "y": 25.99213 + }, + { + "x": 27.21567000000001, + "y": -1.980637 + }, + { + "x": -1.40271, + "y": 22.3755 + }, + { + "x": -14.66871, + "y": 9.792318 + }, + { + "x": 28.25157, + "y": 14.28507 + }, + { + "x": 2.688756, + "y": 3.0299970000000003 + }, + { + "x": 9.58344, + "y": 12.00506 + }, + { + "x": 3.65772, + "y": 1.649871 + }, + { + "x": 3.575705, + "y": 14.80241 + }, + { + "x": 34.62557, + "y": 4.384648 + }, + { + "x": 36.12292, + "y": 12.05849 + }, + { + "x": 12.56065, + "y": -4.733039 + }, + { + "x": 1.915274, + "y": 22.28056 + }, + { + "x": 18.14029, + "y": 3.569117 + }, + { + "x": -1.214981, + "y": -3.3185839999999995 + }, + { + "x": 7.646433999999997, + "y": 29.922590000000003 + }, + { + "x": -2.844509, + "y": 13.71118 + }, + { + "x": 14.62733, + "y": 16.4933 + }, + { + "x": -0.3742695, + "y": 15.06495 + }, + { + "x": 10.15795, + "y": 13.33612 + }, + { + "x": 19.4574, + "y": 11.29307 + }, + { + "x": -6.23644, + "y": 9.581524 + }, + { + "x": 0.2870638, + "y": 6.756246000000001 + }, + { + "x": 7.025386999999999, + "y": 8.299629 + }, + { + "x": 6.2054050000000025, + "y": 29.41931 + }, + { + "x": 12.37304, + "y": 4.152157 + }, + { + "x": -8.001964, + "y": 15.628429999999998 + }, + { + "x": 9.879504, + "y": 13.94365 + }, + { + "x": 12.83222, + "y": 20.98375 + }, + { + "x": 10.71142, + "y": 18.59333 + }, + { + "x": 10.09704, + "y": 9.915216 + }, + { + "x": 17.89963, + "y": 6.451302 + }, + { + "x": -6.720686, + "y": 14.993670000000002 + }, + { + "x": 3.712734, + "y": 7.361372 + }, + { + "x": -16.22395, + "y": 17.81785 + }, + { + "x": 8.71418, + "y": 24.10122 + }, + { + "x": 17.05254, + "y": 5.227864 + }, + { + "x": -14.69171, + "y": 31.79987 + }, + { + "x": 7.943416, + "y": 10.26803 + }, + { + "x": 14.004979999999998, + "y": 21.54721 + }, + { + "x": -1.302871, + "y": 2.063343 + }, + { + "x": -0.7624772, + "y": 7.0014119999999975 + }, + { + "x": 21.54626, + "y": 21.13478 + }, + { + "x": 1.232726, + "y": 12.78234 + }, + { + "x": 1.602791, + "y": 2.210584 + }, + { + "x": -6.679344, + "y": 12.61919 + }, + { + "x": -6.89254, + "y": 2.9427950000000003 + }, + { + "x": 12.32427, + "y": 22.68294 + }, + { + "x": 21.02468, + "y": 26.13788 + }, + { + "x": 6.443124, + "y": -3.984948 + }, + { + "x": 22.39199, + "y": 13.58907 + }, + { + "x": 18.06598, + "y": 2.753522 + }, + { + "x": 8.136961, + "y": 22.73404 + }, + { + "x": 13.142079999999998, + "y": 24.21235 + }, + { + "x": 11.51451, + "y": 15.92228 + }, + { + "x": -2.505605, + "y": 15.30741 + }, + { + "x": 3.29959, + "y": 13.2484 + }, + { + "x": -4.795219, + "y": 1.21583 + }, + { + "x": 29.08478, + "y": 10.30137 + }, + { + "x": 5.12492, + "y": 4.627426 + }, + { + "x": 17.060779999999998, + "y": 9.965354 + }, + { + "x": -0.340825, + "y": 11.85959 + }, + { + "x": 15.295320000000002, + "y": 9.07695 + }, + { + "x": 6.39995, + "y": 23.04672 + }, + { + "x": 14.522429999999998, + "y": 17.693360000000006 + }, + { + "x": 28.85673, + "y": 4.007333999999998 + }, + { + "x": 10.77192, + "y": 5.787269 + }, + { + "x": 7.428644999999999, + "y": 15.77705 + }, + { + "x": -6.637650999999999, + "y": 14.04711 + }, + { + "x": 17.08812, + "y": 8.223101 + }, + { + "x": 15.07757, + "y": -13.689429999999998 + }, + { + "x": -22.15215, + "y": 9.511638 + }, + { + "x": 5.04531, + "y": 1.784843 + }, + { + "x": -2.521792, + "y": -7.60383 + }, + { + "x": 32.85505, + "y": 0.3210040999999999 + }, + { + "x": 6.070759, + "y": 5.579687 + }, + { + "x": 3.508814, + "y": -3.738329 + }, + { + "x": 9.818843, + "y": 2.407706 + }, + { + "x": 11.93353, + "y": 18.78467 + }, + { + "x": 2.850058, + "y": -4.31489 + }, + { + "x": 5.20408, + "y": 6.957638 + }, + { + "x": 13.56349, + "y": 9.16074 + }, + { + "x": 2.631175, + "y": 5.677225 + }, + { + "x": 6.517994, + "y": -0.974309 + }, + { + "x": 15.80081, + "y": 19.64233 + }, + { + "x": 14.07388, + "y": -1.577052 + }, + { + "x": -3.888388, + "y": 0.4062882 + }, + { + "x": 18.69151, + "y": 10.06134 + }, + { + "x": 21.0912, + "y": 26.45951 + }, + { + "x": 2.459292, + "y": 6.838326 + }, + { + "x": 6.513192, + "y": -0.7243316999999999 + }, + { + "x": 24.3063, + "y": 14.39751 + }, + { + "x": 13.94559, + "y": 0.7581209 + }, + { + "x": -2.664707, + "y": -6.36948 + }, + { + "x": 8.106246, + "y": 0.4920085 + }, + { + "x": 17.07317, + "y": 25.84198 + }, + { + "x": 6.0494330000000005, + "y": 22.92962 + }, + { + "x": 23.94025, + "y": 27.27981 + }, + { + "x": -7.401308, + "y": -3.5558080000000003 + }, + { + "x": 2.926755, + "y": 22.41698 + }, + { + "x": -2.774311, + "y": -21.36068 + }, + { + "x": -3.094624, + "y": 16.60375 + }, + { + "x": 15.663379999999998, + "y": 18.60818 + }, + { + "x": 22.3694, + "y": 20.29701 + }, + { + "x": -0.984013, + "y": 23.2461 + }, + { + "x": 28.63485, + "y": 4.79718 + }, + { + "x": 21.88014, + "y": 12.66741 + }, + { + "x": -3.621506, + "y": 4.750143 + }, + { + "x": 12.52111, + "y": 8.464080000000001 + }, + { + "x": -22.49599, + "y": 0.1392916 + }, + { + "x": 17.33361, + "y": 3.268888 + }, + { + "x": -6.884011, + "y": -1.824905 + }, + { + "x": 10.21154, + "y": 24.45211 + }, + { + "x": 12.14809, + "y": 12.06576 + }, + { + "x": -1.924867, + "y": -0.1361344 + }, + { + "x": 21.60187, + "y": 10.23303 + }, + { + "x": 15.66342, + "y": 13.893720000000002 + }, + { + "x": 15.0212, + "y": 9.187742 + }, + { + "x": 13.60186, + "y": 16.88655 + }, + { + "x": 4.554105, + "y": 37.17632 + }, + { + "x": 12.56063, + "y": 7.900061 + }, + { + "x": -11.53464, + "y": 11.63952 + }, + { + "x": 24.58798, + "y": 1.860825 + }, + { + "x": -8.381909, + "y": 14.354070000000002 + }, + { + "x": -6.1142650000000005, + "y": 7.363372999999997 + }, + { + "x": -5.19861, + "y": 12.78676 + }, + { + "x": 21.17985, + "y": 10.36981 + }, + { + "x": 6.734995, + "y": 23.19933 + }, + { + "x": 10.19698, + "y": 15.43111 + }, + { + "x": 12.04076, + "y": 17.23649 + }, + { + "x": 25.86829, + "y": 2.396404 + }, + { + "x": -5.335044, + "y": 7.578044 + }, + { + "x": 9.824228, + "y": 6.06933 + }, + { + "x": 14.249670000000002, + "y": 27.39351 + }, + { + "x": 5.553391, + "y": 13.30626 + }, + { + "x": 9.224884, + "y": -2.702723 + }, + { + "x": 16.72743, + "y": 15.952370000000002 + }, + { + "x": 13.19714, + "y": 14.475179999999998 + }, + { + "x": 13.476720000000002, + "y": -4.123874 + }, + { + "x": 6.2834900000000005, + "y": 11.55091 + }, + { + "x": 15.38618, + "y": -8.226192 + }, + { + "x": 10.96815, + "y": 9.922543 + }, + { + "x": 14.3925, + "y": 3.203174 + }, + { + "x": 22.91966, + "y": 20.66688 + }, + { + "x": 12.9942, + "y": 15.3486 + }, + { + "x": 24.38812, + "y": 18.26395 + }, + { + "x": -9.467832, + "y": 0.6434593000000001 + }, + { + "x": -5.9889470000000005, + "y": 22.67049 + }, + { + "x": -1.766619, + "y": 18.50818 + }, + { + "x": -2.997209, + "y": 15.36209 + }, + { + "x": -2.980586, + "y": 14.54187 + }, + { + "x": 19.18525, + "y": 12.05587 + }, + { + "x": 18.62052000000001, + "y": -6.348775 + }, + { + "x": 4.541831, + "y": 3.586799 + }, + { + "x": 2.029832, + "y": 35.52395 + }, + { + "x": 18.08133, + "y": 6.853875 + }, + { + "x": 16.55184, + "y": 29.25978 + }, + { + "x": 20.81487000000001, + "y": 0.2041338 + }, + { + "x": 4.7732410000000005, + "y": 11.55061 + }, + { + "x": 17.54123, + "y": 24.48917 + }, + { + "x": 11.232, + "y": 27.95659 + }, + { + "x": 19.88413, + "y": 3.3734900000000003 + }, + { + "x": -3.511829, + "y": 6.03616 + }, + { + "x": 19.83789, + "y": 5.660164 + }, + { + "x": 21.5811, + "y": 2.308901 + }, + { + "x": 12.77548, + "y": 11.26171 + }, + { + "x": -3.640386, + "y": -8.611116 + }, + { + "x": 22.1939, + "y": 13.675070000000002 + }, + { + "x": 24.52809, + "y": 3.520373 + }, + { + "x": -2.055682, + "y": 19.0635 + }, + { + "x": 22.10497, + "y": 10.32231 + }, + { + "x": 11.01341, + "y": 25.31104 + }, + { + "x": 19.34416, + "y": 17.969070000000006 + }, + { + "x": -3.011348, + "y": 22.65403 + }, + { + "x": 4.864152, + "y": -1.24612 + }, + { + "x": -12.93381, + "y": 4.052313 + }, + { + "x": -3.225042, + "y": 2.066012 + }, + { + "x": 27.51631, + "y": 9.72616 + }, + { + "x": 15.95689, + "y": 0.2902336 + }, + { + "x": 5.763955, + "y": 18.51403 + }, + { + "x": 24.53113, + "y": 23.72683 + }, + { + "x": 12.13776, + "y": -1.241701 + }, + { + "x": -6.742276, + "y": 10.8888 + }, + { + "x": 1.712732, + "y": 14.68423 + }, + { + "x": 4.114345, + "y": 23.43694 + }, + { + "x": 24.57423, + "y": 17.20925 + }, + { + "x": 12.09148, + "y": -2.061826 + }, + { + "x": 6.380095, + "y": 19.50401 + }, + { + "x": 15.4881, + "y": 21.71908 + }, + { + "x": 3.572731, + "y": -3.078149 + }, + { + "x": 26.356690000000004, + "y": 20.47212 + }, + { + "x": 14.78471, + "y": 23.34586 + }, + { + "x": -1.279279, + "y": 0.9330042 + }, + { + "x": 0.01129247, + "y": 8.008011999999999 + }, + { + "x": 5.984768, + "y": 1.961941 + }, + { + "x": 8.858572, + "y": 17.184720000000002 + }, + { + "x": 19.37649, + "y": 2.122504 + }, + { + "x": 9.10579, + "y": 19.51155 + }, + { + "x": 9.643453, + "y": 6.241649 + }, + { + "x": -3.1091740000000003, + "y": 18.91863 + }, + { + "x": 10.541, + "y": -3.394954 + }, + { + "x": 4.573325, + "y": 11.78297 + }, + { + "x": 22.98676, + "y": 10.07359 + }, + { + "x": -10.77961, + "y": 14.08271 + }, + { + "x": 5.63292, + "y": 18.08959 + }, + { + "x": 5.782557, + "y": 12.32168 + }, + { + "x": 27.1903, + "y": 10.58244 + }, + { + "x": 8.920819999999997, + "y": 30.34188 + }, + { + "x": -1.781047, + "y": 10.98773 + }, + { + "x": -0.7274996, + "y": -7.879213 + }, + { + "x": 23.33998, + "y": 16.66643 + }, + { + "x": 16.00585, + "y": 1.374964 + }, + { + "x": 22.97108, + "y": 15.7172 + }, + { + "x": 8.993785, + "y": -9.014578 + }, + { + "x": 8.249774, + "y": -2.679776 + }, + { + "x": 5.368688, + "y": 12.60516 + }, + { + "x": 25.45515, + "y": 22.22258 + }, + { + "x": 16.10149, + "y": 11.38547 + }, + { + "x": 25.9423, + "y": 5.396589 + }, + { + "x": 13.96851, + "y": 23.8073 + }, + { + "x": 1.059773, + "y": 2.482886 + }, + { + "x": 11.19896, + "y": 27.34923 + }, + { + "x": 10.01848, + "y": 12.379 + }, + { + "x": -5.964017, + "y": 14.30957 + }, + { + "x": 14.69272, + "y": 13.940270000000002 + }, + { + "x": 5.162226, + "y": -3.949188 + }, + { + "x": 16.13654, + "y": 2.4912810000000003 + }, + { + "x": -8.427487, + "y": 17.28569 + }, + { + "x": 17.46026, + "y": 23.52985 + }, + { + "x": 4.839787, + "y": 2.035094 + }, + { + "x": 24.78075, + "y": 8.787683 + }, + { + "x": 3.28531, + "y": -2.7043060000000003 + }, + { + "x": 1.317184, + "y": 13.35289 + }, + { + "x": 5.000647, + "y": 13.50562 + }, + { + "x": -2.902717, + "y": 2.2402900000000003 + }, + { + "x": 12.86082, + "y": 12.72926 + }, + { + "x": 6.369858, + "y": 11.56653 + }, + { + "x": 5.91316, + "y": 24.22981 + }, + { + "x": -4.098757, + "y": -5.008349 + }, + { + "x": -0.7625945, + "y": 18.5798 + }, + { + "x": 15.58506, + "y": 11.27319 + }, + { + "x": 5.403196, + "y": 11.22043 + }, + { + "x": -1.124667, + "y": 31.28172 + }, + { + "x": 6.120589, + "y": 10.16824 + }, + { + "x": 6.07585, + "y": 31.160290000000003 + }, + { + "x": -8.399909, + "y": 8.830895 + }, + { + "x": 2.199297, + "y": 12.84548 + }, + { + "x": 8.845364, + "y": 21.62596 + }, + { + "x": -14.18104, + "y": 1.871214 + }, + { + "x": 34.64086, + "y": 11.64993 + }, + { + "x": -0.7696695, + "y": 8.42469 + }, + { + "x": -6.12447, + "y": 23.05465 + }, + { + "x": -14.651420000000002, + "y": 10.9695 + }, + { + "x": 11.58703, + "y": 14.496579999999998 + }, + { + "x": 0.8204501000000001, + "y": 10.62322 + }, + { + "x": 28.5049, + "y": 10.30336 + }, + { + "x": -8.36784, + "y": 4.386019 + }, + { + "x": 32.45148, + "y": 7.488422999999999 + }, + { + "x": 6.733567999999999, + "y": 18.12497 + }, + { + "x": 10.64451, + "y": 16.76856 + }, + { + "x": 3.2193240000000003, + "y": 19.57019 + }, + { + "x": 10.74578, + "y": 27.00378 + }, + { + "x": 4.207717, + "y": 2.8513580000000003 + }, + { + "x": 13.87413, + "y": 13.78015 + }, + { + "x": -10.31962, + "y": 15.46054 + }, + { + "x": 11.65267, + "y": 1.7431299999999998 + }, + { + "x": 25.78439, + "y": 2.961885 + }, + { + "x": 12.48763, + "y": 18.15628 + }, + { + "x": 7.276056, + "y": 14.082579999999998 + }, + { + "x": 9.188286, + "y": 18.24487 + }, + { + "x": 7.066136, + "y": 17.03944 + }, + { + "x": 2.462034, + "y": 7.644941999999999 + }, + { + "x": 12.10048, + "y": 15.32802 + }, + { + "x": -0.531199, + "y": 13.14534 + }, + { + "x": 10.19152, + "y": 5.414251999999999 + }, + { + "x": 8.34839, + "y": 17.09359 + }, + { + "x": -7.409304, + "y": 15.4642 + }, + { + "x": 15.994229999999998, + "y": 13.51288 + }, + { + "x": -6.608865, + "y": -0.9393074 + }, + { + "x": 13.86558, + "y": 6.094001 + }, + { + "x": 24.64994, + "y": 6.494246 + }, + { + "x": 20.51858, + "y": 17.59508 + }, + { + "x": 11.26143, + "y": 2.0136830000000003 + }, + { + "x": 5.034868, + "y": 7.499159 + }, + { + "x": 1.19408, + "y": 23.50754 + }, + { + "x": 13.19178, + "y": 12.76363 + }, + { + "x": 9.728273, + "y": 11.80716 + }, + { + "x": 13.9332, + "y": 15.7472 + }, + { + "x": 18.43648, + "y": 12.18253 + }, + { + "x": 12.60749, + "y": 32.6225 + }, + { + "x": 6.429051, + "y": 1.972634 + }, + { + "x": 12.33216, + "y": -14.739579999999998 + }, + { + "x": 17.02514, + "y": 8.819268 + }, + { + "x": 39.89024000000001, + "y": 23.99687 + }, + { + "x": 20.98933, + "y": 17.29635 + }, + { + "x": 11.65338, + "y": -5.657587 + }, + { + "x": 15.09138, + "y": 25.02662 + }, + { + "x": 11.22707, + "y": -8.075130999999999 + }, + { + "x": 10.76558, + "y": -4.988425 + }, + { + "x": 3.910868, + "y": 18.41193 + }, + { + "x": 9.769555, + "y": 15.26871 + }, + { + "x": 12.98944, + "y": 5.868339 + }, + { + "x": 15.62113, + "y": 6.474136 + }, + { + "x": 10.13399, + "y": -2.499796 + }, + { + "x": 1.27228, + "y": 6.644602000000001 + }, + { + "x": 28.93972, + "y": 2.331538 + }, + { + "x": -10.50514, + "y": 20.75097 + }, + { + "x": 0.2242924, + "y": 22.1642 + }, + { + "x": 23.20978, + "y": 11.40963 + }, + { + "x": 17.61025, + "y": 1.974165 + }, + { + "x": 7.3795600000000015, + "y": -5.537147 + }, + { + "x": 10.10124, + "y": 5.6806550000000025 + }, + { + "x": 18.15361, + "y": 9.892188 + }, + { + "x": 21.83601, + "y": 26.09115 + }, + { + "x": 19.94091, + "y": 14.92146 + }, + { + "x": -1.475135, + "y": 8.28278 + }, + { + "x": -7.943030999999999, + "y": -3.830219 + }, + { + "x": 11.30458, + "y": 8.819061999999997 + }, + { + "x": 20.7643, + "y": 6.118451 + }, + { + "x": 12.46828, + "y": 7.275092999999999 + }, + { + "x": 16.64017, + "y": 1.672324 + }, + { + "x": -11.45466, + "y": 7.741682000000001 + }, + { + "x": 7.891755, + "y": -8.190833 + }, + { + "x": 5.2950300000000015, + "y": 24.11116 + }, + { + "x": 6.695052, + "y": 20.8704 + }, + { + "x": 5.536268, + "y": 15.65921 + }, + { + "x": -1.7861470000000002, + "y": 18.38471 + }, + { + "x": 10.10925, + "y": 19.378120000000006 + }, + { + "x": 12.36446, + "y": 25.65443 + }, + { + "x": 24.26076, + "y": 6.211672 + }, + { + "x": -2.913374, + "y": -0.5345634 + }, + { + "x": 19.30486, + "y": 14.99081 + }, + { + "x": -7.134083, + "y": -5.31856 + }, + { + "x": 6.658128, + "y": -0.8207126 + }, + { + "x": 13.56779, + "y": 3.181591 + }, + { + "x": 9.165157, + "y": 12.44468 + }, + { + "x": 16.576520000000002, + "y": 19.44045 + }, + { + "x": 13.04035, + "y": 25.82305 + }, + { + "x": 12.10189, + "y": -7.604383 + }, + { + "x": 3.820956, + "y": 7.389069 + }, + { + "x": 10.48589, + "y": 11.97492 + }, + { + "x": 15.89318, + "y": 17.60414 + }, + { + "x": 4.465372, + "y": 18.83929 + }, + { + "x": 6.583345, + "y": 25.99912 + }, + { + "x": -3.657566000000001, + "y": 8.821053 + }, + { + "x": 9.940546, + "y": -12.20743 + }, + { + "x": 28.13562, + "y": -7.671817999999999 + }, + { + "x": 7.351463000000002, + "y": 3.724133 + }, + { + "x": 25.14936, + "y": 4.756451 + }, + { + "x": -6.347524, + "y": 11.70047 + }, + { + "x": 8.469816, + "y": 1.854826 + }, + { + "x": 15.9227, + "y": 21.05449 + }, + { + "x": 13.16243, + "y": 22.88495 + }, + { + "x": 6.61163, + "y": 7.602461999999999 + }, + { + "x": 14.55212, + "y": -1.466516 + }, + { + "x": 5.984364, + "y": 2.761451 + }, + { + "x": -2.9907470000000003, + "y": 18.67975 + }, + { + "x": 10.47763, + "y": 13.9604 + }, + { + "x": 15.70686, + "y": 3.711452 + }, + { + "x": 31.10299, + "y": 3.897385 + }, + { + "x": -0.2682848, + "y": 14.07392 + }, + { + "x": 15.77137, + "y": 3.525233 + }, + { + "x": -4.961974, + "y": 27.05419 + }, + { + "x": 10.78593, + "y": 2.022093 + }, + { + "x": 18.0671, + "y": 31.1079 + }, + { + "x": 7.007197, + "y": 16.15708 + }, + { + "x": 5.3245830000000005, + "y": 16.398020000000002 + }, + { + "x": 25.69982000000001, + "y": 3.056635 + }, + { + "x": 20.72, + "y": 23.58926 + }, + { + "x": 2.090151, + "y": 9.11213 + }, + { + "x": 14.57106, + "y": -6.9908550000000025 + }, + { + "x": 15.51143, + "y": -5.554229 + }, + { + "x": 25.34928, + "y": 25.96264 + }, + { + "x": -2.523716, + "y": 6.6824179999999975 + }, + { + "x": -0.2446706, + "y": -0.7271909000000001 + }, + { + "x": -3.787227, + "y": 2.679385 + }, + { + "x": 4.1469190000000005, + "y": 13.84954 + }, + { + "x": 3.629787, + "y": -4.12287 + }, + { + "x": 27.08326, + "y": 19.22561 + }, + { + "x": 9.194675, + "y": 18.3967 + }, + { + "x": 12.34312, + "y": 2.642345 + }, + { + "x": 7.808153999999999, + "y": 4.437537 + }, + { + "x": 11.60988, + "y": 7.2919990000000015 + }, + { + "x": 5.989497, + "y": 8.107000000000001 + }, + { + "x": 4.259951999999998, + "y": 9.585877 + }, + { + "x": 16.388460000000002, + "y": 16.90853 + }, + { + "x": 5.568457, + "y": 7.2605520000000014 + }, + { + "x": 22.8137, + "y": 7.456842 + }, + { + "x": 14.04878, + "y": 15.9274 + }, + { + "x": 3.027084, + "y": 7.603089999999999 + }, + { + "x": 18.73794, + "y": 0.02478778 + }, + { + "x": 28.05616, + "y": 31.56779 + }, + { + "x": -0.3963638, + "y": -3.104964 + }, + { + "x": -1.199626, + "y": 12.69042 + }, + { + "x": 0.7270734000000001, + "y": 2.26189 + }, + { + "x": 27.091590000000004, + "y": 15.82479 + }, + { + "x": 8.936564, + "y": 4.499611 + }, + { + "x": 18.23345, + "y": 15.64262 + }, + { + "x": -0.429218, + "y": 2.211029 + }, + { + "x": 15.6607, + "y": 19.98972 + }, + { + "x": 14.23374, + "y": 15.76271 + }, + { + "x": 5.829822, + "y": 10.34468 + }, + { + "x": 4.230915, + "y": 1.735521 + }, + { + "x": 12.19179, + "y": 15.03855 + }, + { + "x": 5.103175, + "y": 3.64185 + }, + { + "x": 7.088660000000001, + "y": 6.2657 + }, + { + "x": 0.01341287, + "y": 14.39395 + }, + { + "x": 16.070510000000002, + "y": 12.18371 + }, + { + "x": 31.6029, + "y": 8.55297 + }, + { + "x": -14.94727, + "y": 16.5969 + }, + { + "x": 38.0434, + "y": 2.138592 + }, + { + "x": 24.30645, + "y": 7.067761 + }, + { + "x": 29.12768, + "y": 5.9111660000000015 + }, + { + "x": 2.734299, + "y": 9.551941 + }, + { + "x": 5.490974, + "y": 15.10988 + }, + { + "x": 25.76946, + "y": 3.324707 + }, + { + "x": 15.67774, + "y": 28.04655 + }, + { + "x": 27.45951, + "y": 4.004603 + }, + { + "x": 6.71577, + "y": 17.91905 + }, + { + "x": 4.453012, + "y": 4.265516000000001 + }, + { + "x": 21.77856, + "y": 12.28597 + }, + { + "x": 12.709, + "y": 12.25582 + }, + { + "x": 6.4600269999999975, + "y": 2.503197 + }, + { + "x": -8.207786, + "y": 27.72911 + }, + { + "x": 9.914433, + "y": 14.1201 + }, + { + "x": 14.48534, + "y": 4.178134 + }, + { + "x": 15.60438, + "y": 1.94312 + }, + { + "x": -1.809368, + "y": 9.6628 + }, + { + "x": 16.42695, + "y": -3.171427 + }, + { + "x": 6.084253, + "y": 10.33377 + }, + { + "x": 8.627294000000001, + "y": -2.30743 + }, + { + "x": 14.28665, + "y": 3.929615 + }, + { + "x": -11.54532, + "y": -20.01888 + }, + { + "x": 5.575772, + "y": 10.67374 + }, + { + "x": -2.537058, + "y": 10.25853 + }, + { + "x": 20.09051, + "y": 9.33872 + }, + { + "x": -8.85235, + "y": 13.48051 + }, + { + "x": 4.209417, + "y": 17.801070000000006 + }, + { + "x": 10.57944, + "y": 13.80524 + }, + { + "x": 1.86462, + "y": 11.39824 + }, + { + "x": 10.84852, + "y": 18.48534 + }, + { + "x": -0.7703359000000001, + "y": 24.88074 + }, + { + "x": 14.36989, + "y": 10.3415 + }, + { + "x": 1.489437, + "y": -4.19631 + }, + { + "x": 26.44959, + "y": 3.562471 + }, + { + "x": -4.266789, + "y": 3.653826 + }, + { + "x": 8.976836, + "y": 18.40393 + }, + { + "x": 20.77485, + "y": 13.18247 + }, + { + "x": 27.63714, + "y": 19.13911 + }, + { + "x": 16.29336, + "y": 8.550991999999999 + }, + { + "x": 16.87829, + "y": 14.83276 + }, + { + "x": 16.82551, + "y": 9.976617 + }, + { + "x": 5.165351, + "y": 6.9856 + }, + { + "x": -0.1216837, + "y": 14.117770000000002 + }, + { + "x": -8.032164999999999, + "y": 11.65195 + }, + { + "x": -0.7711908000000001, + "y": 9.478467 + }, + { + "x": 7.822278, + "y": 4.63563 + }, + { + "x": -2.542693, + "y": 31.29946 + }, + { + "x": 12.41543, + "y": 10.05657 + }, + { + "x": 10.44706, + "y": 6.147121 + }, + { + "x": 10.02766, + "y": 15.330329999999998 + }, + { + "x": 15.52898, + "y": 5.241399 + }, + { + "x": 9.747575, + "y": 11.99029 + }, + { + "x": 19.98159, + "y": 14.5416 + }, + { + "x": 18.364320000000006, + "y": -4.5937800000000015 + }, + { + "x": 13.22721, + "y": 7.873434 + }, + { + "x": -0.5568769, + "y": 6.233604 + }, + { + "x": 7.476011, + "y": 16.644470000000002 + }, + { + "x": -2.541061, + "y": 16.41452 + }, + { + "x": 14.30498, + "y": 11.84888 + }, + { + "x": 3.967357, + "y": 20.72875 + }, + { + "x": 0.2271643, + "y": 29.08483 + }, + { + "x": 11.57322, + "y": 14.5351 + }, + { + "x": 2.318771, + "y": 19.85869 + }, + { + "x": 1.748142, + "y": 10.93859 + }, + { + "x": 17.782529999999994, + "y": 4.558751999999999 + }, + { + "x": -4.290225, + "y": 4.425946 + }, + { + "x": 16.53104, + "y": 4.671925 + }, + { + "x": 7.546088, + "y": 10.27894 + }, + { + "x": 13.152029999999998, + "y": 8.540096 + }, + { + "x": 0.5304746, + "y": 18.33461 + }, + { + "x": 21.35885, + "y": 27.10033 + }, + { + "x": -0.5274979999999999, + "y": 17.29681 + }, + { + "x": 12.94586, + "y": 12.23683 + }, + { + "x": 20.56008, + "y": -0.5277433000000001 + }, + { + "x": 0.369141, + "y": -4.90859 + }, + { + "x": 10.88581, + "y": -2.084885 + }, + { + "x": 1.047853, + "y": 14.6625 + }, + { + "x": 17.284689999999998, + "y": 1.17794 + }, + { + "x": 8.224514, + "y": 18.21265 + }, + { + "x": 18.79663, + "y": 1.558912 + }, + { + "x": 2.294629, + "y": 11.46264 + }, + { + "x": 13.16382, + "y": 15.70806 + }, + { + "x": 11.96874, + "y": 22.31844 + }, + { + "x": 18.1468, + "y": 1.836594 + }, + { + "x": 6.30985, + "y": 10.4237 + }, + { + "x": 12.49809, + "y": 13.02343 + }, + { + "x": 6.254294, + "y": 28.35686 + }, + { + "x": 20.57987, + "y": 19.25847000000001 + }, + { + "x": -0.675866, + "y": 6.132365 + }, + { + "x": -2.52902, + "y": 29.84877 + }, + { + "x": 2.531129, + "y": 31.62439 + }, + { + "x": 16.98884, + "y": 14.57923 + }, + { + "x": 2.599834, + "y": 20.39453 + }, + { + "x": 6.326382, + "y": 0.826507 + }, + { + "x": 13.8971, + "y": 7.505789999999997 + }, + { + "x": -5.493487, + "y": 19.43579 + }, + { + "x": 21.96003, + "y": 24.61082 + }, + { + "x": 7.303667, + "y": 2.841022 + }, + { + "x": 22.35765, + "y": 1.493998 + }, + { + "x": 2.104918, + "y": 5.705926 + }, + { + "x": 26.18462, + "y": -9.62667 + }, + { + "x": 20.80766, + "y": 10.34603 + }, + { + "x": 10.57028, + "y": 34.39865 + }, + { + "x": -7.880563, + "y": 13.95659 + }, + { + "x": 6.534681, + "y": 16.05914 + }, + { + "x": 6.421189, + "y": 22.4082 + }, + { + "x": 2.5363290000000003, + "y": 2.955975 + }, + { + "x": 17.029429999999998, + "y": 29.76824 + }, + { + "x": -0.4862340999999999, + "y": 12.23679 + }, + { + "x": 1.188364, + "y": 8.102704 + }, + { + "x": -3.906957, + "y": 5.578883 + }, + { + "x": 5.441873, + "y": 5.874897 + }, + { + "x": 18.66013, + "y": -4.470882 + }, + { + "x": 13.33514, + "y": 3.557717 + }, + { + "x": 24.12527, + "y": 18.52547 + }, + { + "x": 12.98691, + "y": 17.43439 + }, + { + "x": 13.358770000000002, + "y": 9.173119 + }, + { + "x": 13.41857, + "y": -0.07619125 + }, + { + "x": 5.2243559999999984, + "y": 22.71993 + }, + { + "x": 10.34212, + "y": 16.27103 + }, + { + "x": -0.3693704, + "y": 11.25666 + }, + { + "x": 12.91639, + "y": 31.99353 + }, + { + "x": 0.9090181, + "y": 24.91849 + }, + { + "x": -1.409272, + "y": 9.203924 + }, + { + "x": -4.365977, + "y": 16.916610000000002 + }, + { + "x": 10.25595, + "y": 22.35262 + }, + { + "x": 12.43669, + "y": 10.23768 + }, + { + "x": -1.170456, + "y": 15.72802 + }, + { + "x": -6.2296010000000015, + "y": 23.02026 + }, + { + "x": 9.663633, + "y": 25.29418 + }, + { + "x": 9.05127, + "y": 12.58227 + }, + { + "x": 0.8767106, + "y": 20.08131 + }, + { + "x": 4.492934, + "y": 16.617639999999998 + }, + { + "x": 15.53079, + "y": 10.37215 + }, + { + "x": 0.789848, + "y": 22.08501 + }, + { + "x": 15.88278, + "y": 10.7026 + }, + { + "x": 15.65385, + "y": 1.855822 + }, + { + "x": 7.006049000000001, + "y": 1.034778 + }, + { + "x": 18.06041, + "y": -0.4099859 + }, + { + "x": 19.50145, + "y": 22.84672 + }, + { + "x": 14.34475, + "y": -0.5536328 + }, + { + "x": 6.584492, + "y": 24.95815 + }, + { + "x": 0.7217060000000001, + "y": 16.4536 + }, + { + "x": 8.034842, + "y": 9.826132 + }, + { + "x": 22.07318, + "y": 10.31959 + }, + { + "x": 8.208789999999999, + "y": 16.102610000000002 + }, + { + "x": -0.6540285, + "y": 7.418589999999999 + }, + { + "x": 33.90343, + "y": 3.274898 + }, + { + "x": 15.558320000000002, + "y": 13.55292 + }, + { + "x": 7.387878, + "y": 15.86786 + }, + { + "x": 5.051225, + "y": 16.534370000000006 + }, + { + "x": 5.229687, + "y": 18.39176 + }, + { + "x": 9.339954, + "y": 9.981995 + }, + { + "x": 14.02917, + "y": 2.41937 + }, + { + "x": 3.084545, + "y": 30.35293 + }, + { + "x": -9.022234, + "y": 3.566726 + }, + { + "x": 8.187902000000001, + "y": 10.07435 + }, + { + "x": 4.389926, + "y": 10.11696 + }, + { + "x": 17.49107, + "y": 9.631412 + }, + { + "x": 25.94192, + "y": 6.535813 + }, + { + "x": 14.06103, + "y": 2.905847 + }, + { + "x": 4.658055, + "y": -5.7647650000000015 + }, + { + "x": 19.84404, + "y": 19.12729 + }, + { + "x": 15.56143, + "y": 9.62353 + }, + { + "x": 7.178256, + "y": 14.85566 + }, + { + "x": 22.64227, + "y": 4.81697 + }, + { + "x": -7.8042880000000014, + "y": -1.111585 + }, + { + "x": -5.118906, + "y": 7.387376 + }, + { + "x": 6.152764, + "y": 14.22517 + }, + { + "x": 8.551857, + "y": 24.93599 + }, + { + "x": 3.134369, + "y": -6.632367 + }, + { + "x": -1.164893, + "y": 18.86306 + }, + { + "x": 29.06922, + "y": 31.39812 + }, + { + "x": 7.826419, + "y": 39.47855 + }, + { + "x": 29.47485, + "y": 32.19725 + } + ] + }, + { + "clusterNr": 1, + "centroid": { + "x": 69.92418447478987, + "y": -10.119641194361344 + }, + "points": [ + { + "x": 36.17882, + "y": -22.1776 + }, + { + "x": 50.97437, + "y": 19.26007 + }, + { + "x": 68.77616, + "y": -23.90883 + }, + { + "x": 56.22534, + "y": -5.294665 + }, + { + "x": 84.62974, + "y": -8.592495 + }, + { + "x": 95.91765, + "y": -17.08491 + }, + { + "x": 66.93266, + "y": -3.231932 + }, + { + "x": 68.5361, + "y": -26.18595 + }, + { + "x": 76.53591, + "y": -3.304326 + }, + { + "x": 76.23439, + "y": -11.4189 + }, + { + "x": 54.16949, + "y": -19.01123 + }, + { + "x": 72.58261999999998, + "y": -16.83923 + }, + { + "x": 81.56219, + "y": -1.6943830000000002 + }, + { + "x": 67.99164, + "y": -17.64808 + }, + { + "x": 64.71255, + "y": -14.86299 + }, + { + "x": 70.76205, + "y": -13.4053 + }, + { + "x": 80.15953, + "y": -1.895146 + }, + { + "x": 64.54890999999999, + "y": -1.18837 + }, + { + "x": 72.76769, + "y": -1.913954 + }, + { + "x": 79.9837, + "y": -20.64003 + }, + { + "x": 79.13871, + "y": 3.93355 + }, + { + "x": 44.28213, + "y": 1.785785 + }, + { + "x": 64.1403, + "y": -9.613207 + }, + { + "x": 59.16926, + "y": 13.10082 + }, + { + "x": 81.54203000000003, + "y": 8.749848 + }, + { + "x": 74.12215, + "y": -22.66961 + }, + { + "x": 69.51984, + "y": -12.94162 + }, + { + "x": 80.76501999999998, + "y": -7.238871 + }, + { + "x": 54.98248, + "y": -5.827399 + }, + { + "x": 63.85516, + "y": -1.502977 + }, + { + "x": 70.24579, + "y": -22.48083 + }, + { + "x": 64.31788, + "y": -12.37871 + }, + { + "x": 86.6356, + "y": -20.3488 + }, + { + "x": 84.94551, + "y": -11.81974 + }, + { + "x": 84.22009, + "y": 0.2136558 + }, + { + "x": 64.29858, + "y": -7.7486380000000015 + }, + { + "x": 78.10973, + "y": -14.83134 + }, + { + "x": 75.86112, + "y": -11.63541 + }, + { + "x": 90.31363, + "y": -6.734307 + }, + { + "x": 62.72575, + "y": -18.50824 + }, + { + "x": 75.54213, + "y": -4.170342 + }, + { + "x": 65.45658, + "y": -10.57994 + }, + { + "x": 61.91086, + "y": -20.55287 + }, + { + "x": 59.13503000000001, + "y": -18.54382 + }, + { + "x": 60.52482, + "y": 4.0029580000000005 + }, + { + "x": 80.68502, + "y": -10.62564 + }, + { + "x": 66.77925, + "y": -6.613982000000001 + }, + { + "x": 66.15932, + "y": -12.41949 + }, + { + "x": 66.32986, + "y": -0.9856625 + }, + { + "x": 63.90113, + "y": -8.54786 + }, + { + "x": 82.86773000000002, + "y": -7.530378 + }, + { + "x": 85.21556, + "y": -24.69871 + }, + { + "x": 67.60797, + "y": 6.669538 + }, + { + "x": 66.35771, + "y": -24.43254 + }, + { + "x": 65.34889, + "y": -16.15385 + }, + { + "x": 95.9356, + "y": -13.87495 + }, + { + "x": 55.30122, + "y": -3.164437 + }, + { + "x": 53.70588000000001, + "y": -22.06458 + }, + { + "x": 58.04943000000001, + "y": -2.860465 + }, + { + "x": 75.83075, + "y": -11.85008 + }, + { + "x": 61.31218000000001, + "y": -19.0784 + }, + { + "x": 77.7234, + "y": -2.877346 + }, + { + "x": 85.97015999999998, + "y": -17.81126 + }, + { + "x": 68.26375999999999, + "y": -19.15556 + }, + { + "x": 77.10473, + "y": -19.01528 + }, + { + "x": 78.19131999999998, + "y": -8.509058 + }, + { + "x": 65.10429, + "y": -3.43562 + }, + { + "x": 79.52807, + "y": -27.63379 + }, + { + "x": 75.18258, + "y": -6.52501 + }, + { + "x": 73.22818000000002, + "y": -3.601662 + }, + { + "x": 67.87865, + "y": 6.6700399999999975 + }, + { + "x": 67.49999, + "y": -3.656658 + }, + { + "x": 68.73451, + "y": -14.8505 + }, + { + "x": 68.80344000000001, + "y": 0.2036219 + }, + { + "x": 70.23388, + "y": -1.111902 + }, + { + "x": 74.11479, + "y": -7.362882000000001 + }, + { + "x": 52.94662, + "y": -26.11158 + }, + { + "x": 61.4234, + "y": 4.10658 + }, + { + "x": 75.64492, + "y": -27.29068 + }, + { + "x": 70.19157, + "y": -15.42674 + }, + { + "x": 57.02136, + "y": -28.37956 + }, + { + "x": 62.74637, + "y": -13.188 + }, + { + "x": 65.85207, + "y": -20.20264 + }, + { + "x": 74.1682, + "y": -9.089777 + }, + { + "x": 69.75043000000001, + "y": -0.3842613 + }, + { + "x": 57.04818, + "y": -16.48449 + }, + { + "x": 78.25997, + "y": -7.99833 + }, + { + "x": 63.72304000000001, + "y": -24.23505 + }, + { + "x": 64.25357, + "y": -12.80524 + }, + { + "x": 60.51129, + "y": -0.3604612 + }, + { + "x": 64.83588, + "y": -2.828358 + }, + { + "x": 64.00904, + "y": -28.74335 + }, + { + "x": 84.36928, + "y": 1.672451 + }, + { + "x": 65.89381999999999, + "y": -9.091981 + }, + { + "x": 66.97235, + "y": -19.93247 + }, + { + "x": 84.08383, + "y": 6.8520119999999975 + }, + { + "x": 68.23765, + "y": 2.762476 + }, + { + "x": 72.25073, + "y": -17.15958 + }, + { + "x": 55.23472, + "y": 3.789266000000002 + }, + { + "x": 75.93697, + "y": -4.40856 + }, + { + "x": 68.67339, + "y": -4.801611 + }, + { + "x": 56.01145, + "y": -17.8486 + }, + { + "x": 77.52585, + "y": -15.70033 + }, + { + "x": 88.95076999999998, + "y": -19.44843 + }, + { + "x": 61.68006999999999, + "y": 8.509057 + }, + { + "x": 94.70014, + "y": -6.385033 + }, + { + "x": 66.70215, + "y": -29.732640000000004 + }, + { + "x": 77.82463, + "y": -10.06171 + }, + { + "x": 87.91064, + "y": -30.96477 + }, + { + "x": 61.9166, + "y": -8.827060000000003 + }, + { + "x": 80.87708, + "y": -0.7162395 + }, + { + "x": 80.89673, + "y": -23.38986 + }, + { + "x": 66.70298000000001, + "y": 4.803512 + }, + { + "x": 63.19015, + "y": -20.61243 + }, + { + "x": 76.81371999999998, + "y": -26.90243 + }, + { + "x": 65.06876, + "y": 4.386009 + }, + { + "x": 95.32207, + "y": -16.98335 + }, + { + "x": 57.72156999999999, + "y": -15.60494 + }, + { + "x": 55.37355, + "y": 0.1582912999999999 + }, + { + "x": 69.38056999999999, + "y": -12.99076 + }, + { + "x": 67.81506, + "y": -4.811255 + }, + { + "x": 76.97593, + "y": -8.36036 + }, + { + "x": 77.27475, + "y": 4.903346 + }, + { + "x": 83.35947, + "y": -22.26367 + }, + { + "x": 61.09789, + "y": -14.29766 + }, + { + "x": 65.82687, + "y": -19.21419 + }, + { + "x": 74.95858, + "y": -4.134062 + }, + { + "x": 62.60687, + "y": 13.20539 + }, + { + "x": 51.71922, + "y": -0.1788583 + }, + { + "x": 74.93252, + "y": -0.5864232 + }, + { + "x": 79.38506, + "y": -19.2217 + }, + { + "x": 75.77722, + "y": -26.50406 + }, + { + "x": 58.46341999999999, + "y": -15.13272 + }, + { + "x": 75.47081, + "y": -22.60266 + }, + { + "x": 44.91439, + "y": -5.197128 + }, + { + "x": 68.68961, + "y": 12.47448 + }, + { + "x": 61.03369, + "y": 0.7950335999999999 + }, + { + "x": 58.83893000000001, + "y": -2.276435 + }, + { + "x": 82.02278000000003, + "y": -8.854353999999997 + }, + { + "x": 70.77445999999998, + "y": -12.75299 + }, + { + "x": 79.77535999999998, + "y": -28.66915 + }, + { + "x": 74.93503, + "y": -3.32777 + }, + { + "x": 72.12925, + "y": -12.27785 + }, + { + "x": 80.84456999999998, + "y": -2.636685 + }, + { + "x": 57.63159, + "y": -1.221671 + }, + { + "x": 80.52416, + "y": 6.845383 + }, + { + "x": 63.2352, + "y": -24.72682 + }, + { + "x": 82.18422, + "y": -29.512190000000004 + }, + { + "x": 97.35694, + "y": -2.163071 + }, + { + "x": 60.78475, + "y": -31.03982 + }, + { + "x": 70.74291, + "y": -22.15998 + }, + { + "x": 74.0169, + "y": 14.51656 + }, + { + "x": 66.91939, + "y": -12.24789 + }, + { + "x": 76.09503000000002, + "y": 4.343312999999998 + }, + { + "x": 81.78097, + "y": -8.727155999999999 + }, + { + "x": 80.09553000000002, + "y": -4.232298 + }, + { + "x": 73.32889, + "y": 1.538375 + }, + { + "x": 62.58947, + "y": 4.468431 + }, + { + "x": 67.35439000000001, + "y": -16.61995 + }, + { + "x": 86.32658, + "y": -14.45837 + }, + { + "x": 71.04987, + "y": -2.683244 + }, + { + "x": 83.78761999999998, + "y": 26.49733 + }, + { + "x": 74.85746999999998, + "y": -5.0595050000000015 + }, + { + "x": 77.72216, + "y": 6.093524 + }, + { + "x": 68.97789, + "y": -4.123292 + }, + { + "x": 59.17706999999999, + "y": -14.73758 + }, + { + "x": 50.49705, + "y": -17.90728 + }, + { + "x": 80.156, + "y": 6.28412 + }, + { + "x": 73.31786, + "y": -9.305126 + }, + { + "x": 59.61196, + "y": -4.425068 + }, + { + "x": 68.88152, + "y": -9.893832000000002 + }, + { + "x": 88.66383, + "y": -7.9094380000000015 + }, + { + "x": 54.22847, + "y": -16.32238 + }, + { + "x": 71.32836, + "y": 2.896152 + }, + { + "x": 77.83041999999998, + "y": -5.410922 + }, + { + "x": 72.29527, + "y": -1.6438080000000002 + }, + { + "x": 60.87722, + "y": -22.1124 + }, + { + "x": 90.33483, + "y": -5.948239 + }, + { + "x": 74.31378000000002, + "y": -20.85082 + }, + { + "x": 73.68491999999998, + "y": -4.392175 + }, + { + "x": 67.73080999999999, + "y": -18.78214 + }, + { + "x": 70.87401, + "y": -13.91332 + }, + { + "x": 58.89813, + "y": -1.263629 + }, + { + "x": 61.02101999999999, + "y": -13.00759 + }, + { + "x": 63.88495, + "y": 4.276434 + }, + { + "x": 60.26458, + "y": 0.7716272 + }, + { + "x": 70.30639000000001, + "y": -11.66815 + }, + { + "x": 73.19178000000002, + "y": -4.823114 + }, + { + "x": 58.26951, + "y": -13.58154 + }, + { + "x": 73.82600000000002, + "y": -5.296698999999999 + }, + { + "x": 76.70215999999998, + "y": -7.703344 + }, + { + "x": 69.07478, + "y": 2.6927380000000003 + }, + { + "x": 55.76127, + "y": -27.63965 + }, + { + "x": 84.63778, + "y": 0.841825 + }, + { + "x": 74.96148000000002, + "y": 11.91875 + }, + { + "x": 57.6636, + "y": -23.91239 + }, + { + "x": 64.04885, + "y": -6.910765 + }, + { + "x": 71.5033, + "y": -0.02369585 + }, + { + "x": 82.15275, + "y": -21.6081 + }, + { + "x": 63.34114, + "y": -25.3215 + }, + { + "x": 73.77465, + "y": -8.064701 + }, + { + "x": 72.78902, + "y": -25.23712 + }, + { + "x": 60.628, + "y": -17.69653 + }, + { + "x": 70.46724, + "y": -13.25096 + }, + { + "x": 71.33598, + "y": -35.30175999999999 + }, + { + "x": 78.18223, + "y": -4.003611 + }, + { + "x": 65.29634, + "y": -14.71507 + }, + { + "x": 79.06381, + "y": -17.52429 + }, + { + "x": 59.79717, + "y": -15.80204 + }, + { + "x": 77.98643, + "y": 0.14855 + }, + { + "x": 79.18679, + "y": -22.84098 + }, + { + "x": 61.1682, + "y": -17.87923 + }, + { + "x": 73.55363, + "y": 3.718564 + }, + { + "x": 71.21540999999998, + "y": -7.743013 + }, + { + "x": 72.69725, + "y": -10.52523 + }, + { + "x": 66.1658, + "y": 8.654269000000001 + }, + { + "x": 66.57901, + "y": -7.96869 + }, + { + "x": 77.53841, + "y": -7.255456 + }, + { + "x": 68.90079, + "y": -1.174505 + }, + { + "x": 75.15744000000002, + "y": -4.303189 + }, + { + "x": 60.93241, + "y": -19.6263 + }, + { + "x": 70.77526999999998, + "y": -15.19386 + }, + { + "x": 61.57277, + "y": -19.84966 + }, + { + "x": 74.40188, + "y": -12.65376 + }, + { + "x": 76.09886999999998, + "y": -8.812416 + }, + { + "x": 63.0071, + "y": 4.700768 + }, + { + "x": 55.08188000000001, + "y": -13.81331 + }, + { + "x": 62.74949, + "y": -7.885534 + }, + { + "x": 69.52172, + "y": -11.22383 + }, + { + "x": 72.21619, + "y": 1.537016 + }, + { + "x": 86.36201, + "y": -19.03397 + }, + { + "x": 57.06537, + "y": -8.751387 + }, + { + "x": 65.3979, + "y": -1.594234 + }, + { + "x": 62.21588000000001, + "y": -17.88168 + }, + { + "x": 66.55029, + "y": -26.34649000000001 + }, + { + "x": 63.71606, + "y": -2.147129 + }, + { + "x": 61.24889, + "y": 11.37515 + }, + { + "x": 67.01504, + "y": -13.9139 + }, + { + "x": 76.54024, + "y": 7.571401 + }, + { + "x": 51.77094, + "y": -18.34046 + }, + { + "x": 85.88293, + "y": 3.30276 + }, + { + "x": 61.10013000000001, + "y": -12.41815 + }, + { + "x": 59.85202, + "y": -5.652476 + }, + { + "x": 75.82624, + "y": -20.09061 + }, + { + "x": 61.68382, + "y": -13.309220000000002 + }, + { + "x": 57.11461, + "y": -14.71895 + }, + { + "x": 77.37225, + "y": -1.998448 + }, + { + "x": 56.9189, + "y": -5.607814 + }, + { + "x": 68.24065999999999, + "y": -16.7783 + }, + { + "x": 70.99341, + "y": -20.21861 + }, + { + "x": 55.90017, + "y": -24.42781 + }, + { + "x": 65.72708, + "y": -12.62672 + }, + { + "x": 86.9104, + "y": -2.218481 + }, + { + "x": 60.30796, + "y": -21.13974 + }, + { + "x": 58.89599000000001, + "y": -13.65608 + }, + { + "x": 64.42315, + "y": 2.896175 + }, + { + "x": 68.26449000000001, + "y": -1.292433 + }, + { + "x": 60.80457, + "y": -16.41014 + }, + { + "x": 74.24806, + "y": -23.90477000000001 + }, + { + "x": 68.40987, + "y": -1.351733 + }, + { + "x": 75.19914, + "y": -17.88874 + }, + { + "x": 53.99338, + "y": -16.79015 + }, + { + "x": 64.66423, + "y": -11.21753 + }, + { + "x": 78.41882, + "y": -8.131473 + }, + { + "x": 90.1256, + "y": -24.57763 + }, + { + "x": 78.52343, + "y": -23.97729 + }, + { + "x": 69.83008000000001, + "y": -6.202702 + }, + { + "x": 76.66716, + "y": -10.95484 + }, + { + "x": 73.33869, + "y": -14.50632 + }, + { + "x": 54.61538, + "y": 0.822026 + }, + { + "x": 75.07177, + "y": 2.72507 + }, + { + "x": 72.55125, + "y": 16.4744 + }, + { + "x": 75.25325, + "y": 4.462008999999999 + }, + { + "x": 63.05424, + "y": -12.70489 + }, + { + "x": 74.84572, + "y": -6.9136380000000015 + }, + { + "x": 81.29542, + "y": -18.13609 + }, + { + "x": 86.43307, + "y": 1.7146 + }, + { + "x": 58.70364, + "y": -4.059786 + }, + { + "x": 50.14929, + "y": -14.31598 + }, + { + "x": 63.98909, + "y": -11.18955 + }, + { + "x": 65.58124000000001, + "y": -11.16373 + }, + { + "x": 78.43384, + "y": 1.611536 + }, + { + "x": 81.6864, + "y": -7.565635 + }, + { + "x": 71.32661, + "y": -24.2114 + }, + { + "x": 56.50423000000001, + "y": -0.6708519000000001 + }, + { + "x": 66.49155, + "y": -11.93227 + }, + { + "x": 77.01996, + "y": -7.084207000000001 + }, + { + "x": 83.91402, + "y": -1.3721299999999998 + }, + { + "x": 69.80927, + "y": -12.62827 + }, + { + "x": 59.75429000000001, + "y": 1.039816 + }, + { + "x": 97.82028, + "y": -16.56395 + }, + { + "x": 91.93916, + "y": -1.150087 + }, + { + "x": 67.92403, + "y": -17.03266 + }, + { + "x": 61.81742, + "y": 9.498615 + }, + { + "x": 71.14845, + "y": -8.638981 + }, + { + "x": 66.59299, + "y": -32.46637 + }, + { + "x": 68.46967, + "y": -30.534990000000004 + }, + { + "x": 75.83458, + "y": -3.566499 + }, + { + "x": 79.48316, + "y": -30.800590000000003 + }, + { + "x": 63.92749, + "y": -11.3843 + }, + { + "x": 67.65975, + "y": -9.337537 + }, + { + "x": 67.92515999999999, + "y": 4.484799 + }, + { + "x": 65.09831, + "y": -11.52629 + }, + { + "x": 70.69653000000002, + "y": -15.150479999999998 + }, + { + "x": 77.50496, + "y": -9.722227 + }, + { + "x": 88.75939, + "y": -10.3208 + }, + { + "x": 66.10896, + "y": -26.77577 + }, + { + "x": 48.80508, + "y": -22.4844 + }, + { + "x": 77.87479, + "y": -5.751227 + }, + { + "x": 74.65789000000002, + "y": -8.919705 + }, + { + "x": 82.11505, + "y": -1.623908 + }, + { + "x": 73.36298000000002, + "y": -14.605429999999998 + }, + { + "x": 71.40567, + "y": -4.340033 + }, + { + "x": 58.62062, + "y": -10.19077 + }, + { + "x": 65.29805999999999, + "y": 2.156136 + }, + { + "x": 72.86081, + "y": -11.82809 + }, + { + "x": 71.3769, + "y": -9.252214 + }, + { + "x": 84.13731999999997, + "y": 8.626088000000001 + }, + { + "x": 70.62952, + "y": -29.13831 + }, + { + "x": 74.71705, + "y": -17.16086 + }, + { + "x": 69.74262, + "y": -8.386807000000001 + }, + { + "x": 72.60228000000002, + "y": -4.416258999999998 + }, + { + "x": 62.13006, + "y": -22.79853 + }, + { + "x": 60.11729, + "y": 11.88867 + }, + { + "x": 76.74555, + "y": -17.363889999999998 + }, + { + "x": 67.41577, + "y": -9.266467 + }, + { + "x": 73.11009, + "y": -23.10049 + }, + { + "x": 79.32548, + "y": -15.70281 + }, + { + "x": 104.3766, + "y": 4.351511 + }, + { + "x": 66.86716, + "y": -19.87777 + }, + { + "x": 89.33103, + "y": -12.80378 + }, + { + "x": 35.74094, + "y": -24.00127 + }, + { + "x": 76.09913, + "y": -18.21636 + }, + { + "x": 69.3201, + "y": -5.764337 + }, + { + "x": 64.45351, + "y": -9.646416 + }, + { + "x": 81.06175, + "y": -21.19148 + }, + { + "x": 58.83277, + "y": -3.300213 + }, + { + "x": 59.77071, + "y": -6.5734270000000015 + }, + { + "x": 69.73292, + "y": -22.09676 + }, + { + "x": 66.791, + "y": -10.47102 + }, + { + "x": 49.65516, + "y": -1.869738 + }, + { + "x": 70.70066, + "y": -15.89514 + }, + { + "x": 72.20053, + "y": -12.37627 + }, + { + "x": 65.95326, + "y": -16.931829999999998 + }, + { + "x": 74.20015, + "y": -14.89715 + }, + { + "x": 72.81212, + "y": -3.046355 + }, + { + "x": 57.88044, + "y": -4.081336 + }, + { + "x": 48.90072, + "y": -21.98084 + }, + { + "x": 61.67483000000001, + "y": 4.149319 + }, + { + "x": 72.80554000000002, + "y": -5.543254 + }, + { + "x": 82.24438, + "y": -8.71373 + }, + { + "x": 68.85194, + "y": -0.9684211 + }, + { + "x": 70.258, + "y": -5.573562 + }, + { + "x": 51.29503, + "y": 3.890627 + }, + { + "x": 71.87862, + "y": 1.95838 + }, + { + "x": 74.26682, + "y": 0.2268598 + }, + { + "x": 73.88967, + "y": -4.138421 + }, + { + "x": 72.43866, + "y": -8.702069999999999 + }, + { + "x": 68.84693, + "y": -4.473853 + }, + { + "x": 67.4579, + "y": -11.51909 + }, + { + "x": 63.23736, + "y": -4.332619 + }, + { + "x": 67.04571999999999, + "y": -8.749687 + }, + { + "x": 61.14106, + "y": -20.12918 + }, + { + "x": 59.06593, + "y": -36.59645 + }, + { + "x": 63.0932, + "y": -9.511965 + }, + { + "x": 64.19505, + "y": -4.122554 + }, + { + "x": 69.14381999999999, + "y": -6.864114999999999 + }, + { + "x": 68.2186, + "y": -13.96171 + }, + { + "x": 80.78811999999998, + "y": -21.61113 + }, + { + "x": 62.15595, + "y": -5.59855 + }, + { + "x": 76.2021, + "y": -0.3535414 + }, + { + "x": 67.71611999999999, + "y": -21.95391 + }, + { + "x": 66.87748, + "y": -13.76373 + }, + { + "x": 81.16841, + "y": -12.7322 + }, + { + "x": 77.52611999999998, + "y": -16.854770000000002 + }, + { + "x": 73.13333, + "y": -14.03496 + }, + { + "x": 62.926080000000006, + "y": -13.9975 + }, + { + "x": 51.79126, + "y": 6.185827 + }, + { + "x": 69.15686, + "y": -9.004087 + }, + { + "x": 62.27294000000001, + "y": -7.576707000000002 + }, + { + "x": 62.86968, + "y": -8.90002 + }, + { + "x": 59.75554, + "y": -18.64859 + }, + { + "x": 55.93825, + "y": -5.324996 + }, + { + "x": 63.37816, + "y": 8.626922 + }, + { + "x": 89.06512, + "y": -18.00787 + }, + { + "x": 59.49207, + "y": -21.839 + }, + { + "x": 63.0717, + "y": 4.1653 + }, + { + "x": 74.18266, + "y": -14.39385 + }, + { + "x": 72.99597, + "y": -21.99502 + }, + { + "x": 74.54878000000002, + "y": 0.68999 + }, + { + "x": 72.79072, + "y": -13.42379 + }, + { + "x": 68.58779, + "y": 0.4890194000000001 + }, + { + "x": 83.4991, + "y": -3.712483 + }, + { + "x": 85.60566, + "y": -2.347389 + }, + { + "x": 49.33336, + "y": -16.45131 + }, + { + "x": 80.25808, + "y": -17.90534 + }, + { + "x": 73.99424, + "y": -3.416731 + }, + { + "x": 71.49039, + "y": -32.68723 + }, + { + "x": 75.56421999999998, + "y": -35.10705 + }, + { + "x": 50.77177, + "y": -5.560257 + }, + { + "x": 63.31959000000001, + "y": 3.695687 + }, + { + "x": 62.63376, + "y": -20.60124 + }, + { + "x": 72.48474, + "y": -9.643281 + }, + { + "x": 55.5865, + "y": -23.30693 + }, + { + "x": 51.66027, + "y": -29.96612 + }, + { + "x": 53.65475, + "y": -5.412205999999999 + }, + { + "x": 89.75272, + "y": -8.296797999999999 + }, + { + "x": 60.46186, + "y": 2.98287 + }, + { + "x": 80.376, + "y": -11.60401 + }, + { + "x": 61.82471999999999, + "y": -13.03964 + }, + { + "x": 73.42504, + "y": -12.02837 + }, + { + "x": 72.77863, + "y": 1.591326 + }, + { + "x": 67.30395, + "y": -22.65711 + }, + { + "x": 71.1454, + "y": -6.820285 + }, + { + "x": 91.37652, + "y": -10.32453 + }, + { + "x": 70.45770999999998, + "y": -2.015341 + }, + { + "x": 65.35571, + "y": -2.156085 + }, + { + "x": 86.14405, + "y": -6.644713 + }, + { + "x": 40.98589000000001, + "y": -20.96894 + }, + { + "x": 85.28412, + "y": -16.273020000000002 + }, + { + "x": 84.69904, + "y": -11.24636 + }, + { + "x": 78.1619, + "y": -22.53974 + }, + { + "x": 63.30449, + "y": -7.1362830000000015 + }, + { + "x": 50.9626, + "y": -0.5868151999999999 + }, + { + "x": 78.5982, + "y": -24.0221 + }, + { + "x": 71.42413, + "y": -15.80383 + }, + { + "x": 73.3584, + "y": 1.431008 + }, + { + "x": 63.5102, + "y": -10.89118 + }, + { + "x": 64.3641, + "y": -38.68109000000001 + }, + { + "x": 79.91314, + "y": -16.899739999999998 + }, + { + "x": 70.61451, + "y": -13.64807 + }, + { + "x": 77.37191, + "y": -29.6917 + }, + { + "x": 62.43318000000001, + "y": 4.515735 + }, + { + "x": 66.53034, + "y": -23.73638 + }, + { + "x": 53.39924, + "y": -8.951078 + }, + { + "x": 82.79706999999998, + "y": -3.406174 + }, + { + "x": 65.8034, + "y": -11.19213 + }, + { + "x": 87.72446, + "y": -1.788042 + }, + { + "x": 68.37876999999999, + "y": -11.21265 + }, + { + "x": 76.46406999999998, + "y": 1.250499 + }, + { + "x": 67.35838000000001, + "y": -1.977294 + }, + { + "x": 89.75777, + "y": -20.19515 + }, + { + "x": 71.4421, + "y": -6.040679 + }, + { + "x": 74.56606, + "y": -8.156191999999999 + }, + { + "x": 68.46404, + "y": -7.4320179999999985 + }, + { + "x": 78.44227, + "y": -13.59282 + }, + { + "x": 73.10613000000002, + "y": 5.701017 + }, + { + "x": 62.34706, + "y": -22.54894 + }, + { + "x": 51.82533, + "y": -14.28696 + }, + { + "x": 70.39661, + "y": -5.694306 + }, + { + "x": 76.49829, + "y": -4.378538 + }, + { + "x": 61.48431, + "y": -16.319029999999998 + }, + { + "x": 61.80351999999999, + "y": 1.297201 + }, + { + "x": 76.0211, + "y": -7.230397999999999 + }, + { + "x": 60.64451, + "y": 7.604861 + }, + { + "x": 71.70814, + "y": -12.86116 + }, + { + "x": 76.83708, + "y": -18.12474 + }, + { + "x": 78.40621999999998, + "y": -18.09712 + }, + { + "x": 68.72024, + "y": -23.95237 + }, + { + "x": 50.06301, + "y": -20.20353 + }, + { + "x": 87.69691999999998, + "y": -11.42972 + }, + { + "x": 86.99996999999998, + "y": 4.574135 + }, + { + "x": 68.19161, + "y": -20.04976 + }, + { + "x": 68.08471, + "y": -28.09651 + }, + { + "x": 64.0625, + "y": -10.7499 + }, + { + "x": 74.93968000000002, + "y": -13.940029999999998 + }, + { + "x": 74.13194, + "y": -7.691431 + }, + { + "x": 67.39908, + "y": -22.57539 + }, + { + "x": 73.78174, + "y": 0.6641589 + }, + { + "x": 55.11437, + "y": -11.70788 + }, + { + "x": 82.80131999999998, + "y": -13.10405 + }, + { + "x": 61.3069, + "y": 7.839162 + }, + { + "x": 66.26919000000001, + "y": -2.282228 + }, + { + "x": 59.19792, + "y": -11.32849 + }, + { + "x": 62.44526, + "y": -30.15219 + }, + { + "x": 49.19779000000001, + "y": -11.71951 + }, + { + "x": 72.94774, + "y": -8.344704 + }, + { + "x": 59.87773000000001, + "y": -5.742763 + }, + { + "x": 73.47509000000002, + "y": -4.283149 + }, + { + "x": 85.36645, + "y": -16.46919 + }, + { + "x": 69.38539, + "y": -1.906945 + }, + { + "x": 62.15073, + "y": -5.052795 + }, + { + "x": 64.23725999999999, + "y": -13.3351 + }, + { + "x": 72.92104, + "y": 0.791644 + }, + { + "x": 77.48227, + "y": -23.13051 + }, + { + "x": 77.34316, + "y": 3.181548 + }, + { + "x": 69.85361, + "y": -9.066127 + }, + { + "x": 70.68101999999998, + "y": -3.58606 + }, + { + "x": 84.16232, + "y": -24.39767 + }, + { + "x": 57.46576, + "y": 4.544233999999999 + }, + { + "x": 63.88039000000001, + "y": 1.74088 + }, + { + "x": 92.76103, + "y": 1.320703 + }, + { + "x": 86.41515, + "y": -12.48442 + }, + { + "x": 63.23813000000001, + "y": 0.6457113 + }, + { + "x": 72.81642, + "y": -17.780910000000006 + }, + { + "x": 52.983230000000006, + "y": 1.240638 + }, + { + "x": 66.03696, + "y": -15.12986 + }, + { + "x": 63.82113, + "y": -8.541133 + }, + { + "x": 84.74937, + "y": -21.77988 + }, + { + "x": 66.82718, + "y": -18.49357 + }, + { + "x": 66.8739, + "y": -7.117552000000001 + }, + { + "x": 90.11309, + "y": -13.73802 + }, + { + "x": 43.88975, + "y": -13.82 + }, + { + "x": 81.08251, + "y": -12.44169 + }, + { + "x": 62.29297, + "y": -16.469920000000002 + }, + { + "x": 58.55329, + "y": -23.56855 + }, + { + "x": 56.00959, + "y": 8.877158999999997 + }, + { + "x": 76.57934, + "y": -6.1733970000000005 + }, + { + "x": 82.2019, + "y": -6.9652970000000005 + }, + { + "x": 73.04178, + "y": -14.76294 + }, + { + "x": 69.56355, + "y": -12.55183 + }, + { + "x": 52.04093, + "y": -14.04998 + }, + { + "x": 73.3532, + "y": -7.7899660000000015 + }, + { + "x": 63.90973, + "y": -12.61178 + }, + { + "x": 50.83435, + "y": -1.439128 + }, + { + "x": 72.19453, + "y": -16.442320000000002 + }, + { + "x": 74.73565, + "y": -25.90802 + }, + { + "x": 68.85865, + "y": -10.91415 + }, + { + "x": 80.10725, + "y": -4.844485 + }, + { + "x": 73.59379, + "y": -2.3005400000000003 + }, + { + "x": 64.91755, + "y": -17.796529999999994 + }, + { + "x": 69.18629, + "y": -1.3457290000000002 + }, + { + "x": 56.67511, + "y": -19.89974 + }, + { + "x": 63.84701, + "y": 7.070253 + }, + { + "x": 73.52853, + "y": -4.305105 + }, + { + "x": 77.77298, + "y": -20.97871 + }, + { + "x": 66.58747, + "y": -16.51202 + }, + { + "x": 74.68619, + "y": -13.78516 + }, + { + "x": 82.44135, + "y": -3.198811 + }, + { + "x": 52.30627, + "y": -19.96528 + }, + { + "x": 69.2922, + "y": -8.165172 + }, + { + "x": 64.40332, + "y": 11.5388 + }, + { + "x": 87.83745, + "y": -5.797536 + }, + { + "x": 73.06475999999998, + "y": 2.346044 + }, + { + "x": 58.63267, + "y": 1.1054 + }, + { + "x": 74.55995, + "y": -14.94582 + }, + { + "x": 74.27044000000002, + "y": -21.81354 + }, + { + "x": 50.25447, + "y": -9.793256 + }, + { + "x": 62.09311999999999, + "y": -22.10528 + }, + { + "x": 87.61305, + "y": 0.8871884 + }, + { + "x": 79.40338, + "y": 3.454682 + }, + { + "x": 77.56643000000003, + "y": 17.25978 + }, + { + "x": 87.67891, + "y": -5.012097 + }, + { + "x": 67.52089000000001, + "y": 0.5997717 + }, + { + "x": 79.92055, + "y": -2.785855 + }, + { + "x": 71.32548, + "y": -6.040786 + }, + { + "x": 57.68811, + "y": -26.8179 + }, + { + "x": 85.23694, + "y": -7.594192999999999 + }, + { + "x": 64.65368000000001, + "y": -8.68329 + }, + { + "x": 61.31142, + "y": 11.2666 + }, + { + "x": 59.06764, + "y": 7.5886520000000015 + }, + { + "x": 87.76017, + "y": -11.61341 + }, + { + "x": 68.24614, + "y": -26.37716 + }, + { + "x": 64.45452, + "y": -2.222824 + }, + { + "x": 65.53308, + "y": -29.09276 + }, + { + "x": 63.89614, + "y": -19.10272 + }, + { + "x": 80.11442, + "y": 13.05422 + }, + { + "x": 53.4408, + "y": -4.50005 + }, + { + "x": 71.92873, + "y": -16.93747 + }, + { + "x": 61.59669, + "y": -10.75492 + }, + { + "x": 66.93093, + "y": -13.782570000000002 + }, + { + "x": 50.34516, + "y": -9.613154 + }, + { + "x": 72.01345, + "y": -13.67514 + }, + { + "x": 83.8145, + "y": -24.73408 + }, + { + "x": 78.27926, + "y": -0.2117255999999999 + }, + { + "x": 63.37316, + "y": -5.140422 + }, + { + "x": 67.56707, + "y": 1.2630940000000002 + }, + { + "x": 78.30575999999998, + "y": -2.315313 + }, + { + "x": 64.15815, + "y": -9.960403 + }, + { + "x": 58.67935, + "y": -5.187703 + }, + { + "x": 84.99193000000002, + "y": -25.74853 + }, + { + "x": 66.11341, + "y": -4.922376 + }, + { + "x": 74.52394, + "y": -1.039614 + }, + { + "x": 70.64279, + "y": -8.465358 + }, + { + "x": 89.6064, + "y": 0.470834 + }, + { + "x": 76.0323, + "y": -3.837667 + }, + { + "x": 75.88329, + "y": -11.40071 + }, + { + "x": 91.41507, + "y": -18.58123 + }, + { + "x": 75.96584, + "y": -5.74556 + }, + { + "x": 56.82018000000001, + "y": -18.1518 + }, + { + "x": 65.26213, + "y": -1.156317 + }, + { + "x": 72.5354, + "y": -20.20325 + }, + { + "x": 42.97974, + "y": -8.860008 + }, + { + "x": 58.11489, + "y": -18.28166 + }, + { + "x": 73.26021999999998, + "y": -11.98803 + }, + { + "x": 77.94697, + "y": -12.41635 + }, + { + "x": 71.2361, + "y": -8.819086 + }, + { + "x": 80.56624000000002, + "y": 7.036737 + }, + { + "x": 88.41405999999998, + "y": -13.11624 + }, + { + "x": 72.93951, + "y": -8.774334 + }, + { + "x": 71.42486, + "y": -6.5686740000000015 + }, + { + "x": 85.37737, + "y": -2.574961 + }, + { + "x": 60.69893, + "y": 4.760236 + }, + { + "x": 84.41388, + "y": -6.6052880000000025 + }, + { + "x": 78.85013000000002, + "y": -11.48461 + }, + { + "x": 72.23626999999998, + "y": -3.3483300000000003 + }, + { + "x": 79.51451, + "y": -7.224457000000001 + }, + { + "x": 70.81756999999998, + "y": -20.52531 + }, + { + "x": 79.3355, + "y": -17.013379999999998 + }, + { + "x": 83.92007, + "y": -18.97531 + }, + { + "x": 64.99888, + "y": -4.225446 + }, + { + "x": 70.30046, + "y": 4.675978 + }, + { + "x": 72.4469, + "y": -14.50134 + }, + { + "x": 65.32914, + "y": -20.57936 + }, + { + "x": 69.68672, + "y": -8.770883999999999 + }, + { + "x": 82.80946999999998, + "y": -2.210701 + }, + { + "x": 66.12637, + "y": -24.65817 + }, + { + "x": 74.31614, + "y": 0.4964872 + }, + { + "x": 62.74274000000001, + "y": -19.14187 + }, + { + "x": 66.71625, + "y": -1.28301 + }, + { + "x": 52.76581, + "y": 2.2495990000000003 + }, + { + "x": 64.23697, + "y": 2.673515 + }, + { + "x": 82.93061999999998, + "y": -20.18061 + }, + { + "x": 36.50027, + "y": -21.49223 + }, + { + "x": 103.9198, + "y": -25.94061 + }, + { + "x": 78.92066, + "y": -12.20063 + }, + { + "x": 71.31289, + "y": 4.6782650000000015 + }, + { + "x": 70.89019, + "y": 15.4043 + }, + { + "x": 87.70451, + "y": -15.3165 + }, + { + "x": 58.66569000000001, + "y": -4.894761 + }, + { + "x": 65.94133000000001, + "y": -0.4717233 + }, + { + "x": 53.61496999999999, + "y": -20.94196 + }, + { + "x": 80.81969000000002, + "y": -30.37179 + }, + { + "x": 67.59589, + "y": -2.237453 + }, + { + "x": 70.45368, + "y": -14.35 + }, + { + "x": 52.61427, + "y": -5.968235 + }, + { + "x": 67.05726999999999, + "y": -18.36929 + }, + { + "x": 80.33527, + "y": 10.0038 + }, + { + "x": 65.81659, + "y": -7.6953960000000015 + }, + { + "x": 58.66797, + "y": -6.653395 + }, + { + "x": 63.55366, + "y": -33.60001 + }, + { + "x": 72.77927, + "y": -2.6015200000000003 + }, + { + "x": 70.05731, + "y": -6.740457000000001 + }, + { + "x": 63.67471, + "y": -19.57441 + }, + { + "x": 61.41443, + "y": -12.56155 + }, + { + "x": 59.91931, + "y": -11.40836 + }, + { + "x": 54.54313000000001, + "y": -9.975537 + }, + { + "x": 70.58784, + "y": -9.452148 + }, + { + "x": 53.50131999999999, + "y": -11.88279 + }, + { + "x": 72.78958, + "y": -28.22006 + }, + { + "x": 76.30181, + "y": -6.2316720000000005 + }, + { + "x": 51.48873, + "y": -31.35942 + }, + { + "x": 82.67635, + "y": -19.14385 + }, + { + "x": 64.73662, + "y": -20.46305 + }, + { + "x": 89.92531, + "y": -10.70861 + }, + { + "x": 82.33731999999998, + "y": -6.081996 + }, + { + "x": 67.7835, + "y": -13.78307 + }, + { + "x": 82.0141, + "y": 8.581901 + }, + { + "x": 65.64449, + "y": -3.324757 + }, + { + "x": 58.89835, + "y": -22.79558 + }, + { + "x": 50.28286, + "y": 4.203121 + }, + { + "x": 68.29051, + "y": -13.59784 + }, + { + "x": 85.31325, + "y": -9.977645 + }, + { + "x": 93.10153, + "y": -14.48068 + }, + { + "x": 64.6744, + "y": -1.08624 + }, + { + "x": 72.97454, + "y": 0.8260531999999999 + }, + { + "x": 74.51595999999998, + "y": -9.207847 + }, + { + "x": 68.41306, + "y": -2.750809 + }, + { + "x": 75.30674, + "y": -4.204458 + }, + { + "x": 53.84029, + "y": -12.40979 + }, + { + "x": 67.35263, + "y": -0.3542485999999999 + }, + { + "x": 67.39329000000001, + "y": -32.9488 + }, + { + "x": 56.93941, + "y": -4.871946 + }, + { + "x": 69.12279000000001, + "y": 5.317039 + }, + { + "x": 57.22761, + "y": -5.167954 + }, + { + "x": 76.05929, + "y": -5.5695260000000015 + }, + { + "x": 59.81583000000001, + "y": -4.150285 + }, + { + "x": 64.30556999999999, + "y": -27.2714 + }, + { + "x": 59.1149, + "y": -16.25977 + }, + { + "x": 91.61397, + "y": -12.11007 + }, + { + "x": 78.31008, + "y": -16.3773 + }, + { + "x": 68.59947, + "y": 0.7928145000000001 + }, + { + "x": 68.01685, + "y": 1.1088870000000002 + }, + { + "x": 82.84614, + "y": -12.49169 + }, + { + "x": 49.51263, + "y": -0.5111645 + }, + { + "x": 69.8973, + "y": -34.17 + }, + { + "x": 84.17336999999998, + "y": -4.631359 + }, + { + "x": 78.89444, + "y": -24.29788 + }, + { + "x": 70.69758, + "y": 9.444025 + }, + { + "x": 61.77013, + "y": -19.68894 + }, + { + "x": 78.0163, + "y": 4.23549 + }, + { + "x": 73.54946, + "y": -16.099420000000002 + }, + { + "x": 55.73493000000001, + "y": -12.74454 + }, + { + "x": 65.89819, + "y": 13.69386 + }, + { + "x": 57.39889, + "y": -13.82744 + }, + { + "x": 63.04364, + "y": -27.31653 + }, + { + "x": 90.12375, + "y": -18.2544 + }, + { + "x": 64.38116, + "y": -23.61167 + }, + { + "x": 63.44825, + "y": -5.62352 + }, + { + "x": 72.94678, + "y": -17.25217 + }, + { + "x": 52.57834, + "y": -13.12009 + }, + { + "x": 63.63273, + "y": 5.738944 + }, + { + "x": 71.99254, + "y": -10.99059 + }, + { + "x": 72.39277, + "y": -4.811533 + }, + { + "x": 79.11701, + "y": -4.512673 + }, + { + "x": 51.93237, + "y": -17.866229999999995 + }, + { + "x": 70.43403, + "y": -21.59988 + }, + { + "x": 73.80844, + "y": -2.224638 + }, + { + "x": 81.84084, + "y": -19.73066 + }, + { + "x": 60.51824000000001, + "y": -7.986828999999997 + }, + { + "x": 76.27816999999997, + "y": -26.23452 + }, + { + "x": 72.43248, + "y": -18.91511 + }, + { + "x": 68.76535, + "y": 1.418947 + }, + { + "x": 60.72785, + "y": 2.763541 + }, + { + "x": 68.29949, + "y": -11.58326 + }, + { + "x": 71.62149000000002, + "y": -26.87554 + }, + { + "x": 70.59952, + "y": -5.845408 + }, + { + "x": 80.10539, + "y": -10.8262 + }, + { + "x": 70.75399, + "y": 10.09409 + }, + { + "x": 61.23998, + "y": -21.44423 + }, + { + "x": 68.3528, + "y": 8.337489 + }, + { + "x": 61.51666, + "y": -12.43442 + }, + { + "x": 71.43109, + "y": -0.0061483519999999 + }, + { + "x": 62.02735, + "y": -24.19875 + }, + { + "x": 61.78095, + "y": 1.968633 + }, + { + "x": 98.66974, + "y": -2.164127 + }, + { + "x": 73.01436, + "y": -1.7224549999999998 + }, + { + "x": 82.94384000000002, + "y": -0.9408177 + }, + { + "x": 80.52203, + "y": -13.20871 + }, + { + "x": 53.52886, + "y": -3.686721 + }, + { + "x": 70.67194, + "y": -0.7722773 + }, + { + "x": 56.81425, + "y": -13.704579999999998 + }, + { + "x": 72.37652, + "y": -26.52538 + }, + { + "x": 49.83153, + "y": -8.861414 + }, + { + "x": 70.16466, + "y": -18.97082 + }, + { + "x": 72.25542, + "y": 17.13289 + }, + { + "x": 69.0665, + "y": 2.742776 + }, + { + "x": 57.83613, + "y": -1.477452 + }, + { + "x": 75.97397, + "y": -22.84942 + }, + { + "x": 68.33255, + "y": 0.6976613 + }, + { + "x": 60.67356, + "y": -8.95394 + }, + { + "x": 61.20472, + "y": -14.9268 + }, + { + "x": 65.426, + "y": -8.987577 + }, + { + "x": 77.37339, + "y": -3.91479 + }, + { + "x": 65.88091, + "y": -24.6382 + }, + { + "x": 68.68375999999999, + "y": -26.48481 + }, + { + "x": 83.17385, + "y": -11.66942 + }, + { + "x": 69.57141999999999, + "y": -1.19085 + }, + { + "x": 87.76274000000002, + "y": -12.09585 + }, + { + "x": 64.25253000000001, + "y": -4.659249 + }, + { + "x": 58.7633, + "y": -9.553751 + }, + { + "x": 87.6779, + "y": -14.57468 + }, + { + "x": 84.77951999999998, + "y": -28.19338 + }, + { + "x": 44.48759, + "y": -28.91912 + }, + { + "x": 71.15801, + "y": -4.96975 + }, + { + "x": 81.11289000000002, + "y": 1.820294 + }, + { + "x": 69.6739, + "y": -13.50128 + }, + { + "x": 77.81984, + "y": -29.2818 + }, + { + "x": 74.59189, + "y": -6.9690179999999975 + }, + { + "x": 87.18534, + "y": -7.561814 + }, + { + "x": 80.60636, + "y": 4.6757800000000005 + }, + { + "x": 84.97686999999998, + "y": -20.77276 + }, + { + "x": 79.38887, + "y": 18.96587 + }, + { + "x": 73.09005, + "y": -9.938504 + }, + { + "x": 83.21137, + "y": -35.36076 + }, + { + "x": 54.64416, + "y": -10.79429 + }, + { + "x": 73.64229, + "y": -16.80874 + }, + { + "x": 68.84037, + "y": -3.089466 + }, + { + "x": 75.82528, + "y": -25.17796 + }, + { + "x": 77.2142, + "y": -21.172320000000006 + }, + { + "x": 62.69973, + "y": -11.28403 + }, + { + "x": 65.87854, + "y": -18.35437 + }, + { + "x": 65.8312, + "y": -12.80048 + }, + { + "x": 69.75814, + "y": -6.189078 + }, + { + "x": 68.61625, + "y": -15.98461 + }, + { + "x": 64.98134, + "y": -16.78327 + }, + { + "x": 64.85876, + "y": -9.286581 + }, + { + "x": 66.79545999999999, + "y": -17.6295 + }, + { + "x": 43.56437, + "y": -14.07815 + }, + { + "x": 68.28453, + "y": -0.05283603 + }, + { + "x": 53.97722, + "y": -18.11732 + }, + { + "x": 72.37554, + "y": -14.15102 + }, + { + "x": 45.12958, + "y": 6.069386 + }, + { + "x": 79.23594, + "y": -7.783266999999999 + }, + { + "x": 67.89267, + "y": -20.79489 + }, + { + "x": 77.45593000000002, + "y": -6.610436999999999 + }, + { + "x": 67.28255, + "y": -3.456408 + }, + { + "x": 77.23093, + "y": -4.179791000000002 + }, + { + "x": 77.14531, + "y": -16.250220000000002 + }, + { + "x": 60.35104000000001, + "y": -16.18723 + }, + { + "x": 65.31193, + "y": -16.61032 + }, + { + "x": 77.93611, + "y": -32.70189 + }, + { + "x": 79.88167, + "y": -9.25513 + }, + { + "x": 64.06411999999999, + "y": -5.0536650000000005 + }, + { + "x": 55.65335, + "y": -2.3524540000000003 + }, + { + "x": 60.33708000000001, + "y": -0.5121532 + }, + { + "x": 69.20068, + "y": -13.57959 + }, + { + "x": 62.69723000000001, + "y": -10.16704 + }, + { + "x": 66.39989, + "y": -5.404058 + }, + { + "x": 60.86256, + "y": -17.942429999999995 + }, + { + "x": 74.03130999999998, + "y": -25.69833 + }, + { + "x": 82.44264, + "y": -17.38876 + }, + { + "x": 71.05726999999997, + "y": -20.94383 + }, + { + "x": 80.91493, + "y": -5.505733 + }, + { + "x": 74.19766, + "y": -3.398674 + }, + { + "x": 73.76104000000002, + "y": -9.804844 + }, + { + "x": 69.15085, + "y": -27.33672 + }, + { + "x": 73.74459, + "y": -22.24747 + }, + { + "x": 93.63296, + "y": -10.36324 + }, + { + "x": 72.05005, + "y": -1.98867 + }, + { + "x": 79.09496999999998, + "y": -17.7693 + }, + { + "x": 52.66147, + "y": -12.10119 + }, + { + "x": 91.25622, + "y": -26.76765 + }, + { + "x": 69.69169000000001, + "y": -7.789096000000002 + }, + { + "x": 47.71091, + "y": -6.095375 + }, + { + "x": 55.00807, + "y": 11.56722 + }, + { + "x": 67.68167, + "y": -9.785644 + }, + { + "x": 65.44644, + "y": -12.13077 + }, + { + "x": 84.56817, + "y": -6.077383 + }, + { + "x": 97.56903, + "y": -14.44639 + }, + { + "x": 53.24851999999999, + "y": -11.41788 + }, + { + "x": 67.16991, + "y": -4.073038 + }, + { + "x": 62.42045, + "y": -16.2767 + }, + { + "x": 59.63564, + "y": -37.79037 + }, + { + "x": 78.52355, + "y": -6.868666 + }, + { + "x": 68.07284, + "y": -9.450905 + }, + { + "x": 64.40905, + "y": -17.325689999999998 + }, + { + "x": 83.58873, + "y": -10.16413 + }, + { + "x": 83.71054000000002, + "y": -7.567408 + }, + { + "x": 76.59971999999998, + "y": -8.598391000000001 + }, + { + "x": 65.59871, + "y": -5.515496 + }, + { + "x": 64.16530999999999, + "y": -8.239429 + }, + { + "x": 72.31848000000002, + "y": -28.37739 + }, + { + "x": 72.89074000000002, + "y": -13.08401 + }, + { + "x": 71.85983, + "y": -7.281507 + }, + { + "x": 74.98594, + "y": 4.9548 + }, + { + "x": 68.01299, + "y": -12.93427 + }, + { + "x": 71.72321, + "y": -7.872746 + }, + { + "x": 85.0203, + "y": -22.10981 + }, + { + "x": 66.09438, + "y": 0.7196266 + }, + { + "x": 85.76525, + "y": -15.941579999999998 + }, + { + "x": 75.29033000000003, + "y": -20.52493 + }, + { + "x": 69.05731, + "y": -16.42671 + }, + { + "x": 84.21595, + "y": -13.29946 + }, + { + "x": 69.43209, + "y": -7.778992999999999 + }, + { + "x": 69.3489, + "y": -16.70996 + }, + { + "x": 67.49600000000001, + "y": 0.7695373000000001 + }, + { + "x": 54.37956, + "y": -2.373576 + }, + { + "x": 55.37194, + "y": -8.759966 + }, + { + "x": 65.99169, + "y": -4.956535 + }, + { + "x": 82.59654, + "y": -29.846390000000003 + }, + { + "x": 80.10463, + "y": -11.9095 + }, + { + "x": 62.44377, + "y": -16.1361 + }, + { + "x": 87.34288000000002, + "y": -11.94191 + }, + { + "x": 63.13534, + "y": -32.47361 + }, + { + "x": 80.38441999999998, + "y": -12.19301 + }, + { + "x": 53.62364, + "y": -20.69438 + }, + { + "x": 70.99268000000002, + "y": -3.2878010000000004 + }, + { + "x": 92.67575, + "y": -16.184620000000002 + }, + { + "x": 65.15415, + "y": -7.422444 + }, + { + "x": 79.33412, + "y": -22.18659 + }, + { + "x": 69.03038000000001, + "y": -13.70663 + }, + { + "x": 85.09824, + "y": -11.31437 + }, + { + "x": 75.07559, + "y": -1.20056 + }, + { + "x": 74.90408000000002, + "y": -31.59422 + }, + { + "x": 51.66653, + "y": 5.640219999999999 + }, + { + "x": 77.56271, + "y": -12.51884 + }, + { + "x": 83.9768, + "y": -15.20381 + }, + { + "x": 52.63898, + "y": 0.2466355 + }, + { + "x": 64.80269, + "y": -19.89357 + }, + { + "x": 60.91486999999999, + "y": -5.64697 + }, + { + "x": 76.31144, + "y": -13.2713 + }, + { + "x": 72.70005, + "y": -17.95129 + }, + { + "x": 54.85474, + "y": -4.231365 + }, + { + "x": 60.46303, + "y": -11.15464 + }, + { + "x": 73.09839000000002, + "y": -14.09135 + }, + { + "x": 58.33049000000001, + "y": -24.54733 + }, + { + "x": 78.08799, + "y": 4.297182 + }, + { + "x": 61.18767, + "y": -32.67201 + }, + { + "x": 76.27331, + "y": -27.69607 + }, + { + "x": 67.0222, + "y": -35.01962 + }, + { + "x": 83.54788, + "y": 1.910021 + }, + { + "x": 54.19945, + "y": -13.45955 + }, + { + "x": 67.80528000000001, + "y": 4.444605 + }, + { + "x": 87.90198000000002, + "y": 14.85406 + }, + { + "x": 62.05761, + "y": -0.1845935 + }, + { + "x": 67.43387, + "y": -4.600472 + }, + { + "x": 51.20422, + "y": -7.373769999999999 + }, + { + "x": 83.53147, + "y": -4.596114 + }, + { + "x": 63.07033000000001, + "y": -10.09449 + }, + { + "x": 62.59971, + "y": -7.99627 + }, + { + "x": 68.3894, + "y": -1.819404 + }, + { + "x": 75.60424, + "y": -8.007767 + }, + { + "x": 51.39455, + "y": -7.560444 + }, + { + "x": 54.05743, + "y": -30.14147 + }, + { + "x": 54.21433, + "y": 0.976269 + }, + { + "x": 66.1136, + "y": -2.307693 + }, + { + "x": 72.98232, + "y": -21.41706 + }, + { + "x": 63.47237, + "y": 0.4243742 + }, + { + "x": 67.75565999999999, + "y": -3.700921 + }, + { + "x": 59.91526999999999, + "y": -4.502811 + }, + { + "x": 59.59558000000001, + "y": 19.35797 + }, + { + "x": 74.9352, + "y": 2.191131 + }, + { + "x": 59.33881, + "y": -18.74531 + }, + { + "x": 79.36211999999998, + "y": 5.214438 + }, + { + "x": 82.11814, + "y": -13.61926 + }, + { + "x": 83.82712, + "y": -38.7955 + }, + { + "x": 74.61884, + "y": -11.33446 + }, + { + "x": 61.73203, + "y": -5.572901 + }, + { + "x": 68.48676999999999, + "y": -23.12137 + }, + { + "x": 69.30094, + "y": -27.30873 + }, + { + "x": 56.70621, + "y": -17.45695 + }, + { + "x": 71.53534, + "y": 0.8623791999999999 + }, + { + "x": 76.21033, + "y": 7.055012 + }, + { + "x": 63.84636, + "y": -17.7283 + }, + { + "x": 66.25222, + "y": -3.913034 + }, + { + "x": 81.44768, + "y": -24.24757 + }, + { + "x": 62.67937, + "y": -20.08821 + }, + { + "x": 54.33532, + "y": 1.649464 + }, + { + "x": 75.66274, + "y": -15.75875 + }, + { + "x": 80.03555, + "y": -14.61174 + }, + { + "x": 60.50964000000001, + "y": -18.80588 + }, + { + "x": 69.59801999999999, + "y": -15.57155 + }, + { + "x": 63.66285, + "y": -30.48215 + }, + { + "x": 56.05253, + "y": -7.357508 + }, + { + "x": 64.07648, + "y": -4.398561 + }, + { + "x": 64.70491, + "y": -10.37657 + }, + { + "x": 80.56889, + "y": 14.50799 + }, + { + "x": 86.61128000000002, + "y": -7.867749000000001 + }, + { + "x": 76.73148, + "y": -16.839389999999998 + }, + { + "x": 68.25068, + "y": -7.1420020000000015 + }, + { + "x": 83.53589000000002, + "y": -22.03176 + }, + { + "x": 84.63376, + "y": -10.65431 + }, + { + "x": 59.70858000000001, + "y": -7.02261 + }, + { + "x": 66.62059, + "y": 0.2782472 + }, + { + "x": 79.4429, + "y": -20.8802 + }, + { + "x": 59.14149000000001, + "y": -3.268589 + }, + { + "x": 62.93142, + "y": -9.67255 + }, + { + "x": 76.28171, + "y": 6.197267 + }, + { + "x": 81.7813, + "y": -17.89441 + }, + { + "x": 49.64519, + "y": -20.29111 + }, + { + "x": 58.37999, + "y": -12.982 + }, + { + "x": 74.68241, + "y": -22.74285 + }, + { + "x": 88.04621999999998, + "y": 2.73894 + }, + { + "x": 41.72015, + "y": -7.237918 + }, + { + "x": 61.91275, + "y": -12.98729 + }, + { + "x": 74.79148, + "y": -17.63764 + }, + { + "x": 61.99087, + "y": -15.7656 + }, + { + "x": 82.01159, + "y": -18.70377 + }, + { + "x": 78.71038, + "y": -15.10186 + }, + { + "x": 85.51906, + "y": -22.09427 + }, + { + "x": 76.5364, + "y": -11.39254 + }, + { + "x": 48.34201, + "y": -9.15055 + }, + { + "x": 69.69287, + "y": -7.0676289999999975 + }, + { + "x": 79.86285, + "y": -16.01771 + }, + { + "x": 69.80298, + "y": 4.93805 + }, + { + "x": 83.65175, + "y": -18.73922 + }, + { + "x": 85.6528, + "y": -6.461061 + }, + { + "x": 82.77088, + "y": -2.3732990000000003 + }, + { + "x": 64.46531999999999, + "y": -10.50136 + }, + { + "x": 90.72282, + "y": -12.25584 + }, + { + "x": 64.87976, + "y": -24.87731 + } + ] + }, + { + "clusterNr": 2, + "centroid": { + "x": 40.68362784160133, + "y": 59.7158927415144 + }, + "points": [ + { + "x": 24.2999, + "y": 40.42887 + }, + { + "x": 37.48364, + "y": 34.12808 + }, + { + "x": 48.1905, + "y": 56.00666999999999 + }, + { + "x": 48.32863, + "y": 76.0944 + }, + { + "x": 31.44145, + "y": 62.66712 + }, + { + "x": 37.60916, + "y": 64.75492 + }, + { + "x": 52.68577, + "y": 71.53609 + }, + { + "x": 48.723, + "y": 83.29384 + }, + { + "x": 31.85518, + "y": 59.354380000000006 + }, + { + "x": 55.55334000000001, + "y": 57.31956 + }, + { + "x": 29.06337000000001, + "y": 49.34992 + }, + { + "x": 50.45302, + "y": 78.01416 + }, + { + "x": 33.5429, + "y": 51.27797 + }, + { + "x": 45.11086, + "y": 46.34557 + }, + { + "x": 43.73054000000001, + "y": 67.13846 + }, + { + "x": 55.90229, + "y": 44.41355 + }, + { + "x": 35.51136, + "y": 63.02239 + }, + { + "x": 36.66438, + "y": 60.00176999999999 + }, + { + "x": 39.22292, + "y": 42.76795 + }, + { + "x": 25.76358, + "y": 72.0769 + }, + { + "x": 42.31278, + "y": 66.04035 + }, + { + "x": 46.66542000000001, + "y": 58.45405 + }, + { + "x": 57.76221, + "y": 50.79996 + }, + { + "x": 53.64062, + "y": 53.19439000000001 + }, + { + "x": 55.59307, + "y": 72.58209000000002 + }, + { + "x": 34.6382, + "y": 62.93818 + }, + { + "x": 68.81378000000001, + "y": 49.40914 + }, + { + "x": 38.22668, + "y": 55.08212 + }, + { + "x": 42.41835, + "y": 73.77797 + }, + { + "x": 44.42384000000001, + "y": 52.0499 + }, + { + "x": 32.44594, + "y": 52.46474 + }, + { + "x": 43.85302, + "y": 49.00594 + }, + { + "x": 52.93561, + "y": 51.52707 + }, + { + "x": 46.05927, + "y": 70.18995 + }, + { + "x": 44.43309, + "y": 58.9645 + }, + { + "x": 53.3247, + "y": 66.99565 + }, + { + "x": 54.93488000000001, + "y": 52.0303 + }, + { + "x": 44.00335, + "y": 60.1725 + }, + { + "x": 38.54234, + "y": 53.11563 + }, + { + "x": 26.89144000000001, + "y": 60.17693000000001 + }, + { + "x": 27.22742, + "y": 47.07473 + }, + { + "x": 24.60301, + "y": 58.44653 + }, + { + "x": 45.18391, + "y": 69.45772 + }, + { + "x": 35.58807, + "y": 73.17408 + }, + { + "x": 28.12908, + "y": 44.06283 + }, + { + "x": 39.83815, + "y": 48.70388 + }, + { + "x": 40.05444, + "y": 79.05227 + }, + { + "x": 54.45571999999999, + "y": 49.34488 + }, + { + "x": 58.99003, + "y": 59.51809 + }, + { + "x": 47.31255, + "y": 47.80124 + }, + { + "x": 46.05767, + "y": 70.08161 + }, + { + "x": 51.1862, + "y": 60.57783000000001 + }, + { + "x": 58.01156999999999, + "y": 62.87727 + }, + { + "x": 31.051240000000004, + "y": 61.88555 + }, + { + "x": 32.63545, + "y": 43.24568 + }, + { + "x": 59.21907, + "y": 75.16453 + }, + { + "x": 40.6654, + "y": 81.79757 + }, + { + "x": 35.82676, + "y": 67.83398000000001 + }, + { + "x": 49.35519, + "y": 75.29319 + }, + { + "x": 57.81302, + "y": 55.61863 + }, + { + "x": 36.07083, + "y": 51.26997 + }, + { + "x": 33.88886, + "y": 48.83694000000001 + }, + { + "x": 38.75301, + "y": 68.91596 + }, + { + "x": 44.30184000000001, + "y": 53.37654000000001 + }, + { + "x": 43.40867, + "y": 62.64091 + }, + { + "x": 36.25078, + "y": 46.24887 + }, + { + "x": 35.66046, + "y": 40.16179 + }, + { + "x": 44.1886, + "y": 74.18132 + }, + { + "x": 42.35297, + "y": 68.86938 + }, + { + "x": 59.72761, + "y": 71.64868 + }, + { + "x": 41.7742, + "y": 74.69192 + }, + { + "x": 39.48583, + "y": 58.30031999999999 + }, + { + "x": 46.18587, + "y": 49.02519 + }, + { + "x": 32.8916, + "y": 50.17133 + }, + { + "x": 31.03531, + "y": 72.2532 + }, + { + "x": 47.2611, + "y": 67.1427 + }, + { + "x": 43.63065, + "y": 63.04766 + }, + { + "x": 43.20379000000001, + "y": 57.58694000000001 + }, + { + "x": 34.45682, + "y": 54.82336 + }, + { + "x": 36.08501, + "y": 68.00059 + }, + { + "x": 55.93224, + "y": 63.07734 + }, + { + "x": 30.01013, + "y": 67.8034 + }, + { + "x": 40.17444, + "y": 50.23319 + }, + { + "x": 40.51248, + "y": 61.16069 + }, + { + "x": 44.84228, + "y": 59.17143000000001 + }, + { + "x": 44.95826, + "y": 65.09772 + }, + { + "x": 49.34734, + "y": 52.56688000000001 + }, + { + "x": 24.18327, + "y": 63.48712 + }, + { + "x": 41.57294, + "y": 48.41452 + }, + { + "x": 36.97141, + "y": 65.02328 + }, + { + "x": 39.83944, + "y": 49.22476 + }, + { + "x": 39.42764, + "y": 46.07249 + }, + { + "x": 33.85577, + "y": 58.8609 + }, + { + "x": 32.444520000000004, + "y": 46.98045 + }, + { + "x": 35.12357, + "y": 78.56973 + }, + { + "x": 36.99186, + "y": 63.62753000000001 + }, + { + "x": 44.04283, + "y": 69.94757 + }, + { + "x": 47.66477, + "y": 59.80407 + }, + { + "x": 46.3599, + "y": 59.65951999999999 + }, + { + "x": 71.56260999999998, + "y": 53.91534 + }, + { + "x": 28.928690000000003, + "y": 46.33052 + }, + { + "x": 47.19929000000001, + "y": 41.39569 + }, + { + "x": 48.15507, + "y": 83.98581 + }, + { + "x": 48.4477, + "y": 54.65174 + }, + { + "x": 35.18339, + "y": 68.19836 + }, + { + "x": 52.26128, + "y": 50.64056 + }, + { + "x": 35.77592, + "y": 62.37214 + }, + { + "x": 43.37792, + "y": 60.65264000000001 + }, + { + "x": 40.40879, + "y": 53.21294 + }, + { + "x": 46.39126, + "y": 64.80001999999999 + }, + { + "x": 61.87996, + "y": 62.7935 + }, + { + "x": 18.99094, + "y": 54.79462 + }, + { + "x": 35.54591, + "y": 64.34436 + }, + { + "x": 50.37548, + "y": 68.05591 + }, + { + "x": 54.54673, + "y": 60.98913 + }, + { + "x": 44.13707, + "y": 53.40706 + }, + { + "x": 45.55372, + "y": 70.63025 + }, + { + "x": 45.68042, + "y": 41.9937 + }, + { + "x": 55.04569, + "y": 48.46728 + }, + { + "x": 37.81383, + "y": 42.24533 + }, + { + "x": 33.56491, + "y": 78.10993 + }, + { + "x": 19.2699, + "y": 67.18515 + }, + { + "x": 37.28481, + "y": 37.79198 + }, + { + "x": 39.77556, + "y": 44.83249 + }, + { + "x": 35.46314, + "y": 70.30631 + }, + { + "x": 40.41439, + "y": 65.25805 + }, + { + "x": 26.7135, + "y": 60.60958 + }, + { + "x": 40.50345, + "y": 57.22231 + }, + { + "x": 29.83138, + "y": 55.35326 + }, + { + "x": 40.04233, + "y": 60.38692 + }, + { + "x": 40.95189, + "y": 51.6069 + }, + { + "x": 51.68887, + "y": 52.47176 + }, + { + "x": 24.69499, + "y": 50.50501 + }, + { + "x": 62.78684000000001, + "y": 55.41728000000001 + }, + { + "x": 21.08624, + "y": 48.07032 + }, + { + "x": 22.0205, + "y": 45.01294 + }, + { + "x": 41.01136, + "y": 45.20848 + }, + { + "x": 41.47629000000001, + "y": 49.69875 + }, + { + "x": 43.15526, + "y": 69.96186999999999 + }, + { + "x": 33.97264000000001, + "y": 58.3128 + }, + { + "x": 35.58473, + "y": 46.37667 + }, + { + "x": 31.52146, + "y": 61.44991 + }, + { + "x": 38.50949, + "y": 54.9348 + }, + { + "x": 48.51959, + "y": 45.1665 + }, + { + "x": 51.80655, + "y": 48.92263 + }, + { + "x": 59.93333000000001, + "y": 41.36604000000001 + }, + { + "x": 37.52437000000001, + "y": 65.41436 + }, + { + "x": 41.38512, + "y": 58.3734 + }, + { + "x": 59.89985, + "y": 45.3802 + }, + { + "x": 46.32288, + "y": 49.54236 + }, + { + "x": 45.69158, + "y": 60.92593000000001 + }, + { + "x": 36.79516, + "y": 78.20391 + }, + { + "x": 30.70871, + "y": 70.33036 + }, + { + "x": 51.97064, + "y": 80.70323 + }, + { + "x": 50.47091, + "y": 64.8867 + }, + { + "x": 52.55752, + "y": 66.85835 + }, + { + "x": 38.0208, + "y": 75.94703 + }, + { + "x": 47.81833, + "y": 58.65439 + }, + { + "x": 45.85127, + "y": 67.85252 + }, + { + "x": 51.34424, + "y": 68.26302 + }, + { + "x": 37.33317, + "y": 67.98246999999999 + }, + { + "x": 45.61133, + "y": 63.20619 + }, + { + "x": 31.50764, + "y": 65.71172 + }, + { + "x": 28.51895, + "y": 73.79701 + }, + { + "x": 50.74807, + "y": 53.57638000000001 + }, + { + "x": 39.53701, + "y": 69.93831999999999 + }, + { + "x": 49.56372, + "y": 68.6858 + }, + { + "x": 57.41644, + "y": 42.79595 + }, + { + "x": 35.55559, + "y": 58.52347 + }, + { + "x": 42.96314, + "y": 37.97548 + }, + { + "x": 41.98642, + "y": 55.80981 + }, + { + "x": 32.55532, + "y": 46.44257 + }, + { + "x": 32.345279999999995, + "y": 60.57506 + }, + { + "x": 24.44857, + "y": 51.36618 + }, + { + "x": 39.53357000000001, + "y": 64.53081999999999 + }, + { + "x": 28.80983, + "y": 55.80426 + }, + { + "x": 39.83018, + "y": 55.04155 + }, + { + "x": 39.42011, + "y": 44.53216 + }, + { + "x": 42.75812, + "y": 66.42826 + }, + { + "x": 23.17606, + "y": 56.86704 + }, + { + "x": 25.55901, + "y": 68.7241 + }, + { + "x": 18.26403, + "y": 40.02327 + }, + { + "x": 30.70777, + "y": 63.31014 + }, + { + "x": 49.43437, + "y": 79.62605 + }, + { + "x": 41.15351, + "y": 60.28376 + }, + { + "x": 36.17541, + "y": 65.56798 + }, + { + "x": 44.08116, + "y": 51.84447 + }, + { + "x": 43.27453, + "y": 68.85571 + }, + { + "x": 49.39423, + "y": 60.62898000000001 + }, + { + "x": 50.53357000000001, + "y": 46.03307 + }, + { + "x": 42.95269, + "y": 71.277 + }, + { + "x": 30.574040000000004, + "y": 76.27772 + }, + { + "x": 35.20991, + "y": 69.40798000000001 + }, + { + "x": 39.5469, + "y": 58.25396 + }, + { + "x": 40.54202, + "y": 68.29326 + }, + { + "x": 42.14727, + "y": 63.224 + }, + { + "x": 39.30898, + "y": 55.78019000000001 + }, + { + "x": 50.05859, + "y": 57.09342 + }, + { + "x": 43.67538, + "y": 63.21723000000001 + }, + { + "x": 39.79353, + "y": 43.73809 + }, + { + "x": 43.44539, + "y": 50.19695 + }, + { + "x": 41.67813, + "y": 55.28961999999999 + }, + { + "x": 48.594, + "y": 69.64589000000001 + }, + { + "x": 38.46082, + "y": 61.08416 + }, + { + "x": 53.26524000000001, + "y": 63.82018000000001 + }, + { + "x": 49.0517, + "y": 66.49995 + }, + { + "x": 39.31737, + "y": 67.48604 + }, + { + "x": 41.24618, + "y": 49.47654 + }, + { + "x": 37.88715, + "y": 59.91647 + }, + { + "x": 41.14622, + "y": 63.44699 + }, + { + "x": 32.521640000000005, + "y": 73.23534000000002 + }, + { + "x": 41.10812, + "y": 44.68184 + }, + { + "x": 25.34895, + "y": 55.25141 + }, + { + "x": 41.9661, + "y": 60.38896 + }, + { + "x": 40.65187, + "y": 61.11229 + }, + { + "x": 31.38396, + "y": 66.525 + }, + { + "x": 59.78578, + "y": 38.49133 + }, + { + "x": 31.3399, + "y": 63.09048000000001 + }, + { + "x": 40.92554000000001, + "y": 60.43771 + }, + { + "x": 29.67727, + "y": 66.38073 + }, + { + "x": 32.59683, + "y": 33.867090000000005 + }, + { + "x": 20.88727, + "y": 56.18753 + }, + { + "x": 37.8447, + "y": 51.01321 + }, + { + "x": 40.57783, + "y": 69.06488 + }, + { + "x": 59.67326, + "y": 74.55561999999998 + }, + { + "x": 36.6854, + "y": 50.43604000000001 + }, + { + "x": 45.94, + "y": 57.68176 + }, + { + "x": 64.98144, + "y": 79.71206 + }, + { + "x": 36.98331, + "y": 65.35463 + }, + { + "x": 45.67468, + "y": 55.15185 + }, + { + "x": 37.51643, + "y": 49.06353 + }, + { + "x": 51.32067, + "y": 56.63374 + }, + { + "x": 46.13968, + "y": 46.26812 + }, + { + "x": 46.3057, + "y": 50.07933 + }, + { + "x": 58.78482, + "y": 35.37284000000001 + }, + { + "x": 24.40643, + "y": 58.87376 + }, + { + "x": 42.22782, + "y": 61.23968000000001 + }, + { + "x": 19.33637, + "y": 69.78316 + }, + { + "x": 39.09501, + "y": 60.00454000000001 + }, + { + "x": 31.54544000000001, + "y": 56.18556 + }, + { + "x": 46.81052, + "y": 51.33483 + }, + { + "x": 37.31417, + "y": 60.64799 + }, + { + "x": 35.31276, + "y": 64.61462 + }, + { + "x": 47.03397, + "y": 66.32737 + }, + { + "x": 43.20051, + "y": 64.01385 + }, + { + "x": 57.78369, + "y": 73.30975 + }, + { + "x": 51.95346, + "y": 50.6932 + }, + { + "x": 37.04092, + "y": 60.51894 + }, + { + "x": 33.26079, + "y": 75.71045 + }, + { + "x": 45.94416, + "y": 71.49937 + }, + { + "x": 35.73385, + "y": 46.9001 + }, + { + "x": 40.76379, + "y": 67.68751 + }, + { + "x": 35.145540000000004, + "y": 65.5663 + }, + { + "x": 35.66175, + "y": 56.80016 + }, + { + "x": 28.88317, + "y": 43.26803 + }, + { + "x": 31.27264000000001, + "y": 66.3293 + }, + { + "x": 34.13748, + "y": 60.96088 + }, + { + "x": 47.33729, + "y": 68.169 + }, + { + "x": 31.18816, + "y": 78.43963000000002 + }, + { + "x": 37.92156, + "y": 63.1141 + }, + { + "x": 53.294, + "y": 55.50261999999999 + }, + { + "x": 61.38426, + "y": 59.91205 + }, + { + "x": 43.75808, + "y": 67.45812 + }, + { + "x": 38.92632, + "y": 43.12086 + }, + { + "x": 30.63075, + "y": 79.46695 + }, + { + "x": 28.52392, + "y": 59.14458000000001 + }, + { + "x": 34.3243, + "y": 60.94347 + }, + { + "x": 24.5469, + "y": 64.80247 + }, + { + "x": 36.00817, + "y": 46.68387 + }, + { + "x": 21.60583, + "y": 46.62644 + }, + { + "x": 44.03259, + "y": 64.42778 + }, + { + "x": 33.99769000000001, + "y": 56.55145 + }, + { + "x": 43.60366, + "y": 61.25346 + }, + { + "x": 46.92525, + "y": 54.08689 + }, + { + "x": 50.50127, + "y": 60.62361 + }, + { + "x": 53.49198000000001, + "y": 41.07875 + }, + { + "x": 42.67635, + "y": 55.93246 + }, + { + "x": 27.99422, + "y": 53.68188000000001 + }, + { + "x": 39.43207, + "y": 57.01566 + }, + { + "x": 26.77366, + "y": 63.055 + }, + { + "x": 42.40971, + "y": 49.95729 + }, + { + "x": 36.22691, + "y": 57.21221 + }, + { + "x": 38.46163, + "y": 67.33074 + }, + { + "x": 43.78143, + "y": 65.92309 + }, + { + "x": 32.78291, + "y": 73.01238000000002 + }, + { + "x": 34.33231, + "y": 60.31763 + }, + { + "x": 38.62762, + "y": 57.39558 + }, + { + "x": 40.80154, + "y": 39.94366 + }, + { + "x": 34.4872, + "y": 50.56793 + }, + { + "x": 37.28235, + "y": 51.46425 + }, + { + "x": 36.29004000000001, + "y": 72.62875 + }, + { + "x": 27.32446, + "y": 51.97536 + }, + { + "x": 43.01795, + "y": 72.62218 + }, + { + "x": 30.62136, + "y": 49.73988 + }, + { + "x": 51.54357, + "y": 37.5978 + }, + { + "x": 54.47479000000001, + "y": 52.03507000000001 + }, + { + "x": 46.6837, + "y": 76.38964 + }, + { + "x": 36.40191, + "y": 55.50854 + }, + { + "x": 32.79919, + "y": 57.24132 + }, + { + "x": 63.01716999999999, + "y": 51.67786 + }, + { + "x": 30.48439, + "y": 39.33047 + }, + { + "x": 36.6763, + "y": 87.27119 + }, + { + "x": 18.94383, + "y": 59.33327 + }, + { + "x": 43.45898, + "y": 51.92991 + }, + { + "x": 37.48009, + "y": 68.55787 + }, + { + "x": 45.79938, + "y": 71.73394 + }, + { + "x": 39.69381, + "y": 58.77897 + }, + { + "x": 43.60521, + "y": 51.59496 + }, + { + "x": 49.18213, + "y": 66.20721 + }, + { + "x": 25.83677, + "y": 47.10274 + }, + { + "x": 30.90342, + "y": 53.13581 + }, + { + "x": 40.20493, + "y": 60.96742 + }, + { + "x": 46.98463, + "y": 52.61281 + }, + { + "x": 39.37106, + "y": 46.29081 + }, + { + "x": 40.281, + "y": 59.03583 + }, + { + "x": 40.44173, + "y": 47.78119 + }, + { + "x": 37.66053, + "y": 59.73406 + }, + { + "x": 38.11046, + "y": 44.89672 + }, + { + "x": 48.2845, + "y": 41.49009 + }, + { + "x": 49.2973, + "y": 63.16118 + }, + { + "x": 22.48131, + "y": 74.58899 + }, + { + "x": 52.90003000000001, + "y": 58.66274 + }, + { + "x": 39.1711, + "y": 60.65303 + }, + { + "x": 46.23943, + "y": 65.03093 + }, + { + "x": 38.69597, + "y": 84.08148 + }, + { + "x": 40.79527, + "y": 49.7543 + }, + { + "x": 42.84691, + "y": 57.79911 + }, + { + "x": 65.71859, + "y": 53.45975 + }, + { + "x": 32.24807, + "y": 67.18961999999999 + }, + { + "x": 37.50528, + "y": 72.15233 + }, + { + "x": 46.19626, + "y": 63.37228 + }, + { + "x": 46.93901, + "y": 50.99902 + }, + { + "x": 30.82879, + "y": 59.55766 + }, + { + "x": 53.35965, + "y": 52.76179000000001 + }, + { + "x": 48.15439, + "y": 68.73671999999999 + }, + { + "x": 33.211659999999995, + "y": 38.87962 + }, + { + "x": 29.92048, + "y": 77.03939 + }, + { + "x": 37.6465, + "y": 56.99416 + }, + { + "x": 35.9354, + "y": 77.82079 + }, + { + "x": 47.70036, + "y": 64.47489 + }, + { + "x": 25.77065, + "y": 62.45383 + }, + { + "x": 41.92523, + "y": 57.7624 + }, + { + "x": 34.45473, + "y": 60.32253000000001 + }, + { + "x": 30.77576, + "y": 52.58115 + }, + { + "x": 26.14364, + "y": 66.58151 + }, + { + "x": 47.21836, + "y": 51.68076 + }, + { + "x": 55.78841, + "y": 57.97879 + }, + { + "x": 43.2989, + "y": 56.97968 + }, + { + "x": 40.87212, + "y": 27.31616 + }, + { + "x": 49.88417000000001, + "y": 32.45283 + }, + { + "x": 20.55912, + "y": 57.01987 + }, + { + "x": 25.06116, + "y": 44.75805 + }, + { + "x": 26.01595, + "y": 55.76411 + }, + { + "x": 37.25416, + "y": 65.31094 + }, + { + "x": 53.36999, + "y": 53.56238000000001 + }, + { + "x": 38.84896, + "y": 56.97574 + }, + { + "x": 39.51915, + "y": 61.65769 + }, + { + "x": 37.02022, + "y": 69.50709 + }, + { + "x": 50.74908, + "y": 56.24477 + }, + { + "x": 35.7051, + "y": 58.49562 + }, + { + "x": 44.44394000000001, + "y": 67.48245 + }, + { + "x": 54.81738000000001, + "y": 61.41306 + }, + { + "x": 45.88216, + "y": 63.42376 + }, + { + "x": 39.53611, + "y": 65.04189000000001 + }, + { + "x": 44.80203, + "y": 50.21186 + }, + { + "x": 29.91771, + "y": 71.56390999999998 + }, + { + "x": 25.37846, + "y": 64.61015 + }, + { + "x": 41.21589, + "y": 64.27741999999999 + }, + { + "x": 51.48426, + "y": 68.01100000000001 + }, + { + "x": 59.85225, + "y": 60.61618000000001 + }, + { + "x": 51.70456, + "y": 47.81819 + }, + { + "x": 47.91999000000001, + "y": 46.15824 + }, + { + "x": 41.99199, + "y": 65.34492 + }, + { + "x": 53.38919, + "y": 71.59792 + }, + { + "x": 50.13654, + "y": 58.47133 + }, + { + "x": 43.55886, + "y": 50.07811 + }, + { + "x": 44.48821, + "y": 73.62916 + }, + { + "x": 27.92514000000001, + "y": 67.88335 + }, + { + "x": 36.57076, + "y": 72.47041999999998 + }, + { + "x": 35.29817, + "y": 65.07594 + }, + { + "x": 51.4997, + "y": 63.69956 + }, + { + "x": 49.04667, + "y": 65.28074000000001 + }, + { + "x": 38.21852, + "y": 56.44799 + }, + { + "x": 35.58804, + "y": 44.72433 + }, + { + "x": 27.65341, + "y": 61.1188 + }, + { + "x": 41.22976, + "y": 53.65146 + }, + { + "x": 32.00885, + "y": 46.29029 + }, + { + "x": 46.49651, + "y": 55.93187 + }, + { + "x": 25.12809, + "y": 45.54561 + }, + { + "x": 31.50795, + "y": 35.048320000000004 + }, + { + "x": 32.441, + "y": 70.15026 + }, + { + "x": 50.46987, + "y": 56.49627 + }, + { + "x": 53.02414, + "y": 48.18963 + }, + { + "x": 46.28482, + "y": 64.75075 + }, + { + "x": 21.90914, + "y": 60.49558 + }, + { + "x": 38.16132, + "y": 56.99729 + }, + { + "x": 32.70623, + "y": 53.865080000000006 + }, + { + "x": 30.58785, + "y": 74.07853 + }, + { + "x": 42.87658, + "y": 64.60489 + }, + { + "x": 41.16918, + "y": 50.85736 + }, + { + "x": 40.4065, + "y": 56.96268000000001 + }, + { + "x": 27.98043, + "y": 54.99941 + }, + { + "x": 39.86144, + "y": 65.40418000000001 + }, + { + "x": 44.06916, + "y": 58.01787 + }, + { + "x": 41.27358, + "y": 47.03271 + }, + { + "x": 29.50536, + "y": 50.07637 + }, + { + "x": 42.72526, + "y": 52.06594000000001 + }, + { + "x": 55.88999, + "y": 57.75395 + }, + { + "x": 43.43729, + "y": 45.53989 + }, + { + "x": 45.21592, + "y": 56.23551 + }, + { + "x": 21.46886, + "y": 50.97331 + }, + { + "x": 40.8175, + "y": 63.63504 + }, + { + "x": 34.897240000000004, + "y": 64.74254 + }, + { + "x": 38.82377, + "y": 54.30611999999999 + }, + { + "x": 39.81253, + "y": 61.8196 + }, + { + "x": 42.25532000000001, + "y": 62.65005 + }, + { + "x": 44.36548, + "y": 49.87988 + }, + { + "x": 31.58178, + "y": 55.53971 + }, + { + "x": 35.25133, + "y": 53.15156999999999 + }, + { + "x": 50.77632, + "y": 74.22147 + }, + { + "x": 46.64062, + "y": 37.81122 + }, + { + "x": 50.71756, + "y": 53.06595 + }, + { + "x": 49.07775, + "y": 59.12901 + }, + { + "x": 26.63234000000001, + "y": 64.19726999999999 + }, + { + "x": 48.79625, + "y": 38.62079 + }, + { + "x": 22.20029, + "y": 73.11573 + }, + { + "x": 44.41, + "y": 53.04649000000001 + }, + { + "x": 63.88825, + "y": 48.97889 + }, + { + "x": 33.57092, + "y": 63.84941 + }, + { + "x": 44.85232, + "y": 62.17386 + }, + { + "x": 43.81482000000001, + "y": 57.73569000000001 + }, + { + "x": 32.16317, + "y": 58.71496 + }, + { + "x": 34.76834, + "y": 55.57443000000001 + }, + { + "x": 27.02004, + "y": 60.16687 + }, + { + "x": 36.84926, + "y": 46.01221 + }, + { + "x": 36.16788, + "y": 68.04738 + }, + { + "x": 54.34972, + "y": 51.9426 + }, + { + "x": 47.11679, + "y": 77.18788 + }, + { + "x": 57.4229, + "y": 32.305 + }, + { + "x": 52.18029, + "y": 65.10573000000001 + }, + { + "x": 51.85909, + "y": 67.51661 + }, + { + "x": 49.03182, + "y": 60.34069 + }, + { + "x": 45.43005, + "y": 59.77699000000001 + }, + { + "x": 33.160070000000005, + "y": 67.7972 + }, + { + "x": 28.07412, + "y": 60.4441 + }, + { + "x": 37.39232, + "y": 60.04588 + }, + { + "x": 41.7159, + "y": 54.8672 + }, + { + "x": 32.7979, + "y": 73.65913 + }, + { + "x": 48.73786, + "y": 49.54446 + }, + { + "x": 55.61709000000001, + "y": 57.06916 + }, + { + "x": 26.59618, + "y": 54.89858 + }, + { + "x": 42.08567, + "y": 40.12172 + }, + { + "x": 52.21176, + "y": 52.75539000000001 + }, + { + "x": 36.55513, + "y": 62.31943 + }, + { + "x": 31.43811, + "y": 50.33373 + }, + { + "x": 40.87347000000001, + "y": 69.90448 + }, + { + "x": 25.97094, + "y": 68.05601999999999 + }, + { + "x": 35.18777, + "y": 47.83521 + }, + { + "x": 30.72323, + "y": 53.49924 + }, + { + "x": 41.99314, + "y": 50.87471 + }, + { + "x": 30.88503, + "y": 59.03542 + }, + { + "x": 55.63384, + "y": 51.22741 + }, + { + "x": 37.70752, + "y": 54.48603000000001 + }, + { + "x": 27.17879000000001, + "y": 73.22714 + }, + { + "x": 55.74353000000001, + "y": 35.89603 + }, + { + "x": 25.66439, + "y": 58.53562 + }, + { + "x": 17.00957, + "y": 68.39095999999999 + }, + { + "x": 43.95091, + "y": 61.0425 + }, + { + "x": 38.8072, + "y": 53.42418000000001 + }, + { + "x": 40.30421, + "y": 55.30517 + }, + { + "x": 39.78672, + "y": 57.06535 + }, + { + "x": 63.90414000000001, + "y": 56.32496 + }, + { + "x": 48.88094, + "y": 67.82444 + }, + { + "x": 58.40254, + "y": 79.28048000000003 + }, + { + "x": 39.70721, + "y": 64.78928 + }, + { + "x": 47.59079000000001, + "y": 51.5511 + }, + { + "x": 44.84636, + "y": 52.34264 + }, + { + "x": 21.27829, + "y": 50.89752 + }, + { + "x": 56.59843000000001, + "y": 65.83452 + }, + { + "x": 37.48017, + "y": 57.39704 + }, + { + "x": 49.15954, + "y": 46.12192 + }, + { + "x": 37.66307000000001, + "y": 57.0688 + }, + { + "x": 41.86126, + "y": 63.41366 + }, + { + "x": 51.73052, + "y": 66.6951 + }, + { + "x": 47.64847, + "y": 58.08665 + }, + { + "x": 35.17402, + "y": 56.00186 + }, + { + "x": 45.44158, + "y": 84.85019 + }, + { + "x": 63.14872, + "y": 70.52519000000002 + }, + { + "x": 42.08557, + "y": 54.22346999999999 + }, + { + "x": 46.01514, + "y": 58.37922 + }, + { + "x": 42.11817, + "y": 66.59673000000001 + }, + { + "x": 26.51054, + "y": 64.8716 + }, + { + "x": 28.67938, + "y": 67.39531 + }, + { + "x": 29.98758, + "y": 56.67641 + }, + { + "x": 23.97532, + "y": 53.69432 + }, + { + "x": 54.47663000000001, + "y": 68.48246999999999 + }, + { + "x": 25.66849, + "y": 56.62031999999999 + }, + { + "x": 36.40398, + "y": 63.52458000000001 + }, + { + "x": 37.76594, + "y": 48.95203 + }, + { + "x": 44.49676, + "y": 53.93384 + }, + { + "x": 41.21254, + "y": 67.43937 + }, + { + "x": 14.46949, + "y": 62.26729 + }, + { + "x": 26.00632, + "y": 58.30301 + }, + { + "x": 47.84569000000001, + "y": 51.46759 + }, + { + "x": 44.96501, + "y": 81.81427 + }, + { + "x": 52.12286, + "y": 65.78259 + }, + { + "x": 34.2726, + "y": 65.021 + }, + { + "x": 36.36313, + "y": 63.94629000000001 + }, + { + "x": 20.33037, + "y": 62.20769 + }, + { + "x": 58.24481, + "y": 54.45848 + }, + { + "x": 28.1422, + "y": 76.06569 + }, + { + "x": 40.83747, + "y": 60.21198 + }, + { + "x": 29.58027, + "y": 51.32616 + }, + { + "x": 41.68749, + "y": 56.74836 + }, + { + "x": 19.3453, + "y": 49.81644 + }, + { + "x": 39.10978, + "y": 59.98583000000001 + }, + { + "x": 30.06011, + "y": 59.57409000000001 + }, + { + "x": 30.11872, + "y": 48.14224 + }, + { + "x": 26.80173, + "y": 69.78267 + }, + { + "x": 41.4497, + "y": 56.78115 + }, + { + "x": 39.84126, + "y": 49.97964 + }, + { + "x": 59.78358000000001, + "y": 61.26106 + }, + { + "x": 45.44818, + "y": 64.82023000000001 + }, + { + "x": 58.4162, + "y": 58.58034 + }, + { + "x": 36.46915, + "y": 65.33484 + }, + { + "x": 47.39338, + "y": 54.89619 + }, + { + "x": 55.97659, + "y": 75.71833000000002 + }, + { + "x": 25.90733, + "y": 51.43085 + }, + { + "x": 56.32167, + "y": 55.58431 + }, + { + "x": 59.47724, + "y": 54.72548000000001 + }, + { + "x": 36.04946, + "y": 34.22141 + }, + { + "x": 34.61991, + "y": 75.20385 + }, + { + "x": 40.56393, + "y": 60.7759 + }, + { + "x": 23.05746, + "y": 43.83699 + }, + { + "x": 49.64375, + "y": 49.0249 + }, + { + "x": 22.87106, + "y": 59.36683000000001 + }, + { + "x": 41.12026, + "y": 55.79939 + }, + { + "x": 55.2759, + "y": 52.32505 + }, + { + "x": 45.41858, + "y": 69.30771 + }, + { + "x": 42.58969, + "y": 48.27374 + }, + { + "x": 59.78563000000001, + "y": 54.97828000000001 + }, + { + "x": 46.41741, + "y": 52.72119 + }, + { + "x": 13.429479999999998, + "y": 57.03562 + }, + { + "x": 50.9471, + "y": 56.93176 + }, + { + "x": 46.0973, + "y": 47.2256 + }, + { + "x": 34.89751, + "y": 71.07395 + }, + { + "x": 26.31495, + "y": 49.99565 + }, + { + "x": 30.89327, + "y": 79.22578 + }, + { + "x": 43.23482, + "y": 46.73741 + }, + { + "x": 44.94405, + "y": 50.6335 + }, + { + "x": 45.22232, + "y": 80.58161 + }, + { + "x": 33.076190000000004, + "y": 72.86371 + }, + { + "x": 52.04657, + "y": 62.56454 + }, + { + "x": 41.67568, + "y": 60.35936 + }, + { + "x": 55.84756, + "y": 67.5848 + }, + { + "x": 36.04547, + "y": 49.41498 + }, + { + "x": 36.28569, + "y": 60.10168 + }, + { + "x": 45.72856, + "y": 50.07189 + }, + { + "x": 39.05539, + "y": 54.94165 + }, + { + "x": 20.2726, + "y": 48.62656 + }, + { + "x": 27.33974000000001, + "y": 51.36997 + }, + { + "x": 46.13468, + "y": 55.69144 + }, + { + "x": 44.96999, + "y": 65.99128 + }, + { + "x": 46.39057, + "y": 67.48663 + }, + { + "x": 47.08233, + "y": 60.20998 + }, + { + "x": 36.53939, + "y": 60.50986 + }, + { + "x": 38.75325, + "y": 61.35403 + }, + { + "x": 42.64909, + "y": 57.29917 + }, + { + "x": 23.09582, + "y": 70.34206 + }, + { + "x": 42.44851, + "y": 44.21829 + }, + { + "x": 33.49563, + "y": 71.32774 + }, + { + "x": 47.07288, + "y": 55.7378 + }, + { + "x": 24.9612, + "y": 53.32379 + }, + { + "x": 45.48775, + "y": 65.85651 + }, + { + "x": 59.20356, + "y": 68.74465 + }, + { + "x": 44.00992, + "y": 50.52786 + }, + { + "x": 43.68642, + "y": 83.65863 + }, + { + "x": 41.87053, + "y": 51.92226 + }, + { + "x": 43.72969000000001, + "y": 46.00091 + }, + { + "x": 38.52629, + "y": 76.75724 + }, + { + "x": 53.42536, + "y": 73.632 + }, + { + "x": 39.33739, + "y": 51.29871 + }, + { + "x": 36.66598, + "y": 51.51536 + }, + { + "x": 41.96913, + "y": 61.30644 + }, + { + "x": 35.25198, + "y": 60.78493 + }, + { + "x": 33.56147, + "y": 59.85432 + }, + { + "x": 33.07125, + "y": 49.41556 + }, + { + "x": 48.44303, + "y": 51.90851 + }, + { + "x": 40.75025, + "y": 68.0989 + }, + { + "x": 50.35784, + "y": 54.57351 + }, + { + "x": 44.57279000000001, + "y": 78.77866999999998 + }, + { + "x": 24.52693, + "y": 68.57829 + }, + { + "x": 54.20255, + "y": 63.61836 + }, + { + "x": 41.30357, + "y": 66.8662 + }, + { + "x": 37.41374, + "y": 71.92524 + }, + { + "x": 26.862040000000004, + "y": 55.37459000000001 + }, + { + "x": 39.55137, + "y": 43.2294 + }, + { + "x": 47.00566, + "y": 53.65933 + }, + { + "x": 38.12361, + "y": 57.12999 + }, + { + "x": 37.52485, + "y": 80.64694 + }, + { + "x": 39.20578, + "y": 62.21249 + }, + { + "x": 52.36179, + "y": 58.99351 + }, + { + "x": 45.0324, + "y": 47.69177 + }, + { + "x": 40.86912, + "y": 38.84561 + }, + { + "x": 48.08253, + "y": 68.39591999999999 + }, + { + "x": 54.8749, + "y": 66.84655 + }, + { + "x": 24.57269, + "y": 71.18354000000002 + }, + { + "x": 35.00761, + "y": 57.033 + }, + { + "x": 43.44146, + "y": 65.25961 + }, + { + "x": 43.16221, + "y": 47.03518 + }, + { + "x": 34.24286, + "y": 62.92888000000001 + }, + { + "x": 43.58324, + "y": 56.57035 + }, + { + "x": 36.35557, + "y": 67.91736999999999 + }, + { + "x": 35.1833, + "y": 55.002280000000006 + }, + { + "x": 44.51795, + "y": 68.3382 + }, + { + "x": 54.39144, + "y": 37.30894 + }, + { + "x": 45.86727, + "y": 87.3137 + }, + { + "x": 39.09084, + "y": 66.78102 + }, + { + "x": 27.79925, + "y": 58.74916999999999 + }, + { + "x": 33.06475, + "y": 78.47807 + }, + { + "x": 23.54635, + "y": 55.19841 + }, + { + "x": 43.46392, + "y": 64.71713000000001 + }, + { + "x": 35.42679000000001, + "y": 54.08204 + }, + { + "x": 34.19314, + "y": 71.58672 + }, + { + "x": 10.8867, + "y": 68.44097 + }, + { + "x": 56.59104, + "y": 64.01100000000001 + }, + { + "x": 47.3817, + "y": 56.87357 + }, + { + "x": 38.49504, + "y": 60.46255 + }, + { + "x": 52.51262, + "y": 67.06044 + }, + { + "x": 44.5458, + "y": 57.88389 + }, + { + "x": 44.03849, + "y": 53.62613 + }, + { + "x": 36.41589000000001, + "y": 56.97656 + }, + { + "x": 50.31431, + "y": 61.40527 + }, + { + "x": 30.72297, + "y": 53.84721999999999 + }, + { + "x": 29.87761, + "y": 61.21636 + }, + { + "x": 59.26816, + "y": 69.29843000000001 + }, + { + "x": 35.04088, + "y": 61.20282 + }, + { + "x": 44.87322, + "y": 43.20948 + }, + { + "x": 29.24664000000001, + "y": 51.7367 + }, + { + "x": 50.04572, + "y": 53.45699000000001 + }, + { + "x": 47.97724, + "y": 69.38969 + }, + { + "x": 29.6133, + "y": 70.91985 + }, + { + "x": 30.89345, + "y": 61.36776 + }, + { + "x": 31.74421, + "y": 58.71527 + }, + { + "x": 36.60416, + "y": 56.83749 + }, + { + "x": 47.78417, + "y": 53.40695 + }, + { + "x": 23.22726, + "y": 57.4777 + }, + { + "x": 51.37993, + "y": 65.01276 + }, + { + "x": 31.36008, + "y": 63.86529 + }, + { + "x": 46.77678, + "y": 65.41521999999999 + }, + { + "x": 44.1524, + "y": 46.76581 + }, + { + "x": 41.43843, + "y": 54.11403000000001 + }, + { + "x": 53.77942, + "y": 55.54833000000001 + }, + { + "x": 33.7694, + "y": 79.58606999999998 + }, + { + "x": 35.79716, + "y": 55.52056 + }, + { + "x": 30.53843, + "y": 72.95658 + }, + { + "x": 46.22857, + "y": 34.535509999999995 + }, + { + "x": 39.67892, + "y": 62.87499 + }, + { + "x": 36.81919, + "y": 52.38703 + }, + { + "x": 34.27178, + "y": 48.92915 + }, + { + "x": 42.32842, + "y": 63.12152 + }, + { + "x": 46.33527, + "y": 63.28706999999999 + }, + { + "x": 53.53398000000001, + "y": 51.14082 + }, + { + "x": 40.61128, + "y": 50.21093 + }, + { + "x": 50.62107, + "y": 40.45209000000001 + }, + { + "x": 36.47783, + "y": 78.33963 + }, + { + "x": 52.38983, + "y": 64.53774 + }, + { + "x": 30.01806, + "y": 75.31725 + }, + { + "x": 39.00967, + "y": 50.87296 + }, + { + "x": 22.71875, + "y": 67.99089000000001 + }, + { + "x": 61.24, + "y": 65.89064 + }, + { + "x": 39.18396, + "y": 65.65822 + }, + { + "x": 44.69035, + "y": 57.93645 + }, + { + "x": 58.0471, + "y": 69.76289 + }, + { + "x": 51.25563, + "y": 61.33045 + }, + { + "x": 46.92124, + "y": 83.3785 + }, + { + "x": 46.25302, + "y": 66.06521 + }, + { + "x": 52.40546, + "y": 66.73065 + }, + { + "x": 40.28902, + "y": 53.28891 + }, + { + "x": 44.73831, + "y": 63.29274 + }, + { + "x": 43.15397, + "y": 65.65951 + }, + { + "x": 44.85846, + "y": 77.73084 + }, + { + "x": 42.86439, + "y": 67.90505 + }, + { + "x": 56.25276, + "y": 58.54541 + }, + { + "x": 51.62415, + "y": 67.15460999999999 + }, + { + "x": 44.7667, + "y": 61.48524000000001 + }, + { + "x": 48.91067, + "y": 66.60661 + }, + { + "x": 20.23477, + "y": 59.03073000000001 + }, + { + "x": 18.98427, + "y": 70.79776 + }, + { + "x": 16.33768, + "y": 68.84142 + }, + { + "x": 49.40031, + "y": 47.88199 + }, + { + "x": 41.66533, + "y": 67.50779 + }, + { + "x": 59.2293, + "y": 74.68412 + }, + { + "x": 58.47326, + "y": 53.63286 + }, + { + "x": 62.36666999999999, + "y": 50.95881 + }, + { + "x": 21.85536, + "y": 54.86045 + }, + { + "x": 40.38865, + "y": 61.31855 + }, + { + "x": 40.74187, + "y": 47.65873 + }, + { + "x": 58.00854, + "y": 42.82972 + }, + { + "x": 45.35452, + "y": 41.83214 + }, + { + "x": 66.66133, + "y": 50.6532 + }, + { + "x": 33.77558, + "y": 62.47507 + }, + { + "x": 48.09134, + "y": 64.89226 + }, + { + "x": 40.08256, + "y": 51.44899 + }, + { + "x": 29.58933, + "y": 58.19596 + }, + { + "x": 43.58031, + "y": 65.94927 + }, + { + "x": 53.30803, + "y": 36.98284 + }, + { + "x": 28.87137, + "y": 51.90188 + }, + { + "x": 56.40753, + "y": 62.59392 + }, + { + "x": 33.29645, + "y": 67.43765 + }, + { + "x": 38.72936, + "y": 56.59565 + }, + { + "x": 32.29439, + "y": 53.9696 + }, + { + "x": 32.41527, + "y": 48.44307 + }, + { + "x": 45.76281, + "y": 64.38473 + }, + { + "x": 33.8258, + "y": 59.16824 + }, + { + "x": 22.67527, + "y": 54.22386 + }, + { + "x": 13.199420000000002, + "y": 60.1388 + }, + { + "x": 29.50579, + "y": 55.28771 + }, + { + "x": 45.70325, + "y": 56.31371 + }, + { + "x": 43.70217, + "y": 61.486 + }, + { + "x": 29.53128, + "y": 66.01217 + }, + { + "x": 34.58708, + "y": 54.27694 + }, + { + "x": 51.84493, + "y": 61.97 + }, + { + "x": 46.43159, + "y": 55.3816 + }, + { + "x": 47.37223, + "y": 63.45379000000001 + }, + { + "x": 28.52821, + "y": 68.99037 + }, + { + "x": 53.74314, + "y": 61.20763 + }, + { + "x": 29.91581, + "y": 63.06654 + }, + { + "x": 51.85804, + "y": 68.08115 + }, + { + "x": 24.65317000000001, + "y": 60.97069000000001 + }, + { + "x": 45.07661, + "y": 64.13075 + }, + { + "x": 34.09175, + "y": 59.97359 + }, + { + "x": 49.69564, + "y": 67.62843000000001 + }, + { + "x": 43.0814, + "y": 55.20282 + }, + { + "x": 36.45465, + "y": 50.92306 + }, + { + "x": 45.95494, + "y": 50.09121 + }, + { + "x": 34.863040000000005, + "y": 61.43269 + }, + { + "x": 31.35199, + "y": 65.54097 + }, + { + "x": 28.85687, + "y": 70.20236 + }, + { + "x": 38.01644, + "y": 45.00452 + }, + { + "x": 39.33137, + "y": 61.01991 + }, + { + "x": 45.43656, + "y": 53.36308 + }, + { + "x": 21.14175, + "y": 39.8683 + }, + { + "x": 52.64809, + "y": 71.72782 + }, + { + "x": 36.58138, + "y": 39.92153 + }, + { + "x": 36.92193, + "y": 64.58077 + }, + { + "x": 17.71107, + "y": 64.94933 + }, + { + "x": 43.15869, + "y": 54.23448000000001 + }, + { + "x": 47.18889, + "y": 60.86159 + }, + { + "x": 43.73414, + "y": 62.9692 + }, + { + "x": 46.89299000000001, + "y": 65.56661 + }, + { + "x": 42.87272, + "y": 43.29337 + }, + { + "x": 40.53452, + "y": 61.72891 + }, + { + "x": 48.3142, + "y": 54.04765 + }, + { + "x": 38.05576, + "y": 45.26198 + }, + { + "x": 22.1779, + "y": 68.1016 + }, + { + "x": 56.94226999999999, + "y": 86.55324 + }, + { + "x": 34.75308, + "y": 55.7262 + }, + { + "x": 33.97889, + "y": 52.78297 + }, + { + "x": 40.91016, + "y": 65.19449 + }, + { + "x": 33.7199, + "y": 57.27735 + }, + { + "x": 49.14691, + "y": 64.16595 + }, + { + "x": 48.61678, + "y": 65.28603000000001 + }, + { + "x": 28.11857, + "y": 45.33089 + }, + { + "x": 20.4317, + "y": 51.46033 + }, + { + "x": 50.93737, + "y": 74.1835 + }, + { + "x": 22.29103, + "y": 75.65685 + }, + { + "x": 43.51035, + "y": 58.55402 + }, + { + "x": 60.11131999999999, + "y": 58.98568 + }, + { + "x": 61.21623, + "y": 69.80801 + }, + { + "x": 48.33622, + "y": 41.19602 + }, + { + "x": 33.39445, + "y": 65.82391 + }, + { + "x": 29.34521, + "y": 59.855880000000006 + }, + { + "x": 54.38664, + "y": 80.36837 + }, + { + "x": 34.7127, + "y": 57.47011 + }, + { + "x": 40.33881, + "y": 57.22665 + }, + { + "x": 62.24166, + "y": 51.57828 + }, + { + "x": 40.15035, + "y": 56.58465 + }, + { + "x": 38.71685, + "y": 70.14773000000001 + }, + { + "x": 39.12633, + "y": 60.63593 + }, + { + "x": 51.69781, + "y": 63.27919 + }, + { + "x": 25.68791, + "y": 40.27335 + }, + { + "x": 47.94294, + "y": 43.08792 + }, + { + "x": 67.88265, + "y": 60.98403 + }, + { + "x": 26.55077, + "y": 50.80384 + }, + { + "x": 46.29426, + "y": 47.39325 + }, + { + "x": 31.52882, + "y": 62.19854 + }, + { + "x": 57.78245, + "y": 63.38965 + }, + { + "x": 38.04019, + "y": 67.43048 + }, + { + "x": 37.7145, + "y": 51.81503 + }, + { + "x": 62.57692, + "y": 60.83238000000001 + }, + { + "x": 28.86001, + "y": 51.2246 + }, + { + "x": 41.62214, + "y": 58.10787 + }, + { + "x": 23.74967, + "y": 67.99766 + }, + { + "x": 46.85755, + "y": 54.24618 + }, + { + "x": 37.5762, + "y": 62.86578000000001 + }, + { + "x": 56.43054, + "y": 64.46651999999999 + }, + { + "x": 23.42326, + "y": 62.49845 + }, + { + "x": 44.27762, + "y": 57.30138 + }, + { + "x": 40.88654, + "y": 73.0129 + }, + { + "x": 35.14983, + "y": 69.20756 + }, + { + "x": 24.17791, + "y": 55.47302 + }, + { + "x": 41.70554, + "y": 59.55818000000001 + }, + { + "x": 36.33261, + "y": 42.50658 + }, + { + "x": 39.01491, + "y": 47.29492 + }, + { + "x": 44.81983, + "y": 67.23057 + }, + { + "x": 40.07327, + "y": 53.91739000000001 + }, + { + "x": 30.90242000000001, + "y": 79.43701999999998 + }, + { + "x": 36.81031, + "y": 51.52639 + }, + { + "x": 43.03812, + "y": 57.54671 + }, + { + "x": 32.79469, + "y": 64.19816 + }, + { + "x": 37.48284, + "y": 63.44551 + }, + { + "x": 45.29159, + "y": 76.73057 + }, + { + "x": 35.24219, + "y": 55.9317 + }, + { + "x": 38.39624, + "y": 63.38412 + }, + { + "x": 34.79193, + "y": 55.69379 + }, + { + "x": 48.43391, + "y": 46.13215 + }, + { + "x": 59.01439, + "y": 65.74738 + }, + { + "x": 35.53230999999999, + "y": 63.11478 + }, + { + "x": 40.90201, + "y": 74.3216 + }, + { + "x": 41.53148, + "y": 42.03367 + }, + { + "x": 35.52626, + "y": 83.71515 + }, + { + "x": 27.84255, + "y": 60.091 + }, + { + "x": 43.60266, + "y": 62.19615 + }, + { + "x": 24.29746, + "y": 62.7834 + }, + { + "x": 30.38543, + "y": 52.90134000000001 + }, + { + "x": 52.67648000000001, + "y": 32.67734 + }, + { + "x": 36.9756, + "y": 68.24067 + }, + { + "x": 37.8756, + "y": 68.28506 + }, + { + "x": 48.75739, + "y": 53.39937 + }, + { + "x": 56.86054, + "y": 59.49221 + }, + { + "x": 57.58251, + "y": 67.85455 + }, + { + "x": 42.30235, + "y": 54.44661 + }, + { + "x": 56.72005, + "y": 71.69892 + }, + { + "x": 34.09218, + "y": 56.2818 + }, + { + "x": 47.25593, + "y": 56.96026 + }, + { + "x": 23.48291, + "y": 54.36535 + }, + { + "x": 23.12866, + "y": 65.25963 + }, + { + "x": 51.5916, + "y": 62.71912 + }, + { + "x": 20.53896, + "y": 47.69149 + }, + { + "x": 51.81452, + "y": 52.07644000000001 + }, + { + "x": 48.44256, + "y": 51.18517 + }, + { + "x": 62.44255, + "y": 45.78976 + }, + { + "x": 17.27593, + "y": 60.46275 + }, + { + "x": 53.77579, + "y": 65.79630999999999 + }, + { + "x": 37.08417, + "y": 63.94993 + }, + { + "x": 47.97955, + "y": 55.61669000000001 + }, + { + "x": 35.22937, + "y": 74.55077 + }, + { + "x": 26.42555, + "y": 55.0765 + }, + { + "x": 40.20962, + "y": 64.5191 + }, + { + "x": 58.95403, + "y": 59.6799 + }, + { + "x": 17.213810000000002, + "y": 69.54397 + }, + { + "x": 32.95241, + "y": 52.18707 + }, + { + "x": 59.68467, + "y": 40.53054 + }, + { + "x": 30.58042, + "y": 63.08006999999999 + }, + { + "x": 48.74949, + "y": 70.51133 + }, + { + "x": 50.65636, + "y": 59.32031 + }, + { + "x": 40.4251, + "y": 50.73494 + }, + { + "x": 45.28402, + "y": 51.53691 + }, + { + "x": 34.34718, + "y": 47.58747 + }, + { + "x": 38.59024, + "y": 51.33721 + }, + { + "x": 40.71961, + "y": 74.12315 + }, + { + "x": 40.37913, + "y": 50.36806 + }, + { + "x": 47.26266, + "y": 70.09016 + }, + { + "x": 34.55216, + "y": 56.49265 + }, + { + "x": 42.125, + "y": 66.37105 + }, + { + "x": 56.81907, + "y": 44.97096 + }, + { + "x": 53.69396999999999, + "y": 66.83374 + }, + { + "x": 45.11847, + "y": 74.85613000000002 + }, + { + "x": 27.42444, + "y": 66.70893000000001 + }, + { + "x": 11.50407, + "y": 56.95046 + }, + { + "x": 49.0322, + "y": 62.76543 + }, + { + "x": 23.48502, + "y": 75.85309000000002 + }, + { + "x": 50.98872, + "y": 71.68141 + }, + { + "x": 27.57767, + "y": 62.33503 + }, + { + "x": 47.66222, + "y": 65.10868 + }, + { + "x": 45.13893, + "y": 67.17903000000001 + }, + { + "x": 45.78568, + "y": 69.31007 + }, + { + "x": 47.92223, + "y": 65.00936 + }, + { + "x": 48.03205, + "y": 47.78571 + }, + { + "x": 43.65009000000001, + "y": 56.48259 + }, + { + "x": 28.54301, + "y": 59.48517 + }, + { + "x": 48.14451, + "y": 60.26351 + }, + { + "x": 30.73458, + "y": 53.41976 + }, + { + "x": 41.65806, + "y": 72.97176999999998 + }, + { + "x": 47.42073, + "y": 72.11551 + }, + { + "x": 54.31567, + "y": 51.07155 + }, + { + "x": 37.98036, + "y": 67.0989 + }, + { + "x": 58.32997, + "y": 63.25209 + }, + { + "x": 43.19876, + "y": 60.36071999999999 + }, + { + "x": 28.113090000000003, + "y": 72.51996 + }, + { + "x": 37.01089, + "y": 69.21339 + }, + { + "x": 32.97436, + "y": 69.77639 + }, + { + "x": 34.20864, + "y": 61.29887 + }, + { + "x": 31.93696, + "y": 62.87588 + }, + { + "x": 30.94324000000001, + "y": 70.95922 + }, + { + "x": 43.49319000000001, + "y": 59.84101 + }, + { + "x": 27.81164, + "y": 72.67459000000002 + }, + { + "x": 32.15255, + "y": 42.51905 + }, + { + "x": 51.29612, + "y": 79.81878 + }, + { + "x": 38.0315, + "y": 54.71503000000001 + }, + { + "x": 29.27812, + "y": 62.24455 + }, + { + "x": 44.40411, + "y": 68.84855 + }, + { + "x": 23.34787, + "y": 61.94084 + }, + { + "x": 49.36656, + "y": 64.14016 + }, + { + "x": 17.60005, + "y": 69.14876 + }, + { + "x": 30.85341, + "y": 54.0978 + }, + { + "x": 44.90497, + "y": 63.7959 + }, + { + "x": 57.36587, + "y": 58.50857 + }, + { + "x": 49.0943, + "y": 69.75703 + }, + { + "x": 26.6611, + "y": 68.32285 + }, + { + "x": 40.70467, + "y": 53.43072 + }, + { + "x": 28.55086, + "y": 56.30226 + }, + { + "x": 36.25912, + "y": 59.3196 + }, + { + "x": 48.98826, + "y": 66.10667 + }, + { + "x": 33.26312, + "y": 69.86829 + }, + { + "x": 32.02353, + "y": 58.18483000000001 + }, + { + "x": 27.304240000000004, + "y": 55.4792 + }, + { + "x": 51.44975, + "y": 71.13834 + }, + { + "x": 59.81329, + "y": 47.9164 + }, + { + "x": 51.14651, + "y": 60.19600000000001 + }, + { + "x": 61.69583000000001, + "y": 47.11762 + }, + { + "x": 36.56804, + "y": 68.23382 + }, + { + "x": 40.64832, + "y": 66.75034000000001 + }, + { + "x": 45.86368, + "y": 68.31128000000001 + }, + { + "x": 44.60644, + "y": 60.16793000000001 + }, + { + "x": 35.88663, + "y": 49.38532 + }, + { + "x": 57.68279, + "y": 60.16859 + }, + { + "x": 51.6255, + "y": 49.49683 + }, + { + "x": 42.5861, + "y": 62.54503 + }, + { + "x": 46.0202, + "y": 56.69676 + }, + { + "x": 46.45453, + "y": 58.70955 + }, + { + "x": 38.30502, + "y": 49.6469 + }, + { + "x": 48.84556, + "y": 65.31183 + }, + { + "x": 30.15666, + "y": 63.67134 + }, + { + "x": 38.53791, + "y": 56.76666 + }, + { + "x": 23.9704, + "y": 68.72659 + }, + { + "x": 50.02861, + "y": 63.9783 + }, + { + "x": 45.18616, + "y": 61.15616 + }, + { + "x": 43.502, + "y": 73.08999 + }, + { + "x": 44.7494, + "y": 43.9657 + }, + { + "x": 60.56076, + "y": 43.47697 + }, + { + "x": 51.11581, + "y": 80.65344 + }, + { + "x": 35.88928, + "y": 62.03462 + }, + { + "x": 32.33509, + "y": 52.6811 + }, + { + "x": 49.07877, + "y": 68.18728 + }, + { + "x": 50.33895, + "y": 64.57106 + }, + { + "x": 49.26652, + "y": 79.60231 + }, + { + "x": 18.55579, + "y": 68.16774000000001 + }, + { + "x": 41.00905, + "y": 45.10266 + }, + { + "x": 28.00344, + "y": 61.47371 + }, + { + "x": 18.14624, + "y": 60.1302 + }, + { + "x": 53.95843000000001, + "y": 68.46303 + }, + { + "x": 52.5372, + "y": 68.16769000000001 + }, + { + "x": 38.93926, + "y": 62.98392 + }, + { + "x": 29.05058, + "y": 62.4427 + }, + { + "x": 41.75223, + "y": 64.63294 + }, + { + "x": 37.64791, + "y": 47.91551 + }, + { + "x": 48.79252, + "y": 64.57806 + }, + { + "x": 51.77635, + "y": 55.95868000000001 + }, + { + "x": 27.10765, + "y": 58.84145 + }, + { + "x": 38.6845, + "y": 49.5615 + }, + { + "x": 44.48639, + "y": 56.53763000000001 + }, + { + "x": 23.60541, + "y": 43.46694 + }, + { + "x": 38.7037, + "y": 61.0992 + }, + { + "x": 43.00739, + "y": 55.95437 + }, + { + "x": 51.56791, + "y": 63.63943 + }, + { + "x": 25.26915, + "y": 63.87523 + }, + { + "x": 42.56982, + "y": 67.66801 + }, + { + "x": 38.08915, + "y": 64.5408 + }, + { + "x": 34.78496, + "y": 45.51393 + }, + { + "x": 35.88933, + "y": 55.3666 + }, + { + "x": 47.22242, + "y": 66.03583 + }, + { + "x": 51.96253, + "y": 51.7511 + }, + { + "x": 40.78976, + "y": 59.28554000000001 + }, + { + "x": 41.27407, + "y": 67.80852 + }, + { + "x": 44.66972, + "y": 69.17705 + }, + { + "x": 39.15088, + "y": 54.56051 + }, + { + "x": 29.16955, + "y": 64.9487 + }, + { + "x": 31.77423, + "y": 66.87607 + }, + { + "x": 53.4651, + "y": 62.77485 + }, + { + "x": 40.41047, + "y": 72.14114000000002 + }, + { + "x": 42.61213, + "y": 59.06376 + }, + { + "x": 39.57467000000001, + "y": 62.27438000000001 + }, + { + "x": 54.50277, + "y": 49.35228 + }, + { + "x": 57.91767, + "y": 56.73445 + }, + { + "x": 45.64944000000001, + "y": 53.13589 + }, + { + "x": 21.88918, + "y": 49.30231 + }, + { + "x": 51.04494, + "y": 68.31933000000001 + }, + { + "x": 42.09716, + "y": 72.15952 + }, + { + "x": 43.04227, + "y": 53.48631999999999 + }, + { + "x": 47.14463, + "y": 56.0835 + }, + { + "x": 45.62461, + "y": 77.81975 + }, + { + "x": 55.20789, + "y": 58.71653000000001 + }, + { + "x": 36.05181, + "y": 53.08629000000001 + }, + { + "x": 43.73998, + "y": 58.94337 + }, + { + "x": 34.23256, + "y": 65.07769 + }, + { + "x": 20.95196, + "y": 74.2487 + }, + { + "x": 32.883140000000004, + "y": 79.69149 + }, + { + "x": 38.36533, + "y": 59.0739 + }, + { + "x": 44.56165, + "y": 52.40328 + }, + { + "x": 39.33794, + "y": 70.14443 + }, + { + "x": 49.1245, + "y": 67.76719 + }, + { + "x": 22.91567, + "y": 56.11771 + }, + { + "x": 45.63892, + "y": 47.58675 + }, + { + "x": 42.75653, + "y": 63.07043 + }, + { + "x": 46.39609, + "y": 68.40751 + }, + { + "x": 46.88703, + "y": 66.433 + }, + { + "x": 54.88489000000001, + "y": 75.612 + }, + { + "x": 34.0548, + "y": 57.12219 + }, + { + "x": 37.38898, + "y": 62.3226 + }, + { + "x": 48.23034000000001, + "y": 62.03111 + }, + { + "x": 54.79646999999999, + "y": 59.39724 + }, + { + "x": 59.52773000000001, + "y": 50.58208 + }, + { + "x": 50.2512, + "y": 67.96679 + }, + { + "x": 46.22677, + "y": 54.53655 + }, + { + "x": 48.98464, + "y": 58.14621 + }, + { + "x": 45.09392, + "y": 64.88113 + }, + { + "x": 44.77223, + "y": 44.4438 + }, + { + "x": 34.00083, + "y": 59.08957 + }, + { + "x": 28.31505, + "y": 36.30374000000001 + }, + { + "x": 53.05011, + "y": 67.34682 + }, + { + "x": 25.10745, + "y": 42.70245 + }, + { + "x": 46.08558, + "y": 61.97675 + }, + { + "x": 50.62893, + "y": 45.19788 + }, + { + "x": 46.68802, + "y": 47.42063 + }, + { + "x": 43.07386, + "y": 77.93637 + }, + { + "x": 36.70228, + "y": 53.66054000000001 + }, + { + "x": 11.47373, + "y": 68.61527 + }, + { + "x": 42.08087, + "y": 66.43765 + }, + { + "x": 37.96224, + "y": 52.46353000000001 + }, + { + "x": 28.30779, + "y": 70.53446 + }, + { + "x": 59.18555, + "y": 62.19979 + }, + { + "x": 43.39802, + "y": 63.35423 + }, + { + "x": 37.68739, + "y": 55.33306 + }, + { + "x": 48.85135, + "y": 64.6936 + }, + { + "x": 42.29553, + "y": 61.3545 + }, + { + "x": 53.10208000000001, + "y": 61.65183 + }, + { + "x": 44.18706, + "y": 56.29505 + }, + { + "x": 47.34497, + "y": 61.47756999999999 + }, + { + "x": 34.5298, + "y": 67.07189 + }, + { + "x": 22.82447, + "y": 57.02137 + }, + { + "x": 48.27827, + "y": 53.97093 + }, + { + "x": 45.27673, + "y": 52.04495 + }, + { + "x": 44.17967, + "y": 64.35678 + }, + { + "x": 33.85752, + "y": 60.59858000000001 + }, + { + "x": 29.57068, + "y": 55.91483 + }, + { + "x": 43.5061, + "y": 62.07275 + }, + { + "x": 26.33832, + "y": 73.38955 + }, + { + "x": 13.77208, + "y": 64.03381 + }, + { + "x": 37.39434, + "y": 60.17785 + }, + { + "x": 25.09434, + "y": 55.0823 + }, + { + "x": 41.91991, + "y": 45.2935 + }, + { + "x": 54.314780000000006, + "y": 53.6106 + }, + { + "x": 42.18649, + "y": 61.34159 + }, + { + "x": 47.74056, + "y": 60.98222 + }, + { + "x": 38.6671, + "y": 54.8464 + }, + { + "x": 34.33136, + "y": 63.66866 + }, + { + "x": 45.49676, + "y": 46.21109000000001 + }, + { + "x": 48.64805, + "y": 50.69878 + }, + { + "x": 59.7194, + "y": 53.67238 + }, + { + "x": 48.14389, + "y": 64.17408 + }, + { + "x": 55.16922, + "y": 76.47846 + }, + { + "x": 51.50727, + "y": 65.82463 + }, + { + "x": 42.69824000000001, + "y": 71.33099 + }, + { + "x": 52.7367, + "y": 66.52017 + }, + { + "x": 44.49347, + "y": 44.03264 + }, + { + "x": 42.79715, + "y": 51.57061 + }, + { + "x": 50.60694, + "y": 52.83994000000001 + }, + { + "x": 37.5125, + "y": 68.15924 + }, + { + "x": 46.73844, + "y": 65.58825 + }, + { + "x": 30.74257, + "y": 54.61626999999999 + }, + { + "x": 52.50878, + "y": 63.62914 + }, + { + "x": 18.06539, + "y": 67.96441 + }, + { + "x": 36.22066, + "y": 49.6668 + }, + { + "x": 26.8746, + "y": 69.52796 + }, + { + "x": 46.44655, + "y": 53.95027 + }, + { + "x": 37.5481, + "y": 59.69554 + }, + { + "x": 26.17275, + "y": 73.02736 + }, + { + "x": 42.92903, + "y": 70.03363 + }, + { + "x": 36.25652, + "y": 64.53602 + }, + { + "x": 32.719390000000004, + "y": 57.83974 + }, + { + "x": 45.61599, + "y": 61.58367 + }, + { + "x": 39.26789, + "y": 57.98376 + }, + { + "x": 34.55469, + "y": 66.68845 + }, + { + "x": 36.45908, + "y": 70.13852 + }, + { + "x": 41.83166, + "y": 77.96375 + }, + { + "x": 25.83818, + "y": 63.53773 + }, + { + "x": 27.9007, + "y": 58.79853000000001 + }, + { + "x": 41.00502, + "y": 68.62589 + }, + { + "x": 34.09975, + "y": 75.41776999999998 + }, + { + "x": 29.14662, + "y": 51.12136 + }, + { + "x": 41.39825, + "y": 53.92034 + }, + { + "x": 54.13261, + "y": 51.89971 + }, + { + "x": 36.2243, + "y": 62.59828 + }, + { + "x": 29.95055, + "y": 56.40722 + }, + { + "x": 46.80503, + "y": 70.14497 + }, + { + "x": 41.96831, + "y": 67.27118 + }, + { + "x": 12.71827, + "y": 62.29628 + }, + { + "x": 44.39297, + "y": 59.58195 + }, + { + "x": 24.46523, + "y": 63.57868000000001 + }, + { + "x": 29.6177, + "y": 59.74445 + }, + { + "x": 21.74248, + "y": 50.45285 + }, + { + "x": 29.35508, + "y": 70.05808 + }, + { + "x": 27.226440000000004, + "y": 75.18531999999998 + }, + { + "x": 51.79697, + "y": 61.69157 + }, + { + "x": 44.62026, + "y": 47.41006 + }, + { + "x": 34.06684, + "y": 52.82305 + }, + { + "x": 43.62076, + "y": 50.27394 + }, + { + "x": 42.41596, + "y": 68.93131 + }, + { + "x": 49.61633, + "y": 54.8229 + }, + { + "x": 33.73294, + "y": 67.42624 + }, + { + "x": 55.72386, + "y": 76.51932 + }, + { + "x": 27.83457000000001, + "y": 62.72257 + }, + { + "x": 49.89798, + "y": 51.15889 + }, + { + "x": 60.58085, + "y": 69.45195 + }, + { + "x": 56.16206999999999, + "y": 70.20759 + }, + { + "x": 51.31114, + "y": 74.59144 + }, + { + "x": 40.39541, + "y": 54.17054 + }, + { + "x": 52.45226, + "y": 55.42988 + }, + { + "x": 45.69188, + "y": 51.24299 + }, + { + "x": 45.85658, + "y": 65.63105 + }, + { + "x": 55.69338000000001, + "y": 65.96500999999999 + }, + { + "x": 36.04146, + "y": 62.1499 + }, + { + "x": 28.33257, + "y": 70.274 + }, + { + "x": 41.79587, + "y": 77.08113 + }, + { + "x": 38.54986, + "y": 81.29446999999998 + }, + { + "x": 40.67175, + "y": 54.77458000000001 + }, + { + "x": 38.67076, + "y": 67.80664 + }, + { + "x": 35.75459, + "y": 52.14807 + }, + { + "x": 47.64047, + "y": 62.95349 + }, + { + "x": 44.38814, + "y": 50.86422 + }, + { + "x": 55.07092, + "y": 45.49946 + }, + { + "x": 47.48012, + "y": 58.80583000000001 + }, + { + "x": 40.05356, + "y": 72.84874 + }, + { + "x": 41.29422, + "y": 67.83528000000001 + }, + { + "x": 36.53526, + "y": 78.04978 + }, + { + "x": 23.52244, + "y": 51.33826 + }, + { + "x": 42.98621, + "y": 55.51208000000001 + }, + { + "x": 25.60867, + "y": 47.51016 + }, + { + "x": 31.30385, + "y": 71.48902 + }, + { + "x": 54.79936, + "y": 68.69215 + }, + { + "x": 33.320640000000004, + "y": 69.45271 + }, + { + "x": 42.24906, + "y": 47.52644 + }, + { + "x": 29.504, + "y": 48.87712 + }, + { + "x": 31.42953, + "y": 52.80237 + }, + { + "x": 51.66205, + "y": 57.32731999999999 + }, + { + "x": 38.16498, + "y": 53.45429 + }, + { + "x": 44.65573, + "y": 61.14825 + } + ] + } + ], + "x_label": "V1", + "y_label": "V2", + "iterations": 2, + "distance_metric": "EUCLIDEAN", + "silhouette_score": 0.6945587736089913, + "davies_bouldin_index": 0.4205615850847846 +} diff --git a/src/app/interfaces/chartDataset-interface.ts b/src/app/interfaces/chartDataset-interface.ts new file mode 100644 index 0000000..e2a3280 --- /dev/null +++ b/src/app/interfaces/chartDataset-interface.ts @@ -0,0 +1,11 @@ +export interface ChartDatasetInterface { + "label": string, + "data": Object +} + +export interface CentroidDatesetInterface { + "label": string, + "data": Object, + "pointStyle": string, + "radius": number +} diff --git a/src/app/interfaces/response-interface.ts b/src/app/interfaces/response-interface.ts new file mode 100644 index 0000000..69d160a --- /dev/null +++ b/src/app/interfaces/response-interface.ts @@ -0,0 +1,26 @@ +export interface ResponseInterface { + "name": string, + "cluster": Array, + "x_label": string, + "y_label": string, + "iterations": number, + "distance_metric": string, + "silhouette_score": number, + "davies_bouldin_index": number, +} + +interface Cluster { + "clusterNr": number, + "centroid": Centroid, + "points": Array +} + +export interface Points { + "x": number, + "y": number +} + +interface Centroid { + "x": number, + "y": number +} From 66adc98ba3d86165d3f87cce8b783b8e123af4ad Mon Sep 17 00:00:00 2001 From: cepurwin Date: Thu, 21 Sep 2023 10:40:26 +0200 Subject: [PATCH 02/24] Removed unused import --- src/app/home/chart-container/chart/chart.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/home/chart-container/chart/chart.component.ts b/src/app/home/chart-container/chart/chart.component.ts index 43cab90..b096235 100644 --- a/src/app/home/chart-container/chart/chart.component.ts +++ b/src/app/home/chart-container/chart/chart.component.ts @@ -1,5 +1,5 @@ import {AfterViewInit, Component} from '@angular/core'; -import {Chart, plugins} from "chart.js/auto"; +import {Chart} from "chart.js/auto"; import {Points, ResponseInterface} from "../../../interfaces/response-interface"; import {CentroidDatesetInterface, ChartDatasetInterface} from "../../../interfaces/chartDataset-interface"; import {MockDaten} from "./mock-daten"; From 6922b2d6ec365d13207da3b125e62197c8dcf612 Mon Sep 17 00:00:00 2001 From: cepurwin Date: Thu, 21 Sep 2023 10:40:02 +0200 Subject: [PATCH 03/24] Chart working with Mock-Data --- .../chart-container.component.html | 2 - .../chart-container/chart/chart.component.ts | 66 +- .../home/chart-container/chart/mock-daten.ts | 12040 ++++++++++++++++ src/app/interfaces/chartDataset-interface.ts | 11 + src/app/interfaces/response-interface.ts | 26 + 5 files changed, 12128 insertions(+), 17 deletions(-) create mode 100644 src/app/home/chart-container/chart/mock-daten.ts create mode 100644 src/app/interfaces/chartDataset-interface.ts create mode 100644 src/app/interfaces/response-interface.ts diff --git a/src/app/home/chart-container/chart-container.component.html b/src/app/home/chart-container/chart-container.component.html index a333303..df7ab95 100644 --- a/src/app/home/chart-container/chart-container.component.html +++ b/src/app/home/chart-container/chart-container.component.html @@ -1,3 +1 @@ -

Chart Container

-

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.

diff --git a/src/app/home/chart-container/chart/chart.component.ts b/src/app/home/chart-container/chart/chart.component.ts index e27ba54..43cab90 100644 --- a/src/app/home/chart-container/chart/chart.component.ts +++ b/src/app/home/chart-container/chart/chart.component.ts @@ -1,5 +1,8 @@ import {AfterViewInit, Component} from '@angular/core'; -import {Chart} from "chart.js/auto"; +import {Chart, plugins} from "chart.js/auto"; +import {Points, ResponseInterface} from "../../../interfaces/response-interface"; +import {CentroidDatesetInterface, ChartDatasetInterface} from "../../../interfaces/chartDataset-interface"; +import {MockDaten} from "./mock-daten"; @Component({ selector: 'app-chart', @@ -8,31 +11,44 @@ import {Chart} from "chart.js/auto"; }) export class ChartComponent implements AfterViewInit{ public chart: any; - chartImage: string = ''; - datensatz1: Array<{}> = [{ "x": 1.2, "y": 3.4 }, { "x": 3.1, "y": 4.7 }, { "x": 4.5, "y": 2.8 }, { "x": 2.3, "y": 1.6 }, { "x": 1.8, "y": 4.2 }, { "x": 4.7, "y": 3.2 }, { "x": 3.9, "y": 1.9 }, { "x": 2.6, "y": 4.5 }, { "x": 1.5, "y": 3.1 }, { "x": 2.8, "y": 2.1 }, { "x": 4.3, "y": 3.8 }, { "x": 1.4, "y": 4.9 }, { "x": 3.7, "y": 2.7 }, { "x": 1.9, "y": 1.5 }, { "x": 4.0, "y": 4.3 }, { "x": 2.2, "y": 1.7 }, { "x": 3.4, "y": 3.5 }, { "x": 2.0, "y": 4.8 }, { "x": 1.7, "y": 2.4 }, { "x": 4.6, "y": 1.3 }, { "x": 3.3, "y": 2.2 }, { "x": 2.5, "y": 3.9 }, { "x": 4.2, "y": 4.1 }, { "x": 1.1, "y": 1.2 }, { "x": 3.0, "y": 5.0 }, { "x": 2.4, "y": 3.3 }, { "x": 4.4, "y": 2.0 }, { "x": 1.3, "y": 4.6 }, { "x": 3.6, "y": 2.3 }, { "x": 2.9, "y": 1.4 }, { "x": 4.8, "y": 3.7 }, { "x": 1.6, "y": 2.6 },{ "x": 3.5, "y": 4.4 },]; - datensatz2: Array<{}> = [ { "x": 1.7, "y": 2.8 }, { "x": 4.3, "y": 3.1 }, { "x": 2.5, "y": 1.4 }, { "x": 1.9, "y": 4.2 }, { "x": 3.6, "y": 2.3 }, { "x": 4.0, "y": 1.6 }, { "x": 2.1, "y": 3.9 }, { "x": 1.3, "y": 4.8 }, { "x": 4.7, "y": 2.0 }, { "x": 2.0, "y": 3.2 }, { "x": 3.9, "y": 4.7 }, { "x": 1.4, "y": 2.6 }, { "x": 2.8, "y": 1.1 }, { "x": 4.5, "y": 4.0 }, { "x": 3.0, "y": 2.7 }, { "x": 2.2, "y": 5.0 }, { "x": 1.1, "y": 3.4 }, { "x": 4.6, "y": 3.5 }, { "x": 3.7, "y": 1.3 }, { "x": 1.5, "y": 4.5 }, { "x": 4.2, "y": 1.9 }, { "x": 3.3, "y": 2.9 }, { "x": 2.4, "y": 4.3 }, { "x": 1.6, "y": 3.8 }, { "x": 4.4, "y": 2.4 }, { "x": 2.7, "y": 1.5 }, { "x": 3.4, "y": 4.6 }, { "x": 1.2, "y": 2.1 }, { "x": 4.1, "y": 3.0 }, { "x": 3.5, "y": 1.7 }, { "x": 2.3, "y": 5.0 }]; + MockData: ResponseInterface = MockDaten + datasets: Array = []; ngAfterViewInit() { this.renderChart(); } + generateDatasets() { + let centroids: Array = []; + let clusterArray: Array = []; + this.MockData.cluster.map(cluster => { + let dataset: ChartDatasetInterface = { + label: "Cluster " + (cluster.clusterNr + 1), + data: cluster.points + } + centroids.push(cluster.centroid) + clusterArray.push(dataset) + }) + const centroidDataset: CentroidDatesetInterface = { + label: "Centroids", + data: centroids, + pointStyle: "rectRot", + radius: 10 + } + this.datasets.push(centroidDataset) + clusterArray.map(cluster => { + this.datasets.push(cluster); + }) + } + renderChart(){ + this.generateDatasets() var image: string; this.chart = new Chart("Chart", { type: 'scatter', //this denotes tha type of chart data: { - datasets: [ - { - label: 'test1', - data: this.datensatz1 - }, - { - label: 'test2', - data: this.datensatz2 - }, - - ] + datasets: this.datasets }, options: { aspectRatio:1, @@ -43,6 +59,26 @@ export class ChartComponent implements AfterViewInit{ a.href = this.toBase64Image(); a.download = 'chart.png'; }, + }, + plugins: { + title: { + display: true, + text: MockDaten.name + }, + }, + scales: { + y: { + title: { + display: true, + text: MockDaten.y_label + } + }, + x: { + title: { + display: true, + text: MockDaten.x_label + } + } } } }); diff --git a/src/app/home/chart-container/chart/mock-daten.ts b/src/app/home/chart-container/chart/mock-daten.ts new file mode 100644 index 0000000..bb8f886 --- /dev/null +++ b/src/app/home/chart-container/chart/mock-daten.ts @@ -0,0 +1,12040 @@ +import {ResponseInterface} from "../../../interfaces/response-interface"; + +export const MockDaten: ResponseInterface = { + "name": "K-Means Ergebnis von: xclara", + "cluster": [ + { + "clusterNr": 0, + "centroid": { + "x": 9.478045899766407, + "y": 10.686052004816457 + }, + "points": [ + { + "x": 2.072345, + "y": -3.241693 + }, + { + "x": 17.93671, + "y": 15.78481 + }, + { + "x": 1.083576, + "y": 7.319176 + }, + { + "x": 11.12067, + "y": 14.40678 + }, + { + "x": 23.71155, + "y": 2.557729 + }, + { + "x": 24.16993, + "y": 32.02478 + }, + { + "x": 21.66578, + "y": 4.892855 + }, + { + "x": 4.693683999999998, + "y": 12.34217 + }, + { + "x": 19.21191, + "y": -1.121366 + }, + { + "x": 4.230391, + "y": -4.441536 + }, + { + "x": 9.12713, + "y": 23.60572 + }, + { + "x": 0.4075031, + "y": 15.29705 + }, + { + "x": 7.314846000000001, + "y": 3.3093120000000003 + }, + { + "x": -3.438403, + "y": -12.02527 + }, + { + "x": 17.63935, + "y": -3.212345 + }, + { + "x": 4.415292, + "y": 22.81555 + }, + { + "x": 11.94122, + "y": 8.122487 + }, + { + "x": 0.7258532, + "y": 1.806819 + }, + { + "x": 8.185273, + "y": 28.1326 + }, + { + "x": -5.773587, + "y": 1.0248 + }, + { + "x": 18.76943, + "y": 24.16946 + }, + { + "x": 7.752016, + "y": -3.3349910000000005 + }, + { + "x": 10.61132, + "y": 28.44378 + }, + { + "x": 2.02165, + "y": -4.6871220000000005 + }, + { + "x": 5.145525, + "y": 11.186 + }, + { + "x": 6.24331, + "y": 19.47716 + }, + { + "x": -11.70671, + "y": 8.073185 + }, + { + "x": 7.255978, + "y": 14.63704 + }, + { + "x": 3.3923730000000005, + "y": 1.220712 + }, + { + "x": 4.094005, + "y": 6.944694999999999 + }, + { + "x": 11.80358, + "y": -2.445336 + }, + { + "x": 0.09228785, + "y": -6.651035 + }, + { + "x": 28.50607, + "y": -9.091833 + }, + { + "x": 23.40831, + "y": 7.931438000000001 + }, + { + "x": 10.56305, + "y": 12.54468 + }, + { + "x": 20.14157, + "y": 11.11789 + }, + { + "x": -1.871265, + "y": 8.60885 + }, + { + "x": 29.30237, + "y": 14.02176 + }, + { + "x": 18.65383, + "y": 17.216720000000002 + }, + { + "x": -2.972188, + "y": 6.370998999999999 + }, + { + "x": 10.32313, + "y": 12.11574 + }, + { + "x": 16.90539, + "y": -1.355044 + }, + { + "x": 6.753710000000001, + "y": 12.02797 + }, + { + "x": 23.94777, + "y": 13.35047 + }, + { + "x": 6.8835130000000015, + "y": 6.188562999999999 + }, + { + "x": -1.241542, + "y": 10.08179 + }, + { + "x": 20.50827, + "y": -1.57887 + }, + { + "x": -3.75683, + "y": 1.60851 + }, + { + "x": 17.9176, + "y": 13.09896 + }, + { + "x": 2.002537, + "y": -0.656524 + }, + { + "x": 10.7768, + "y": 15.5336 + }, + { + "x": 24.15819, + "y": 5.3303660000000015 + }, + { + "x": 0.3268727, + "y": 7.288786999999999 + }, + { + "x": 21.64777, + "y": 14.00506 + }, + { + "x": 6.871417, + "y": 21.51998 + }, + { + "x": 15.14264, + "y": 5.111947 + }, + { + "x": 11.54712, + "y": 4.75756 + }, + { + "x": 0.6611676, + "y": -10.14263 + }, + { + "x": -13.66531, + "y": 16.93903 + }, + { + "x": 24.90937000000001, + "y": -10.82038 + }, + { + "x": -4.53022, + "y": -6.173767 + }, + { + "x": 3.163677, + "y": 8.051480999999999 + }, + { + "x": 1.495172, + "y": -7.261601 + }, + { + "x": 7.097637, + "y": 2.105751 + }, + { + "x": 3.5094830000000004, + "y": 24.58487 + }, + { + "x": 12.99879, + "y": 24.91248 + }, + { + "x": 0.3593824, + "y": 6.3879150000000005 + }, + { + "x": 14.35429, + "y": -2.252421 + }, + { + "x": 3.831208, + "y": -2.000873 + }, + { + "x": 31.40462, + "y": 26.77209 + }, + { + "x": -5.501097, + "y": 13.391279999999998 + }, + { + "x": -1.04476, + "y": 5.955898 + }, + { + "x": 4.409013, + "y": 9.323681 + }, + { + "x": 2.917201, + "y": 16.53999 + }, + { + "x": 7.265954, + "y": 10.64794 + }, + { + "x": 10.32038, + "y": 13.368570000000002 + }, + { + "x": 9.35213, + "y": 10.42427 + }, + { + "x": 6.648532, + "y": 11.07535 + }, + { + "x": -1.922306, + "y": 4.888493 + }, + { + "x": 7.2260399999999985, + "y": 13.02948 + }, + { + "x": 8.327288000000001, + "y": 8.540999000000001 + }, + { + "x": 17.69046, + "y": 21.59555 + }, + { + "x": 16.58353, + "y": 18.16115 + }, + { + "x": 12.35425, + "y": 31.96708 + }, + { + "x": 2.4711380000000003, + "y": 5.482761 + }, + { + "x": 18.4925, + "y": 29.42421 + }, + { + "x": 10.1196, + "y": 7.162078 + }, + { + "x": 20.40245, + "y": 3.943319 + }, + { + "x": 12.71589, + "y": 4.531656 + }, + { + "x": 24.35859, + "y": -4.0644 + }, + { + "x": 21.74312, + "y": 15.90887 + }, + { + "x": 12.27208, + "y": -9.612116 + }, + { + "x": 18.29681, + "y": 22.38563 + }, + { + "x": 3.530957, + "y": 8.673297 + }, + { + "x": 5.026042, + "y": 36.03767 + }, + { + "x": -0.8633009, + "y": -7.586249 + }, + { + "x": 26.83892, + "y": 13.13713 + }, + { + "x": 19.11999, + "y": 7.209714999999999 + }, + { + "x": -0.8841636999999999, + "y": 27.15254 + }, + { + "x": -5.191529, + "y": 29.65612 + }, + { + "x": 9.796095, + "y": 15.43598 + }, + { + "x": 11.66314, + "y": 10.63428 + }, + { + "x": 9.925199, + "y": 26.80364 + }, + { + "x": 33.90998, + "y": 15.02652 + }, + { + "x": 9.57004, + "y": 9.2481 + }, + { + "x": -16.2653, + "y": 13.90024 + }, + { + "x": 15.10579, + "y": 3.350049 + }, + { + "x": -4.186504, + "y": 7.964410000000001 + }, + { + "x": 12.54816, + "y": 32.51867 + }, + { + "x": -7.733469, + "y": 9.634491 + }, + { + "x": 18.91337, + "y": 15.7414 + }, + { + "x": -1.050022, + "y": -4.0034550000000015 + }, + { + "x": -6.894765, + "y": 1.041802 + }, + { + "x": 23.05031, + "y": -12.76934 + }, + { + "x": 25.96073, + "y": 11.44522 + }, + { + "x": 7.9507949999999985, + "y": 6.811407000000001 + }, + { + "x": -3.669517, + "y": -4.329696 + }, + { + "x": 10.52266, + "y": 23.3561 + }, + { + "x": 26.29452, + "y": 10.51806 + }, + { + "x": 12.42904, + "y": 23.15663 + }, + { + "x": 0.1170239, + "y": 24.65274 + }, + { + "x": -1.040023, + "y": 1.629857 + }, + { + "x": 11.16266, + "y": 9.0201 + }, + { + "x": 13.61452, + "y": 0.8832188 + }, + { + "x": 8.028045, + "y": 14.82966 + }, + { + "x": 20.40253, + "y": 22.0472 + }, + { + "x": 8.818028, + "y": 18.90424 + }, + { + "x": -0.3163152999999999, + "y": 21.40601 + }, + { + "x": 7.190192999999999, + "y": 9.13962 + }, + { + "x": -0.4711474, + "y": -8.29095 + }, + { + "x": 16.6546, + "y": -1.519889 + }, + { + "x": 10.51711, + "y": -5.018592 + }, + { + "x": 17.963060000000006, + "y": 14.46713 + }, + { + "x": -1.315535, + "y": 11.6027 + }, + { + "x": 5.113728, + "y": 3.961434 + }, + { + "x": 32.25842, + "y": -2.712702 + }, + { + "x": -10.59094, + "y": 15.402920000000002 + }, + { + "x": 21.60892, + "y": 17.750020000000006 + }, + { + "x": 11.31144, + "y": 1.031762 + }, + { + "x": 11.30595, + "y": 3.0689580000000003 + }, + { + "x": 15.51137, + "y": 8.943091 + }, + { + "x": 15.37201, + "y": 18.17922 + }, + { + "x": 3.77755, + "y": 13.33419 + }, + { + "x": 17.279889999999998, + "y": 13.97798 + }, + { + "x": -3.349734, + "y": 26.6599 + }, + { + "x": 15.72571, + "y": 6.373983 + }, + { + "x": 25.50999, + "y": 15.15837 + }, + { + "x": 16.68281, + "y": 18.95937 + }, + { + "x": -4.734694, + "y": 24.09568 + }, + { + "x": 25.08795, + "y": 19.69376 + }, + { + "x": 7.038364, + "y": 10.6667 + }, + { + "x": 4.521214, + "y": -6.635304 + }, + { + "x": 6.454509, + "y": 13.662720000000002 + }, + { + "x": 5.322541, + "y": 22.3855 + }, + { + "x": 0.6316529000000001, + "y": 19.79414 + }, + { + "x": -5.669132, + "y": 11.32511 + }, + { + "x": 9.843806, + "y": -4.695499 + }, + { + "x": 15.39168, + "y": 14.145270000000002 + }, + { + "x": 1.289581, + "y": 10.09948 + }, + { + "x": 17.10334, + "y": 6.207793 + }, + { + "x": 17.13273, + "y": 6.609228 + }, + { + "x": 9.70176, + "y": 12.33497 + }, + { + "x": 18.80351, + "y": -3.160759 + }, + { + "x": 6.08478, + "y": 4.689186 + }, + { + "x": -6.025192, + "y": 26.61258 + }, + { + "x": 4.237603, + "y": 7.315439 + }, + { + "x": 16.82231, + "y": 8.133560000000001 + }, + { + "x": -4.768829, + "y": 28.65819 + }, + { + "x": 0.5061416, + "y": 4.9462980000000005 + }, + { + "x": 12.57349, + "y": 10.41494 + }, + { + "x": 16.35374, + "y": 6.874306 + }, + { + "x": 0.1009743999999999, + "y": 2.590253 + }, + { + "x": 13.67556, + "y": -12.72959 + }, + { + "x": 2.477362, + "y": 8.42026 + }, + { + "x": 14.99279, + "y": 15.16393 + }, + { + "x": 29.71711, + "y": 15.62874 + }, + { + "x": 17.48491, + "y": 3.3823 + }, + { + "x": 13.45815, + "y": -4.13764 + }, + { + "x": 2.2072, + "y": -1.554494 + }, + { + "x": 23.05134, + "y": 24.39491 + }, + { + "x": 32.74222, + "y": 25.56641 + }, + { + "x": 15.562970000000002, + "y": 24.94262 + }, + { + "x": 8.132651, + "y": 8.998712 + }, + { + "x": 0.4580866, + "y": -9.891244 + }, + { + "x": -9.164294, + "y": 5.029294 + }, + { + "x": -3.031709, + "y": 20.23346 + }, + { + "x": 12.12393, + "y": 15.103 + }, + { + "x": 19.95281, + "y": 29.14982 + }, + { + "x": 13.00477, + "y": 27.23093 + }, + { + "x": 10.4399, + "y": 25.7741 + }, + { + "x": 0.351724, + "y": 12.2222 + }, + { + "x": 10.37312, + "y": 6.863772999999999 + }, + { + "x": 17.95419, + "y": 4.455694 + }, + { + "x": 21.06292, + "y": 3.607867 + }, + { + "x": 6.069686, + "y": 9.325338 + }, + { + "x": 14.00808, + "y": 11.5225 + }, + { + "x": -1.7777919999999998, + "y": 14.62108 + }, + { + "x": 0.7525703, + "y": -7.381838 + }, + { + "x": -2.3295470000000003, + "y": 5.070321 + }, + { + "x": 1.77457, + "y": 6.2785720000000005 + }, + { + "x": 10.69576, + "y": 16.30571 + }, + { + "x": 18.11151, + "y": 34.12422 + }, + { + "x": 0.2417766, + "y": 27.04643 + }, + { + "x": -0.4202355, + "y": 4.105829 + }, + { + "x": 15.41425, + "y": 14.782570000000002 + }, + { + "x": 8.463556, + "y": 23.04895 + }, + { + "x": 12.03072, + "y": 17.41157 + }, + { + "x": 18.68731, + "y": 6.949078999999999 + }, + { + "x": 6.3693550000000005, + "y": 5.700326 + }, + { + "x": 21.82924, + "y": 5.564074 + }, + { + "x": 7.615410000000002, + "y": -5.024376999999999 + }, + { + "x": 5.823252, + "y": 18.40279 + }, + { + "x": 22.35203, + "y": 8.526174000000001 + }, + { + "x": 6.434616, + "y": 21.16974 + }, + { + "x": 0.5560946, + "y": -4.8660760000000005 + }, + { + "x": 6.737062, + "y": -11.7331 + }, + { + "x": -1.392677, + "y": 14.64543 + }, + { + "x": 4.935136, + "y": 24.86809 + }, + { + "x": 20.35508, + "y": 26.981240000000003 + }, + { + "x": 8.624667, + "y": 10.67174 + }, + { + "x": 16.31749, + "y": 11.64083 + }, + { + "x": 9.014875, + "y": 14.42246 + }, + { + "x": 17.598329999999994, + "y": 26.66023 + }, + { + "x": 2.636649, + "y": 24.04782 + }, + { + "x": 13.82606, + "y": 16.27159 + }, + { + "x": 10.39783, + "y": 3.804893 + }, + { + "x": -6.27359, + "y": 3.878999 + }, + { + "x": -11.88057, + "y": 0.1788024 + }, + { + "x": 21.02048, + "y": 9.690716 + }, + { + "x": 18.25632, + "y": 16.941270000000006 + }, + { + "x": 24.96351, + "y": -1.158215 + }, + { + "x": 10.13696, + "y": 6.446662 + }, + { + "x": 3.509066, + "y": 16.55414 + }, + { + "x": 2.409921, + "y": -0.3445188 + }, + { + "x": 16.0843, + "y": 7.562616 + }, + { + "x": 5.987025, + "y": 7.456533 + }, + { + "x": 12.63902, + "y": 14.35081 + }, + { + "x": 7.392535, + "y": 22.61304 + }, + { + "x": 10.37212, + "y": -1.25827 + }, + { + "x": -19.01791, + "y": 0.6507304 + }, + { + "x": 3.030817, + "y": 4.580993 + }, + { + "x": 34.0303, + "y": -3.716423 + }, + { + "x": -5.843476, + "y": 13.79137 + }, + { + "x": 36.95611, + "y": -1.245269 + }, + { + "x": -0.188409, + "y": -1.86653 + }, + { + "x": 17.28285, + "y": 1.558553 + }, + { + "x": 8.9204, + "y": 29.19455 + }, + { + "x": -5.873556, + "y": 6.456733 + }, + { + "x": 17.76259, + "y": 24.02293 + }, + { + "x": 12.49482, + "y": 22.47067 + }, + { + "x": 12.6087, + "y": 3.212588 + }, + { + "x": 3.606599, + "y": 14.24789 + }, + { + "x": 20.48342, + "y": 13.74531 + }, + { + "x": 31.6423, + "y": 13.04685 + }, + { + "x": 4.745898, + "y": 7.317133 + }, + { + "x": -5.295478, + "y": 6.0010080000000015 + }, + { + "x": 7.238307000000002, + "y": 19.98631 + }, + { + "x": 6.144599, + "y": 19.91034 + }, + { + "x": 9.837835, + "y": 8.336385 + }, + { + "x": 18.64695, + "y": 5.146764 + }, + { + "x": -0.5638628000000001, + "y": 9.673976 + }, + { + "x": 5.21368, + "y": 21.83143 + }, + { + "x": -0.1993878, + "y": 9.176207000000002 + }, + { + "x": 22.42831, + "y": 8.390862 + }, + { + "x": 19.39561, + "y": -7.412824 + }, + { + "x": 31.28428, + "y": 4.131464 + }, + { + "x": 8.380888, + "y": 0.2647594 + }, + { + "x": 7.840689999999999, + "y": 13.20062 + }, + { + "x": 23.85992, + "y": 6.171501 + }, + { + "x": 6.188661, + "y": 24.92638 + }, + { + "x": 18.08387, + "y": 19.74208 + }, + { + "x": 14.23096, + "y": 12.43815 + }, + { + "x": 14.4807, + "y": 8.661634 + }, + { + "x": 30.91987, + "y": 17.57755 + }, + { + "x": 4.117051, + "y": 3.299065 + }, + { + "x": 18.10072000000001, + "y": 9.572447 + }, + { + "x": -3.777019, + "y": 1.115207 + }, + { + "x": 18.47156, + "y": 8.861407 + }, + { + "x": 30.69195, + "y": 21.9132 + }, + { + "x": 1.838687, + "y": 13.1765 + }, + { + "x": 14.22135, + "y": 16.96163 + }, + { + "x": 27.70961, + "y": 10.52575 + }, + { + "x": 9.956135, + "y": 7.890053999999999 + }, + { + "x": 11.7273, + "y": 14.00086 + }, + { + "x": 2.154482, + "y": 14.163470000000002 + }, + { + "x": -0.2120433999999999, + "y": 1.330881 + }, + { + "x": -1.7389830000000002, + "y": 16.9849 + }, + { + "x": 2.299075, + "y": -0.2934257999999999 + }, + { + "x": 22.01149, + "y": -0.4469464 + }, + { + "x": 4.275241, + "y": 16.67383 + }, + { + "x": 19.38943, + "y": 4.436821 + }, + { + "x": 8.80722, + "y": 13.23823 + }, + { + "x": -0.7658179, + "y": -4.004811 + }, + { + "x": 12.69128, + "y": 13.52916 + }, + { + "x": 12.73131, + "y": 7.050802 + }, + { + "x": 8.388222, + "y": 23.45347000000001 + }, + { + "x": 23.42708, + "y": 4.5986410000000015 + }, + { + "x": 4.046104, + "y": 7.634936 + }, + { + "x": 7.667025, + "y": 3.193633 + }, + { + "x": 22.60801, + "y": 5.130319999999998 + }, + { + "x": 14.74391, + "y": 28.76733 + }, + { + "x": 20.53201, + "y": 8.01565 + }, + { + "x": 16.46037, + "y": 16.81531 + }, + { + "x": 12.70669, + "y": 11.48214 + }, + { + "x": -1.474059, + "y": 3.329562 + }, + { + "x": 35.049609999999994, + "y": 14.4484 + }, + { + "x": 2.529177, + "y": 15.56721 + }, + { + "x": 28.9961, + "y": -15.57834 + }, + { + "x": 10.57878, + "y": 6.307686 + }, + { + "x": 5.52815, + "y": 14.12427 + }, + { + "x": 12.48016, + "y": 2.7289220000000003 + }, + { + "x": 18.10028, + "y": 3.891689 + }, + { + "x": 11.17125, + "y": 11.10063 + }, + { + "x": 14.58538, + "y": 25.99213 + }, + { + "x": 27.21567000000001, + "y": -1.980637 + }, + { + "x": -1.40271, + "y": 22.3755 + }, + { + "x": -14.66871, + "y": 9.792318 + }, + { + "x": 28.25157, + "y": 14.28507 + }, + { + "x": 2.688756, + "y": 3.0299970000000003 + }, + { + "x": 9.58344, + "y": 12.00506 + }, + { + "x": 3.65772, + "y": 1.649871 + }, + { + "x": 3.575705, + "y": 14.80241 + }, + { + "x": 34.62557, + "y": 4.384648 + }, + { + "x": 36.12292, + "y": 12.05849 + }, + { + "x": 12.56065, + "y": -4.733039 + }, + { + "x": 1.915274, + "y": 22.28056 + }, + { + "x": 18.14029, + "y": 3.569117 + }, + { + "x": -1.214981, + "y": -3.3185839999999995 + }, + { + "x": 7.646433999999997, + "y": 29.922590000000003 + }, + { + "x": -2.844509, + "y": 13.71118 + }, + { + "x": 14.62733, + "y": 16.4933 + }, + { + "x": -0.3742695, + "y": 15.06495 + }, + { + "x": 10.15795, + "y": 13.33612 + }, + { + "x": 19.4574, + "y": 11.29307 + }, + { + "x": -6.23644, + "y": 9.581524 + }, + { + "x": 0.2870638, + "y": 6.756246000000001 + }, + { + "x": 7.025386999999999, + "y": 8.299629 + }, + { + "x": 6.2054050000000025, + "y": 29.41931 + }, + { + "x": 12.37304, + "y": 4.152157 + }, + { + "x": -8.001964, + "y": 15.628429999999998 + }, + { + "x": 9.879504, + "y": 13.94365 + }, + { + "x": 12.83222, + "y": 20.98375 + }, + { + "x": 10.71142, + "y": 18.59333 + }, + { + "x": 10.09704, + "y": 9.915216 + }, + { + "x": 17.89963, + "y": 6.451302 + }, + { + "x": -6.720686, + "y": 14.993670000000002 + }, + { + "x": 3.712734, + "y": 7.361372 + }, + { + "x": -16.22395, + "y": 17.81785 + }, + { + "x": 8.71418, + "y": 24.10122 + }, + { + "x": 17.05254, + "y": 5.227864 + }, + { + "x": -14.69171, + "y": 31.79987 + }, + { + "x": 7.943416, + "y": 10.26803 + }, + { + "x": 14.004979999999998, + "y": 21.54721 + }, + { + "x": -1.302871, + "y": 2.063343 + }, + { + "x": -0.7624772, + "y": 7.0014119999999975 + }, + { + "x": 21.54626, + "y": 21.13478 + }, + { + "x": 1.232726, + "y": 12.78234 + }, + { + "x": 1.602791, + "y": 2.210584 + }, + { + "x": -6.679344, + "y": 12.61919 + }, + { + "x": -6.89254, + "y": 2.9427950000000003 + }, + { + "x": 12.32427, + "y": 22.68294 + }, + { + "x": 21.02468, + "y": 26.13788 + }, + { + "x": 6.443124, + "y": -3.984948 + }, + { + "x": 22.39199, + "y": 13.58907 + }, + { + "x": 18.06598, + "y": 2.753522 + }, + { + "x": 8.136961, + "y": 22.73404 + }, + { + "x": 13.142079999999998, + "y": 24.21235 + }, + { + "x": 11.51451, + "y": 15.92228 + }, + { + "x": -2.505605, + "y": 15.30741 + }, + { + "x": 3.29959, + "y": 13.2484 + }, + { + "x": -4.795219, + "y": 1.21583 + }, + { + "x": 29.08478, + "y": 10.30137 + }, + { + "x": 5.12492, + "y": 4.627426 + }, + { + "x": 17.060779999999998, + "y": 9.965354 + }, + { + "x": -0.340825, + "y": 11.85959 + }, + { + "x": 15.295320000000002, + "y": 9.07695 + }, + { + "x": 6.39995, + "y": 23.04672 + }, + { + "x": 14.522429999999998, + "y": 17.693360000000006 + }, + { + "x": 28.85673, + "y": 4.007333999999998 + }, + { + "x": 10.77192, + "y": 5.787269 + }, + { + "x": 7.428644999999999, + "y": 15.77705 + }, + { + "x": -6.637650999999999, + "y": 14.04711 + }, + { + "x": 17.08812, + "y": 8.223101 + }, + { + "x": 15.07757, + "y": -13.689429999999998 + }, + { + "x": -22.15215, + "y": 9.511638 + }, + { + "x": 5.04531, + "y": 1.784843 + }, + { + "x": -2.521792, + "y": -7.60383 + }, + { + "x": 32.85505, + "y": 0.3210040999999999 + }, + { + "x": 6.070759, + "y": 5.579687 + }, + { + "x": 3.508814, + "y": -3.738329 + }, + { + "x": 9.818843, + "y": 2.407706 + }, + { + "x": 11.93353, + "y": 18.78467 + }, + { + "x": 2.850058, + "y": -4.31489 + }, + { + "x": 5.20408, + "y": 6.957638 + }, + { + "x": 13.56349, + "y": 9.16074 + }, + { + "x": 2.631175, + "y": 5.677225 + }, + { + "x": 6.517994, + "y": -0.974309 + }, + { + "x": 15.80081, + "y": 19.64233 + }, + { + "x": 14.07388, + "y": -1.577052 + }, + { + "x": -3.888388, + "y": 0.4062882 + }, + { + "x": 18.69151, + "y": 10.06134 + }, + { + "x": 21.0912, + "y": 26.45951 + }, + { + "x": 2.459292, + "y": 6.838326 + }, + { + "x": 6.513192, + "y": -0.7243316999999999 + }, + { + "x": 24.3063, + "y": 14.39751 + }, + { + "x": 13.94559, + "y": 0.7581209 + }, + { + "x": -2.664707, + "y": -6.36948 + }, + { + "x": 8.106246, + "y": 0.4920085 + }, + { + "x": 17.07317, + "y": 25.84198 + }, + { + "x": 6.0494330000000005, + "y": 22.92962 + }, + { + "x": 23.94025, + "y": 27.27981 + }, + { + "x": -7.401308, + "y": -3.5558080000000003 + }, + { + "x": 2.926755, + "y": 22.41698 + }, + { + "x": -2.774311, + "y": -21.36068 + }, + { + "x": -3.094624, + "y": 16.60375 + }, + { + "x": 15.663379999999998, + "y": 18.60818 + }, + { + "x": 22.3694, + "y": 20.29701 + }, + { + "x": -0.984013, + "y": 23.2461 + }, + { + "x": 28.63485, + "y": 4.79718 + }, + { + "x": 21.88014, + "y": 12.66741 + }, + { + "x": -3.621506, + "y": 4.750143 + }, + { + "x": 12.52111, + "y": 8.464080000000001 + }, + { + "x": -22.49599, + "y": 0.1392916 + }, + { + "x": 17.33361, + "y": 3.268888 + }, + { + "x": -6.884011, + "y": -1.824905 + }, + { + "x": 10.21154, + "y": 24.45211 + }, + { + "x": 12.14809, + "y": 12.06576 + }, + { + "x": -1.924867, + "y": -0.1361344 + }, + { + "x": 21.60187, + "y": 10.23303 + }, + { + "x": 15.66342, + "y": 13.893720000000002 + }, + { + "x": 15.0212, + "y": 9.187742 + }, + { + "x": 13.60186, + "y": 16.88655 + }, + { + "x": 4.554105, + "y": 37.17632 + }, + { + "x": 12.56063, + "y": 7.900061 + }, + { + "x": -11.53464, + "y": 11.63952 + }, + { + "x": 24.58798, + "y": 1.860825 + }, + { + "x": -8.381909, + "y": 14.354070000000002 + }, + { + "x": -6.1142650000000005, + "y": 7.363372999999997 + }, + { + "x": -5.19861, + "y": 12.78676 + }, + { + "x": 21.17985, + "y": 10.36981 + }, + { + "x": 6.734995, + "y": 23.19933 + }, + { + "x": 10.19698, + "y": 15.43111 + }, + { + "x": 12.04076, + "y": 17.23649 + }, + { + "x": 25.86829, + "y": 2.396404 + }, + { + "x": -5.335044, + "y": 7.578044 + }, + { + "x": 9.824228, + "y": 6.06933 + }, + { + "x": 14.249670000000002, + "y": 27.39351 + }, + { + "x": 5.553391, + "y": 13.30626 + }, + { + "x": 9.224884, + "y": -2.702723 + }, + { + "x": 16.72743, + "y": 15.952370000000002 + }, + { + "x": 13.19714, + "y": 14.475179999999998 + }, + { + "x": 13.476720000000002, + "y": -4.123874 + }, + { + "x": 6.2834900000000005, + "y": 11.55091 + }, + { + "x": 15.38618, + "y": -8.226192 + }, + { + "x": 10.96815, + "y": 9.922543 + }, + { + "x": 14.3925, + "y": 3.203174 + }, + { + "x": 22.91966, + "y": 20.66688 + }, + { + "x": 12.9942, + "y": 15.3486 + }, + { + "x": 24.38812, + "y": 18.26395 + }, + { + "x": -9.467832, + "y": 0.6434593000000001 + }, + { + "x": -5.9889470000000005, + "y": 22.67049 + }, + { + "x": -1.766619, + "y": 18.50818 + }, + { + "x": -2.997209, + "y": 15.36209 + }, + { + "x": -2.980586, + "y": 14.54187 + }, + { + "x": 19.18525, + "y": 12.05587 + }, + { + "x": 18.62052000000001, + "y": -6.348775 + }, + { + "x": 4.541831, + "y": 3.586799 + }, + { + "x": 2.029832, + "y": 35.52395 + }, + { + "x": 18.08133, + "y": 6.853875 + }, + { + "x": 16.55184, + "y": 29.25978 + }, + { + "x": 20.81487000000001, + "y": 0.2041338 + }, + { + "x": 4.7732410000000005, + "y": 11.55061 + }, + { + "x": 17.54123, + "y": 24.48917 + }, + { + "x": 11.232, + "y": 27.95659 + }, + { + "x": 19.88413, + "y": 3.3734900000000003 + }, + { + "x": -3.511829, + "y": 6.03616 + }, + { + "x": 19.83789, + "y": 5.660164 + }, + { + "x": 21.5811, + "y": 2.308901 + }, + { + "x": 12.77548, + "y": 11.26171 + }, + { + "x": -3.640386, + "y": -8.611116 + }, + { + "x": 22.1939, + "y": 13.675070000000002 + }, + { + "x": 24.52809, + "y": 3.520373 + }, + { + "x": -2.055682, + "y": 19.0635 + }, + { + "x": 22.10497, + "y": 10.32231 + }, + { + "x": 11.01341, + "y": 25.31104 + }, + { + "x": 19.34416, + "y": 17.969070000000006 + }, + { + "x": -3.011348, + "y": 22.65403 + }, + { + "x": 4.864152, + "y": -1.24612 + }, + { + "x": -12.93381, + "y": 4.052313 + }, + { + "x": -3.225042, + "y": 2.066012 + }, + { + "x": 27.51631, + "y": 9.72616 + }, + { + "x": 15.95689, + "y": 0.2902336 + }, + { + "x": 5.763955, + "y": 18.51403 + }, + { + "x": 24.53113, + "y": 23.72683 + }, + { + "x": 12.13776, + "y": -1.241701 + }, + { + "x": -6.742276, + "y": 10.8888 + }, + { + "x": 1.712732, + "y": 14.68423 + }, + { + "x": 4.114345, + "y": 23.43694 + }, + { + "x": 24.57423, + "y": 17.20925 + }, + { + "x": 12.09148, + "y": -2.061826 + }, + { + "x": 6.380095, + "y": 19.50401 + }, + { + "x": 15.4881, + "y": 21.71908 + }, + { + "x": 3.572731, + "y": -3.078149 + }, + { + "x": 26.356690000000004, + "y": 20.47212 + }, + { + "x": 14.78471, + "y": 23.34586 + }, + { + "x": -1.279279, + "y": 0.9330042 + }, + { + "x": 0.01129247, + "y": 8.008011999999999 + }, + { + "x": 5.984768, + "y": 1.961941 + }, + { + "x": 8.858572, + "y": 17.184720000000002 + }, + { + "x": 19.37649, + "y": 2.122504 + }, + { + "x": 9.10579, + "y": 19.51155 + }, + { + "x": 9.643453, + "y": 6.241649 + }, + { + "x": -3.1091740000000003, + "y": 18.91863 + }, + { + "x": 10.541, + "y": -3.394954 + }, + { + "x": 4.573325, + "y": 11.78297 + }, + { + "x": 22.98676, + "y": 10.07359 + }, + { + "x": -10.77961, + "y": 14.08271 + }, + { + "x": 5.63292, + "y": 18.08959 + }, + { + "x": 5.782557, + "y": 12.32168 + }, + { + "x": 27.1903, + "y": 10.58244 + }, + { + "x": 8.920819999999997, + "y": 30.34188 + }, + { + "x": -1.781047, + "y": 10.98773 + }, + { + "x": -0.7274996, + "y": -7.879213 + }, + { + "x": 23.33998, + "y": 16.66643 + }, + { + "x": 16.00585, + "y": 1.374964 + }, + { + "x": 22.97108, + "y": 15.7172 + }, + { + "x": 8.993785, + "y": -9.014578 + }, + { + "x": 8.249774, + "y": -2.679776 + }, + { + "x": 5.368688, + "y": 12.60516 + }, + { + "x": 25.45515, + "y": 22.22258 + }, + { + "x": 16.10149, + "y": 11.38547 + }, + { + "x": 25.9423, + "y": 5.396589 + }, + { + "x": 13.96851, + "y": 23.8073 + }, + { + "x": 1.059773, + "y": 2.482886 + }, + { + "x": 11.19896, + "y": 27.34923 + }, + { + "x": 10.01848, + "y": 12.379 + }, + { + "x": -5.964017, + "y": 14.30957 + }, + { + "x": 14.69272, + "y": 13.940270000000002 + }, + { + "x": 5.162226, + "y": -3.949188 + }, + { + "x": 16.13654, + "y": 2.4912810000000003 + }, + { + "x": -8.427487, + "y": 17.28569 + }, + { + "x": 17.46026, + "y": 23.52985 + }, + { + "x": 4.839787, + "y": 2.035094 + }, + { + "x": 24.78075, + "y": 8.787683 + }, + { + "x": 3.28531, + "y": -2.7043060000000003 + }, + { + "x": 1.317184, + "y": 13.35289 + }, + { + "x": 5.000647, + "y": 13.50562 + }, + { + "x": -2.902717, + "y": 2.2402900000000003 + }, + { + "x": 12.86082, + "y": 12.72926 + }, + { + "x": 6.369858, + "y": 11.56653 + }, + { + "x": 5.91316, + "y": 24.22981 + }, + { + "x": -4.098757, + "y": -5.008349 + }, + { + "x": -0.7625945, + "y": 18.5798 + }, + { + "x": 15.58506, + "y": 11.27319 + }, + { + "x": 5.403196, + "y": 11.22043 + }, + { + "x": -1.124667, + "y": 31.28172 + }, + { + "x": 6.120589, + "y": 10.16824 + }, + { + "x": 6.07585, + "y": 31.160290000000003 + }, + { + "x": -8.399909, + "y": 8.830895 + }, + { + "x": 2.199297, + "y": 12.84548 + }, + { + "x": 8.845364, + "y": 21.62596 + }, + { + "x": -14.18104, + "y": 1.871214 + }, + { + "x": 34.64086, + "y": 11.64993 + }, + { + "x": -0.7696695, + "y": 8.42469 + }, + { + "x": -6.12447, + "y": 23.05465 + }, + { + "x": -14.651420000000002, + "y": 10.9695 + }, + { + "x": 11.58703, + "y": 14.496579999999998 + }, + { + "x": 0.8204501000000001, + "y": 10.62322 + }, + { + "x": 28.5049, + "y": 10.30336 + }, + { + "x": -8.36784, + "y": 4.386019 + }, + { + "x": 32.45148, + "y": 7.488422999999999 + }, + { + "x": 6.733567999999999, + "y": 18.12497 + }, + { + "x": 10.64451, + "y": 16.76856 + }, + { + "x": 3.2193240000000003, + "y": 19.57019 + }, + { + "x": 10.74578, + "y": 27.00378 + }, + { + "x": 4.207717, + "y": 2.8513580000000003 + }, + { + "x": 13.87413, + "y": 13.78015 + }, + { + "x": -10.31962, + "y": 15.46054 + }, + { + "x": 11.65267, + "y": 1.7431299999999998 + }, + { + "x": 25.78439, + "y": 2.961885 + }, + { + "x": 12.48763, + "y": 18.15628 + }, + { + "x": 7.276056, + "y": 14.082579999999998 + }, + { + "x": 9.188286, + "y": 18.24487 + }, + { + "x": 7.066136, + "y": 17.03944 + }, + { + "x": 2.462034, + "y": 7.644941999999999 + }, + { + "x": 12.10048, + "y": 15.32802 + }, + { + "x": -0.531199, + "y": 13.14534 + }, + { + "x": 10.19152, + "y": 5.414251999999999 + }, + { + "x": 8.34839, + "y": 17.09359 + }, + { + "x": -7.409304, + "y": 15.4642 + }, + { + "x": 15.994229999999998, + "y": 13.51288 + }, + { + "x": -6.608865, + "y": -0.9393074 + }, + { + "x": 13.86558, + "y": 6.094001 + }, + { + "x": 24.64994, + "y": 6.494246 + }, + { + "x": 20.51858, + "y": 17.59508 + }, + { + "x": 11.26143, + "y": 2.0136830000000003 + }, + { + "x": 5.034868, + "y": 7.499159 + }, + { + "x": 1.19408, + "y": 23.50754 + }, + { + "x": 13.19178, + "y": 12.76363 + }, + { + "x": 9.728273, + "y": 11.80716 + }, + { + "x": 13.9332, + "y": 15.7472 + }, + { + "x": 18.43648, + "y": 12.18253 + }, + { + "x": 12.60749, + "y": 32.6225 + }, + { + "x": 6.429051, + "y": 1.972634 + }, + { + "x": 12.33216, + "y": -14.739579999999998 + }, + { + "x": 17.02514, + "y": 8.819268 + }, + { + "x": 39.89024000000001, + "y": 23.99687 + }, + { + "x": 20.98933, + "y": 17.29635 + }, + { + "x": 11.65338, + "y": -5.657587 + }, + { + "x": 15.09138, + "y": 25.02662 + }, + { + "x": 11.22707, + "y": -8.075130999999999 + }, + { + "x": 10.76558, + "y": -4.988425 + }, + { + "x": 3.910868, + "y": 18.41193 + }, + { + "x": 9.769555, + "y": 15.26871 + }, + { + "x": 12.98944, + "y": 5.868339 + }, + { + "x": 15.62113, + "y": 6.474136 + }, + { + "x": 10.13399, + "y": -2.499796 + }, + { + "x": 1.27228, + "y": 6.644602000000001 + }, + { + "x": 28.93972, + "y": 2.331538 + }, + { + "x": -10.50514, + "y": 20.75097 + }, + { + "x": 0.2242924, + "y": 22.1642 + }, + { + "x": 23.20978, + "y": 11.40963 + }, + { + "x": 17.61025, + "y": 1.974165 + }, + { + "x": 7.3795600000000015, + "y": -5.537147 + }, + { + "x": 10.10124, + "y": 5.6806550000000025 + }, + { + "x": 18.15361, + "y": 9.892188 + }, + { + "x": 21.83601, + "y": 26.09115 + }, + { + "x": 19.94091, + "y": 14.92146 + }, + { + "x": -1.475135, + "y": 8.28278 + }, + { + "x": -7.943030999999999, + "y": -3.830219 + }, + { + "x": 11.30458, + "y": 8.819061999999997 + }, + { + "x": 20.7643, + "y": 6.118451 + }, + { + "x": 12.46828, + "y": 7.275092999999999 + }, + { + "x": 16.64017, + "y": 1.672324 + }, + { + "x": -11.45466, + "y": 7.741682000000001 + }, + { + "x": 7.891755, + "y": -8.190833 + }, + { + "x": 5.2950300000000015, + "y": 24.11116 + }, + { + "x": 6.695052, + "y": 20.8704 + }, + { + "x": 5.536268, + "y": 15.65921 + }, + { + "x": -1.7861470000000002, + "y": 18.38471 + }, + { + "x": 10.10925, + "y": 19.378120000000006 + }, + { + "x": 12.36446, + "y": 25.65443 + }, + { + "x": 24.26076, + "y": 6.211672 + }, + { + "x": -2.913374, + "y": -0.5345634 + }, + { + "x": 19.30486, + "y": 14.99081 + }, + { + "x": -7.134083, + "y": -5.31856 + }, + { + "x": 6.658128, + "y": -0.8207126 + }, + { + "x": 13.56779, + "y": 3.181591 + }, + { + "x": 9.165157, + "y": 12.44468 + }, + { + "x": 16.576520000000002, + "y": 19.44045 + }, + { + "x": 13.04035, + "y": 25.82305 + }, + { + "x": 12.10189, + "y": -7.604383 + }, + { + "x": 3.820956, + "y": 7.389069 + }, + { + "x": 10.48589, + "y": 11.97492 + }, + { + "x": 15.89318, + "y": 17.60414 + }, + { + "x": 4.465372, + "y": 18.83929 + }, + { + "x": 6.583345, + "y": 25.99912 + }, + { + "x": -3.657566000000001, + "y": 8.821053 + }, + { + "x": 9.940546, + "y": -12.20743 + }, + { + "x": 28.13562, + "y": -7.671817999999999 + }, + { + "x": 7.351463000000002, + "y": 3.724133 + }, + { + "x": 25.14936, + "y": 4.756451 + }, + { + "x": -6.347524, + "y": 11.70047 + }, + { + "x": 8.469816, + "y": 1.854826 + }, + { + "x": 15.9227, + "y": 21.05449 + }, + { + "x": 13.16243, + "y": 22.88495 + }, + { + "x": 6.61163, + "y": 7.602461999999999 + }, + { + "x": 14.55212, + "y": -1.466516 + }, + { + "x": 5.984364, + "y": 2.761451 + }, + { + "x": -2.9907470000000003, + "y": 18.67975 + }, + { + "x": 10.47763, + "y": 13.9604 + }, + { + "x": 15.70686, + "y": 3.711452 + }, + { + "x": 31.10299, + "y": 3.897385 + }, + { + "x": -0.2682848, + "y": 14.07392 + }, + { + "x": 15.77137, + "y": 3.525233 + }, + { + "x": -4.961974, + "y": 27.05419 + }, + { + "x": 10.78593, + "y": 2.022093 + }, + { + "x": 18.0671, + "y": 31.1079 + }, + { + "x": 7.007197, + "y": 16.15708 + }, + { + "x": 5.3245830000000005, + "y": 16.398020000000002 + }, + { + "x": 25.69982000000001, + "y": 3.056635 + }, + { + "x": 20.72, + "y": 23.58926 + }, + { + "x": 2.090151, + "y": 9.11213 + }, + { + "x": 14.57106, + "y": -6.9908550000000025 + }, + { + "x": 15.51143, + "y": -5.554229 + }, + { + "x": 25.34928, + "y": 25.96264 + }, + { + "x": -2.523716, + "y": 6.6824179999999975 + }, + { + "x": -0.2446706, + "y": -0.7271909000000001 + }, + { + "x": -3.787227, + "y": 2.679385 + }, + { + "x": 4.1469190000000005, + "y": 13.84954 + }, + { + "x": 3.629787, + "y": -4.12287 + }, + { + "x": 27.08326, + "y": 19.22561 + }, + { + "x": 9.194675, + "y": 18.3967 + }, + { + "x": 12.34312, + "y": 2.642345 + }, + { + "x": 7.808153999999999, + "y": 4.437537 + }, + { + "x": 11.60988, + "y": 7.2919990000000015 + }, + { + "x": 5.989497, + "y": 8.107000000000001 + }, + { + "x": 4.259951999999998, + "y": 9.585877 + }, + { + "x": 16.388460000000002, + "y": 16.90853 + }, + { + "x": 5.568457, + "y": 7.2605520000000014 + }, + { + "x": 22.8137, + "y": 7.456842 + }, + { + "x": 14.04878, + "y": 15.9274 + }, + { + "x": 3.027084, + "y": 7.603089999999999 + }, + { + "x": 18.73794, + "y": 0.02478778 + }, + { + "x": 28.05616, + "y": 31.56779 + }, + { + "x": -0.3963638, + "y": -3.104964 + }, + { + "x": -1.199626, + "y": 12.69042 + }, + { + "x": 0.7270734000000001, + "y": 2.26189 + }, + { + "x": 27.091590000000004, + "y": 15.82479 + }, + { + "x": 8.936564, + "y": 4.499611 + }, + { + "x": 18.23345, + "y": 15.64262 + }, + { + "x": -0.429218, + "y": 2.211029 + }, + { + "x": 15.6607, + "y": 19.98972 + }, + { + "x": 14.23374, + "y": 15.76271 + }, + { + "x": 5.829822, + "y": 10.34468 + }, + { + "x": 4.230915, + "y": 1.735521 + }, + { + "x": 12.19179, + "y": 15.03855 + }, + { + "x": 5.103175, + "y": 3.64185 + }, + { + "x": 7.088660000000001, + "y": 6.2657 + }, + { + "x": 0.01341287, + "y": 14.39395 + }, + { + "x": 16.070510000000002, + "y": 12.18371 + }, + { + "x": 31.6029, + "y": 8.55297 + }, + { + "x": -14.94727, + "y": 16.5969 + }, + { + "x": 38.0434, + "y": 2.138592 + }, + { + "x": 24.30645, + "y": 7.067761 + }, + { + "x": 29.12768, + "y": 5.9111660000000015 + }, + { + "x": 2.734299, + "y": 9.551941 + }, + { + "x": 5.490974, + "y": 15.10988 + }, + { + "x": 25.76946, + "y": 3.324707 + }, + { + "x": 15.67774, + "y": 28.04655 + }, + { + "x": 27.45951, + "y": 4.004603 + }, + { + "x": 6.71577, + "y": 17.91905 + }, + { + "x": 4.453012, + "y": 4.265516000000001 + }, + { + "x": 21.77856, + "y": 12.28597 + }, + { + "x": 12.709, + "y": 12.25582 + }, + { + "x": 6.4600269999999975, + "y": 2.503197 + }, + { + "x": -8.207786, + "y": 27.72911 + }, + { + "x": 9.914433, + "y": 14.1201 + }, + { + "x": 14.48534, + "y": 4.178134 + }, + { + "x": 15.60438, + "y": 1.94312 + }, + { + "x": -1.809368, + "y": 9.6628 + }, + { + "x": 16.42695, + "y": -3.171427 + }, + { + "x": 6.084253, + "y": 10.33377 + }, + { + "x": 8.627294000000001, + "y": -2.30743 + }, + { + "x": 14.28665, + "y": 3.929615 + }, + { + "x": -11.54532, + "y": -20.01888 + }, + { + "x": 5.575772, + "y": 10.67374 + }, + { + "x": -2.537058, + "y": 10.25853 + }, + { + "x": 20.09051, + "y": 9.33872 + }, + { + "x": -8.85235, + "y": 13.48051 + }, + { + "x": 4.209417, + "y": 17.801070000000006 + }, + { + "x": 10.57944, + "y": 13.80524 + }, + { + "x": 1.86462, + "y": 11.39824 + }, + { + "x": 10.84852, + "y": 18.48534 + }, + { + "x": -0.7703359000000001, + "y": 24.88074 + }, + { + "x": 14.36989, + "y": 10.3415 + }, + { + "x": 1.489437, + "y": -4.19631 + }, + { + "x": 26.44959, + "y": 3.562471 + }, + { + "x": -4.266789, + "y": 3.653826 + }, + { + "x": 8.976836, + "y": 18.40393 + }, + { + "x": 20.77485, + "y": 13.18247 + }, + { + "x": 27.63714, + "y": 19.13911 + }, + { + "x": 16.29336, + "y": 8.550991999999999 + }, + { + "x": 16.87829, + "y": 14.83276 + }, + { + "x": 16.82551, + "y": 9.976617 + }, + { + "x": 5.165351, + "y": 6.9856 + }, + { + "x": -0.1216837, + "y": 14.117770000000002 + }, + { + "x": -8.032164999999999, + "y": 11.65195 + }, + { + "x": -0.7711908000000001, + "y": 9.478467 + }, + { + "x": 7.822278, + "y": 4.63563 + }, + { + "x": -2.542693, + "y": 31.29946 + }, + { + "x": 12.41543, + "y": 10.05657 + }, + { + "x": 10.44706, + "y": 6.147121 + }, + { + "x": 10.02766, + "y": 15.330329999999998 + }, + { + "x": 15.52898, + "y": 5.241399 + }, + { + "x": 9.747575, + "y": 11.99029 + }, + { + "x": 19.98159, + "y": 14.5416 + }, + { + "x": 18.364320000000006, + "y": -4.5937800000000015 + }, + { + "x": 13.22721, + "y": 7.873434 + }, + { + "x": -0.5568769, + "y": 6.233604 + }, + { + "x": 7.476011, + "y": 16.644470000000002 + }, + { + "x": -2.541061, + "y": 16.41452 + }, + { + "x": 14.30498, + "y": 11.84888 + }, + { + "x": 3.967357, + "y": 20.72875 + }, + { + "x": 0.2271643, + "y": 29.08483 + }, + { + "x": 11.57322, + "y": 14.5351 + }, + { + "x": 2.318771, + "y": 19.85869 + }, + { + "x": 1.748142, + "y": 10.93859 + }, + { + "x": 17.782529999999994, + "y": 4.558751999999999 + }, + { + "x": -4.290225, + "y": 4.425946 + }, + { + "x": 16.53104, + "y": 4.671925 + }, + { + "x": 7.546088, + "y": 10.27894 + }, + { + "x": 13.152029999999998, + "y": 8.540096 + }, + { + "x": 0.5304746, + "y": 18.33461 + }, + { + "x": 21.35885, + "y": 27.10033 + }, + { + "x": -0.5274979999999999, + "y": 17.29681 + }, + { + "x": 12.94586, + "y": 12.23683 + }, + { + "x": 20.56008, + "y": -0.5277433000000001 + }, + { + "x": 0.369141, + "y": -4.90859 + }, + { + "x": 10.88581, + "y": -2.084885 + }, + { + "x": 1.047853, + "y": 14.6625 + }, + { + "x": 17.284689999999998, + "y": 1.17794 + }, + { + "x": 8.224514, + "y": 18.21265 + }, + { + "x": 18.79663, + "y": 1.558912 + }, + { + "x": 2.294629, + "y": 11.46264 + }, + { + "x": 13.16382, + "y": 15.70806 + }, + { + "x": 11.96874, + "y": 22.31844 + }, + { + "x": 18.1468, + "y": 1.836594 + }, + { + "x": 6.30985, + "y": 10.4237 + }, + { + "x": 12.49809, + "y": 13.02343 + }, + { + "x": 6.254294, + "y": 28.35686 + }, + { + "x": 20.57987, + "y": 19.25847000000001 + }, + { + "x": -0.675866, + "y": 6.132365 + }, + { + "x": -2.52902, + "y": 29.84877 + }, + { + "x": 2.531129, + "y": 31.62439 + }, + { + "x": 16.98884, + "y": 14.57923 + }, + { + "x": 2.599834, + "y": 20.39453 + }, + { + "x": 6.326382, + "y": 0.826507 + }, + { + "x": 13.8971, + "y": 7.505789999999997 + }, + { + "x": -5.493487, + "y": 19.43579 + }, + { + "x": 21.96003, + "y": 24.61082 + }, + { + "x": 7.303667, + "y": 2.841022 + }, + { + "x": 22.35765, + "y": 1.493998 + }, + { + "x": 2.104918, + "y": 5.705926 + }, + { + "x": 26.18462, + "y": -9.62667 + }, + { + "x": 20.80766, + "y": 10.34603 + }, + { + "x": 10.57028, + "y": 34.39865 + }, + { + "x": -7.880563, + "y": 13.95659 + }, + { + "x": 6.534681, + "y": 16.05914 + }, + { + "x": 6.421189, + "y": 22.4082 + }, + { + "x": 2.5363290000000003, + "y": 2.955975 + }, + { + "x": 17.029429999999998, + "y": 29.76824 + }, + { + "x": -0.4862340999999999, + "y": 12.23679 + }, + { + "x": 1.188364, + "y": 8.102704 + }, + { + "x": -3.906957, + "y": 5.578883 + }, + { + "x": 5.441873, + "y": 5.874897 + }, + { + "x": 18.66013, + "y": -4.470882 + }, + { + "x": 13.33514, + "y": 3.557717 + }, + { + "x": 24.12527, + "y": 18.52547 + }, + { + "x": 12.98691, + "y": 17.43439 + }, + { + "x": 13.358770000000002, + "y": 9.173119 + }, + { + "x": 13.41857, + "y": -0.07619125 + }, + { + "x": 5.2243559999999984, + "y": 22.71993 + }, + { + "x": 10.34212, + "y": 16.27103 + }, + { + "x": -0.3693704, + "y": 11.25666 + }, + { + "x": 12.91639, + "y": 31.99353 + }, + { + "x": 0.9090181, + "y": 24.91849 + }, + { + "x": -1.409272, + "y": 9.203924 + }, + { + "x": -4.365977, + "y": 16.916610000000002 + }, + { + "x": 10.25595, + "y": 22.35262 + }, + { + "x": 12.43669, + "y": 10.23768 + }, + { + "x": -1.170456, + "y": 15.72802 + }, + { + "x": -6.2296010000000015, + "y": 23.02026 + }, + { + "x": 9.663633, + "y": 25.29418 + }, + { + "x": 9.05127, + "y": 12.58227 + }, + { + "x": 0.8767106, + "y": 20.08131 + }, + { + "x": 4.492934, + "y": 16.617639999999998 + }, + { + "x": 15.53079, + "y": 10.37215 + }, + { + "x": 0.789848, + "y": 22.08501 + }, + { + "x": 15.88278, + "y": 10.7026 + }, + { + "x": 15.65385, + "y": 1.855822 + }, + { + "x": 7.006049000000001, + "y": 1.034778 + }, + { + "x": 18.06041, + "y": -0.4099859 + }, + { + "x": 19.50145, + "y": 22.84672 + }, + { + "x": 14.34475, + "y": -0.5536328 + }, + { + "x": 6.584492, + "y": 24.95815 + }, + { + "x": 0.7217060000000001, + "y": 16.4536 + }, + { + "x": 8.034842, + "y": 9.826132 + }, + { + "x": 22.07318, + "y": 10.31959 + }, + { + "x": 8.208789999999999, + "y": 16.102610000000002 + }, + { + "x": -0.6540285, + "y": 7.418589999999999 + }, + { + "x": 33.90343, + "y": 3.274898 + }, + { + "x": 15.558320000000002, + "y": 13.55292 + }, + { + "x": 7.387878, + "y": 15.86786 + }, + { + "x": 5.051225, + "y": 16.534370000000006 + }, + { + "x": 5.229687, + "y": 18.39176 + }, + { + "x": 9.339954, + "y": 9.981995 + }, + { + "x": 14.02917, + "y": 2.41937 + }, + { + "x": 3.084545, + "y": 30.35293 + }, + { + "x": -9.022234, + "y": 3.566726 + }, + { + "x": 8.187902000000001, + "y": 10.07435 + }, + { + "x": 4.389926, + "y": 10.11696 + }, + { + "x": 17.49107, + "y": 9.631412 + }, + { + "x": 25.94192, + "y": 6.535813 + }, + { + "x": 14.06103, + "y": 2.905847 + }, + { + "x": 4.658055, + "y": -5.7647650000000015 + }, + { + "x": 19.84404, + "y": 19.12729 + }, + { + "x": 15.56143, + "y": 9.62353 + }, + { + "x": 7.178256, + "y": 14.85566 + }, + { + "x": 22.64227, + "y": 4.81697 + }, + { + "x": -7.8042880000000014, + "y": -1.111585 + }, + { + "x": -5.118906, + "y": 7.387376 + }, + { + "x": 6.152764, + "y": 14.22517 + }, + { + "x": 8.551857, + "y": 24.93599 + }, + { + "x": 3.134369, + "y": -6.632367 + }, + { + "x": -1.164893, + "y": 18.86306 + }, + { + "x": 29.06922, + "y": 31.39812 + }, + { + "x": 7.826419, + "y": 39.47855 + }, + { + "x": 29.47485, + "y": 32.19725 + } + ] + }, + { + "clusterNr": 1, + "centroid": { + "x": 69.92418447478987, + "y": -10.119641194361344 + }, + "points": [ + { + "x": 36.17882, + "y": -22.1776 + }, + { + "x": 50.97437, + "y": 19.26007 + }, + { + "x": 68.77616, + "y": -23.90883 + }, + { + "x": 56.22534, + "y": -5.294665 + }, + { + "x": 84.62974, + "y": -8.592495 + }, + { + "x": 95.91765, + "y": -17.08491 + }, + { + "x": 66.93266, + "y": -3.231932 + }, + { + "x": 68.5361, + "y": -26.18595 + }, + { + "x": 76.53591, + "y": -3.304326 + }, + { + "x": 76.23439, + "y": -11.4189 + }, + { + "x": 54.16949, + "y": -19.01123 + }, + { + "x": 72.58261999999998, + "y": -16.83923 + }, + { + "x": 81.56219, + "y": -1.6943830000000002 + }, + { + "x": 67.99164, + "y": -17.64808 + }, + { + "x": 64.71255, + "y": -14.86299 + }, + { + "x": 70.76205, + "y": -13.4053 + }, + { + "x": 80.15953, + "y": -1.895146 + }, + { + "x": 64.54890999999999, + "y": -1.18837 + }, + { + "x": 72.76769, + "y": -1.913954 + }, + { + "x": 79.9837, + "y": -20.64003 + }, + { + "x": 79.13871, + "y": 3.93355 + }, + { + "x": 44.28213, + "y": 1.785785 + }, + { + "x": 64.1403, + "y": -9.613207 + }, + { + "x": 59.16926, + "y": 13.10082 + }, + { + "x": 81.54203000000003, + "y": 8.749848 + }, + { + "x": 74.12215, + "y": -22.66961 + }, + { + "x": 69.51984, + "y": -12.94162 + }, + { + "x": 80.76501999999998, + "y": -7.238871 + }, + { + "x": 54.98248, + "y": -5.827399 + }, + { + "x": 63.85516, + "y": -1.502977 + }, + { + "x": 70.24579, + "y": -22.48083 + }, + { + "x": 64.31788, + "y": -12.37871 + }, + { + "x": 86.6356, + "y": -20.3488 + }, + { + "x": 84.94551, + "y": -11.81974 + }, + { + "x": 84.22009, + "y": 0.2136558 + }, + { + "x": 64.29858, + "y": -7.7486380000000015 + }, + { + "x": 78.10973, + "y": -14.83134 + }, + { + "x": 75.86112, + "y": -11.63541 + }, + { + "x": 90.31363, + "y": -6.734307 + }, + { + "x": 62.72575, + "y": -18.50824 + }, + { + "x": 75.54213, + "y": -4.170342 + }, + { + "x": 65.45658, + "y": -10.57994 + }, + { + "x": 61.91086, + "y": -20.55287 + }, + { + "x": 59.13503000000001, + "y": -18.54382 + }, + { + "x": 60.52482, + "y": 4.0029580000000005 + }, + { + "x": 80.68502, + "y": -10.62564 + }, + { + "x": 66.77925, + "y": -6.613982000000001 + }, + { + "x": 66.15932, + "y": -12.41949 + }, + { + "x": 66.32986, + "y": -0.9856625 + }, + { + "x": 63.90113, + "y": -8.54786 + }, + { + "x": 82.86773000000002, + "y": -7.530378 + }, + { + "x": 85.21556, + "y": -24.69871 + }, + { + "x": 67.60797, + "y": 6.669538 + }, + { + "x": 66.35771, + "y": -24.43254 + }, + { + "x": 65.34889, + "y": -16.15385 + }, + { + "x": 95.9356, + "y": -13.87495 + }, + { + "x": 55.30122, + "y": -3.164437 + }, + { + "x": 53.70588000000001, + "y": -22.06458 + }, + { + "x": 58.04943000000001, + "y": -2.860465 + }, + { + "x": 75.83075, + "y": -11.85008 + }, + { + "x": 61.31218000000001, + "y": -19.0784 + }, + { + "x": 77.7234, + "y": -2.877346 + }, + { + "x": 85.97015999999998, + "y": -17.81126 + }, + { + "x": 68.26375999999999, + "y": -19.15556 + }, + { + "x": 77.10473, + "y": -19.01528 + }, + { + "x": 78.19131999999998, + "y": -8.509058 + }, + { + "x": 65.10429, + "y": -3.43562 + }, + { + "x": 79.52807, + "y": -27.63379 + }, + { + "x": 75.18258, + "y": -6.52501 + }, + { + "x": 73.22818000000002, + "y": -3.601662 + }, + { + "x": 67.87865, + "y": 6.6700399999999975 + }, + { + "x": 67.49999, + "y": -3.656658 + }, + { + "x": 68.73451, + "y": -14.8505 + }, + { + "x": 68.80344000000001, + "y": 0.2036219 + }, + { + "x": 70.23388, + "y": -1.111902 + }, + { + "x": 74.11479, + "y": -7.362882000000001 + }, + { + "x": 52.94662, + "y": -26.11158 + }, + { + "x": 61.4234, + "y": 4.10658 + }, + { + "x": 75.64492, + "y": -27.29068 + }, + { + "x": 70.19157, + "y": -15.42674 + }, + { + "x": 57.02136, + "y": -28.37956 + }, + { + "x": 62.74637, + "y": -13.188 + }, + { + "x": 65.85207, + "y": -20.20264 + }, + { + "x": 74.1682, + "y": -9.089777 + }, + { + "x": 69.75043000000001, + "y": -0.3842613 + }, + { + "x": 57.04818, + "y": -16.48449 + }, + { + "x": 78.25997, + "y": -7.99833 + }, + { + "x": 63.72304000000001, + "y": -24.23505 + }, + { + "x": 64.25357, + "y": -12.80524 + }, + { + "x": 60.51129, + "y": -0.3604612 + }, + { + "x": 64.83588, + "y": -2.828358 + }, + { + "x": 64.00904, + "y": -28.74335 + }, + { + "x": 84.36928, + "y": 1.672451 + }, + { + "x": 65.89381999999999, + "y": -9.091981 + }, + { + "x": 66.97235, + "y": -19.93247 + }, + { + "x": 84.08383, + "y": 6.8520119999999975 + }, + { + "x": 68.23765, + "y": 2.762476 + }, + { + "x": 72.25073, + "y": -17.15958 + }, + { + "x": 55.23472, + "y": 3.789266000000002 + }, + { + "x": 75.93697, + "y": -4.40856 + }, + { + "x": 68.67339, + "y": -4.801611 + }, + { + "x": 56.01145, + "y": -17.8486 + }, + { + "x": 77.52585, + "y": -15.70033 + }, + { + "x": 88.95076999999998, + "y": -19.44843 + }, + { + "x": 61.68006999999999, + "y": 8.509057 + }, + { + "x": 94.70014, + "y": -6.385033 + }, + { + "x": 66.70215, + "y": -29.732640000000004 + }, + { + "x": 77.82463, + "y": -10.06171 + }, + { + "x": 87.91064, + "y": -30.96477 + }, + { + "x": 61.9166, + "y": -8.827060000000003 + }, + { + "x": 80.87708, + "y": -0.7162395 + }, + { + "x": 80.89673, + "y": -23.38986 + }, + { + "x": 66.70298000000001, + "y": 4.803512 + }, + { + "x": 63.19015, + "y": -20.61243 + }, + { + "x": 76.81371999999998, + "y": -26.90243 + }, + { + "x": 65.06876, + "y": 4.386009 + }, + { + "x": 95.32207, + "y": -16.98335 + }, + { + "x": 57.72156999999999, + "y": -15.60494 + }, + { + "x": 55.37355, + "y": 0.1582912999999999 + }, + { + "x": 69.38056999999999, + "y": -12.99076 + }, + { + "x": 67.81506, + "y": -4.811255 + }, + { + "x": 76.97593, + "y": -8.36036 + }, + { + "x": 77.27475, + "y": 4.903346 + }, + { + "x": 83.35947, + "y": -22.26367 + }, + { + "x": 61.09789, + "y": -14.29766 + }, + { + "x": 65.82687, + "y": -19.21419 + }, + { + "x": 74.95858, + "y": -4.134062 + }, + { + "x": 62.60687, + "y": 13.20539 + }, + { + "x": 51.71922, + "y": -0.1788583 + }, + { + "x": 74.93252, + "y": -0.5864232 + }, + { + "x": 79.38506, + "y": -19.2217 + }, + { + "x": 75.77722, + "y": -26.50406 + }, + { + "x": 58.46341999999999, + "y": -15.13272 + }, + { + "x": 75.47081, + "y": -22.60266 + }, + { + "x": 44.91439, + "y": -5.197128 + }, + { + "x": 68.68961, + "y": 12.47448 + }, + { + "x": 61.03369, + "y": 0.7950335999999999 + }, + { + "x": 58.83893000000001, + "y": -2.276435 + }, + { + "x": 82.02278000000003, + "y": -8.854353999999997 + }, + { + "x": 70.77445999999998, + "y": -12.75299 + }, + { + "x": 79.77535999999998, + "y": -28.66915 + }, + { + "x": 74.93503, + "y": -3.32777 + }, + { + "x": 72.12925, + "y": -12.27785 + }, + { + "x": 80.84456999999998, + "y": -2.636685 + }, + { + "x": 57.63159, + "y": -1.221671 + }, + { + "x": 80.52416, + "y": 6.845383 + }, + { + "x": 63.2352, + "y": -24.72682 + }, + { + "x": 82.18422, + "y": -29.512190000000004 + }, + { + "x": 97.35694, + "y": -2.163071 + }, + { + "x": 60.78475, + "y": -31.03982 + }, + { + "x": 70.74291, + "y": -22.15998 + }, + { + "x": 74.0169, + "y": 14.51656 + }, + { + "x": 66.91939, + "y": -12.24789 + }, + { + "x": 76.09503000000002, + "y": 4.343312999999998 + }, + { + "x": 81.78097, + "y": -8.727155999999999 + }, + { + "x": 80.09553000000002, + "y": -4.232298 + }, + { + "x": 73.32889, + "y": 1.538375 + }, + { + "x": 62.58947, + "y": 4.468431 + }, + { + "x": 67.35439000000001, + "y": -16.61995 + }, + { + "x": 86.32658, + "y": -14.45837 + }, + { + "x": 71.04987, + "y": -2.683244 + }, + { + "x": 83.78761999999998, + "y": 26.49733 + }, + { + "x": 74.85746999999998, + "y": -5.0595050000000015 + }, + { + "x": 77.72216, + "y": 6.093524 + }, + { + "x": 68.97789, + "y": -4.123292 + }, + { + "x": 59.17706999999999, + "y": -14.73758 + }, + { + "x": 50.49705, + "y": -17.90728 + }, + { + "x": 80.156, + "y": 6.28412 + }, + { + "x": 73.31786, + "y": -9.305126 + }, + { + "x": 59.61196, + "y": -4.425068 + }, + { + "x": 68.88152, + "y": -9.893832000000002 + }, + { + "x": 88.66383, + "y": -7.9094380000000015 + }, + { + "x": 54.22847, + "y": -16.32238 + }, + { + "x": 71.32836, + "y": 2.896152 + }, + { + "x": 77.83041999999998, + "y": -5.410922 + }, + { + "x": 72.29527, + "y": -1.6438080000000002 + }, + { + "x": 60.87722, + "y": -22.1124 + }, + { + "x": 90.33483, + "y": -5.948239 + }, + { + "x": 74.31378000000002, + "y": -20.85082 + }, + { + "x": 73.68491999999998, + "y": -4.392175 + }, + { + "x": 67.73080999999999, + "y": -18.78214 + }, + { + "x": 70.87401, + "y": -13.91332 + }, + { + "x": 58.89813, + "y": -1.263629 + }, + { + "x": 61.02101999999999, + "y": -13.00759 + }, + { + "x": 63.88495, + "y": 4.276434 + }, + { + "x": 60.26458, + "y": 0.7716272 + }, + { + "x": 70.30639000000001, + "y": -11.66815 + }, + { + "x": 73.19178000000002, + "y": -4.823114 + }, + { + "x": 58.26951, + "y": -13.58154 + }, + { + "x": 73.82600000000002, + "y": -5.296698999999999 + }, + { + "x": 76.70215999999998, + "y": -7.703344 + }, + { + "x": 69.07478, + "y": 2.6927380000000003 + }, + { + "x": 55.76127, + "y": -27.63965 + }, + { + "x": 84.63778, + "y": 0.841825 + }, + { + "x": 74.96148000000002, + "y": 11.91875 + }, + { + "x": 57.6636, + "y": -23.91239 + }, + { + "x": 64.04885, + "y": -6.910765 + }, + { + "x": 71.5033, + "y": -0.02369585 + }, + { + "x": 82.15275, + "y": -21.6081 + }, + { + "x": 63.34114, + "y": -25.3215 + }, + { + "x": 73.77465, + "y": -8.064701 + }, + { + "x": 72.78902, + "y": -25.23712 + }, + { + "x": 60.628, + "y": -17.69653 + }, + { + "x": 70.46724, + "y": -13.25096 + }, + { + "x": 71.33598, + "y": -35.30175999999999 + }, + { + "x": 78.18223, + "y": -4.003611 + }, + { + "x": 65.29634, + "y": -14.71507 + }, + { + "x": 79.06381, + "y": -17.52429 + }, + { + "x": 59.79717, + "y": -15.80204 + }, + { + "x": 77.98643, + "y": 0.14855 + }, + { + "x": 79.18679, + "y": -22.84098 + }, + { + "x": 61.1682, + "y": -17.87923 + }, + { + "x": 73.55363, + "y": 3.718564 + }, + { + "x": 71.21540999999998, + "y": -7.743013 + }, + { + "x": 72.69725, + "y": -10.52523 + }, + { + "x": 66.1658, + "y": 8.654269000000001 + }, + { + "x": 66.57901, + "y": -7.96869 + }, + { + "x": 77.53841, + "y": -7.255456 + }, + { + "x": 68.90079, + "y": -1.174505 + }, + { + "x": 75.15744000000002, + "y": -4.303189 + }, + { + "x": 60.93241, + "y": -19.6263 + }, + { + "x": 70.77526999999998, + "y": -15.19386 + }, + { + "x": 61.57277, + "y": -19.84966 + }, + { + "x": 74.40188, + "y": -12.65376 + }, + { + "x": 76.09886999999998, + "y": -8.812416 + }, + { + "x": 63.0071, + "y": 4.700768 + }, + { + "x": 55.08188000000001, + "y": -13.81331 + }, + { + "x": 62.74949, + "y": -7.885534 + }, + { + "x": 69.52172, + "y": -11.22383 + }, + { + "x": 72.21619, + "y": 1.537016 + }, + { + "x": 86.36201, + "y": -19.03397 + }, + { + "x": 57.06537, + "y": -8.751387 + }, + { + "x": 65.3979, + "y": -1.594234 + }, + { + "x": 62.21588000000001, + "y": -17.88168 + }, + { + "x": 66.55029, + "y": -26.34649000000001 + }, + { + "x": 63.71606, + "y": -2.147129 + }, + { + "x": 61.24889, + "y": 11.37515 + }, + { + "x": 67.01504, + "y": -13.9139 + }, + { + "x": 76.54024, + "y": 7.571401 + }, + { + "x": 51.77094, + "y": -18.34046 + }, + { + "x": 85.88293, + "y": 3.30276 + }, + { + "x": 61.10013000000001, + "y": -12.41815 + }, + { + "x": 59.85202, + "y": -5.652476 + }, + { + "x": 75.82624, + "y": -20.09061 + }, + { + "x": 61.68382, + "y": -13.309220000000002 + }, + { + "x": 57.11461, + "y": -14.71895 + }, + { + "x": 77.37225, + "y": -1.998448 + }, + { + "x": 56.9189, + "y": -5.607814 + }, + { + "x": 68.24065999999999, + "y": -16.7783 + }, + { + "x": 70.99341, + "y": -20.21861 + }, + { + "x": 55.90017, + "y": -24.42781 + }, + { + "x": 65.72708, + "y": -12.62672 + }, + { + "x": 86.9104, + "y": -2.218481 + }, + { + "x": 60.30796, + "y": -21.13974 + }, + { + "x": 58.89599000000001, + "y": -13.65608 + }, + { + "x": 64.42315, + "y": 2.896175 + }, + { + "x": 68.26449000000001, + "y": -1.292433 + }, + { + "x": 60.80457, + "y": -16.41014 + }, + { + "x": 74.24806, + "y": -23.90477000000001 + }, + { + "x": 68.40987, + "y": -1.351733 + }, + { + "x": 75.19914, + "y": -17.88874 + }, + { + "x": 53.99338, + "y": -16.79015 + }, + { + "x": 64.66423, + "y": -11.21753 + }, + { + "x": 78.41882, + "y": -8.131473 + }, + { + "x": 90.1256, + "y": -24.57763 + }, + { + "x": 78.52343, + "y": -23.97729 + }, + { + "x": 69.83008000000001, + "y": -6.202702 + }, + { + "x": 76.66716, + "y": -10.95484 + }, + { + "x": 73.33869, + "y": -14.50632 + }, + { + "x": 54.61538, + "y": 0.822026 + }, + { + "x": 75.07177, + "y": 2.72507 + }, + { + "x": 72.55125, + "y": 16.4744 + }, + { + "x": 75.25325, + "y": 4.462008999999999 + }, + { + "x": 63.05424, + "y": -12.70489 + }, + { + "x": 74.84572, + "y": -6.9136380000000015 + }, + { + "x": 81.29542, + "y": -18.13609 + }, + { + "x": 86.43307, + "y": 1.7146 + }, + { + "x": 58.70364, + "y": -4.059786 + }, + { + "x": 50.14929, + "y": -14.31598 + }, + { + "x": 63.98909, + "y": -11.18955 + }, + { + "x": 65.58124000000001, + "y": -11.16373 + }, + { + "x": 78.43384, + "y": 1.611536 + }, + { + "x": 81.6864, + "y": -7.565635 + }, + { + "x": 71.32661, + "y": -24.2114 + }, + { + "x": 56.50423000000001, + "y": -0.6708519000000001 + }, + { + "x": 66.49155, + "y": -11.93227 + }, + { + "x": 77.01996, + "y": -7.084207000000001 + }, + { + "x": 83.91402, + "y": -1.3721299999999998 + }, + { + "x": 69.80927, + "y": -12.62827 + }, + { + "x": 59.75429000000001, + "y": 1.039816 + }, + { + "x": 97.82028, + "y": -16.56395 + }, + { + "x": 91.93916, + "y": -1.150087 + }, + { + "x": 67.92403, + "y": -17.03266 + }, + { + "x": 61.81742, + "y": 9.498615 + }, + { + "x": 71.14845, + "y": -8.638981 + }, + { + "x": 66.59299, + "y": -32.46637 + }, + { + "x": 68.46967, + "y": -30.534990000000004 + }, + { + "x": 75.83458, + "y": -3.566499 + }, + { + "x": 79.48316, + "y": -30.800590000000003 + }, + { + "x": 63.92749, + "y": -11.3843 + }, + { + "x": 67.65975, + "y": -9.337537 + }, + { + "x": 67.92515999999999, + "y": 4.484799 + }, + { + "x": 65.09831, + "y": -11.52629 + }, + { + "x": 70.69653000000002, + "y": -15.150479999999998 + }, + { + "x": 77.50496, + "y": -9.722227 + }, + { + "x": 88.75939, + "y": -10.3208 + }, + { + "x": 66.10896, + "y": -26.77577 + }, + { + "x": 48.80508, + "y": -22.4844 + }, + { + "x": 77.87479, + "y": -5.751227 + }, + { + "x": 74.65789000000002, + "y": -8.919705 + }, + { + "x": 82.11505, + "y": -1.623908 + }, + { + "x": 73.36298000000002, + "y": -14.605429999999998 + }, + { + "x": 71.40567, + "y": -4.340033 + }, + { + "x": 58.62062, + "y": -10.19077 + }, + { + "x": 65.29805999999999, + "y": 2.156136 + }, + { + "x": 72.86081, + "y": -11.82809 + }, + { + "x": 71.3769, + "y": -9.252214 + }, + { + "x": 84.13731999999997, + "y": 8.626088000000001 + }, + { + "x": 70.62952, + "y": -29.13831 + }, + { + "x": 74.71705, + "y": -17.16086 + }, + { + "x": 69.74262, + "y": -8.386807000000001 + }, + { + "x": 72.60228000000002, + "y": -4.416258999999998 + }, + { + "x": 62.13006, + "y": -22.79853 + }, + { + "x": 60.11729, + "y": 11.88867 + }, + { + "x": 76.74555, + "y": -17.363889999999998 + }, + { + "x": 67.41577, + "y": -9.266467 + }, + { + "x": 73.11009, + "y": -23.10049 + }, + { + "x": 79.32548, + "y": -15.70281 + }, + { + "x": 104.3766, + "y": 4.351511 + }, + { + "x": 66.86716, + "y": -19.87777 + }, + { + "x": 89.33103, + "y": -12.80378 + }, + { + "x": 35.74094, + "y": -24.00127 + }, + { + "x": 76.09913, + "y": -18.21636 + }, + { + "x": 69.3201, + "y": -5.764337 + }, + { + "x": 64.45351, + "y": -9.646416 + }, + { + "x": 81.06175, + "y": -21.19148 + }, + { + "x": 58.83277, + "y": -3.300213 + }, + { + "x": 59.77071, + "y": -6.5734270000000015 + }, + { + "x": 69.73292, + "y": -22.09676 + }, + { + "x": 66.791, + "y": -10.47102 + }, + { + "x": 49.65516, + "y": -1.869738 + }, + { + "x": 70.70066, + "y": -15.89514 + }, + { + "x": 72.20053, + "y": -12.37627 + }, + { + "x": 65.95326, + "y": -16.931829999999998 + }, + { + "x": 74.20015, + "y": -14.89715 + }, + { + "x": 72.81212, + "y": -3.046355 + }, + { + "x": 57.88044, + "y": -4.081336 + }, + { + "x": 48.90072, + "y": -21.98084 + }, + { + "x": 61.67483000000001, + "y": 4.149319 + }, + { + "x": 72.80554000000002, + "y": -5.543254 + }, + { + "x": 82.24438, + "y": -8.71373 + }, + { + "x": 68.85194, + "y": -0.9684211 + }, + { + "x": 70.258, + "y": -5.573562 + }, + { + "x": 51.29503, + "y": 3.890627 + }, + { + "x": 71.87862, + "y": 1.95838 + }, + { + "x": 74.26682, + "y": 0.2268598 + }, + { + "x": 73.88967, + "y": -4.138421 + }, + { + "x": 72.43866, + "y": -8.702069999999999 + }, + { + "x": 68.84693, + "y": -4.473853 + }, + { + "x": 67.4579, + "y": -11.51909 + }, + { + "x": 63.23736, + "y": -4.332619 + }, + { + "x": 67.04571999999999, + "y": -8.749687 + }, + { + "x": 61.14106, + "y": -20.12918 + }, + { + "x": 59.06593, + "y": -36.59645 + }, + { + "x": 63.0932, + "y": -9.511965 + }, + { + "x": 64.19505, + "y": -4.122554 + }, + { + "x": 69.14381999999999, + "y": -6.864114999999999 + }, + { + "x": 68.2186, + "y": -13.96171 + }, + { + "x": 80.78811999999998, + "y": -21.61113 + }, + { + "x": 62.15595, + "y": -5.59855 + }, + { + "x": 76.2021, + "y": -0.3535414 + }, + { + "x": 67.71611999999999, + "y": -21.95391 + }, + { + "x": 66.87748, + "y": -13.76373 + }, + { + "x": 81.16841, + "y": -12.7322 + }, + { + "x": 77.52611999999998, + "y": -16.854770000000002 + }, + { + "x": 73.13333, + "y": -14.03496 + }, + { + "x": 62.926080000000006, + "y": -13.9975 + }, + { + "x": 51.79126, + "y": 6.185827 + }, + { + "x": 69.15686, + "y": -9.004087 + }, + { + "x": 62.27294000000001, + "y": -7.576707000000002 + }, + { + "x": 62.86968, + "y": -8.90002 + }, + { + "x": 59.75554, + "y": -18.64859 + }, + { + "x": 55.93825, + "y": -5.324996 + }, + { + "x": 63.37816, + "y": 8.626922 + }, + { + "x": 89.06512, + "y": -18.00787 + }, + { + "x": 59.49207, + "y": -21.839 + }, + { + "x": 63.0717, + "y": 4.1653 + }, + { + "x": 74.18266, + "y": -14.39385 + }, + { + "x": 72.99597, + "y": -21.99502 + }, + { + "x": 74.54878000000002, + "y": 0.68999 + }, + { + "x": 72.79072, + "y": -13.42379 + }, + { + "x": 68.58779, + "y": 0.4890194000000001 + }, + { + "x": 83.4991, + "y": -3.712483 + }, + { + "x": 85.60566, + "y": -2.347389 + }, + { + "x": 49.33336, + "y": -16.45131 + }, + { + "x": 80.25808, + "y": -17.90534 + }, + { + "x": 73.99424, + "y": -3.416731 + }, + { + "x": 71.49039, + "y": -32.68723 + }, + { + "x": 75.56421999999998, + "y": -35.10705 + }, + { + "x": 50.77177, + "y": -5.560257 + }, + { + "x": 63.31959000000001, + "y": 3.695687 + }, + { + "x": 62.63376, + "y": -20.60124 + }, + { + "x": 72.48474, + "y": -9.643281 + }, + { + "x": 55.5865, + "y": -23.30693 + }, + { + "x": 51.66027, + "y": -29.96612 + }, + { + "x": 53.65475, + "y": -5.412205999999999 + }, + { + "x": 89.75272, + "y": -8.296797999999999 + }, + { + "x": 60.46186, + "y": 2.98287 + }, + { + "x": 80.376, + "y": -11.60401 + }, + { + "x": 61.82471999999999, + "y": -13.03964 + }, + { + "x": 73.42504, + "y": -12.02837 + }, + { + "x": 72.77863, + "y": 1.591326 + }, + { + "x": 67.30395, + "y": -22.65711 + }, + { + "x": 71.1454, + "y": -6.820285 + }, + { + "x": 91.37652, + "y": -10.32453 + }, + { + "x": 70.45770999999998, + "y": -2.015341 + }, + { + "x": 65.35571, + "y": -2.156085 + }, + { + "x": 86.14405, + "y": -6.644713 + }, + { + "x": 40.98589000000001, + "y": -20.96894 + }, + { + "x": 85.28412, + "y": -16.273020000000002 + }, + { + "x": 84.69904, + "y": -11.24636 + }, + { + "x": 78.1619, + "y": -22.53974 + }, + { + "x": 63.30449, + "y": -7.1362830000000015 + }, + { + "x": 50.9626, + "y": -0.5868151999999999 + }, + { + "x": 78.5982, + "y": -24.0221 + }, + { + "x": 71.42413, + "y": -15.80383 + }, + { + "x": 73.3584, + "y": 1.431008 + }, + { + "x": 63.5102, + "y": -10.89118 + }, + { + "x": 64.3641, + "y": -38.68109000000001 + }, + { + "x": 79.91314, + "y": -16.899739999999998 + }, + { + "x": 70.61451, + "y": -13.64807 + }, + { + "x": 77.37191, + "y": -29.6917 + }, + { + "x": 62.43318000000001, + "y": 4.515735 + }, + { + "x": 66.53034, + "y": -23.73638 + }, + { + "x": 53.39924, + "y": -8.951078 + }, + { + "x": 82.79706999999998, + "y": -3.406174 + }, + { + "x": 65.8034, + "y": -11.19213 + }, + { + "x": 87.72446, + "y": -1.788042 + }, + { + "x": 68.37876999999999, + "y": -11.21265 + }, + { + "x": 76.46406999999998, + "y": 1.250499 + }, + { + "x": 67.35838000000001, + "y": -1.977294 + }, + { + "x": 89.75777, + "y": -20.19515 + }, + { + "x": 71.4421, + "y": -6.040679 + }, + { + "x": 74.56606, + "y": -8.156191999999999 + }, + { + "x": 68.46404, + "y": -7.4320179999999985 + }, + { + "x": 78.44227, + "y": -13.59282 + }, + { + "x": 73.10613000000002, + "y": 5.701017 + }, + { + "x": 62.34706, + "y": -22.54894 + }, + { + "x": 51.82533, + "y": -14.28696 + }, + { + "x": 70.39661, + "y": -5.694306 + }, + { + "x": 76.49829, + "y": -4.378538 + }, + { + "x": 61.48431, + "y": -16.319029999999998 + }, + { + "x": 61.80351999999999, + "y": 1.297201 + }, + { + "x": 76.0211, + "y": -7.230397999999999 + }, + { + "x": 60.64451, + "y": 7.604861 + }, + { + "x": 71.70814, + "y": -12.86116 + }, + { + "x": 76.83708, + "y": -18.12474 + }, + { + "x": 78.40621999999998, + "y": -18.09712 + }, + { + "x": 68.72024, + "y": -23.95237 + }, + { + "x": 50.06301, + "y": -20.20353 + }, + { + "x": 87.69691999999998, + "y": -11.42972 + }, + { + "x": 86.99996999999998, + "y": 4.574135 + }, + { + "x": 68.19161, + "y": -20.04976 + }, + { + "x": 68.08471, + "y": -28.09651 + }, + { + "x": 64.0625, + "y": -10.7499 + }, + { + "x": 74.93968000000002, + "y": -13.940029999999998 + }, + { + "x": 74.13194, + "y": -7.691431 + }, + { + "x": 67.39908, + "y": -22.57539 + }, + { + "x": 73.78174, + "y": 0.6641589 + }, + { + "x": 55.11437, + "y": -11.70788 + }, + { + "x": 82.80131999999998, + "y": -13.10405 + }, + { + "x": 61.3069, + "y": 7.839162 + }, + { + "x": 66.26919000000001, + "y": -2.282228 + }, + { + "x": 59.19792, + "y": -11.32849 + }, + { + "x": 62.44526, + "y": -30.15219 + }, + { + "x": 49.19779000000001, + "y": -11.71951 + }, + { + "x": 72.94774, + "y": -8.344704 + }, + { + "x": 59.87773000000001, + "y": -5.742763 + }, + { + "x": 73.47509000000002, + "y": -4.283149 + }, + { + "x": 85.36645, + "y": -16.46919 + }, + { + "x": 69.38539, + "y": -1.906945 + }, + { + "x": 62.15073, + "y": -5.052795 + }, + { + "x": 64.23725999999999, + "y": -13.3351 + }, + { + "x": 72.92104, + "y": 0.791644 + }, + { + "x": 77.48227, + "y": -23.13051 + }, + { + "x": 77.34316, + "y": 3.181548 + }, + { + "x": 69.85361, + "y": -9.066127 + }, + { + "x": 70.68101999999998, + "y": -3.58606 + }, + { + "x": 84.16232, + "y": -24.39767 + }, + { + "x": 57.46576, + "y": 4.544233999999999 + }, + { + "x": 63.88039000000001, + "y": 1.74088 + }, + { + "x": 92.76103, + "y": 1.320703 + }, + { + "x": 86.41515, + "y": -12.48442 + }, + { + "x": 63.23813000000001, + "y": 0.6457113 + }, + { + "x": 72.81642, + "y": -17.780910000000006 + }, + { + "x": 52.983230000000006, + "y": 1.240638 + }, + { + "x": 66.03696, + "y": -15.12986 + }, + { + "x": 63.82113, + "y": -8.541133 + }, + { + "x": 84.74937, + "y": -21.77988 + }, + { + "x": 66.82718, + "y": -18.49357 + }, + { + "x": 66.8739, + "y": -7.117552000000001 + }, + { + "x": 90.11309, + "y": -13.73802 + }, + { + "x": 43.88975, + "y": -13.82 + }, + { + "x": 81.08251, + "y": -12.44169 + }, + { + "x": 62.29297, + "y": -16.469920000000002 + }, + { + "x": 58.55329, + "y": -23.56855 + }, + { + "x": 56.00959, + "y": 8.877158999999997 + }, + { + "x": 76.57934, + "y": -6.1733970000000005 + }, + { + "x": 82.2019, + "y": -6.9652970000000005 + }, + { + "x": 73.04178, + "y": -14.76294 + }, + { + "x": 69.56355, + "y": -12.55183 + }, + { + "x": 52.04093, + "y": -14.04998 + }, + { + "x": 73.3532, + "y": -7.7899660000000015 + }, + { + "x": 63.90973, + "y": -12.61178 + }, + { + "x": 50.83435, + "y": -1.439128 + }, + { + "x": 72.19453, + "y": -16.442320000000002 + }, + { + "x": 74.73565, + "y": -25.90802 + }, + { + "x": 68.85865, + "y": -10.91415 + }, + { + "x": 80.10725, + "y": -4.844485 + }, + { + "x": 73.59379, + "y": -2.3005400000000003 + }, + { + "x": 64.91755, + "y": -17.796529999999994 + }, + { + "x": 69.18629, + "y": -1.3457290000000002 + }, + { + "x": 56.67511, + "y": -19.89974 + }, + { + "x": 63.84701, + "y": 7.070253 + }, + { + "x": 73.52853, + "y": -4.305105 + }, + { + "x": 77.77298, + "y": -20.97871 + }, + { + "x": 66.58747, + "y": -16.51202 + }, + { + "x": 74.68619, + "y": -13.78516 + }, + { + "x": 82.44135, + "y": -3.198811 + }, + { + "x": 52.30627, + "y": -19.96528 + }, + { + "x": 69.2922, + "y": -8.165172 + }, + { + "x": 64.40332, + "y": 11.5388 + }, + { + "x": 87.83745, + "y": -5.797536 + }, + { + "x": 73.06475999999998, + "y": 2.346044 + }, + { + "x": 58.63267, + "y": 1.1054 + }, + { + "x": 74.55995, + "y": -14.94582 + }, + { + "x": 74.27044000000002, + "y": -21.81354 + }, + { + "x": 50.25447, + "y": -9.793256 + }, + { + "x": 62.09311999999999, + "y": -22.10528 + }, + { + "x": 87.61305, + "y": 0.8871884 + }, + { + "x": 79.40338, + "y": 3.454682 + }, + { + "x": 77.56643000000003, + "y": 17.25978 + }, + { + "x": 87.67891, + "y": -5.012097 + }, + { + "x": 67.52089000000001, + "y": 0.5997717 + }, + { + "x": 79.92055, + "y": -2.785855 + }, + { + "x": 71.32548, + "y": -6.040786 + }, + { + "x": 57.68811, + "y": -26.8179 + }, + { + "x": 85.23694, + "y": -7.594192999999999 + }, + { + "x": 64.65368000000001, + "y": -8.68329 + }, + { + "x": 61.31142, + "y": 11.2666 + }, + { + "x": 59.06764, + "y": 7.5886520000000015 + }, + { + "x": 87.76017, + "y": -11.61341 + }, + { + "x": 68.24614, + "y": -26.37716 + }, + { + "x": 64.45452, + "y": -2.222824 + }, + { + "x": 65.53308, + "y": -29.09276 + }, + { + "x": 63.89614, + "y": -19.10272 + }, + { + "x": 80.11442, + "y": 13.05422 + }, + { + "x": 53.4408, + "y": -4.50005 + }, + { + "x": 71.92873, + "y": -16.93747 + }, + { + "x": 61.59669, + "y": -10.75492 + }, + { + "x": 66.93093, + "y": -13.782570000000002 + }, + { + "x": 50.34516, + "y": -9.613154 + }, + { + "x": 72.01345, + "y": -13.67514 + }, + { + "x": 83.8145, + "y": -24.73408 + }, + { + "x": 78.27926, + "y": -0.2117255999999999 + }, + { + "x": 63.37316, + "y": -5.140422 + }, + { + "x": 67.56707, + "y": 1.2630940000000002 + }, + { + "x": 78.30575999999998, + "y": -2.315313 + }, + { + "x": 64.15815, + "y": -9.960403 + }, + { + "x": 58.67935, + "y": -5.187703 + }, + { + "x": 84.99193000000002, + "y": -25.74853 + }, + { + "x": 66.11341, + "y": -4.922376 + }, + { + "x": 74.52394, + "y": -1.039614 + }, + { + "x": 70.64279, + "y": -8.465358 + }, + { + "x": 89.6064, + "y": 0.470834 + }, + { + "x": 76.0323, + "y": -3.837667 + }, + { + "x": 75.88329, + "y": -11.40071 + }, + { + "x": 91.41507, + "y": -18.58123 + }, + { + "x": 75.96584, + "y": -5.74556 + }, + { + "x": 56.82018000000001, + "y": -18.1518 + }, + { + "x": 65.26213, + "y": -1.156317 + }, + { + "x": 72.5354, + "y": -20.20325 + }, + { + "x": 42.97974, + "y": -8.860008 + }, + { + "x": 58.11489, + "y": -18.28166 + }, + { + "x": 73.26021999999998, + "y": -11.98803 + }, + { + "x": 77.94697, + "y": -12.41635 + }, + { + "x": 71.2361, + "y": -8.819086 + }, + { + "x": 80.56624000000002, + "y": 7.036737 + }, + { + "x": 88.41405999999998, + "y": -13.11624 + }, + { + "x": 72.93951, + "y": -8.774334 + }, + { + "x": 71.42486, + "y": -6.5686740000000015 + }, + { + "x": 85.37737, + "y": -2.574961 + }, + { + "x": 60.69893, + "y": 4.760236 + }, + { + "x": 84.41388, + "y": -6.6052880000000025 + }, + { + "x": 78.85013000000002, + "y": -11.48461 + }, + { + "x": 72.23626999999998, + "y": -3.3483300000000003 + }, + { + "x": 79.51451, + "y": -7.224457000000001 + }, + { + "x": 70.81756999999998, + "y": -20.52531 + }, + { + "x": 79.3355, + "y": -17.013379999999998 + }, + { + "x": 83.92007, + "y": -18.97531 + }, + { + "x": 64.99888, + "y": -4.225446 + }, + { + "x": 70.30046, + "y": 4.675978 + }, + { + "x": 72.4469, + "y": -14.50134 + }, + { + "x": 65.32914, + "y": -20.57936 + }, + { + "x": 69.68672, + "y": -8.770883999999999 + }, + { + "x": 82.80946999999998, + "y": -2.210701 + }, + { + "x": 66.12637, + "y": -24.65817 + }, + { + "x": 74.31614, + "y": 0.4964872 + }, + { + "x": 62.74274000000001, + "y": -19.14187 + }, + { + "x": 66.71625, + "y": -1.28301 + }, + { + "x": 52.76581, + "y": 2.2495990000000003 + }, + { + "x": 64.23697, + "y": 2.673515 + }, + { + "x": 82.93061999999998, + "y": -20.18061 + }, + { + "x": 36.50027, + "y": -21.49223 + }, + { + "x": 103.9198, + "y": -25.94061 + }, + { + "x": 78.92066, + "y": -12.20063 + }, + { + "x": 71.31289, + "y": 4.6782650000000015 + }, + { + "x": 70.89019, + "y": 15.4043 + }, + { + "x": 87.70451, + "y": -15.3165 + }, + { + "x": 58.66569000000001, + "y": -4.894761 + }, + { + "x": 65.94133000000001, + "y": -0.4717233 + }, + { + "x": 53.61496999999999, + "y": -20.94196 + }, + { + "x": 80.81969000000002, + "y": -30.37179 + }, + { + "x": 67.59589, + "y": -2.237453 + }, + { + "x": 70.45368, + "y": -14.35 + }, + { + "x": 52.61427, + "y": -5.968235 + }, + { + "x": 67.05726999999999, + "y": -18.36929 + }, + { + "x": 80.33527, + "y": 10.0038 + }, + { + "x": 65.81659, + "y": -7.6953960000000015 + }, + { + "x": 58.66797, + "y": -6.653395 + }, + { + "x": 63.55366, + "y": -33.60001 + }, + { + "x": 72.77927, + "y": -2.6015200000000003 + }, + { + "x": 70.05731, + "y": -6.740457000000001 + }, + { + "x": 63.67471, + "y": -19.57441 + }, + { + "x": 61.41443, + "y": -12.56155 + }, + { + "x": 59.91931, + "y": -11.40836 + }, + { + "x": 54.54313000000001, + "y": -9.975537 + }, + { + "x": 70.58784, + "y": -9.452148 + }, + { + "x": 53.50131999999999, + "y": -11.88279 + }, + { + "x": 72.78958, + "y": -28.22006 + }, + { + "x": 76.30181, + "y": -6.2316720000000005 + }, + { + "x": 51.48873, + "y": -31.35942 + }, + { + "x": 82.67635, + "y": -19.14385 + }, + { + "x": 64.73662, + "y": -20.46305 + }, + { + "x": 89.92531, + "y": -10.70861 + }, + { + "x": 82.33731999999998, + "y": -6.081996 + }, + { + "x": 67.7835, + "y": -13.78307 + }, + { + "x": 82.0141, + "y": 8.581901 + }, + { + "x": 65.64449, + "y": -3.324757 + }, + { + "x": 58.89835, + "y": -22.79558 + }, + { + "x": 50.28286, + "y": 4.203121 + }, + { + "x": 68.29051, + "y": -13.59784 + }, + { + "x": 85.31325, + "y": -9.977645 + }, + { + "x": 93.10153, + "y": -14.48068 + }, + { + "x": 64.6744, + "y": -1.08624 + }, + { + "x": 72.97454, + "y": 0.8260531999999999 + }, + { + "x": 74.51595999999998, + "y": -9.207847 + }, + { + "x": 68.41306, + "y": -2.750809 + }, + { + "x": 75.30674, + "y": -4.204458 + }, + { + "x": 53.84029, + "y": -12.40979 + }, + { + "x": 67.35263, + "y": -0.3542485999999999 + }, + { + "x": 67.39329000000001, + "y": -32.9488 + }, + { + "x": 56.93941, + "y": -4.871946 + }, + { + "x": 69.12279000000001, + "y": 5.317039 + }, + { + "x": 57.22761, + "y": -5.167954 + }, + { + "x": 76.05929, + "y": -5.5695260000000015 + }, + { + "x": 59.81583000000001, + "y": -4.150285 + }, + { + "x": 64.30556999999999, + "y": -27.2714 + }, + { + "x": 59.1149, + "y": -16.25977 + }, + { + "x": 91.61397, + "y": -12.11007 + }, + { + "x": 78.31008, + "y": -16.3773 + }, + { + "x": 68.59947, + "y": 0.7928145000000001 + }, + { + "x": 68.01685, + "y": 1.1088870000000002 + }, + { + "x": 82.84614, + "y": -12.49169 + }, + { + "x": 49.51263, + "y": -0.5111645 + }, + { + "x": 69.8973, + "y": -34.17 + }, + { + "x": 84.17336999999998, + "y": -4.631359 + }, + { + "x": 78.89444, + "y": -24.29788 + }, + { + "x": 70.69758, + "y": 9.444025 + }, + { + "x": 61.77013, + "y": -19.68894 + }, + { + "x": 78.0163, + "y": 4.23549 + }, + { + "x": 73.54946, + "y": -16.099420000000002 + }, + { + "x": 55.73493000000001, + "y": -12.74454 + }, + { + "x": 65.89819, + "y": 13.69386 + }, + { + "x": 57.39889, + "y": -13.82744 + }, + { + "x": 63.04364, + "y": -27.31653 + }, + { + "x": 90.12375, + "y": -18.2544 + }, + { + "x": 64.38116, + "y": -23.61167 + }, + { + "x": 63.44825, + "y": -5.62352 + }, + { + "x": 72.94678, + "y": -17.25217 + }, + { + "x": 52.57834, + "y": -13.12009 + }, + { + "x": 63.63273, + "y": 5.738944 + }, + { + "x": 71.99254, + "y": -10.99059 + }, + { + "x": 72.39277, + "y": -4.811533 + }, + { + "x": 79.11701, + "y": -4.512673 + }, + { + "x": 51.93237, + "y": -17.866229999999995 + }, + { + "x": 70.43403, + "y": -21.59988 + }, + { + "x": 73.80844, + "y": -2.224638 + }, + { + "x": 81.84084, + "y": -19.73066 + }, + { + "x": 60.51824000000001, + "y": -7.986828999999997 + }, + { + "x": 76.27816999999997, + "y": -26.23452 + }, + { + "x": 72.43248, + "y": -18.91511 + }, + { + "x": 68.76535, + "y": 1.418947 + }, + { + "x": 60.72785, + "y": 2.763541 + }, + { + "x": 68.29949, + "y": -11.58326 + }, + { + "x": 71.62149000000002, + "y": -26.87554 + }, + { + "x": 70.59952, + "y": -5.845408 + }, + { + "x": 80.10539, + "y": -10.8262 + }, + { + "x": 70.75399, + "y": 10.09409 + }, + { + "x": 61.23998, + "y": -21.44423 + }, + { + "x": 68.3528, + "y": 8.337489 + }, + { + "x": 61.51666, + "y": -12.43442 + }, + { + "x": 71.43109, + "y": -0.0061483519999999 + }, + { + "x": 62.02735, + "y": -24.19875 + }, + { + "x": 61.78095, + "y": 1.968633 + }, + { + "x": 98.66974, + "y": -2.164127 + }, + { + "x": 73.01436, + "y": -1.7224549999999998 + }, + { + "x": 82.94384000000002, + "y": -0.9408177 + }, + { + "x": 80.52203, + "y": -13.20871 + }, + { + "x": 53.52886, + "y": -3.686721 + }, + { + "x": 70.67194, + "y": -0.7722773 + }, + { + "x": 56.81425, + "y": -13.704579999999998 + }, + { + "x": 72.37652, + "y": -26.52538 + }, + { + "x": 49.83153, + "y": -8.861414 + }, + { + "x": 70.16466, + "y": -18.97082 + }, + { + "x": 72.25542, + "y": 17.13289 + }, + { + "x": 69.0665, + "y": 2.742776 + }, + { + "x": 57.83613, + "y": -1.477452 + }, + { + "x": 75.97397, + "y": -22.84942 + }, + { + "x": 68.33255, + "y": 0.6976613 + }, + { + "x": 60.67356, + "y": -8.95394 + }, + { + "x": 61.20472, + "y": -14.9268 + }, + { + "x": 65.426, + "y": -8.987577 + }, + { + "x": 77.37339, + "y": -3.91479 + }, + { + "x": 65.88091, + "y": -24.6382 + }, + { + "x": 68.68375999999999, + "y": -26.48481 + }, + { + "x": 83.17385, + "y": -11.66942 + }, + { + "x": 69.57141999999999, + "y": -1.19085 + }, + { + "x": 87.76274000000002, + "y": -12.09585 + }, + { + "x": 64.25253000000001, + "y": -4.659249 + }, + { + "x": 58.7633, + "y": -9.553751 + }, + { + "x": 87.6779, + "y": -14.57468 + }, + { + "x": 84.77951999999998, + "y": -28.19338 + }, + { + "x": 44.48759, + "y": -28.91912 + }, + { + "x": 71.15801, + "y": -4.96975 + }, + { + "x": 81.11289000000002, + "y": 1.820294 + }, + { + "x": 69.6739, + "y": -13.50128 + }, + { + "x": 77.81984, + "y": -29.2818 + }, + { + "x": 74.59189, + "y": -6.9690179999999975 + }, + { + "x": 87.18534, + "y": -7.561814 + }, + { + "x": 80.60636, + "y": 4.6757800000000005 + }, + { + "x": 84.97686999999998, + "y": -20.77276 + }, + { + "x": 79.38887, + "y": 18.96587 + }, + { + "x": 73.09005, + "y": -9.938504 + }, + { + "x": 83.21137, + "y": -35.36076 + }, + { + "x": 54.64416, + "y": -10.79429 + }, + { + "x": 73.64229, + "y": -16.80874 + }, + { + "x": 68.84037, + "y": -3.089466 + }, + { + "x": 75.82528, + "y": -25.17796 + }, + { + "x": 77.2142, + "y": -21.172320000000006 + }, + { + "x": 62.69973, + "y": -11.28403 + }, + { + "x": 65.87854, + "y": -18.35437 + }, + { + "x": 65.8312, + "y": -12.80048 + }, + { + "x": 69.75814, + "y": -6.189078 + }, + { + "x": 68.61625, + "y": -15.98461 + }, + { + "x": 64.98134, + "y": -16.78327 + }, + { + "x": 64.85876, + "y": -9.286581 + }, + { + "x": 66.79545999999999, + "y": -17.6295 + }, + { + "x": 43.56437, + "y": -14.07815 + }, + { + "x": 68.28453, + "y": -0.05283603 + }, + { + "x": 53.97722, + "y": -18.11732 + }, + { + "x": 72.37554, + "y": -14.15102 + }, + { + "x": 45.12958, + "y": 6.069386 + }, + { + "x": 79.23594, + "y": -7.783266999999999 + }, + { + "x": 67.89267, + "y": -20.79489 + }, + { + "x": 77.45593000000002, + "y": -6.610436999999999 + }, + { + "x": 67.28255, + "y": -3.456408 + }, + { + "x": 77.23093, + "y": -4.179791000000002 + }, + { + "x": 77.14531, + "y": -16.250220000000002 + }, + { + "x": 60.35104000000001, + "y": -16.18723 + }, + { + "x": 65.31193, + "y": -16.61032 + }, + { + "x": 77.93611, + "y": -32.70189 + }, + { + "x": 79.88167, + "y": -9.25513 + }, + { + "x": 64.06411999999999, + "y": -5.0536650000000005 + }, + { + "x": 55.65335, + "y": -2.3524540000000003 + }, + { + "x": 60.33708000000001, + "y": -0.5121532 + }, + { + "x": 69.20068, + "y": -13.57959 + }, + { + "x": 62.69723000000001, + "y": -10.16704 + }, + { + "x": 66.39989, + "y": -5.404058 + }, + { + "x": 60.86256, + "y": -17.942429999999995 + }, + { + "x": 74.03130999999998, + "y": -25.69833 + }, + { + "x": 82.44264, + "y": -17.38876 + }, + { + "x": 71.05726999999997, + "y": -20.94383 + }, + { + "x": 80.91493, + "y": -5.505733 + }, + { + "x": 74.19766, + "y": -3.398674 + }, + { + "x": 73.76104000000002, + "y": -9.804844 + }, + { + "x": 69.15085, + "y": -27.33672 + }, + { + "x": 73.74459, + "y": -22.24747 + }, + { + "x": 93.63296, + "y": -10.36324 + }, + { + "x": 72.05005, + "y": -1.98867 + }, + { + "x": 79.09496999999998, + "y": -17.7693 + }, + { + "x": 52.66147, + "y": -12.10119 + }, + { + "x": 91.25622, + "y": -26.76765 + }, + { + "x": 69.69169000000001, + "y": -7.789096000000002 + }, + { + "x": 47.71091, + "y": -6.095375 + }, + { + "x": 55.00807, + "y": 11.56722 + }, + { + "x": 67.68167, + "y": -9.785644 + }, + { + "x": 65.44644, + "y": -12.13077 + }, + { + "x": 84.56817, + "y": -6.077383 + }, + { + "x": 97.56903, + "y": -14.44639 + }, + { + "x": 53.24851999999999, + "y": -11.41788 + }, + { + "x": 67.16991, + "y": -4.073038 + }, + { + "x": 62.42045, + "y": -16.2767 + }, + { + "x": 59.63564, + "y": -37.79037 + }, + { + "x": 78.52355, + "y": -6.868666 + }, + { + "x": 68.07284, + "y": -9.450905 + }, + { + "x": 64.40905, + "y": -17.325689999999998 + }, + { + "x": 83.58873, + "y": -10.16413 + }, + { + "x": 83.71054000000002, + "y": -7.567408 + }, + { + "x": 76.59971999999998, + "y": -8.598391000000001 + }, + { + "x": 65.59871, + "y": -5.515496 + }, + { + "x": 64.16530999999999, + "y": -8.239429 + }, + { + "x": 72.31848000000002, + "y": -28.37739 + }, + { + "x": 72.89074000000002, + "y": -13.08401 + }, + { + "x": 71.85983, + "y": -7.281507 + }, + { + "x": 74.98594, + "y": 4.9548 + }, + { + "x": 68.01299, + "y": -12.93427 + }, + { + "x": 71.72321, + "y": -7.872746 + }, + { + "x": 85.0203, + "y": -22.10981 + }, + { + "x": 66.09438, + "y": 0.7196266 + }, + { + "x": 85.76525, + "y": -15.941579999999998 + }, + { + "x": 75.29033000000003, + "y": -20.52493 + }, + { + "x": 69.05731, + "y": -16.42671 + }, + { + "x": 84.21595, + "y": -13.29946 + }, + { + "x": 69.43209, + "y": -7.778992999999999 + }, + { + "x": 69.3489, + "y": -16.70996 + }, + { + "x": 67.49600000000001, + "y": 0.7695373000000001 + }, + { + "x": 54.37956, + "y": -2.373576 + }, + { + "x": 55.37194, + "y": -8.759966 + }, + { + "x": 65.99169, + "y": -4.956535 + }, + { + "x": 82.59654, + "y": -29.846390000000003 + }, + { + "x": 80.10463, + "y": -11.9095 + }, + { + "x": 62.44377, + "y": -16.1361 + }, + { + "x": 87.34288000000002, + "y": -11.94191 + }, + { + "x": 63.13534, + "y": -32.47361 + }, + { + "x": 80.38441999999998, + "y": -12.19301 + }, + { + "x": 53.62364, + "y": -20.69438 + }, + { + "x": 70.99268000000002, + "y": -3.2878010000000004 + }, + { + "x": 92.67575, + "y": -16.184620000000002 + }, + { + "x": 65.15415, + "y": -7.422444 + }, + { + "x": 79.33412, + "y": -22.18659 + }, + { + "x": 69.03038000000001, + "y": -13.70663 + }, + { + "x": 85.09824, + "y": -11.31437 + }, + { + "x": 75.07559, + "y": -1.20056 + }, + { + "x": 74.90408000000002, + "y": -31.59422 + }, + { + "x": 51.66653, + "y": 5.640219999999999 + }, + { + "x": 77.56271, + "y": -12.51884 + }, + { + "x": 83.9768, + "y": -15.20381 + }, + { + "x": 52.63898, + "y": 0.2466355 + }, + { + "x": 64.80269, + "y": -19.89357 + }, + { + "x": 60.91486999999999, + "y": -5.64697 + }, + { + "x": 76.31144, + "y": -13.2713 + }, + { + "x": 72.70005, + "y": -17.95129 + }, + { + "x": 54.85474, + "y": -4.231365 + }, + { + "x": 60.46303, + "y": -11.15464 + }, + { + "x": 73.09839000000002, + "y": -14.09135 + }, + { + "x": 58.33049000000001, + "y": -24.54733 + }, + { + "x": 78.08799, + "y": 4.297182 + }, + { + "x": 61.18767, + "y": -32.67201 + }, + { + "x": 76.27331, + "y": -27.69607 + }, + { + "x": 67.0222, + "y": -35.01962 + }, + { + "x": 83.54788, + "y": 1.910021 + }, + { + "x": 54.19945, + "y": -13.45955 + }, + { + "x": 67.80528000000001, + "y": 4.444605 + }, + { + "x": 87.90198000000002, + "y": 14.85406 + }, + { + "x": 62.05761, + "y": -0.1845935 + }, + { + "x": 67.43387, + "y": -4.600472 + }, + { + "x": 51.20422, + "y": -7.373769999999999 + }, + { + "x": 83.53147, + "y": -4.596114 + }, + { + "x": 63.07033000000001, + "y": -10.09449 + }, + { + "x": 62.59971, + "y": -7.99627 + }, + { + "x": 68.3894, + "y": -1.819404 + }, + { + "x": 75.60424, + "y": -8.007767 + }, + { + "x": 51.39455, + "y": -7.560444 + }, + { + "x": 54.05743, + "y": -30.14147 + }, + { + "x": 54.21433, + "y": 0.976269 + }, + { + "x": 66.1136, + "y": -2.307693 + }, + { + "x": 72.98232, + "y": -21.41706 + }, + { + "x": 63.47237, + "y": 0.4243742 + }, + { + "x": 67.75565999999999, + "y": -3.700921 + }, + { + "x": 59.91526999999999, + "y": -4.502811 + }, + { + "x": 59.59558000000001, + "y": 19.35797 + }, + { + "x": 74.9352, + "y": 2.191131 + }, + { + "x": 59.33881, + "y": -18.74531 + }, + { + "x": 79.36211999999998, + "y": 5.214438 + }, + { + "x": 82.11814, + "y": -13.61926 + }, + { + "x": 83.82712, + "y": -38.7955 + }, + { + "x": 74.61884, + "y": -11.33446 + }, + { + "x": 61.73203, + "y": -5.572901 + }, + { + "x": 68.48676999999999, + "y": -23.12137 + }, + { + "x": 69.30094, + "y": -27.30873 + }, + { + "x": 56.70621, + "y": -17.45695 + }, + { + "x": 71.53534, + "y": 0.8623791999999999 + }, + { + "x": 76.21033, + "y": 7.055012 + }, + { + "x": 63.84636, + "y": -17.7283 + }, + { + "x": 66.25222, + "y": -3.913034 + }, + { + "x": 81.44768, + "y": -24.24757 + }, + { + "x": 62.67937, + "y": -20.08821 + }, + { + "x": 54.33532, + "y": 1.649464 + }, + { + "x": 75.66274, + "y": -15.75875 + }, + { + "x": 80.03555, + "y": -14.61174 + }, + { + "x": 60.50964000000001, + "y": -18.80588 + }, + { + "x": 69.59801999999999, + "y": -15.57155 + }, + { + "x": 63.66285, + "y": -30.48215 + }, + { + "x": 56.05253, + "y": -7.357508 + }, + { + "x": 64.07648, + "y": -4.398561 + }, + { + "x": 64.70491, + "y": -10.37657 + }, + { + "x": 80.56889, + "y": 14.50799 + }, + { + "x": 86.61128000000002, + "y": -7.867749000000001 + }, + { + "x": 76.73148, + "y": -16.839389999999998 + }, + { + "x": 68.25068, + "y": -7.1420020000000015 + }, + { + "x": 83.53589000000002, + "y": -22.03176 + }, + { + "x": 84.63376, + "y": -10.65431 + }, + { + "x": 59.70858000000001, + "y": -7.02261 + }, + { + "x": 66.62059, + "y": 0.2782472 + }, + { + "x": 79.4429, + "y": -20.8802 + }, + { + "x": 59.14149000000001, + "y": -3.268589 + }, + { + "x": 62.93142, + "y": -9.67255 + }, + { + "x": 76.28171, + "y": 6.197267 + }, + { + "x": 81.7813, + "y": -17.89441 + }, + { + "x": 49.64519, + "y": -20.29111 + }, + { + "x": 58.37999, + "y": -12.982 + }, + { + "x": 74.68241, + "y": -22.74285 + }, + { + "x": 88.04621999999998, + "y": 2.73894 + }, + { + "x": 41.72015, + "y": -7.237918 + }, + { + "x": 61.91275, + "y": -12.98729 + }, + { + "x": 74.79148, + "y": -17.63764 + }, + { + "x": 61.99087, + "y": -15.7656 + }, + { + "x": 82.01159, + "y": -18.70377 + }, + { + "x": 78.71038, + "y": -15.10186 + }, + { + "x": 85.51906, + "y": -22.09427 + }, + { + "x": 76.5364, + "y": -11.39254 + }, + { + "x": 48.34201, + "y": -9.15055 + }, + { + "x": 69.69287, + "y": -7.0676289999999975 + }, + { + "x": 79.86285, + "y": -16.01771 + }, + { + "x": 69.80298, + "y": 4.93805 + }, + { + "x": 83.65175, + "y": -18.73922 + }, + { + "x": 85.6528, + "y": -6.461061 + }, + { + "x": 82.77088, + "y": -2.3732990000000003 + }, + { + "x": 64.46531999999999, + "y": -10.50136 + }, + { + "x": 90.72282, + "y": -12.25584 + }, + { + "x": 64.87976, + "y": -24.87731 + } + ] + }, + { + "clusterNr": 2, + "centroid": { + "x": 40.68362784160133, + "y": 59.7158927415144 + }, + "points": [ + { + "x": 24.2999, + "y": 40.42887 + }, + { + "x": 37.48364, + "y": 34.12808 + }, + { + "x": 48.1905, + "y": 56.00666999999999 + }, + { + "x": 48.32863, + "y": 76.0944 + }, + { + "x": 31.44145, + "y": 62.66712 + }, + { + "x": 37.60916, + "y": 64.75492 + }, + { + "x": 52.68577, + "y": 71.53609 + }, + { + "x": 48.723, + "y": 83.29384 + }, + { + "x": 31.85518, + "y": 59.354380000000006 + }, + { + "x": 55.55334000000001, + "y": 57.31956 + }, + { + "x": 29.06337000000001, + "y": 49.34992 + }, + { + "x": 50.45302, + "y": 78.01416 + }, + { + "x": 33.5429, + "y": 51.27797 + }, + { + "x": 45.11086, + "y": 46.34557 + }, + { + "x": 43.73054000000001, + "y": 67.13846 + }, + { + "x": 55.90229, + "y": 44.41355 + }, + { + "x": 35.51136, + "y": 63.02239 + }, + { + "x": 36.66438, + "y": 60.00176999999999 + }, + { + "x": 39.22292, + "y": 42.76795 + }, + { + "x": 25.76358, + "y": 72.0769 + }, + { + "x": 42.31278, + "y": 66.04035 + }, + { + "x": 46.66542000000001, + "y": 58.45405 + }, + { + "x": 57.76221, + "y": 50.79996 + }, + { + "x": 53.64062, + "y": 53.19439000000001 + }, + { + "x": 55.59307, + "y": 72.58209000000002 + }, + { + "x": 34.6382, + "y": 62.93818 + }, + { + "x": 68.81378000000001, + "y": 49.40914 + }, + { + "x": 38.22668, + "y": 55.08212 + }, + { + "x": 42.41835, + "y": 73.77797 + }, + { + "x": 44.42384000000001, + "y": 52.0499 + }, + { + "x": 32.44594, + "y": 52.46474 + }, + { + "x": 43.85302, + "y": 49.00594 + }, + { + "x": 52.93561, + "y": 51.52707 + }, + { + "x": 46.05927, + "y": 70.18995 + }, + { + "x": 44.43309, + "y": 58.9645 + }, + { + "x": 53.3247, + "y": 66.99565 + }, + { + "x": 54.93488000000001, + "y": 52.0303 + }, + { + "x": 44.00335, + "y": 60.1725 + }, + { + "x": 38.54234, + "y": 53.11563 + }, + { + "x": 26.89144000000001, + "y": 60.17693000000001 + }, + { + "x": 27.22742, + "y": 47.07473 + }, + { + "x": 24.60301, + "y": 58.44653 + }, + { + "x": 45.18391, + "y": 69.45772 + }, + { + "x": 35.58807, + "y": 73.17408 + }, + { + "x": 28.12908, + "y": 44.06283 + }, + { + "x": 39.83815, + "y": 48.70388 + }, + { + "x": 40.05444, + "y": 79.05227 + }, + { + "x": 54.45571999999999, + "y": 49.34488 + }, + { + "x": 58.99003, + "y": 59.51809 + }, + { + "x": 47.31255, + "y": 47.80124 + }, + { + "x": 46.05767, + "y": 70.08161 + }, + { + "x": 51.1862, + "y": 60.57783000000001 + }, + { + "x": 58.01156999999999, + "y": 62.87727 + }, + { + "x": 31.051240000000004, + "y": 61.88555 + }, + { + "x": 32.63545, + "y": 43.24568 + }, + { + "x": 59.21907, + "y": 75.16453 + }, + { + "x": 40.6654, + "y": 81.79757 + }, + { + "x": 35.82676, + "y": 67.83398000000001 + }, + { + "x": 49.35519, + "y": 75.29319 + }, + { + "x": 57.81302, + "y": 55.61863 + }, + { + "x": 36.07083, + "y": 51.26997 + }, + { + "x": 33.88886, + "y": 48.83694000000001 + }, + { + "x": 38.75301, + "y": 68.91596 + }, + { + "x": 44.30184000000001, + "y": 53.37654000000001 + }, + { + "x": 43.40867, + "y": 62.64091 + }, + { + "x": 36.25078, + "y": 46.24887 + }, + { + "x": 35.66046, + "y": 40.16179 + }, + { + "x": 44.1886, + "y": 74.18132 + }, + { + "x": 42.35297, + "y": 68.86938 + }, + { + "x": 59.72761, + "y": 71.64868 + }, + { + "x": 41.7742, + "y": 74.69192 + }, + { + "x": 39.48583, + "y": 58.30031999999999 + }, + { + "x": 46.18587, + "y": 49.02519 + }, + { + "x": 32.8916, + "y": 50.17133 + }, + { + "x": 31.03531, + "y": 72.2532 + }, + { + "x": 47.2611, + "y": 67.1427 + }, + { + "x": 43.63065, + "y": 63.04766 + }, + { + "x": 43.20379000000001, + "y": 57.58694000000001 + }, + { + "x": 34.45682, + "y": 54.82336 + }, + { + "x": 36.08501, + "y": 68.00059 + }, + { + "x": 55.93224, + "y": 63.07734 + }, + { + "x": 30.01013, + "y": 67.8034 + }, + { + "x": 40.17444, + "y": 50.23319 + }, + { + "x": 40.51248, + "y": 61.16069 + }, + { + "x": 44.84228, + "y": 59.17143000000001 + }, + { + "x": 44.95826, + "y": 65.09772 + }, + { + "x": 49.34734, + "y": 52.56688000000001 + }, + { + "x": 24.18327, + "y": 63.48712 + }, + { + "x": 41.57294, + "y": 48.41452 + }, + { + "x": 36.97141, + "y": 65.02328 + }, + { + "x": 39.83944, + "y": 49.22476 + }, + { + "x": 39.42764, + "y": 46.07249 + }, + { + "x": 33.85577, + "y": 58.8609 + }, + { + "x": 32.444520000000004, + "y": 46.98045 + }, + { + "x": 35.12357, + "y": 78.56973 + }, + { + "x": 36.99186, + "y": 63.62753000000001 + }, + { + "x": 44.04283, + "y": 69.94757 + }, + { + "x": 47.66477, + "y": 59.80407 + }, + { + "x": 46.3599, + "y": 59.65951999999999 + }, + { + "x": 71.56260999999998, + "y": 53.91534 + }, + { + "x": 28.928690000000003, + "y": 46.33052 + }, + { + "x": 47.19929000000001, + "y": 41.39569 + }, + { + "x": 48.15507, + "y": 83.98581 + }, + { + "x": 48.4477, + "y": 54.65174 + }, + { + "x": 35.18339, + "y": 68.19836 + }, + { + "x": 52.26128, + "y": 50.64056 + }, + { + "x": 35.77592, + "y": 62.37214 + }, + { + "x": 43.37792, + "y": 60.65264000000001 + }, + { + "x": 40.40879, + "y": 53.21294 + }, + { + "x": 46.39126, + "y": 64.80001999999999 + }, + { + "x": 61.87996, + "y": 62.7935 + }, + { + "x": 18.99094, + "y": 54.79462 + }, + { + "x": 35.54591, + "y": 64.34436 + }, + { + "x": 50.37548, + "y": 68.05591 + }, + { + "x": 54.54673, + "y": 60.98913 + }, + { + "x": 44.13707, + "y": 53.40706 + }, + { + "x": 45.55372, + "y": 70.63025 + }, + { + "x": 45.68042, + "y": 41.9937 + }, + { + "x": 55.04569, + "y": 48.46728 + }, + { + "x": 37.81383, + "y": 42.24533 + }, + { + "x": 33.56491, + "y": 78.10993 + }, + { + "x": 19.2699, + "y": 67.18515 + }, + { + "x": 37.28481, + "y": 37.79198 + }, + { + "x": 39.77556, + "y": 44.83249 + }, + { + "x": 35.46314, + "y": 70.30631 + }, + { + "x": 40.41439, + "y": 65.25805 + }, + { + "x": 26.7135, + "y": 60.60958 + }, + { + "x": 40.50345, + "y": 57.22231 + }, + { + "x": 29.83138, + "y": 55.35326 + }, + { + "x": 40.04233, + "y": 60.38692 + }, + { + "x": 40.95189, + "y": 51.6069 + }, + { + "x": 51.68887, + "y": 52.47176 + }, + { + "x": 24.69499, + "y": 50.50501 + }, + { + "x": 62.78684000000001, + "y": 55.41728000000001 + }, + { + "x": 21.08624, + "y": 48.07032 + }, + { + "x": 22.0205, + "y": 45.01294 + }, + { + "x": 41.01136, + "y": 45.20848 + }, + { + "x": 41.47629000000001, + "y": 49.69875 + }, + { + "x": 43.15526, + "y": 69.96186999999999 + }, + { + "x": 33.97264000000001, + "y": 58.3128 + }, + { + "x": 35.58473, + "y": 46.37667 + }, + { + "x": 31.52146, + "y": 61.44991 + }, + { + "x": 38.50949, + "y": 54.9348 + }, + { + "x": 48.51959, + "y": 45.1665 + }, + { + "x": 51.80655, + "y": 48.92263 + }, + { + "x": 59.93333000000001, + "y": 41.36604000000001 + }, + { + "x": 37.52437000000001, + "y": 65.41436 + }, + { + "x": 41.38512, + "y": 58.3734 + }, + { + "x": 59.89985, + "y": 45.3802 + }, + { + "x": 46.32288, + "y": 49.54236 + }, + { + "x": 45.69158, + "y": 60.92593000000001 + }, + { + "x": 36.79516, + "y": 78.20391 + }, + { + "x": 30.70871, + "y": 70.33036 + }, + { + "x": 51.97064, + "y": 80.70323 + }, + { + "x": 50.47091, + "y": 64.8867 + }, + { + "x": 52.55752, + "y": 66.85835 + }, + { + "x": 38.0208, + "y": 75.94703 + }, + { + "x": 47.81833, + "y": 58.65439 + }, + { + "x": 45.85127, + "y": 67.85252 + }, + { + "x": 51.34424, + "y": 68.26302 + }, + { + "x": 37.33317, + "y": 67.98246999999999 + }, + { + "x": 45.61133, + "y": 63.20619 + }, + { + "x": 31.50764, + "y": 65.71172 + }, + { + "x": 28.51895, + "y": 73.79701 + }, + { + "x": 50.74807, + "y": 53.57638000000001 + }, + { + "x": 39.53701, + "y": 69.93831999999999 + }, + { + "x": 49.56372, + "y": 68.6858 + }, + { + "x": 57.41644, + "y": 42.79595 + }, + { + "x": 35.55559, + "y": 58.52347 + }, + { + "x": 42.96314, + "y": 37.97548 + }, + { + "x": 41.98642, + "y": 55.80981 + }, + { + "x": 32.55532, + "y": 46.44257 + }, + { + "x": 32.345279999999995, + "y": 60.57506 + }, + { + "x": 24.44857, + "y": 51.36618 + }, + { + "x": 39.53357000000001, + "y": 64.53081999999999 + }, + { + "x": 28.80983, + "y": 55.80426 + }, + { + "x": 39.83018, + "y": 55.04155 + }, + { + "x": 39.42011, + "y": 44.53216 + }, + { + "x": 42.75812, + "y": 66.42826 + }, + { + "x": 23.17606, + "y": 56.86704 + }, + { + "x": 25.55901, + "y": 68.7241 + }, + { + "x": 18.26403, + "y": 40.02327 + }, + { + "x": 30.70777, + "y": 63.31014 + }, + { + "x": 49.43437, + "y": 79.62605 + }, + { + "x": 41.15351, + "y": 60.28376 + }, + { + "x": 36.17541, + "y": 65.56798 + }, + { + "x": 44.08116, + "y": 51.84447 + }, + { + "x": 43.27453, + "y": 68.85571 + }, + { + "x": 49.39423, + "y": 60.62898000000001 + }, + { + "x": 50.53357000000001, + "y": 46.03307 + }, + { + "x": 42.95269, + "y": 71.277 + }, + { + "x": 30.574040000000004, + "y": 76.27772 + }, + { + "x": 35.20991, + "y": 69.40798000000001 + }, + { + "x": 39.5469, + "y": 58.25396 + }, + { + "x": 40.54202, + "y": 68.29326 + }, + { + "x": 42.14727, + "y": 63.224 + }, + { + "x": 39.30898, + "y": 55.78019000000001 + }, + { + "x": 50.05859, + "y": 57.09342 + }, + { + "x": 43.67538, + "y": 63.21723000000001 + }, + { + "x": 39.79353, + "y": 43.73809 + }, + { + "x": 43.44539, + "y": 50.19695 + }, + { + "x": 41.67813, + "y": 55.28961999999999 + }, + { + "x": 48.594, + "y": 69.64589000000001 + }, + { + "x": 38.46082, + "y": 61.08416 + }, + { + "x": 53.26524000000001, + "y": 63.82018000000001 + }, + { + "x": 49.0517, + "y": 66.49995 + }, + { + "x": 39.31737, + "y": 67.48604 + }, + { + "x": 41.24618, + "y": 49.47654 + }, + { + "x": 37.88715, + "y": 59.91647 + }, + { + "x": 41.14622, + "y": 63.44699 + }, + { + "x": 32.521640000000005, + "y": 73.23534000000002 + }, + { + "x": 41.10812, + "y": 44.68184 + }, + { + "x": 25.34895, + "y": 55.25141 + }, + { + "x": 41.9661, + "y": 60.38896 + }, + { + "x": 40.65187, + "y": 61.11229 + }, + { + "x": 31.38396, + "y": 66.525 + }, + { + "x": 59.78578, + "y": 38.49133 + }, + { + "x": 31.3399, + "y": 63.09048000000001 + }, + { + "x": 40.92554000000001, + "y": 60.43771 + }, + { + "x": 29.67727, + "y": 66.38073 + }, + { + "x": 32.59683, + "y": 33.867090000000005 + }, + { + "x": 20.88727, + "y": 56.18753 + }, + { + "x": 37.8447, + "y": 51.01321 + }, + { + "x": 40.57783, + "y": 69.06488 + }, + { + "x": 59.67326, + "y": 74.55561999999998 + }, + { + "x": 36.6854, + "y": 50.43604000000001 + }, + { + "x": 45.94, + "y": 57.68176 + }, + { + "x": 64.98144, + "y": 79.71206 + }, + { + "x": 36.98331, + "y": 65.35463 + }, + { + "x": 45.67468, + "y": 55.15185 + }, + { + "x": 37.51643, + "y": 49.06353 + }, + { + "x": 51.32067, + "y": 56.63374 + }, + { + "x": 46.13968, + "y": 46.26812 + }, + { + "x": 46.3057, + "y": 50.07933 + }, + { + "x": 58.78482, + "y": 35.37284000000001 + }, + { + "x": 24.40643, + "y": 58.87376 + }, + { + "x": 42.22782, + "y": 61.23968000000001 + }, + { + "x": 19.33637, + "y": 69.78316 + }, + { + "x": 39.09501, + "y": 60.00454000000001 + }, + { + "x": 31.54544000000001, + "y": 56.18556 + }, + { + "x": 46.81052, + "y": 51.33483 + }, + { + "x": 37.31417, + "y": 60.64799 + }, + { + "x": 35.31276, + "y": 64.61462 + }, + { + "x": 47.03397, + "y": 66.32737 + }, + { + "x": 43.20051, + "y": 64.01385 + }, + { + "x": 57.78369, + "y": 73.30975 + }, + { + "x": 51.95346, + "y": 50.6932 + }, + { + "x": 37.04092, + "y": 60.51894 + }, + { + "x": 33.26079, + "y": 75.71045 + }, + { + "x": 45.94416, + "y": 71.49937 + }, + { + "x": 35.73385, + "y": 46.9001 + }, + { + "x": 40.76379, + "y": 67.68751 + }, + { + "x": 35.145540000000004, + "y": 65.5663 + }, + { + "x": 35.66175, + "y": 56.80016 + }, + { + "x": 28.88317, + "y": 43.26803 + }, + { + "x": 31.27264000000001, + "y": 66.3293 + }, + { + "x": 34.13748, + "y": 60.96088 + }, + { + "x": 47.33729, + "y": 68.169 + }, + { + "x": 31.18816, + "y": 78.43963000000002 + }, + { + "x": 37.92156, + "y": 63.1141 + }, + { + "x": 53.294, + "y": 55.50261999999999 + }, + { + "x": 61.38426, + "y": 59.91205 + }, + { + "x": 43.75808, + "y": 67.45812 + }, + { + "x": 38.92632, + "y": 43.12086 + }, + { + "x": 30.63075, + "y": 79.46695 + }, + { + "x": 28.52392, + "y": 59.14458000000001 + }, + { + "x": 34.3243, + "y": 60.94347 + }, + { + "x": 24.5469, + "y": 64.80247 + }, + { + "x": 36.00817, + "y": 46.68387 + }, + { + "x": 21.60583, + "y": 46.62644 + }, + { + "x": 44.03259, + "y": 64.42778 + }, + { + "x": 33.99769000000001, + "y": 56.55145 + }, + { + "x": 43.60366, + "y": 61.25346 + }, + { + "x": 46.92525, + "y": 54.08689 + }, + { + "x": 50.50127, + "y": 60.62361 + }, + { + "x": 53.49198000000001, + "y": 41.07875 + }, + { + "x": 42.67635, + "y": 55.93246 + }, + { + "x": 27.99422, + "y": 53.68188000000001 + }, + { + "x": 39.43207, + "y": 57.01566 + }, + { + "x": 26.77366, + "y": 63.055 + }, + { + "x": 42.40971, + "y": 49.95729 + }, + { + "x": 36.22691, + "y": 57.21221 + }, + { + "x": 38.46163, + "y": 67.33074 + }, + { + "x": 43.78143, + "y": 65.92309 + }, + { + "x": 32.78291, + "y": 73.01238000000002 + }, + { + "x": 34.33231, + "y": 60.31763 + }, + { + "x": 38.62762, + "y": 57.39558 + }, + { + "x": 40.80154, + "y": 39.94366 + }, + { + "x": 34.4872, + "y": 50.56793 + }, + { + "x": 37.28235, + "y": 51.46425 + }, + { + "x": 36.29004000000001, + "y": 72.62875 + }, + { + "x": 27.32446, + "y": 51.97536 + }, + { + "x": 43.01795, + "y": 72.62218 + }, + { + "x": 30.62136, + "y": 49.73988 + }, + { + "x": 51.54357, + "y": 37.5978 + }, + { + "x": 54.47479000000001, + "y": 52.03507000000001 + }, + { + "x": 46.6837, + "y": 76.38964 + }, + { + "x": 36.40191, + "y": 55.50854 + }, + { + "x": 32.79919, + "y": 57.24132 + }, + { + "x": 63.01716999999999, + "y": 51.67786 + }, + { + "x": 30.48439, + "y": 39.33047 + }, + { + "x": 36.6763, + "y": 87.27119 + }, + { + "x": 18.94383, + "y": 59.33327 + }, + { + "x": 43.45898, + "y": 51.92991 + }, + { + "x": 37.48009, + "y": 68.55787 + }, + { + "x": 45.79938, + "y": 71.73394 + }, + { + "x": 39.69381, + "y": 58.77897 + }, + { + "x": 43.60521, + "y": 51.59496 + }, + { + "x": 49.18213, + "y": 66.20721 + }, + { + "x": 25.83677, + "y": 47.10274 + }, + { + "x": 30.90342, + "y": 53.13581 + }, + { + "x": 40.20493, + "y": 60.96742 + }, + { + "x": 46.98463, + "y": 52.61281 + }, + { + "x": 39.37106, + "y": 46.29081 + }, + { + "x": 40.281, + "y": 59.03583 + }, + { + "x": 40.44173, + "y": 47.78119 + }, + { + "x": 37.66053, + "y": 59.73406 + }, + { + "x": 38.11046, + "y": 44.89672 + }, + { + "x": 48.2845, + "y": 41.49009 + }, + { + "x": 49.2973, + "y": 63.16118 + }, + { + "x": 22.48131, + "y": 74.58899 + }, + { + "x": 52.90003000000001, + "y": 58.66274 + }, + { + "x": 39.1711, + "y": 60.65303 + }, + { + "x": 46.23943, + "y": 65.03093 + }, + { + "x": 38.69597, + "y": 84.08148 + }, + { + "x": 40.79527, + "y": 49.7543 + }, + { + "x": 42.84691, + "y": 57.79911 + }, + { + "x": 65.71859, + "y": 53.45975 + }, + { + "x": 32.24807, + "y": 67.18961999999999 + }, + { + "x": 37.50528, + "y": 72.15233 + }, + { + "x": 46.19626, + "y": 63.37228 + }, + { + "x": 46.93901, + "y": 50.99902 + }, + { + "x": 30.82879, + "y": 59.55766 + }, + { + "x": 53.35965, + "y": 52.76179000000001 + }, + { + "x": 48.15439, + "y": 68.73671999999999 + }, + { + "x": 33.211659999999995, + "y": 38.87962 + }, + { + "x": 29.92048, + "y": 77.03939 + }, + { + "x": 37.6465, + "y": 56.99416 + }, + { + "x": 35.9354, + "y": 77.82079 + }, + { + "x": 47.70036, + "y": 64.47489 + }, + { + "x": 25.77065, + "y": 62.45383 + }, + { + "x": 41.92523, + "y": 57.7624 + }, + { + "x": 34.45473, + "y": 60.32253000000001 + }, + { + "x": 30.77576, + "y": 52.58115 + }, + { + "x": 26.14364, + "y": 66.58151 + }, + { + "x": 47.21836, + "y": 51.68076 + }, + { + "x": 55.78841, + "y": 57.97879 + }, + { + "x": 43.2989, + "y": 56.97968 + }, + { + "x": 40.87212, + "y": 27.31616 + }, + { + "x": 49.88417000000001, + "y": 32.45283 + }, + { + "x": 20.55912, + "y": 57.01987 + }, + { + "x": 25.06116, + "y": 44.75805 + }, + { + "x": 26.01595, + "y": 55.76411 + }, + { + "x": 37.25416, + "y": 65.31094 + }, + { + "x": 53.36999, + "y": 53.56238000000001 + }, + { + "x": 38.84896, + "y": 56.97574 + }, + { + "x": 39.51915, + "y": 61.65769 + }, + { + "x": 37.02022, + "y": 69.50709 + }, + { + "x": 50.74908, + "y": 56.24477 + }, + { + "x": 35.7051, + "y": 58.49562 + }, + { + "x": 44.44394000000001, + "y": 67.48245 + }, + { + "x": 54.81738000000001, + "y": 61.41306 + }, + { + "x": 45.88216, + "y": 63.42376 + }, + { + "x": 39.53611, + "y": 65.04189000000001 + }, + { + "x": 44.80203, + "y": 50.21186 + }, + { + "x": 29.91771, + "y": 71.56390999999998 + }, + { + "x": 25.37846, + "y": 64.61015 + }, + { + "x": 41.21589, + "y": 64.27741999999999 + }, + { + "x": 51.48426, + "y": 68.01100000000001 + }, + { + "x": 59.85225, + "y": 60.61618000000001 + }, + { + "x": 51.70456, + "y": 47.81819 + }, + { + "x": 47.91999000000001, + "y": 46.15824 + }, + { + "x": 41.99199, + "y": 65.34492 + }, + { + "x": 53.38919, + "y": 71.59792 + }, + { + "x": 50.13654, + "y": 58.47133 + }, + { + "x": 43.55886, + "y": 50.07811 + }, + { + "x": 44.48821, + "y": 73.62916 + }, + { + "x": 27.92514000000001, + "y": 67.88335 + }, + { + "x": 36.57076, + "y": 72.47041999999998 + }, + { + "x": 35.29817, + "y": 65.07594 + }, + { + "x": 51.4997, + "y": 63.69956 + }, + { + "x": 49.04667, + "y": 65.28074000000001 + }, + { + "x": 38.21852, + "y": 56.44799 + }, + { + "x": 35.58804, + "y": 44.72433 + }, + { + "x": 27.65341, + "y": 61.1188 + }, + { + "x": 41.22976, + "y": 53.65146 + }, + { + "x": 32.00885, + "y": 46.29029 + }, + { + "x": 46.49651, + "y": 55.93187 + }, + { + "x": 25.12809, + "y": 45.54561 + }, + { + "x": 31.50795, + "y": 35.048320000000004 + }, + { + "x": 32.441, + "y": 70.15026 + }, + { + "x": 50.46987, + "y": 56.49627 + }, + { + "x": 53.02414, + "y": 48.18963 + }, + { + "x": 46.28482, + "y": 64.75075 + }, + { + "x": 21.90914, + "y": 60.49558 + }, + { + "x": 38.16132, + "y": 56.99729 + }, + { + "x": 32.70623, + "y": 53.865080000000006 + }, + { + "x": 30.58785, + "y": 74.07853 + }, + { + "x": 42.87658, + "y": 64.60489 + }, + { + "x": 41.16918, + "y": 50.85736 + }, + { + "x": 40.4065, + "y": 56.96268000000001 + }, + { + "x": 27.98043, + "y": 54.99941 + }, + { + "x": 39.86144, + "y": 65.40418000000001 + }, + { + "x": 44.06916, + "y": 58.01787 + }, + { + "x": 41.27358, + "y": 47.03271 + }, + { + "x": 29.50536, + "y": 50.07637 + }, + { + "x": 42.72526, + "y": 52.06594000000001 + }, + { + "x": 55.88999, + "y": 57.75395 + }, + { + "x": 43.43729, + "y": 45.53989 + }, + { + "x": 45.21592, + "y": 56.23551 + }, + { + "x": 21.46886, + "y": 50.97331 + }, + { + "x": 40.8175, + "y": 63.63504 + }, + { + "x": 34.897240000000004, + "y": 64.74254 + }, + { + "x": 38.82377, + "y": 54.30611999999999 + }, + { + "x": 39.81253, + "y": 61.8196 + }, + { + "x": 42.25532000000001, + "y": 62.65005 + }, + { + "x": 44.36548, + "y": 49.87988 + }, + { + "x": 31.58178, + "y": 55.53971 + }, + { + "x": 35.25133, + "y": 53.15156999999999 + }, + { + "x": 50.77632, + "y": 74.22147 + }, + { + "x": 46.64062, + "y": 37.81122 + }, + { + "x": 50.71756, + "y": 53.06595 + }, + { + "x": 49.07775, + "y": 59.12901 + }, + { + "x": 26.63234000000001, + "y": 64.19726999999999 + }, + { + "x": 48.79625, + "y": 38.62079 + }, + { + "x": 22.20029, + "y": 73.11573 + }, + { + "x": 44.41, + "y": 53.04649000000001 + }, + { + "x": 63.88825, + "y": 48.97889 + }, + { + "x": 33.57092, + "y": 63.84941 + }, + { + "x": 44.85232, + "y": 62.17386 + }, + { + "x": 43.81482000000001, + "y": 57.73569000000001 + }, + { + "x": 32.16317, + "y": 58.71496 + }, + { + "x": 34.76834, + "y": 55.57443000000001 + }, + { + "x": 27.02004, + "y": 60.16687 + }, + { + "x": 36.84926, + "y": 46.01221 + }, + { + "x": 36.16788, + "y": 68.04738 + }, + { + "x": 54.34972, + "y": 51.9426 + }, + { + "x": 47.11679, + "y": 77.18788 + }, + { + "x": 57.4229, + "y": 32.305 + }, + { + "x": 52.18029, + "y": 65.10573000000001 + }, + { + "x": 51.85909, + "y": 67.51661 + }, + { + "x": 49.03182, + "y": 60.34069 + }, + { + "x": 45.43005, + "y": 59.77699000000001 + }, + { + "x": 33.160070000000005, + "y": 67.7972 + }, + { + "x": 28.07412, + "y": 60.4441 + }, + { + "x": 37.39232, + "y": 60.04588 + }, + { + "x": 41.7159, + "y": 54.8672 + }, + { + "x": 32.7979, + "y": 73.65913 + }, + { + "x": 48.73786, + "y": 49.54446 + }, + { + "x": 55.61709000000001, + "y": 57.06916 + }, + { + "x": 26.59618, + "y": 54.89858 + }, + { + "x": 42.08567, + "y": 40.12172 + }, + { + "x": 52.21176, + "y": 52.75539000000001 + }, + { + "x": 36.55513, + "y": 62.31943 + }, + { + "x": 31.43811, + "y": 50.33373 + }, + { + "x": 40.87347000000001, + "y": 69.90448 + }, + { + "x": 25.97094, + "y": 68.05601999999999 + }, + { + "x": 35.18777, + "y": 47.83521 + }, + { + "x": 30.72323, + "y": 53.49924 + }, + { + "x": 41.99314, + "y": 50.87471 + }, + { + "x": 30.88503, + "y": 59.03542 + }, + { + "x": 55.63384, + "y": 51.22741 + }, + { + "x": 37.70752, + "y": 54.48603000000001 + }, + { + "x": 27.17879000000001, + "y": 73.22714 + }, + { + "x": 55.74353000000001, + "y": 35.89603 + }, + { + "x": 25.66439, + "y": 58.53562 + }, + { + "x": 17.00957, + "y": 68.39095999999999 + }, + { + "x": 43.95091, + "y": 61.0425 + }, + { + "x": 38.8072, + "y": 53.42418000000001 + }, + { + "x": 40.30421, + "y": 55.30517 + }, + { + "x": 39.78672, + "y": 57.06535 + }, + { + "x": 63.90414000000001, + "y": 56.32496 + }, + { + "x": 48.88094, + "y": 67.82444 + }, + { + "x": 58.40254, + "y": 79.28048000000003 + }, + { + "x": 39.70721, + "y": 64.78928 + }, + { + "x": 47.59079000000001, + "y": 51.5511 + }, + { + "x": 44.84636, + "y": 52.34264 + }, + { + "x": 21.27829, + "y": 50.89752 + }, + { + "x": 56.59843000000001, + "y": 65.83452 + }, + { + "x": 37.48017, + "y": 57.39704 + }, + { + "x": 49.15954, + "y": 46.12192 + }, + { + "x": 37.66307000000001, + "y": 57.0688 + }, + { + "x": 41.86126, + "y": 63.41366 + }, + { + "x": 51.73052, + "y": 66.6951 + }, + { + "x": 47.64847, + "y": 58.08665 + }, + { + "x": 35.17402, + "y": 56.00186 + }, + { + "x": 45.44158, + "y": 84.85019 + }, + { + "x": 63.14872, + "y": 70.52519000000002 + }, + { + "x": 42.08557, + "y": 54.22346999999999 + }, + { + "x": 46.01514, + "y": 58.37922 + }, + { + "x": 42.11817, + "y": 66.59673000000001 + }, + { + "x": 26.51054, + "y": 64.8716 + }, + { + "x": 28.67938, + "y": 67.39531 + }, + { + "x": 29.98758, + "y": 56.67641 + }, + { + "x": 23.97532, + "y": 53.69432 + }, + { + "x": 54.47663000000001, + "y": 68.48246999999999 + }, + { + "x": 25.66849, + "y": 56.62031999999999 + }, + { + "x": 36.40398, + "y": 63.52458000000001 + }, + { + "x": 37.76594, + "y": 48.95203 + }, + { + "x": 44.49676, + "y": 53.93384 + }, + { + "x": 41.21254, + "y": 67.43937 + }, + { + "x": 14.46949, + "y": 62.26729 + }, + { + "x": 26.00632, + "y": 58.30301 + }, + { + "x": 47.84569000000001, + "y": 51.46759 + }, + { + "x": 44.96501, + "y": 81.81427 + }, + { + "x": 52.12286, + "y": 65.78259 + }, + { + "x": 34.2726, + "y": 65.021 + }, + { + "x": 36.36313, + "y": 63.94629000000001 + }, + { + "x": 20.33037, + "y": 62.20769 + }, + { + "x": 58.24481, + "y": 54.45848 + }, + { + "x": 28.1422, + "y": 76.06569 + }, + { + "x": 40.83747, + "y": 60.21198 + }, + { + "x": 29.58027, + "y": 51.32616 + }, + { + "x": 41.68749, + "y": 56.74836 + }, + { + "x": 19.3453, + "y": 49.81644 + }, + { + "x": 39.10978, + "y": 59.98583000000001 + }, + { + "x": 30.06011, + "y": 59.57409000000001 + }, + { + "x": 30.11872, + "y": 48.14224 + }, + { + "x": 26.80173, + "y": 69.78267 + }, + { + "x": 41.4497, + "y": 56.78115 + }, + { + "x": 39.84126, + "y": 49.97964 + }, + { + "x": 59.78358000000001, + "y": 61.26106 + }, + { + "x": 45.44818, + "y": 64.82023000000001 + }, + { + "x": 58.4162, + "y": 58.58034 + }, + { + "x": 36.46915, + "y": 65.33484 + }, + { + "x": 47.39338, + "y": 54.89619 + }, + { + "x": 55.97659, + "y": 75.71833000000002 + }, + { + "x": 25.90733, + "y": 51.43085 + }, + { + "x": 56.32167, + "y": 55.58431 + }, + { + "x": 59.47724, + "y": 54.72548000000001 + }, + { + "x": 36.04946, + "y": 34.22141 + }, + { + "x": 34.61991, + "y": 75.20385 + }, + { + "x": 40.56393, + "y": 60.7759 + }, + { + "x": 23.05746, + "y": 43.83699 + }, + { + "x": 49.64375, + "y": 49.0249 + }, + { + "x": 22.87106, + "y": 59.36683000000001 + }, + { + "x": 41.12026, + "y": 55.79939 + }, + { + "x": 55.2759, + "y": 52.32505 + }, + { + "x": 45.41858, + "y": 69.30771 + }, + { + "x": 42.58969, + "y": 48.27374 + }, + { + "x": 59.78563000000001, + "y": 54.97828000000001 + }, + { + "x": 46.41741, + "y": 52.72119 + }, + { + "x": 13.429479999999998, + "y": 57.03562 + }, + { + "x": 50.9471, + "y": 56.93176 + }, + { + "x": 46.0973, + "y": 47.2256 + }, + { + "x": 34.89751, + "y": 71.07395 + }, + { + "x": 26.31495, + "y": 49.99565 + }, + { + "x": 30.89327, + "y": 79.22578 + }, + { + "x": 43.23482, + "y": 46.73741 + }, + { + "x": 44.94405, + "y": 50.6335 + }, + { + "x": 45.22232, + "y": 80.58161 + }, + { + "x": 33.076190000000004, + "y": 72.86371 + }, + { + "x": 52.04657, + "y": 62.56454 + }, + { + "x": 41.67568, + "y": 60.35936 + }, + { + "x": 55.84756, + "y": 67.5848 + }, + { + "x": 36.04547, + "y": 49.41498 + }, + { + "x": 36.28569, + "y": 60.10168 + }, + { + "x": 45.72856, + "y": 50.07189 + }, + { + "x": 39.05539, + "y": 54.94165 + }, + { + "x": 20.2726, + "y": 48.62656 + }, + { + "x": 27.33974000000001, + "y": 51.36997 + }, + { + "x": 46.13468, + "y": 55.69144 + }, + { + "x": 44.96999, + "y": 65.99128 + }, + { + "x": 46.39057, + "y": 67.48663 + }, + { + "x": 47.08233, + "y": 60.20998 + }, + { + "x": 36.53939, + "y": 60.50986 + }, + { + "x": 38.75325, + "y": 61.35403 + }, + { + "x": 42.64909, + "y": 57.29917 + }, + { + "x": 23.09582, + "y": 70.34206 + }, + { + "x": 42.44851, + "y": 44.21829 + }, + { + "x": 33.49563, + "y": 71.32774 + }, + { + "x": 47.07288, + "y": 55.7378 + }, + { + "x": 24.9612, + "y": 53.32379 + }, + { + "x": 45.48775, + "y": 65.85651 + }, + { + "x": 59.20356, + "y": 68.74465 + }, + { + "x": 44.00992, + "y": 50.52786 + }, + { + "x": 43.68642, + "y": 83.65863 + }, + { + "x": 41.87053, + "y": 51.92226 + }, + { + "x": 43.72969000000001, + "y": 46.00091 + }, + { + "x": 38.52629, + "y": 76.75724 + }, + { + "x": 53.42536, + "y": 73.632 + }, + { + "x": 39.33739, + "y": 51.29871 + }, + { + "x": 36.66598, + "y": 51.51536 + }, + { + "x": 41.96913, + "y": 61.30644 + }, + { + "x": 35.25198, + "y": 60.78493 + }, + { + "x": 33.56147, + "y": 59.85432 + }, + { + "x": 33.07125, + "y": 49.41556 + }, + { + "x": 48.44303, + "y": 51.90851 + }, + { + "x": 40.75025, + "y": 68.0989 + }, + { + "x": 50.35784, + "y": 54.57351 + }, + { + "x": 44.57279000000001, + "y": 78.77866999999998 + }, + { + "x": 24.52693, + "y": 68.57829 + }, + { + "x": 54.20255, + "y": 63.61836 + }, + { + "x": 41.30357, + "y": 66.8662 + }, + { + "x": 37.41374, + "y": 71.92524 + }, + { + "x": 26.862040000000004, + "y": 55.37459000000001 + }, + { + "x": 39.55137, + "y": 43.2294 + }, + { + "x": 47.00566, + "y": 53.65933 + }, + { + "x": 38.12361, + "y": 57.12999 + }, + { + "x": 37.52485, + "y": 80.64694 + }, + { + "x": 39.20578, + "y": 62.21249 + }, + { + "x": 52.36179, + "y": 58.99351 + }, + { + "x": 45.0324, + "y": 47.69177 + }, + { + "x": 40.86912, + "y": 38.84561 + }, + { + "x": 48.08253, + "y": 68.39591999999999 + }, + { + "x": 54.8749, + "y": 66.84655 + }, + { + "x": 24.57269, + "y": 71.18354000000002 + }, + { + "x": 35.00761, + "y": 57.033 + }, + { + "x": 43.44146, + "y": 65.25961 + }, + { + "x": 43.16221, + "y": 47.03518 + }, + { + "x": 34.24286, + "y": 62.92888000000001 + }, + { + "x": 43.58324, + "y": 56.57035 + }, + { + "x": 36.35557, + "y": 67.91736999999999 + }, + { + "x": 35.1833, + "y": 55.002280000000006 + }, + { + "x": 44.51795, + "y": 68.3382 + }, + { + "x": 54.39144, + "y": 37.30894 + }, + { + "x": 45.86727, + "y": 87.3137 + }, + { + "x": 39.09084, + "y": 66.78102 + }, + { + "x": 27.79925, + "y": 58.74916999999999 + }, + { + "x": 33.06475, + "y": 78.47807 + }, + { + "x": 23.54635, + "y": 55.19841 + }, + { + "x": 43.46392, + "y": 64.71713000000001 + }, + { + "x": 35.42679000000001, + "y": 54.08204 + }, + { + "x": 34.19314, + "y": 71.58672 + }, + { + "x": 10.8867, + "y": 68.44097 + }, + { + "x": 56.59104, + "y": 64.01100000000001 + }, + { + "x": 47.3817, + "y": 56.87357 + }, + { + "x": 38.49504, + "y": 60.46255 + }, + { + "x": 52.51262, + "y": 67.06044 + }, + { + "x": 44.5458, + "y": 57.88389 + }, + { + "x": 44.03849, + "y": 53.62613 + }, + { + "x": 36.41589000000001, + "y": 56.97656 + }, + { + "x": 50.31431, + "y": 61.40527 + }, + { + "x": 30.72297, + "y": 53.84721999999999 + }, + { + "x": 29.87761, + "y": 61.21636 + }, + { + "x": 59.26816, + "y": 69.29843000000001 + }, + { + "x": 35.04088, + "y": 61.20282 + }, + { + "x": 44.87322, + "y": 43.20948 + }, + { + "x": 29.24664000000001, + "y": 51.7367 + }, + { + "x": 50.04572, + "y": 53.45699000000001 + }, + { + "x": 47.97724, + "y": 69.38969 + }, + { + "x": 29.6133, + "y": 70.91985 + }, + { + "x": 30.89345, + "y": 61.36776 + }, + { + "x": 31.74421, + "y": 58.71527 + }, + { + "x": 36.60416, + "y": 56.83749 + }, + { + "x": 47.78417, + "y": 53.40695 + }, + { + "x": 23.22726, + "y": 57.4777 + }, + { + "x": 51.37993, + "y": 65.01276 + }, + { + "x": 31.36008, + "y": 63.86529 + }, + { + "x": 46.77678, + "y": 65.41521999999999 + }, + { + "x": 44.1524, + "y": 46.76581 + }, + { + "x": 41.43843, + "y": 54.11403000000001 + }, + { + "x": 53.77942, + "y": 55.54833000000001 + }, + { + "x": 33.7694, + "y": 79.58606999999998 + }, + { + "x": 35.79716, + "y": 55.52056 + }, + { + "x": 30.53843, + "y": 72.95658 + }, + { + "x": 46.22857, + "y": 34.535509999999995 + }, + { + "x": 39.67892, + "y": 62.87499 + }, + { + "x": 36.81919, + "y": 52.38703 + }, + { + "x": 34.27178, + "y": 48.92915 + }, + { + "x": 42.32842, + "y": 63.12152 + }, + { + "x": 46.33527, + "y": 63.28706999999999 + }, + { + "x": 53.53398000000001, + "y": 51.14082 + }, + { + "x": 40.61128, + "y": 50.21093 + }, + { + "x": 50.62107, + "y": 40.45209000000001 + }, + { + "x": 36.47783, + "y": 78.33963 + }, + { + "x": 52.38983, + "y": 64.53774 + }, + { + "x": 30.01806, + "y": 75.31725 + }, + { + "x": 39.00967, + "y": 50.87296 + }, + { + "x": 22.71875, + "y": 67.99089000000001 + }, + { + "x": 61.24, + "y": 65.89064 + }, + { + "x": 39.18396, + "y": 65.65822 + }, + { + "x": 44.69035, + "y": 57.93645 + }, + { + "x": 58.0471, + "y": 69.76289 + }, + { + "x": 51.25563, + "y": 61.33045 + }, + { + "x": 46.92124, + "y": 83.3785 + }, + { + "x": 46.25302, + "y": 66.06521 + }, + { + "x": 52.40546, + "y": 66.73065 + }, + { + "x": 40.28902, + "y": 53.28891 + }, + { + "x": 44.73831, + "y": 63.29274 + }, + { + "x": 43.15397, + "y": 65.65951 + }, + { + "x": 44.85846, + "y": 77.73084 + }, + { + "x": 42.86439, + "y": 67.90505 + }, + { + "x": 56.25276, + "y": 58.54541 + }, + { + "x": 51.62415, + "y": 67.15460999999999 + }, + { + "x": 44.7667, + "y": 61.48524000000001 + }, + { + "x": 48.91067, + "y": 66.60661 + }, + { + "x": 20.23477, + "y": 59.03073000000001 + }, + { + "x": 18.98427, + "y": 70.79776 + }, + { + "x": 16.33768, + "y": 68.84142 + }, + { + "x": 49.40031, + "y": 47.88199 + }, + { + "x": 41.66533, + "y": 67.50779 + }, + { + "x": 59.2293, + "y": 74.68412 + }, + { + "x": 58.47326, + "y": 53.63286 + }, + { + "x": 62.36666999999999, + "y": 50.95881 + }, + { + "x": 21.85536, + "y": 54.86045 + }, + { + "x": 40.38865, + "y": 61.31855 + }, + { + "x": 40.74187, + "y": 47.65873 + }, + { + "x": 58.00854, + "y": 42.82972 + }, + { + "x": 45.35452, + "y": 41.83214 + }, + { + "x": 66.66133, + "y": 50.6532 + }, + { + "x": 33.77558, + "y": 62.47507 + }, + { + "x": 48.09134, + "y": 64.89226 + }, + { + "x": 40.08256, + "y": 51.44899 + }, + { + "x": 29.58933, + "y": 58.19596 + }, + { + "x": 43.58031, + "y": 65.94927 + }, + { + "x": 53.30803, + "y": 36.98284 + }, + { + "x": 28.87137, + "y": 51.90188 + }, + { + "x": 56.40753, + "y": 62.59392 + }, + { + "x": 33.29645, + "y": 67.43765 + }, + { + "x": 38.72936, + "y": 56.59565 + }, + { + "x": 32.29439, + "y": 53.9696 + }, + { + "x": 32.41527, + "y": 48.44307 + }, + { + "x": 45.76281, + "y": 64.38473 + }, + { + "x": 33.8258, + "y": 59.16824 + }, + { + "x": 22.67527, + "y": 54.22386 + }, + { + "x": 13.199420000000002, + "y": 60.1388 + }, + { + "x": 29.50579, + "y": 55.28771 + }, + { + "x": 45.70325, + "y": 56.31371 + }, + { + "x": 43.70217, + "y": 61.486 + }, + { + "x": 29.53128, + "y": 66.01217 + }, + { + "x": 34.58708, + "y": 54.27694 + }, + { + "x": 51.84493, + "y": 61.97 + }, + { + "x": 46.43159, + "y": 55.3816 + }, + { + "x": 47.37223, + "y": 63.45379000000001 + }, + { + "x": 28.52821, + "y": 68.99037 + }, + { + "x": 53.74314, + "y": 61.20763 + }, + { + "x": 29.91581, + "y": 63.06654 + }, + { + "x": 51.85804, + "y": 68.08115 + }, + { + "x": 24.65317000000001, + "y": 60.97069000000001 + }, + { + "x": 45.07661, + "y": 64.13075 + }, + { + "x": 34.09175, + "y": 59.97359 + }, + { + "x": 49.69564, + "y": 67.62843000000001 + }, + { + "x": 43.0814, + "y": 55.20282 + }, + { + "x": 36.45465, + "y": 50.92306 + }, + { + "x": 45.95494, + "y": 50.09121 + }, + { + "x": 34.863040000000005, + "y": 61.43269 + }, + { + "x": 31.35199, + "y": 65.54097 + }, + { + "x": 28.85687, + "y": 70.20236 + }, + { + "x": 38.01644, + "y": 45.00452 + }, + { + "x": 39.33137, + "y": 61.01991 + }, + { + "x": 45.43656, + "y": 53.36308 + }, + { + "x": 21.14175, + "y": 39.8683 + }, + { + "x": 52.64809, + "y": 71.72782 + }, + { + "x": 36.58138, + "y": 39.92153 + }, + { + "x": 36.92193, + "y": 64.58077 + }, + { + "x": 17.71107, + "y": 64.94933 + }, + { + "x": 43.15869, + "y": 54.23448000000001 + }, + { + "x": 47.18889, + "y": 60.86159 + }, + { + "x": 43.73414, + "y": 62.9692 + }, + { + "x": 46.89299000000001, + "y": 65.56661 + }, + { + "x": 42.87272, + "y": 43.29337 + }, + { + "x": 40.53452, + "y": 61.72891 + }, + { + "x": 48.3142, + "y": 54.04765 + }, + { + "x": 38.05576, + "y": 45.26198 + }, + { + "x": 22.1779, + "y": 68.1016 + }, + { + "x": 56.94226999999999, + "y": 86.55324 + }, + { + "x": 34.75308, + "y": 55.7262 + }, + { + "x": 33.97889, + "y": 52.78297 + }, + { + "x": 40.91016, + "y": 65.19449 + }, + { + "x": 33.7199, + "y": 57.27735 + }, + { + "x": 49.14691, + "y": 64.16595 + }, + { + "x": 48.61678, + "y": 65.28603000000001 + }, + { + "x": 28.11857, + "y": 45.33089 + }, + { + "x": 20.4317, + "y": 51.46033 + }, + { + "x": 50.93737, + "y": 74.1835 + }, + { + "x": 22.29103, + "y": 75.65685 + }, + { + "x": 43.51035, + "y": 58.55402 + }, + { + "x": 60.11131999999999, + "y": 58.98568 + }, + { + "x": 61.21623, + "y": 69.80801 + }, + { + "x": 48.33622, + "y": 41.19602 + }, + { + "x": 33.39445, + "y": 65.82391 + }, + { + "x": 29.34521, + "y": 59.855880000000006 + }, + { + "x": 54.38664, + "y": 80.36837 + }, + { + "x": 34.7127, + "y": 57.47011 + }, + { + "x": 40.33881, + "y": 57.22665 + }, + { + "x": 62.24166, + "y": 51.57828 + }, + { + "x": 40.15035, + "y": 56.58465 + }, + { + "x": 38.71685, + "y": 70.14773000000001 + }, + { + "x": 39.12633, + "y": 60.63593 + }, + { + "x": 51.69781, + "y": 63.27919 + }, + { + "x": 25.68791, + "y": 40.27335 + }, + { + "x": 47.94294, + "y": 43.08792 + }, + { + "x": 67.88265, + "y": 60.98403 + }, + { + "x": 26.55077, + "y": 50.80384 + }, + { + "x": 46.29426, + "y": 47.39325 + }, + { + "x": 31.52882, + "y": 62.19854 + }, + { + "x": 57.78245, + "y": 63.38965 + }, + { + "x": 38.04019, + "y": 67.43048 + }, + { + "x": 37.7145, + "y": 51.81503 + }, + { + "x": 62.57692, + "y": 60.83238000000001 + }, + { + "x": 28.86001, + "y": 51.2246 + }, + { + "x": 41.62214, + "y": 58.10787 + }, + { + "x": 23.74967, + "y": 67.99766 + }, + { + "x": 46.85755, + "y": 54.24618 + }, + { + "x": 37.5762, + "y": 62.86578000000001 + }, + { + "x": 56.43054, + "y": 64.46651999999999 + }, + { + "x": 23.42326, + "y": 62.49845 + }, + { + "x": 44.27762, + "y": 57.30138 + }, + { + "x": 40.88654, + "y": 73.0129 + }, + { + "x": 35.14983, + "y": 69.20756 + }, + { + "x": 24.17791, + "y": 55.47302 + }, + { + "x": 41.70554, + "y": 59.55818000000001 + }, + { + "x": 36.33261, + "y": 42.50658 + }, + { + "x": 39.01491, + "y": 47.29492 + }, + { + "x": 44.81983, + "y": 67.23057 + }, + { + "x": 40.07327, + "y": 53.91739000000001 + }, + { + "x": 30.90242000000001, + "y": 79.43701999999998 + }, + { + "x": 36.81031, + "y": 51.52639 + }, + { + "x": 43.03812, + "y": 57.54671 + }, + { + "x": 32.79469, + "y": 64.19816 + }, + { + "x": 37.48284, + "y": 63.44551 + }, + { + "x": 45.29159, + "y": 76.73057 + }, + { + "x": 35.24219, + "y": 55.9317 + }, + { + "x": 38.39624, + "y": 63.38412 + }, + { + "x": 34.79193, + "y": 55.69379 + }, + { + "x": 48.43391, + "y": 46.13215 + }, + { + "x": 59.01439, + "y": 65.74738 + }, + { + "x": 35.53230999999999, + "y": 63.11478 + }, + { + "x": 40.90201, + "y": 74.3216 + }, + { + "x": 41.53148, + "y": 42.03367 + }, + { + "x": 35.52626, + "y": 83.71515 + }, + { + "x": 27.84255, + "y": 60.091 + }, + { + "x": 43.60266, + "y": 62.19615 + }, + { + "x": 24.29746, + "y": 62.7834 + }, + { + "x": 30.38543, + "y": 52.90134000000001 + }, + { + "x": 52.67648000000001, + "y": 32.67734 + }, + { + "x": 36.9756, + "y": 68.24067 + }, + { + "x": 37.8756, + "y": 68.28506 + }, + { + "x": 48.75739, + "y": 53.39937 + }, + { + "x": 56.86054, + "y": 59.49221 + }, + { + "x": 57.58251, + "y": 67.85455 + }, + { + "x": 42.30235, + "y": 54.44661 + }, + { + "x": 56.72005, + "y": 71.69892 + }, + { + "x": 34.09218, + "y": 56.2818 + }, + { + "x": 47.25593, + "y": 56.96026 + }, + { + "x": 23.48291, + "y": 54.36535 + }, + { + "x": 23.12866, + "y": 65.25963 + }, + { + "x": 51.5916, + "y": 62.71912 + }, + { + "x": 20.53896, + "y": 47.69149 + }, + { + "x": 51.81452, + "y": 52.07644000000001 + }, + { + "x": 48.44256, + "y": 51.18517 + }, + { + "x": 62.44255, + "y": 45.78976 + }, + { + "x": 17.27593, + "y": 60.46275 + }, + { + "x": 53.77579, + "y": 65.79630999999999 + }, + { + "x": 37.08417, + "y": 63.94993 + }, + { + "x": 47.97955, + "y": 55.61669000000001 + }, + { + "x": 35.22937, + "y": 74.55077 + }, + { + "x": 26.42555, + "y": 55.0765 + }, + { + "x": 40.20962, + "y": 64.5191 + }, + { + "x": 58.95403, + "y": 59.6799 + }, + { + "x": 17.213810000000002, + "y": 69.54397 + }, + { + "x": 32.95241, + "y": 52.18707 + }, + { + "x": 59.68467, + "y": 40.53054 + }, + { + "x": 30.58042, + "y": 63.08006999999999 + }, + { + "x": 48.74949, + "y": 70.51133 + }, + { + "x": 50.65636, + "y": 59.32031 + }, + { + "x": 40.4251, + "y": 50.73494 + }, + { + "x": 45.28402, + "y": 51.53691 + }, + { + "x": 34.34718, + "y": 47.58747 + }, + { + "x": 38.59024, + "y": 51.33721 + }, + { + "x": 40.71961, + "y": 74.12315 + }, + { + "x": 40.37913, + "y": 50.36806 + }, + { + "x": 47.26266, + "y": 70.09016 + }, + { + "x": 34.55216, + "y": 56.49265 + }, + { + "x": 42.125, + "y": 66.37105 + }, + { + "x": 56.81907, + "y": 44.97096 + }, + { + "x": 53.69396999999999, + "y": 66.83374 + }, + { + "x": 45.11847, + "y": 74.85613000000002 + }, + { + "x": 27.42444, + "y": 66.70893000000001 + }, + { + "x": 11.50407, + "y": 56.95046 + }, + { + "x": 49.0322, + "y": 62.76543 + }, + { + "x": 23.48502, + "y": 75.85309000000002 + }, + { + "x": 50.98872, + "y": 71.68141 + }, + { + "x": 27.57767, + "y": 62.33503 + }, + { + "x": 47.66222, + "y": 65.10868 + }, + { + "x": 45.13893, + "y": 67.17903000000001 + }, + { + "x": 45.78568, + "y": 69.31007 + }, + { + "x": 47.92223, + "y": 65.00936 + }, + { + "x": 48.03205, + "y": 47.78571 + }, + { + "x": 43.65009000000001, + "y": 56.48259 + }, + { + "x": 28.54301, + "y": 59.48517 + }, + { + "x": 48.14451, + "y": 60.26351 + }, + { + "x": 30.73458, + "y": 53.41976 + }, + { + "x": 41.65806, + "y": 72.97176999999998 + }, + { + "x": 47.42073, + "y": 72.11551 + }, + { + "x": 54.31567, + "y": 51.07155 + }, + { + "x": 37.98036, + "y": 67.0989 + }, + { + "x": 58.32997, + "y": 63.25209 + }, + { + "x": 43.19876, + "y": 60.36071999999999 + }, + { + "x": 28.113090000000003, + "y": 72.51996 + }, + { + "x": 37.01089, + "y": 69.21339 + }, + { + "x": 32.97436, + "y": 69.77639 + }, + { + "x": 34.20864, + "y": 61.29887 + }, + { + "x": 31.93696, + "y": 62.87588 + }, + { + "x": 30.94324000000001, + "y": 70.95922 + }, + { + "x": 43.49319000000001, + "y": 59.84101 + }, + { + "x": 27.81164, + "y": 72.67459000000002 + }, + { + "x": 32.15255, + "y": 42.51905 + }, + { + "x": 51.29612, + "y": 79.81878 + }, + { + "x": 38.0315, + "y": 54.71503000000001 + }, + { + "x": 29.27812, + "y": 62.24455 + }, + { + "x": 44.40411, + "y": 68.84855 + }, + { + "x": 23.34787, + "y": 61.94084 + }, + { + "x": 49.36656, + "y": 64.14016 + }, + { + "x": 17.60005, + "y": 69.14876 + }, + { + "x": 30.85341, + "y": 54.0978 + }, + { + "x": 44.90497, + "y": 63.7959 + }, + { + "x": 57.36587, + "y": 58.50857 + }, + { + "x": 49.0943, + "y": 69.75703 + }, + { + "x": 26.6611, + "y": 68.32285 + }, + { + "x": 40.70467, + "y": 53.43072 + }, + { + "x": 28.55086, + "y": 56.30226 + }, + { + "x": 36.25912, + "y": 59.3196 + }, + { + "x": 48.98826, + "y": 66.10667 + }, + { + "x": 33.26312, + "y": 69.86829 + }, + { + "x": 32.02353, + "y": 58.18483000000001 + }, + { + "x": 27.304240000000004, + "y": 55.4792 + }, + { + "x": 51.44975, + "y": 71.13834 + }, + { + "x": 59.81329, + "y": 47.9164 + }, + { + "x": 51.14651, + "y": 60.19600000000001 + }, + { + "x": 61.69583000000001, + "y": 47.11762 + }, + { + "x": 36.56804, + "y": 68.23382 + }, + { + "x": 40.64832, + "y": 66.75034000000001 + }, + { + "x": 45.86368, + "y": 68.31128000000001 + }, + { + "x": 44.60644, + "y": 60.16793000000001 + }, + { + "x": 35.88663, + "y": 49.38532 + }, + { + "x": 57.68279, + "y": 60.16859 + }, + { + "x": 51.6255, + "y": 49.49683 + }, + { + "x": 42.5861, + "y": 62.54503 + }, + { + "x": 46.0202, + "y": 56.69676 + }, + { + "x": 46.45453, + "y": 58.70955 + }, + { + "x": 38.30502, + "y": 49.6469 + }, + { + "x": 48.84556, + "y": 65.31183 + }, + { + "x": 30.15666, + "y": 63.67134 + }, + { + "x": 38.53791, + "y": 56.76666 + }, + { + "x": 23.9704, + "y": 68.72659 + }, + { + "x": 50.02861, + "y": 63.9783 + }, + { + "x": 45.18616, + "y": 61.15616 + }, + { + "x": 43.502, + "y": 73.08999 + }, + { + "x": 44.7494, + "y": 43.9657 + }, + { + "x": 60.56076, + "y": 43.47697 + }, + { + "x": 51.11581, + "y": 80.65344 + }, + { + "x": 35.88928, + "y": 62.03462 + }, + { + "x": 32.33509, + "y": 52.6811 + }, + { + "x": 49.07877, + "y": 68.18728 + }, + { + "x": 50.33895, + "y": 64.57106 + }, + { + "x": 49.26652, + "y": 79.60231 + }, + { + "x": 18.55579, + "y": 68.16774000000001 + }, + { + "x": 41.00905, + "y": 45.10266 + }, + { + "x": 28.00344, + "y": 61.47371 + }, + { + "x": 18.14624, + "y": 60.1302 + }, + { + "x": 53.95843000000001, + "y": 68.46303 + }, + { + "x": 52.5372, + "y": 68.16769000000001 + }, + { + "x": 38.93926, + "y": 62.98392 + }, + { + "x": 29.05058, + "y": 62.4427 + }, + { + "x": 41.75223, + "y": 64.63294 + }, + { + "x": 37.64791, + "y": 47.91551 + }, + { + "x": 48.79252, + "y": 64.57806 + }, + { + "x": 51.77635, + "y": 55.95868000000001 + }, + { + "x": 27.10765, + "y": 58.84145 + }, + { + "x": 38.6845, + "y": 49.5615 + }, + { + "x": 44.48639, + "y": 56.53763000000001 + }, + { + "x": 23.60541, + "y": 43.46694 + }, + { + "x": 38.7037, + "y": 61.0992 + }, + { + "x": 43.00739, + "y": 55.95437 + }, + { + "x": 51.56791, + "y": 63.63943 + }, + { + "x": 25.26915, + "y": 63.87523 + }, + { + "x": 42.56982, + "y": 67.66801 + }, + { + "x": 38.08915, + "y": 64.5408 + }, + { + "x": 34.78496, + "y": 45.51393 + }, + { + "x": 35.88933, + "y": 55.3666 + }, + { + "x": 47.22242, + "y": 66.03583 + }, + { + "x": 51.96253, + "y": 51.7511 + }, + { + "x": 40.78976, + "y": 59.28554000000001 + }, + { + "x": 41.27407, + "y": 67.80852 + }, + { + "x": 44.66972, + "y": 69.17705 + }, + { + "x": 39.15088, + "y": 54.56051 + }, + { + "x": 29.16955, + "y": 64.9487 + }, + { + "x": 31.77423, + "y": 66.87607 + }, + { + "x": 53.4651, + "y": 62.77485 + }, + { + "x": 40.41047, + "y": 72.14114000000002 + }, + { + "x": 42.61213, + "y": 59.06376 + }, + { + "x": 39.57467000000001, + "y": 62.27438000000001 + }, + { + "x": 54.50277, + "y": 49.35228 + }, + { + "x": 57.91767, + "y": 56.73445 + }, + { + "x": 45.64944000000001, + "y": 53.13589 + }, + { + "x": 21.88918, + "y": 49.30231 + }, + { + "x": 51.04494, + "y": 68.31933000000001 + }, + { + "x": 42.09716, + "y": 72.15952 + }, + { + "x": 43.04227, + "y": 53.48631999999999 + }, + { + "x": 47.14463, + "y": 56.0835 + }, + { + "x": 45.62461, + "y": 77.81975 + }, + { + "x": 55.20789, + "y": 58.71653000000001 + }, + { + "x": 36.05181, + "y": 53.08629000000001 + }, + { + "x": 43.73998, + "y": 58.94337 + }, + { + "x": 34.23256, + "y": 65.07769 + }, + { + "x": 20.95196, + "y": 74.2487 + }, + { + "x": 32.883140000000004, + "y": 79.69149 + }, + { + "x": 38.36533, + "y": 59.0739 + }, + { + "x": 44.56165, + "y": 52.40328 + }, + { + "x": 39.33794, + "y": 70.14443 + }, + { + "x": 49.1245, + "y": 67.76719 + }, + { + "x": 22.91567, + "y": 56.11771 + }, + { + "x": 45.63892, + "y": 47.58675 + }, + { + "x": 42.75653, + "y": 63.07043 + }, + { + "x": 46.39609, + "y": 68.40751 + }, + { + "x": 46.88703, + "y": 66.433 + }, + { + "x": 54.88489000000001, + "y": 75.612 + }, + { + "x": 34.0548, + "y": 57.12219 + }, + { + "x": 37.38898, + "y": 62.3226 + }, + { + "x": 48.23034000000001, + "y": 62.03111 + }, + { + "x": 54.79646999999999, + "y": 59.39724 + }, + { + "x": 59.52773000000001, + "y": 50.58208 + }, + { + "x": 50.2512, + "y": 67.96679 + }, + { + "x": 46.22677, + "y": 54.53655 + }, + { + "x": 48.98464, + "y": 58.14621 + }, + { + "x": 45.09392, + "y": 64.88113 + }, + { + "x": 44.77223, + "y": 44.4438 + }, + { + "x": 34.00083, + "y": 59.08957 + }, + { + "x": 28.31505, + "y": 36.30374000000001 + }, + { + "x": 53.05011, + "y": 67.34682 + }, + { + "x": 25.10745, + "y": 42.70245 + }, + { + "x": 46.08558, + "y": 61.97675 + }, + { + "x": 50.62893, + "y": 45.19788 + }, + { + "x": 46.68802, + "y": 47.42063 + }, + { + "x": 43.07386, + "y": 77.93637 + }, + { + "x": 36.70228, + "y": 53.66054000000001 + }, + { + "x": 11.47373, + "y": 68.61527 + }, + { + "x": 42.08087, + "y": 66.43765 + }, + { + "x": 37.96224, + "y": 52.46353000000001 + }, + { + "x": 28.30779, + "y": 70.53446 + }, + { + "x": 59.18555, + "y": 62.19979 + }, + { + "x": 43.39802, + "y": 63.35423 + }, + { + "x": 37.68739, + "y": 55.33306 + }, + { + "x": 48.85135, + "y": 64.6936 + }, + { + "x": 42.29553, + "y": 61.3545 + }, + { + "x": 53.10208000000001, + "y": 61.65183 + }, + { + "x": 44.18706, + "y": 56.29505 + }, + { + "x": 47.34497, + "y": 61.47756999999999 + }, + { + "x": 34.5298, + "y": 67.07189 + }, + { + "x": 22.82447, + "y": 57.02137 + }, + { + "x": 48.27827, + "y": 53.97093 + }, + { + "x": 45.27673, + "y": 52.04495 + }, + { + "x": 44.17967, + "y": 64.35678 + }, + { + "x": 33.85752, + "y": 60.59858000000001 + }, + { + "x": 29.57068, + "y": 55.91483 + }, + { + "x": 43.5061, + "y": 62.07275 + }, + { + "x": 26.33832, + "y": 73.38955 + }, + { + "x": 13.77208, + "y": 64.03381 + }, + { + "x": 37.39434, + "y": 60.17785 + }, + { + "x": 25.09434, + "y": 55.0823 + }, + { + "x": 41.91991, + "y": 45.2935 + }, + { + "x": 54.314780000000006, + "y": 53.6106 + }, + { + "x": 42.18649, + "y": 61.34159 + }, + { + "x": 47.74056, + "y": 60.98222 + }, + { + "x": 38.6671, + "y": 54.8464 + }, + { + "x": 34.33136, + "y": 63.66866 + }, + { + "x": 45.49676, + "y": 46.21109000000001 + }, + { + "x": 48.64805, + "y": 50.69878 + }, + { + "x": 59.7194, + "y": 53.67238 + }, + { + "x": 48.14389, + "y": 64.17408 + }, + { + "x": 55.16922, + "y": 76.47846 + }, + { + "x": 51.50727, + "y": 65.82463 + }, + { + "x": 42.69824000000001, + "y": 71.33099 + }, + { + "x": 52.7367, + "y": 66.52017 + }, + { + "x": 44.49347, + "y": 44.03264 + }, + { + "x": 42.79715, + "y": 51.57061 + }, + { + "x": 50.60694, + "y": 52.83994000000001 + }, + { + "x": 37.5125, + "y": 68.15924 + }, + { + "x": 46.73844, + "y": 65.58825 + }, + { + "x": 30.74257, + "y": 54.61626999999999 + }, + { + "x": 52.50878, + "y": 63.62914 + }, + { + "x": 18.06539, + "y": 67.96441 + }, + { + "x": 36.22066, + "y": 49.6668 + }, + { + "x": 26.8746, + "y": 69.52796 + }, + { + "x": 46.44655, + "y": 53.95027 + }, + { + "x": 37.5481, + "y": 59.69554 + }, + { + "x": 26.17275, + "y": 73.02736 + }, + { + "x": 42.92903, + "y": 70.03363 + }, + { + "x": 36.25652, + "y": 64.53602 + }, + { + "x": 32.719390000000004, + "y": 57.83974 + }, + { + "x": 45.61599, + "y": 61.58367 + }, + { + "x": 39.26789, + "y": 57.98376 + }, + { + "x": 34.55469, + "y": 66.68845 + }, + { + "x": 36.45908, + "y": 70.13852 + }, + { + "x": 41.83166, + "y": 77.96375 + }, + { + "x": 25.83818, + "y": 63.53773 + }, + { + "x": 27.9007, + "y": 58.79853000000001 + }, + { + "x": 41.00502, + "y": 68.62589 + }, + { + "x": 34.09975, + "y": 75.41776999999998 + }, + { + "x": 29.14662, + "y": 51.12136 + }, + { + "x": 41.39825, + "y": 53.92034 + }, + { + "x": 54.13261, + "y": 51.89971 + }, + { + "x": 36.2243, + "y": 62.59828 + }, + { + "x": 29.95055, + "y": 56.40722 + }, + { + "x": 46.80503, + "y": 70.14497 + }, + { + "x": 41.96831, + "y": 67.27118 + }, + { + "x": 12.71827, + "y": 62.29628 + }, + { + "x": 44.39297, + "y": 59.58195 + }, + { + "x": 24.46523, + "y": 63.57868000000001 + }, + { + "x": 29.6177, + "y": 59.74445 + }, + { + "x": 21.74248, + "y": 50.45285 + }, + { + "x": 29.35508, + "y": 70.05808 + }, + { + "x": 27.226440000000004, + "y": 75.18531999999998 + }, + { + "x": 51.79697, + "y": 61.69157 + }, + { + "x": 44.62026, + "y": 47.41006 + }, + { + "x": 34.06684, + "y": 52.82305 + }, + { + "x": 43.62076, + "y": 50.27394 + }, + { + "x": 42.41596, + "y": 68.93131 + }, + { + "x": 49.61633, + "y": 54.8229 + }, + { + "x": 33.73294, + "y": 67.42624 + }, + { + "x": 55.72386, + "y": 76.51932 + }, + { + "x": 27.83457000000001, + "y": 62.72257 + }, + { + "x": 49.89798, + "y": 51.15889 + }, + { + "x": 60.58085, + "y": 69.45195 + }, + { + "x": 56.16206999999999, + "y": 70.20759 + }, + { + "x": 51.31114, + "y": 74.59144 + }, + { + "x": 40.39541, + "y": 54.17054 + }, + { + "x": 52.45226, + "y": 55.42988 + }, + { + "x": 45.69188, + "y": 51.24299 + }, + { + "x": 45.85658, + "y": 65.63105 + }, + { + "x": 55.69338000000001, + "y": 65.96500999999999 + }, + { + "x": 36.04146, + "y": 62.1499 + }, + { + "x": 28.33257, + "y": 70.274 + }, + { + "x": 41.79587, + "y": 77.08113 + }, + { + "x": 38.54986, + "y": 81.29446999999998 + }, + { + "x": 40.67175, + "y": 54.77458000000001 + }, + { + "x": 38.67076, + "y": 67.80664 + }, + { + "x": 35.75459, + "y": 52.14807 + }, + { + "x": 47.64047, + "y": 62.95349 + }, + { + "x": 44.38814, + "y": 50.86422 + }, + { + "x": 55.07092, + "y": 45.49946 + }, + { + "x": 47.48012, + "y": 58.80583000000001 + }, + { + "x": 40.05356, + "y": 72.84874 + }, + { + "x": 41.29422, + "y": 67.83528000000001 + }, + { + "x": 36.53526, + "y": 78.04978 + }, + { + "x": 23.52244, + "y": 51.33826 + }, + { + "x": 42.98621, + "y": 55.51208000000001 + }, + { + "x": 25.60867, + "y": 47.51016 + }, + { + "x": 31.30385, + "y": 71.48902 + }, + { + "x": 54.79936, + "y": 68.69215 + }, + { + "x": 33.320640000000004, + "y": 69.45271 + }, + { + "x": 42.24906, + "y": 47.52644 + }, + { + "x": 29.504, + "y": 48.87712 + }, + { + "x": 31.42953, + "y": 52.80237 + }, + { + "x": 51.66205, + "y": 57.32731999999999 + }, + { + "x": 38.16498, + "y": 53.45429 + }, + { + "x": 44.65573, + "y": 61.14825 + } + ] + } + ], + "x_label": "V1", + "y_label": "V2", + "iterations": 2, + "distance_metric": "EUCLIDEAN", + "silhouette_score": 0.6945587736089913, + "davies_bouldin_index": 0.4205615850847846 +} diff --git a/src/app/interfaces/chartDataset-interface.ts b/src/app/interfaces/chartDataset-interface.ts new file mode 100644 index 0000000..e2a3280 --- /dev/null +++ b/src/app/interfaces/chartDataset-interface.ts @@ -0,0 +1,11 @@ +export interface ChartDatasetInterface { + "label": string, + "data": Object +} + +export interface CentroidDatesetInterface { + "label": string, + "data": Object, + "pointStyle": string, + "radius": number +} diff --git a/src/app/interfaces/response-interface.ts b/src/app/interfaces/response-interface.ts new file mode 100644 index 0000000..69d160a --- /dev/null +++ b/src/app/interfaces/response-interface.ts @@ -0,0 +1,26 @@ +export interface ResponseInterface { + "name": string, + "cluster": Array, + "x_label": string, + "y_label": string, + "iterations": number, + "distance_metric": string, + "silhouette_score": number, + "davies_bouldin_index": number, +} + +interface Cluster { + "clusterNr": number, + "centroid": Centroid, + "points": Array +} + +export interface Points { + "x": number, + "y": number +} + +interface Centroid { + "x": number, + "y": number +} From 35a89162504f7a469174b7a1b84ff6448453a848 Mon Sep 17 00:00:00 2001 From: cepurwin Date: Thu, 21 Sep 2023 10:40:26 +0200 Subject: [PATCH 04/24] Removed unused import --- src/app/home/chart-container/chart/chart.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/app/home/chart-container/chart/chart.component.ts b/src/app/home/chart-container/chart/chart.component.ts index 43cab90..b096235 100644 --- a/src/app/home/chart-container/chart/chart.component.ts +++ b/src/app/home/chart-container/chart/chart.component.ts @@ -1,5 +1,5 @@ import {AfterViewInit, Component} from '@angular/core'; -import {Chart, plugins} from "chart.js/auto"; +import {Chart} from "chart.js/auto"; import {Points, ResponseInterface} from "../../../interfaces/response-interface"; import {CentroidDatesetInterface, ChartDatasetInterface} from "../../../interfaces/chartDataset-interface"; import {MockDaten} from "./mock-daten"; From 39abca10b60c6badc63b6e74f9dd49e04b05dea1 Mon Sep 17 00:00:00 2001 From: REDDERD <143699981+REDDERD@users.noreply.github.com> Date: Sun, 24 Sep 2023 14:10:27 +0200 Subject: [PATCH 05/24] Finalized sync-test-deploy-branch.yaml (#28) Should work now. Was tested in separate repo --- .../workflows/sync-test-deploy-branch.yaml | 41 ++++++++++--------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/.github/workflows/sync-test-deploy-branch.yaml b/.github/workflows/sync-test-deploy-branch.yaml index 8e614a8..345ecee 100644 --- a/.github/workflows/sync-test-deploy-branch.yaml +++ b/.github/workflows/sync-test-deploy-branch.yaml @@ -1,25 +1,26 @@ -name: Synchronize Branches - +name: Sync test-deploy with main on: push: branches: - main -- name: Sync Branch Action - # You may pin to the exact commit or the version. - # uses: lucasruy/sync-branch-action@2208081dfed383bf8e9c13ce862061a3e7a58239 - uses: lucasruy/sync-branch-action@v1.2.0 - with: - # User token to be associated with this pull request. - # GITHUB_TOKEN: - # Branch where you implemented your new code. - SOURCE_BRANCH: main - # Branch you want to send your new code. - DESTINATION_BRANCH: test-deployment - # Standard title for your update pull request. Default is: "update: {FROM_BRANCH} to {TO_BRANCH}" - PULL_REQUEST_TITLE: # optional - # Content with description for your automated pull. Default is: "This is an automatic PullRequest to keep {BASE_BRANCH} up to date with {FROM_BRANCH}!" - PULL_REQUEST_BODY: # optional - # Pull Request label. Default is: "" - PULL_REQUEST_LABEL: # optional - +jobs: + sync-branches: + runs-on: ubuntu-latest + name: Syncing branches + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Set up Node + uses: actions/setup-node@v1 + with: + node-version: 12 + - name: Opening pull request + id: pull + uses: tretuna/sync-branches@1.4.0 + with: + GITHUB_TOKEN: ${{secrets.SECRET_SYNC}} + FROM_BRANCH: "main" + TO_BRANCH: "test-deployment" + PULL_REQUEST_TITLE: "Sync test-deployment with main" + PULL_REQUEST_BODY: "For keeping test-deployment up to date with the recent changes made to main." From 7fd8ebb66eea7295c75771a0349d7f46fedbbce0 Mon Sep 17 00:00:00 2001 From: david-2031 <113417732+david-2031@users.noreply.github.com> Date: Mon, 25 Sep 2023 21:48:28 +0200 Subject: [PATCH 06/24] Dave/import data format (#32) * edited upload text * display uploaded data --- src/app/home/input/input.component.css | 14 +++++++++++++- src/app/home/input/input.component.html | 7 ++++++- src/app/home/input/input.component.ts | 5 +++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/app/home/input/input.component.css b/src/app/home/input/input.component.css index 90acac8..49efa06 100644 --- a/src/app/home/input/input.component.css +++ b/src/app/home/input/input.component.css @@ -26,6 +26,7 @@ position: relative; display: flex; flex-direction: column; + border-radius: 5px; margin-bottom: 20px; @@ -33,8 +34,19 @@ horiz-align: center; } } - .dropzone:hover{ background-color: rgba(255, 64, 129, 0.05); } + +.file-display{ + height: 20px; + padding: 1rem; + border: dashed 1px gray; + position: relative; + display: flex; + vertical-align: center; + border-radius: 5px; + + margin-bottom: 20px; +} diff --git a/src/app/home/input/input.component.html b/src/app/home/input/input.component.html index 8ad2614..afb9271 100644 --- a/src/app/home/input/input.component.html +++ b/src/app/home/input/input.component.html @@ -9,7 +9,7 @@

Clustering

-

Ziehen Sie eine Datei per Drag & Drop hierher

+

Ziehe eine .csv / .xslx Datei per Drag & Drop hierher

oder

@@ -20,6 +20,11 @@

oder

+
+ insert_drive_file +
{{file.name}}
+
+ k definieren diff --git a/src/app/home/input/input.component.ts b/src/app/home/input/input.component.ts index dc562db..62f3602 100644 --- a/src/app/home/input/input.component.ts +++ b/src/app/home/input/input.component.ts @@ -17,6 +17,8 @@ export class InputComponent { constructor(private http: HttpClient, private snackbar: MatSnackBar) { //http wird später für die API Anbindung benutzt } + public file?: File; + submit() { console.log(JSON.stringify(this.clusterInputFormGroup.value)); } @@ -32,11 +34,14 @@ export class InputComponent { } onChange(event:any){ + this.onFileChange(event.target.files[0]); } private onFileChange(file: File){ + if(file.type == 'text/csv' || file.type =='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'){ + this.file = file; this.snackbar.open('Ich lade die Datei '+file.name+' hoch wenn die API Jungs soweit sind','Okay'); } else { From c1947e43ae235d6d5341a32fb7a7b3ef19df0ad8 Mon Sep 17 00:00:00 2001 From: cepurwin Date: Tue, 26 Sep 2023 10:51:30 +0200 Subject: [PATCH 07/24] Added HTTP Post Request and give Response to Home Component --- .../home/chart-container/chart/mock-daten.ts | 12259 +--------------- .../home/home-services/api.service.spec.ts | 16 + src/app/home/home-services/api.service.ts | 49 + src/app/home/home.component.html | 2 +- src/app/home/home.component.ts | 7 + src/app/home/input/input.component.ts | 20 +- src/app/interfaces/response-interface.ts | 9 +- 7 files changed, 726 insertions(+), 11636 deletions(-) create mode 100644 src/app/home/home-services/api.service.spec.ts create mode 100644 src/app/home/home-services/api.service.ts diff --git a/src/app/home/chart-container/chart/mock-daten.ts b/src/app/home/chart-container/chart/mock-daten.ts index bb8f886..0219e8f 100644 --- a/src/app/home/chart-container/chart/mock-daten.ts +++ b/src/app/home/chart-container/chart/mock-daten.ts @@ -1,12040 +1,1045 @@ import {ResponseInterface} from "../../../interfaces/response-interface"; export const MockDaten: ResponseInterface = { - "name": "K-Means Ergebnis von: xclara", + "user_id": 0, + "request_id": 0, + "name": "K-Means Result for: Seed_Data", "cluster": [ { "clusterNr": 0, "centroid": { - "x": 9.478045899766407, - "y": 10.686052004816457 + "x": 14.053636363636361, + "y": 14.17 }, "points": [ { - "x": 2.072345, - "y": -3.241693 + "x": 13.84, + "y": 13.94 }, { - "x": 17.93671, - "y": 15.78481 + "x": 14.03, + "y": 14.16 }, { - "x": 1.083576, - "y": 7.319176 + "x": 14.7, + "y": 14.21 }, { - "x": 11.12067, - "y": 14.40678 + "x": 13.94, + "y": 14.17 }, { - "x": 23.71155, - "y": 2.557729 + "x": 13.54, + "y": 13.85 }, { - "x": 24.16993, - "y": 32.02478 + "x": 13.5, + "y": 13.85 }, { - "x": 21.66578, - "y": 4.892855 + "x": 13.8, + "y": 14.04 }, { - "x": 4.693683999999998, - "y": 12.34217 + "x": 14.52, + "y": 14.6 }, { - "x": 19.21191, - "y": -1.121366 + "x": 14.34, + "y": 14.37 }, { - "x": 4.230391, - "y": -4.441536 + "x": 14.01, + "y": 14.29 }, { - "x": 9.12713, - "y": 23.60572 - }, - { - "x": 0.4075031, - "y": 15.29705 - }, - { - "x": 7.314846000000001, - "y": 3.3093120000000003 - }, - { - "x": -3.438403, - "y": -12.02527 - }, - { - "x": 17.63935, - "y": -3.212345 - }, - { - "x": 4.415292, - "y": 22.81555 - }, - { - "x": 11.94122, - "y": 8.122487 - }, - { - "x": 0.7258532, - "y": 1.806819 - }, - { - "x": 8.185273, - "y": 28.1326 - }, - { - "x": -5.773587, - "y": 1.0248 - }, - { - "x": 18.76943, - "y": 24.16946 - }, - { - "x": 7.752016, - "y": -3.3349910000000005 - }, - { - "x": 10.61132, - "y": 28.44378 - }, - { - "x": 2.02165, - "y": -4.6871220000000005 - }, - { - "x": 5.145525, - "y": 11.186 - }, - { - "x": 6.24331, - "y": 19.47716 - }, - { - "x": -11.70671, - "y": 8.073185 - }, - { - "x": 7.255978, - "y": 14.63704 - }, - { - "x": 3.3923730000000005, - "y": 1.220712 - }, - { - "x": 4.094005, - "y": 6.944694999999999 - }, - { - "x": 11.80358, - "y": -2.445336 - }, - { - "x": 0.09228785, - "y": -6.651035 - }, - { - "x": 28.50607, - "y": -9.091833 - }, - { - "x": 23.40831, - "y": 7.931438000000001 - }, - { - "x": 10.56305, - "y": 12.54468 - }, - { - "x": 20.14157, - "y": 11.11789 - }, - { - "x": -1.871265, - "y": 8.60885 - }, - { - "x": 29.30237, - "y": 14.02176 - }, - { - "x": 18.65383, - "y": 17.216720000000002 - }, - { - "x": -2.972188, - "y": 6.370998999999999 - }, - { - "x": 10.32313, - "y": 12.11574 - }, - { - "x": 16.90539, - "y": -1.355044 - }, - { - "x": 6.753710000000001, - "y": 12.02797 - }, - { - "x": 23.94777, - "y": 13.35047 - }, - { - "x": 6.8835130000000015, - "y": 6.188562999999999 - }, - { - "x": -1.241542, - "y": 10.08179 - }, - { - "x": 20.50827, - "y": -1.57887 - }, - { - "x": -3.75683, - "y": 1.60851 - }, - { - "x": 17.9176, - "y": 13.09896 - }, - { - "x": 2.002537, - "y": -0.656524 - }, - { - "x": 10.7768, - "y": 15.5336 - }, - { - "x": 24.15819, - "y": 5.3303660000000015 - }, - { - "x": 0.3268727, - "y": 7.288786999999999 - }, - { - "x": 21.64777, - "y": 14.00506 - }, - { - "x": 6.871417, - "y": 21.51998 - }, - { - "x": 15.14264, - "y": 5.111947 - }, - { - "x": 11.54712, - "y": 4.75756 - }, - { - "x": 0.6611676, - "y": -10.14263 - }, - { - "x": -13.66531, - "y": 16.93903 - }, - { - "x": 24.90937000000001, - "y": -10.82038 - }, - { - "x": -4.53022, - "y": -6.173767 - }, - { - "x": 3.163677, - "y": 8.051480999999999 - }, - { - "x": 1.495172, - "y": -7.261601 - }, - { - "x": 7.097637, - "y": 2.105751 - }, - { - "x": 3.5094830000000004, - "y": 24.58487 - }, - { - "x": 12.99879, - "y": 24.91248 - }, - { - "x": 0.3593824, - "y": 6.3879150000000005 - }, - { - "x": 14.35429, - "y": -2.252421 - }, - { - "x": 3.831208, - "y": -2.000873 - }, - { - "x": 31.40462, - "y": 26.77209 - }, - { - "x": -5.501097, - "y": 13.391279999999998 - }, - { - "x": -1.04476, - "y": 5.955898 - }, - { - "x": 4.409013, - "y": 9.323681 - }, - { - "x": 2.917201, - "y": 16.53999 - }, - { - "x": 7.265954, - "y": 10.64794 - }, - { - "x": 10.32038, - "y": 13.368570000000002 - }, - { - "x": 9.35213, - "y": 10.42427 - }, - { - "x": 6.648532, - "y": 11.07535 - }, - { - "x": -1.922306, - "y": 4.888493 - }, - { - "x": 7.2260399999999985, - "y": 13.02948 - }, - { - "x": 8.327288000000001, - "y": 8.540999000000001 - }, - { - "x": 17.69046, - "y": 21.59555 - }, - { - "x": 16.58353, - "y": 18.16115 - }, - { - "x": 12.35425, - "y": 31.96708 - }, - { - "x": 2.4711380000000003, - "y": 5.482761 - }, - { - "x": 18.4925, - "y": 29.42421 - }, - { - "x": 10.1196, - "y": 7.162078 - }, - { - "x": 20.40245, - "y": 3.943319 - }, - { - "x": 12.71589, - "y": 4.531656 - }, - { - "x": 24.35859, - "y": -4.0644 - }, - { - "x": 21.74312, - "y": 15.90887 - }, - { - "x": 12.27208, - "y": -9.612116 - }, - { - "x": 18.29681, - "y": 22.38563 - }, - { - "x": 3.530957, - "y": 8.673297 - }, - { - "x": 5.026042, - "y": 36.03767 - }, - { - "x": -0.8633009, - "y": -7.586249 - }, - { - "x": 26.83892, - "y": 13.13713 - }, - { - "x": 19.11999, - "y": 7.209714999999999 - }, - { - "x": -0.8841636999999999, - "y": 27.15254 - }, - { - "x": -5.191529, - "y": 29.65612 - }, - { - "x": 9.796095, - "y": 15.43598 - }, - { - "x": 11.66314, - "y": 10.63428 - }, - { - "x": 9.925199, - "y": 26.80364 - }, - { - "x": 33.90998, - "y": 15.02652 - }, - { - "x": 9.57004, - "y": 9.2481 - }, - { - "x": -16.2653, - "y": 13.90024 - }, - { - "x": 15.10579, - "y": 3.350049 - }, - { - "x": -4.186504, - "y": 7.964410000000001 - }, - { - "x": 12.54816, - "y": 32.51867 - }, - { - "x": -7.733469, - "y": 9.634491 - }, - { - "x": 18.91337, - "y": 15.7414 - }, - { - "x": -1.050022, - "y": -4.0034550000000015 - }, - { - "x": -6.894765, - "y": 1.041802 - }, - { - "x": 23.05031, - "y": -12.76934 - }, - { - "x": 25.96073, - "y": 11.44522 - }, - { - "x": 7.9507949999999985, - "y": 6.811407000000001 - }, - { - "x": -3.669517, - "y": -4.329696 - }, - { - "x": 10.52266, - "y": 23.3561 - }, - { - "x": 26.29452, - "y": 10.51806 - }, - { - "x": 12.42904, - "y": 23.15663 - }, - { - "x": 0.1170239, - "y": 24.65274 - }, - { - "x": -1.040023, - "y": 1.629857 - }, - { - "x": 11.16266, - "y": 9.0201 - }, - { - "x": 13.61452, - "y": 0.8832188 - }, - { - "x": 8.028045, - "y": 14.82966 - }, - { - "x": 20.40253, - "y": 22.0472 - }, - { - "x": 8.818028, - "y": 18.90424 - }, - { - "x": -0.3163152999999999, - "y": 21.40601 - }, - { - "x": 7.190192999999999, - "y": 9.13962 - }, - { - "x": -0.4711474, - "y": -8.29095 - }, - { - "x": 16.6546, - "y": -1.519889 - }, - { - "x": 10.51711, - "y": -5.018592 - }, - { - "x": 17.963060000000006, - "y": 14.46713 - }, - { - "x": -1.315535, - "y": 11.6027 - }, - { - "x": 5.113728, - "y": 3.961434 - }, - { - "x": 32.25842, - "y": -2.712702 - }, - { - "x": -10.59094, - "y": 15.402920000000002 - }, - { - "x": 21.60892, - "y": 17.750020000000006 - }, - { - "x": 11.31144, - "y": 1.031762 - }, - { - "x": 11.30595, - "y": 3.0689580000000003 - }, - { - "x": 15.51137, - "y": 8.943091 - }, - { - "x": 15.37201, - "y": 18.17922 - }, - { - "x": 3.77755, - "y": 13.33419 - }, - { - "x": 17.279889999999998, - "y": 13.97798 - }, - { - "x": -3.349734, - "y": 26.6599 - }, - { - "x": 15.72571, - "y": 6.373983 - }, - { - "x": 25.50999, - "y": 15.15837 - }, - { - "x": 16.68281, - "y": 18.95937 - }, - { - "x": -4.734694, - "y": 24.09568 - }, - { - "x": 25.08795, - "y": 19.69376 - }, - { - "x": 7.038364, - "y": 10.6667 - }, - { - "x": 4.521214, - "y": -6.635304 - }, - { - "x": 6.454509, - "y": 13.662720000000002 - }, - { - "x": 5.322541, - "y": 22.3855 - }, - { - "x": 0.6316529000000001, - "y": 19.79414 - }, - { - "x": -5.669132, - "y": 11.32511 - }, - { - "x": 9.843806, - "y": -4.695499 - }, - { - "x": 15.39168, - "y": 14.145270000000002 - }, - { - "x": 1.289581, - "y": 10.09948 - }, - { - "x": 17.10334, - "y": 6.207793 - }, - { - "x": 17.13273, - "y": 6.609228 - }, - { - "x": 9.70176, - "y": 12.33497 - }, - { - "x": 18.80351, - "y": -3.160759 - }, - { - "x": 6.08478, - "y": 4.689186 - }, - { - "x": -6.025192, - "y": 26.61258 - }, - { - "x": 4.237603, - "y": 7.315439 - }, - { - "x": 16.82231, - "y": 8.133560000000001 - }, - { - "x": -4.768829, - "y": 28.65819 - }, - { - "x": 0.5061416, - "y": 4.9462980000000005 - }, - { - "x": 12.57349, - "y": 10.41494 - }, - { - "x": 16.35374, - "y": 6.874306 - }, - { - "x": 0.1009743999999999, - "y": 2.590253 - }, - { - "x": 13.67556, - "y": -12.72959 - }, - { - "x": 2.477362, - "y": 8.42026 - }, - { - "x": 14.99279, - "y": 15.16393 - }, - { - "x": 29.71711, - "y": 15.62874 - }, - { - "x": 17.48491, - "y": 3.3823 - }, - { - "x": 13.45815, - "y": -4.13764 - }, - { - "x": 2.2072, - "y": -1.554494 - }, - { - "x": 23.05134, - "y": 24.39491 - }, - { - "x": 32.74222, - "y": 25.56641 - }, - { - "x": 15.562970000000002, - "y": 24.94262 - }, - { - "x": 8.132651, - "y": 8.998712 - }, - { - "x": 0.4580866, - "y": -9.891244 - }, - { - "x": -9.164294, - "y": 5.029294 - }, - { - "x": -3.031709, - "y": 20.23346 - }, - { - "x": 12.12393, - "y": 15.103 - }, - { - "x": 19.95281, - "y": 29.14982 - }, - { - "x": 13.00477, - "y": 27.23093 - }, - { - "x": 10.4399, - "y": 25.7741 - }, - { - "x": 0.351724, - "y": 12.2222 - }, - { - "x": 10.37312, - "y": 6.863772999999999 - }, - { - "x": 17.95419, - "y": 4.455694 - }, - { - "x": 21.06292, - "y": 3.607867 - }, - { - "x": 6.069686, - "y": 9.325338 - }, - { - "x": 14.00808, - "y": 11.5225 - }, - { - "x": -1.7777919999999998, - "y": 14.62108 - }, - { - "x": 0.7525703, - "y": -7.381838 - }, - { - "x": -2.3295470000000003, - "y": 5.070321 - }, - { - "x": 1.77457, - "y": 6.2785720000000005 - }, - { - "x": 10.69576, - "y": 16.30571 - }, - { - "x": 18.11151, - "y": 34.12422 - }, - { - "x": 0.2417766, - "y": 27.04643 - }, - { - "x": -0.4202355, - "y": 4.105829 - }, - { - "x": 15.41425, - "y": 14.782570000000002 - }, - { - "x": 8.463556, - "y": 23.04895 - }, - { - "x": 12.03072, - "y": 17.41157 - }, - { - "x": 18.68731, - "y": 6.949078999999999 - }, - { - "x": 6.3693550000000005, - "y": 5.700326 - }, - { - "x": 21.82924, - "y": 5.564074 - }, - { - "x": 7.615410000000002, - "y": -5.024376999999999 - }, - { - "x": 5.823252, - "y": 18.40279 - }, - { - "x": 22.35203, - "y": 8.526174000000001 - }, - { - "x": 6.434616, - "y": 21.16974 - }, - { - "x": 0.5560946, - "y": -4.8660760000000005 - }, - { - "x": 6.737062, - "y": -11.7331 - }, - { - "x": -1.392677, - "y": 14.64543 - }, - { - "x": 4.935136, - "y": 24.86809 - }, - { - "x": 20.35508, - "y": 26.981240000000003 - }, - { - "x": 8.624667, - "y": 10.67174 - }, - { - "x": 16.31749, - "y": 11.64083 - }, - { - "x": 9.014875, - "y": 14.42246 - }, - { - "x": 17.598329999999994, - "y": 26.66023 - }, - { - "x": 2.636649, - "y": 24.04782 - }, - { - "x": 13.82606, - "y": 16.27159 - }, - { - "x": 10.39783, - "y": 3.804893 - }, - { - "x": -6.27359, - "y": 3.878999 - }, - { - "x": -11.88057, - "y": 0.1788024 - }, - { - "x": 21.02048, - "y": 9.690716 - }, - { - "x": 18.25632, - "y": 16.941270000000006 - }, - { - "x": 24.96351, - "y": -1.158215 - }, - { - "x": 10.13696, - "y": 6.446662 - }, - { - "x": 3.509066, - "y": 16.55414 - }, - { - "x": 2.409921, - "y": -0.3445188 - }, - { - "x": 16.0843, - "y": 7.562616 - }, - { - "x": 5.987025, - "y": 7.456533 - }, - { - "x": 12.63902, - "y": 14.35081 - }, - { - "x": 7.392535, - "y": 22.61304 - }, - { - "x": 10.37212, - "y": -1.25827 - }, - { - "x": -19.01791, - "y": 0.6507304 - }, - { - "x": 3.030817, - "y": 4.580993 - }, - { - "x": 34.0303, - "y": -3.716423 - }, - { - "x": -5.843476, - "y": 13.79137 - }, - { - "x": 36.95611, - "y": -1.245269 - }, - { - "x": -0.188409, - "y": -1.86653 - }, - { - "x": 17.28285, - "y": 1.558553 - }, - { - "x": 8.9204, - "y": 29.19455 - }, - { - "x": -5.873556, - "y": 6.456733 - }, - { - "x": 17.76259, - "y": 24.02293 - }, - { - "x": 12.49482, - "y": 22.47067 - }, - { - "x": 12.6087, - "y": 3.212588 - }, - { - "x": 3.606599, - "y": 14.24789 - }, - { - "x": 20.48342, - "y": 13.74531 - }, - { - "x": 31.6423, - "y": 13.04685 - }, - { - "x": 4.745898, - "y": 7.317133 - }, - { - "x": -5.295478, - "y": 6.0010080000000015 - }, - { - "x": 7.238307000000002, - "y": 19.98631 - }, - { - "x": 6.144599, - "y": 19.91034 - }, - { - "x": 9.837835, - "y": 8.336385 - }, - { - "x": 18.64695, - "y": 5.146764 - }, - { - "x": -0.5638628000000001, - "y": 9.673976 - }, - { - "x": 5.21368, - "y": 21.83143 - }, - { - "x": -0.1993878, - "y": 9.176207000000002 - }, - { - "x": 22.42831, - "y": 8.390862 - }, - { - "x": 19.39561, - "y": -7.412824 - }, - { - "x": 31.28428, - "y": 4.131464 - }, - { - "x": 8.380888, - "y": 0.2647594 - }, - { - "x": 7.840689999999999, - "y": 13.20062 - }, - { - "x": 23.85992, - "y": 6.171501 - }, - { - "x": 6.188661, - "y": 24.92638 - }, - { - "x": 18.08387, - "y": 19.74208 - }, - { - "x": 14.23096, - "y": 12.43815 - }, - { - "x": 14.4807, - "y": 8.661634 - }, - { - "x": 30.91987, - "y": 17.57755 - }, - { - "x": 4.117051, - "y": 3.299065 - }, - { - "x": 18.10072000000001, - "y": 9.572447 - }, - { - "x": -3.777019, - "y": 1.115207 - }, - { - "x": 18.47156, - "y": 8.861407 - }, - { - "x": 30.69195, - "y": 21.9132 - }, - { - "x": 1.838687, - "y": 13.1765 - }, - { - "x": 14.22135, - "y": 16.96163 - }, - { - "x": 27.70961, - "y": 10.52575 - }, - { - "x": 9.956135, - "y": 7.890053999999999 - }, - { - "x": 11.7273, - "y": 14.00086 - }, - { - "x": 2.154482, - "y": 14.163470000000002 - }, - { - "x": -0.2120433999999999, - "y": 1.330881 - }, - { - "x": -1.7389830000000002, - "y": 16.9849 - }, - { - "x": 2.299075, - "y": -0.2934257999999999 - }, - { - "x": 22.01149, - "y": -0.4469464 - }, - { - "x": 4.275241, - "y": 16.67383 - }, - { - "x": 19.38943, - "y": 4.436821 - }, - { - "x": 8.80722, - "y": 13.23823 - }, - { - "x": -0.7658179, - "y": -4.004811 - }, - { - "x": 12.69128, - "y": 13.52916 - }, - { - "x": 12.73131, - "y": 7.050802 - }, - { - "x": 8.388222, - "y": 23.45347000000001 - }, - { - "x": 23.42708, - "y": 4.5986410000000015 - }, - { - "x": 4.046104, - "y": 7.634936 - }, - { - "x": 7.667025, - "y": 3.193633 - }, - { - "x": 22.60801, - "y": 5.130319999999998 - }, - { - "x": 14.74391, - "y": 28.76733 - }, - { - "x": 20.53201, - "y": 8.01565 - }, - { - "x": 16.46037, - "y": 16.81531 - }, - { - "x": 12.70669, - "y": 11.48214 - }, - { - "x": -1.474059, - "y": 3.329562 - }, - { - "x": 35.049609999999994, - "y": 14.4484 - }, - { - "x": 2.529177, - "y": 15.56721 - }, - { - "x": 28.9961, - "y": -15.57834 - }, - { - "x": 10.57878, - "y": 6.307686 - }, - { - "x": 5.52815, - "y": 14.12427 - }, - { - "x": 12.48016, - "y": 2.7289220000000003 - }, - { - "x": 18.10028, - "y": 3.891689 - }, - { - "x": 11.17125, - "y": 11.10063 - }, - { - "x": 14.58538, - "y": 25.99213 - }, - { - "x": 27.21567000000001, - "y": -1.980637 - }, - { - "x": -1.40271, - "y": 22.3755 - }, - { - "x": -14.66871, - "y": 9.792318 - }, - { - "x": 28.25157, - "y": 14.28507 - }, - { - "x": 2.688756, - "y": 3.0299970000000003 - }, - { - "x": 9.58344, - "y": 12.00506 - }, - { - "x": 3.65772, - "y": 1.649871 - }, - { - "x": 3.575705, - "y": 14.80241 - }, - { - "x": 34.62557, - "y": 4.384648 - }, - { - "x": 36.12292, - "y": 12.05849 - }, - { - "x": 12.56065, - "y": -4.733039 - }, - { - "x": 1.915274, - "y": 22.28056 - }, - { - "x": 18.14029, - "y": 3.569117 - }, - { - "x": -1.214981, - "y": -3.3185839999999995 - }, - { - "x": 7.646433999999997, - "y": 29.922590000000003 - }, - { - "x": -2.844509, - "y": 13.71118 - }, - { - "x": 14.62733, - "y": 16.4933 - }, - { - "x": -0.3742695, - "y": 15.06495 - }, - { - "x": 10.15795, - "y": 13.33612 - }, - { - "x": 19.4574, - "y": 11.29307 - }, - { - "x": -6.23644, - "y": 9.581524 - }, - { - "x": 0.2870638, - "y": 6.756246000000001 - }, - { - "x": 7.025386999999999, - "y": 8.299629 - }, - { - "x": 6.2054050000000025, - "y": 29.41931 - }, - { - "x": 12.37304, - "y": 4.152157 - }, - { - "x": -8.001964, - "y": 15.628429999999998 - }, - { - "x": 9.879504, - "y": 13.94365 - }, - { - "x": 12.83222, - "y": 20.98375 - }, - { - "x": 10.71142, - "y": 18.59333 - }, - { - "x": 10.09704, - "y": 9.915216 - }, - { - "x": 17.89963, - "y": 6.451302 - }, - { - "x": -6.720686, - "y": 14.993670000000002 - }, - { - "x": 3.712734, - "y": 7.361372 - }, - { - "x": -16.22395, - "y": 17.81785 - }, - { - "x": 8.71418, - "y": 24.10122 - }, - { - "x": 17.05254, - "y": 5.227864 - }, - { - "x": -14.69171, - "y": 31.79987 - }, - { - "x": 7.943416, - "y": 10.26803 - }, - { - "x": 14.004979999999998, - "y": 21.54721 - }, - { - "x": -1.302871, - "y": 2.063343 - }, - { - "x": -0.7624772, - "y": 7.0014119999999975 - }, - { - "x": 21.54626, - "y": 21.13478 - }, - { - "x": 1.232726, - "y": 12.78234 - }, - { - "x": 1.602791, - "y": 2.210584 - }, - { - "x": -6.679344, - "y": 12.61919 - }, - { - "x": -6.89254, - "y": 2.9427950000000003 - }, - { - "x": 12.32427, - "y": 22.68294 - }, - { - "x": 21.02468, - "y": 26.13788 - }, - { - "x": 6.443124, - "y": -3.984948 - }, - { - "x": 22.39199, - "y": 13.58907 - }, - { - "x": 18.06598, - "y": 2.753522 - }, - { - "x": 8.136961, - "y": 22.73404 - }, - { - "x": 13.142079999999998, - "y": 24.21235 - }, - { - "x": 11.51451, - "y": 15.92228 - }, - { - "x": -2.505605, - "y": 15.30741 - }, - { - "x": 3.29959, - "y": 13.2484 - }, - { - "x": -4.795219, - "y": 1.21583 - }, - { - "x": 29.08478, - "y": 10.30137 - }, - { - "x": 5.12492, - "y": 4.627426 - }, - { - "x": 17.060779999999998, - "y": 9.965354 - }, - { - "x": -0.340825, - "y": 11.85959 - }, - { - "x": 15.295320000000002, - "y": 9.07695 - }, - { - "x": 6.39995, - "y": 23.04672 - }, - { - "x": 14.522429999999998, - "y": 17.693360000000006 - }, - { - "x": 28.85673, - "y": 4.007333999999998 - }, - { - "x": 10.77192, - "y": 5.787269 - }, - { - "x": 7.428644999999999, - "y": 15.77705 - }, - { - "x": -6.637650999999999, - "y": 14.04711 - }, - { - "x": 17.08812, - "y": 8.223101 - }, - { - "x": 15.07757, - "y": -13.689429999999998 - }, - { - "x": -22.15215, - "y": 9.511638 - }, - { - "x": 5.04531, - "y": 1.784843 - }, - { - "x": -2.521792, - "y": -7.60383 - }, - { - "x": 32.85505, - "y": 0.3210040999999999 - }, - { - "x": 6.070759, - "y": 5.579687 - }, - { - "x": 3.508814, - "y": -3.738329 - }, - { - "x": 9.818843, - "y": 2.407706 - }, - { - "x": 11.93353, - "y": 18.78467 - }, - { - "x": 2.850058, - "y": -4.31489 - }, - { - "x": 5.20408, - "y": 6.957638 - }, - { - "x": 13.56349, - "y": 9.16074 - }, - { - "x": 2.631175, - "y": 5.677225 - }, - { - "x": 6.517994, - "y": -0.974309 - }, - { - "x": 15.80081, - "y": 19.64233 - }, - { - "x": 14.07388, - "y": -1.577052 - }, - { - "x": -3.888388, - "y": 0.4062882 - }, - { - "x": 18.69151, - "y": 10.06134 - }, - { - "x": 21.0912, - "y": 26.45951 - }, - { - "x": 2.459292, - "y": 6.838326 - }, - { - "x": 6.513192, - "y": -0.7243316999999999 - }, - { - "x": 24.3063, - "y": 14.39751 - }, - { - "x": 13.94559, - "y": 0.7581209 - }, - { - "x": -2.664707, - "y": -6.36948 - }, - { - "x": 8.106246, - "y": 0.4920085 - }, - { - "x": 17.07317, - "y": 25.84198 - }, - { - "x": 6.0494330000000005, - "y": 22.92962 - }, - { - "x": 23.94025, - "y": 27.27981 - }, - { - "x": -7.401308, - "y": -3.5558080000000003 - }, - { - "x": 2.926755, - "y": 22.41698 - }, - { - "x": -2.774311, - "y": -21.36068 - }, - { - "x": -3.094624, - "y": 16.60375 - }, - { - "x": 15.663379999999998, - "y": 18.60818 - }, - { - "x": 22.3694, - "y": 20.29701 - }, - { - "x": -0.984013, - "y": 23.2461 - }, - { - "x": 28.63485, - "y": 4.79718 - }, - { - "x": 21.88014, - "y": 12.66741 - }, - { - "x": -3.621506, - "y": 4.750143 - }, - { - "x": 12.52111, - "y": 8.464080000000001 - }, - { - "x": -22.49599, - "y": 0.1392916 - }, - { - "x": 17.33361, - "y": 3.268888 - }, - { - "x": -6.884011, - "y": -1.824905 - }, - { - "x": 10.21154, - "y": 24.45211 - }, - { - "x": 12.14809, - "y": 12.06576 - }, - { - "x": -1.924867, - "y": -0.1361344 - }, - { - "x": 21.60187, - "y": 10.23303 - }, - { - "x": 15.66342, - "y": 13.893720000000002 - }, - { - "x": 15.0212, - "y": 9.187742 - }, - { - "x": 13.60186, - "y": 16.88655 - }, - { - "x": 4.554105, - "y": 37.17632 - }, - { - "x": 12.56063, - "y": 7.900061 - }, - { - "x": -11.53464, - "y": 11.63952 - }, - { - "x": 24.58798, - "y": 1.860825 - }, - { - "x": -8.381909, - "y": 14.354070000000002 - }, - { - "x": -6.1142650000000005, - "y": 7.363372999999997 - }, - { - "x": -5.19861, - "y": 12.78676 - }, - { - "x": 21.17985, - "y": 10.36981 - }, - { - "x": 6.734995, - "y": 23.19933 - }, - { - "x": 10.19698, - "y": 15.43111 - }, - { - "x": 12.04076, - "y": 17.23649 - }, - { - "x": 25.86829, - "y": 2.396404 - }, - { - "x": -5.335044, - "y": 7.578044 - }, - { - "x": 9.824228, - "y": 6.06933 - }, - { - "x": 14.249670000000002, - "y": 27.39351 - }, - { - "x": 5.553391, - "y": 13.30626 - }, - { - "x": 9.224884, - "y": -2.702723 - }, - { - "x": 16.72743, - "y": 15.952370000000002 - }, - { - "x": 13.19714, - "y": 14.475179999999998 - }, - { - "x": 13.476720000000002, - "y": -4.123874 - }, - { - "x": 6.2834900000000005, - "y": 11.55091 - }, - { - "x": 15.38618, - "y": -8.226192 - }, - { - "x": 10.96815, - "y": 9.922543 - }, - { - "x": 14.3925, - "y": 3.203174 - }, - { - "x": 22.91966, - "y": 20.66688 - }, - { - "x": 12.9942, - "y": 15.3486 - }, - { - "x": 24.38812, - "y": 18.26395 - }, - { - "x": -9.467832, - "y": 0.6434593000000001 - }, - { - "x": -5.9889470000000005, - "y": 22.67049 - }, - { - "x": -1.766619, - "y": 18.50818 - }, - { - "x": -2.997209, - "y": 15.36209 - }, - { - "x": -2.980586, - "y": 14.54187 - }, - { - "x": 19.18525, - "y": 12.05587 - }, - { - "x": 18.62052000000001, - "y": -6.348775 - }, - { - "x": 4.541831, - "y": 3.586799 - }, - { - "x": 2.029832, - "y": 35.52395 - }, - { - "x": 18.08133, - "y": 6.853875 - }, - { - "x": 16.55184, - "y": 29.25978 - }, - { - "x": 20.81487000000001, - "y": 0.2041338 - }, - { - "x": 4.7732410000000005, - "y": 11.55061 - }, - { - "x": 17.54123, - "y": 24.48917 - }, - { - "x": 11.232, - "y": 27.95659 - }, - { - "x": 19.88413, - "y": 3.3734900000000003 - }, - { - "x": -3.511829, - "y": 6.03616 - }, - { - "x": 19.83789, - "y": 5.660164 - }, - { - "x": 21.5811, - "y": 2.308901 - }, - { - "x": 12.77548, - "y": 11.26171 - }, - { - "x": -3.640386, - "y": -8.611116 - }, - { - "x": 22.1939, - "y": 13.675070000000002 - }, - { - "x": 24.52809, - "y": 3.520373 - }, - { - "x": -2.055682, - "y": 19.0635 - }, - { - "x": 22.10497, - "y": 10.32231 - }, - { - "x": 11.01341, - "y": 25.31104 - }, - { - "x": 19.34416, - "y": 17.969070000000006 - }, - { - "x": -3.011348, - "y": 22.65403 - }, - { - "x": 4.864152, - "y": -1.24612 - }, - { - "x": -12.93381, - "y": 4.052313 - }, - { - "x": -3.225042, - "y": 2.066012 - }, - { - "x": 27.51631, - "y": 9.72616 - }, - { - "x": 15.95689, - "y": 0.2902336 - }, - { - "x": 5.763955, - "y": 18.51403 - }, - { - "x": 24.53113, - "y": 23.72683 - }, - { - "x": 12.13776, - "y": -1.241701 - }, - { - "x": -6.742276, - "y": 10.8888 - }, - { - "x": 1.712732, - "y": 14.68423 - }, - { - "x": 4.114345, - "y": 23.43694 - }, - { - "x": 24.57423, - "y": 17.20925 - }, - { - "x": 12.09148, - "y": -2.061826 - }, - { - "x": 6.380095, - "y": 19.50401 - }, - { - "x": 15.4881, - "y": 21.71908 - }, - { - "x": 3.572731, - "y": -3.078149 - }, - { - "x": 26.356690000000004, - "y": 20.47212 - }, - { - "x": 14.78471, - "y": 23.34586 - }, - { - "x": -1.279279, - "y": 0.9330042 - }, - { - "x": 0.01129247, - "y": 8.008011999999999 - }, - { - "x": 5.984768, - "y": 1.961941 - }, - { - "x": 8.858572, - "y": 17.184720000000002 - }, - { - "x": 19.37649, - "y": 2.122504 - }, - { - "x": 9.10579, - "y": 19.51155 - }, - { - "x": 9.643453, - "y": 6.241649 - }, - { - "x": -3.1091740000000003, - "y": 18.91863 - }, - { - "x": 10.541, - "y": -3.394954 - }, - { - "x": 4.573325, - "y": 11.78297 - }, - { - "x": 22.98676, - "y": 10.07359 - }, - { - "x": -10.77961, - "y": 14.08271 - }, - { - "x": 5.63292, - "y": 18.08959 - }, - { - "x": 5.782557, - "y": 12.32168 - }, - { - "x": 27.1903, - "y": 10.58244 - }, - { - "x": 8.920819999999997, - "y": 30.34188 - }, - { - "x": -1.781047, - "y": 10.98773 - }, - { - "x": -0.7274996, - "y": -7.879213 - }, - { - "x": 23.33998, - "y": 16.66643 - }, - { - "x": 16.00585, - "y": 1.374964 - }, - { - "x": 22.97108, - "y": 15.7172 - }, - { - "x": 8.993785, - "y": -9.014578 - }, - { - "x": 8.249774, - "y": -2.679776 - }, - { - "x": 5.368688, - "y": 12.60516 - }, - { - "x": 25.45515, - "y": 22.22258 - }, - { - "x": 16.10149, - "y": 11.38547 - }, - { - "x": 25.9423, - "y": 5.396589 - }, - { - "x": 13.96851, - "y": 23.8073 - }, - { - "x": 1.059773, - "y": 2.482886 - }, - { - "x": 11.19896, - "y": 27.34923 - }, - { - "x": 10.01848, - "y": 12.379 - }, - { - "x": -5.964017, - "y": 14.30957 - }, - { - "x": 14.69272, - "y": 13.940270000000002 - }, - { - "x": 5.162226, - "y": -3.949188 - }, - { - "x": 16.13654, - "y": 2.4912810000000003 - }, - { - "x": -8.427487, - "y": 17.28569 - }, - { - "x": 17.46026, - "y": 23.52985 - }, - { - "x": 4.839787, - "y": 2.035094 - }, - { - "x": 24.78075, - "y": 8.787683 - }, - { - "x": 3.28531, - "y": -2.7043060000000003 - }, - { - "x": 1.317184, - "y": 13.35289 - }, - { - "x": 5.000647, - "y": 13.50562 - }, - { - "x": -2.902717, - "y": 2.2402900000000003 - }, - { - "x": 12.86082, - "y": 12.72926 - }, - { - "x": 6.369858, - "y": 11.56653 - }, - { - "x": 5.91316, - "y": 24.22981 - }, - { - "x": -4.098757, - "y": -5.008349 - }, - { - "x": -0.7625945, - "y": 18.5798 - }, - { - "x": 15.58506, - "y": 11.27319 - }, - { - "x": 5.403196, - "y": 11.22043 - }, - { - "x": -1.124667, - "y": 31.28172 - }, - { - "x": 6.120589, - "y": 10.16824 - }, - { - "x": 6.07585, - "y": 31.160290000000003 - }, - { - "x": -8.399909, - "y": 8.830895 - }, - { - "x": 2.199297, - "y": 12.84548 - }, - { - "x": 8.845364, - "y": 21.62596 - }, - { - "x": -14.18104, - "y": 1.871214 - }, - { - "x": 34.64086, - "y": 11.64993 - }, - { - "x": -0.7696695, - "y": 8.42469 - }, - { - "x": -6.12447, - "y": 23.05465 - }, - { - "x": -14.651420000000002, - "y": 10.9695 - }, - { - "x": 11.58703, - "y": 14.496579999999998 - }, - { - "x": 0.8204501000000001, - "y": 10.62322 - }, - { - "x": 28.5049, - "y": 10.30336 - }, - { - "x": -8.36784, - "y": 4.386019 - }, - { - "x": 32.45148, - "y": 7.488422999999999 - }, - { - "x": 6.733567999999999, - "y": 18.12497 - }, - { - "x": 10.64451, - "y": 16.76856 - }, - { - "x": 3.2193240000000003, - "y": 19.57019 - }, - { - "x": 10.74578, - "y": 27.00378 - }, - { - "x": 4.207717, - "y": 2.8513580000000003 - }, - { - "x": 13.87413, - "y": 13.78015 - }, - { - "x": -10.31962, - "y": 15.46054 - }, - { - "x": 11.65267, - "y": 1.7431299999999998 - }, - { - "x": 25.78439, - "y": 2.961885 - }, - { - "x": 12.48763, - "y": 18.15628 - }, - { - "x": 7.276056, - "y": 14.082579999999998 - }, - { - "x": 9.188286, - "y": 18.24487 - }, - { - "x": 7.066136, - "y": 17.03944 - }, - { - "x": 2.462034, - "y": 7.644941999999999 - }, - { - "x": 12.10048, - "y": 15.32802 - }, - { - "x": -0.531199, - "y": 13.14534 - }, - { - "x": 10.19152, - "y": 5.414251999999999 - }, - { - "x": 8.34839, - "y": 17.09359 - }, - { - "x": -7.409304, - "y": 15.4642 - }, - { - "x": 15.994229999999998, - "y": 13.51288 - }, - { - "x": -6.608865, - "y": -0.9393074 - }, - { - "x": 13.86558, - "y": 6.094001 - }, - { - "x": 24.64994, - "y": 6.494246 - }, - { - "x": 20.51858, - "y": 17.59508 - }, - { - "x": 11.26143, - "y": 2.0136830000000003 - }, - { - "x": 5.034868, - "y": 7.499159 - }, - { - "x": 1.19408, - "y": 23.50754 - }, - { - "x": 13.19178, - "y": 12.76363 - }, - { - "x": 9.728273, - "y": 11.80716 - }, - { - "x": 13.9332, - "y": 15.7472 - }, - { - "x": 18.43648, - "y": 12.18253 - }, - { - "x": 12.60749, - "y": 32.6225 - }, - { - "x": 6.429051, - "y": 1.972634 - }, - { - "x": 12.33216, - "y": -14.739579999999998 - }, - { - "x": 17.02514, - "y": 8.819268 - }, - { - "x": 39.89024000000001, - "y": 23.99687 - }, - { - "x": 20.98933, - "y": 17.29635 - }, - { - "x": 11.65338, - "y": -5.657587 - }, - { - "x": 15.09138, - "y": 25.02662 - }, - { - "x": 11.22707, - "y": -8.075130999999999 - }, - { - "x": 10.76558, - "y": -4.988425 - }, - { - "x": 3.910868, - "y": 18.41193 - }, - { - "x": 9.769555, - "y": 15.26871 - }, - { - "x": 12.98944, - "y": 5.868339 - }, - { - "x": 15.62113, - "y": 6.474136 - }, - { - "x": 10.13399, - "y": -2.499796 - }, - { - "x": 1.27228, - "y": 6.644602000000001 - }, - { - "x": 28.93972, - "y": 2.331538 - }, - { - "x": -10.50514, - "y": 20.75097 - }, - { - "x": 0.2242924, - "y": 22.1642 - }, - { - "x": 23.20978, - "y": 11.40963 - }, - { - "x": 17.61025, - "y": 1.974165 - }, - { - "x": 7.3795600000000015, - "y": -5.537147 - }, - { - "x": 10.10124, - "y": 5.6806550000000025 - }, - { - "x": 18.15361, - "y": 9.892188 - }, - { - "x": 21.83601, - "y": 26.09115 - }, - { - "x": 19.94091, - "y": 14.92146 - }, - { - "x": -1.475135, - "y": 8.28278 - }, - { - "x": -7.943030999999999, - "y": -3.830219 - }, - { - "x": 11.30458, - "y": 8.819061999999997 - }, - { - "x": 20.7643, - "y": 6.118451 - }, - { - "x": 12.46828, - "y": 7.275092999999999 - }, - { - "x": 16.64017, - "y": 1.672324 - }, - { - "x": -11.45466, - "y": 7.741682000000001 - }, - { - "x": 7.891755, - "y": -8.190833 - }, - { - "x": 5.2950300000000015, - "y": 24.11116 - }, - { - "x": 6.695052, - "y": 20.8704 - }, - { - "x": 5.536268, - "y": 15.65921 - }, - { - "x": -1.7861470000000002, - "y": 18.38471 - }, - { - "x": 10.10925, - "y": 19.378120000000006 - }, - { - "x": 12.36446, - "y": 25.65443 - }, - { - "x": 24.26076, - "y": 6.211672 - }, - { - "x": -2.913374, - "y": -0.5345634 - }, - { - "x": 19.30486, - "y": 14.99081 - }, - { - "x": -7.134083, - "y": -5.31856 - }, - { - "x": 6.658128, - "y": -0.8207126 - }, - { - "x": 13.56779, - "y": 3.181591 - }, - { - "x": 9.165157, - "y": 12.44468 - }, - { - "x": 16.576520000000002, - "y": 19.44045 - }, - { - "x": 13.04035, - "y": 25.82305 - }, - { - "x": 12.10189, - "y": -7.604383 - }, - { - "x": 3.820956, - "y": 7.389069 - }, - { - "x": 10.48589, - "y": 11.97492 - }, - { - "x": 15.89318, - "y": 17.60414 - }, - { - "x": 4.465372, - "y": 18.83929 - }, - { - "x": 6.583345, - "y": 25.99912 - }, - { - "x": -3.657566000000001, - "y": 8.821053 - }, - { - "x": 9.940546, - "y": -12.20743 - }, - { - "x": 28.13562, - "y": -7.671817999999999 - }, - { - "x": 7.351463000000002, - "y": 3.724133 - }, - { - "x": 25.14936, - "y": 4.756451 - }, - { - "x": -6.347524, - "y": 11.70047 - }, - { - "x": 8.469816, - "y": 1.854826 - }, - { - "x": 15.9227, - "y": 21.05449 - }, - { - "x": 13.16243, - "y": 22.88495 - }, - { - "x": 6.61163, - "y": 7.602461999999999 - }, - { - "x": 14.55212, - "y": -1.466516 - }, - { - "x": 5.984364, - "y": 2.761451 - }, - { - "x": -2.9907470000000003, - "y": 18.67975 - }, - { - "x": 10.47763, - "y": 13.9604 - }, - { - "x": 15.70686, - "y": 3.711452 - }, - { - "x": 31.10299, - "y": 3.897385 - }, - { - "x": -0.2682848, - "y": 14.07392 - }, - { - "x": 15.77137, - "y": 3.525233 - }, - { - "x": -4.961974, - "y": 27.05419 - }, - { - "x": 10.78593, - "y": 2.022093 - }, - { - "x": 18.0671, - "y": 31.1079 - }, - { - "x": 7.007197, - "y": 16.15708 - }, - { - "x": 5.3245830000000005, - "y": 16.398020000000002 - }, - { - "x": 25.69982000000001, - "y": 3.056635 - }, - { - "x": 20.72, - "y": 23.58926 - }, - { - "x": 2.090151, - "y": 9.11213 - }, - { - "x": 14.57106, - "y": -6.9908550000000025 - }, - { - "x": 15.51143, - "y": -5.554229 - }, - { - "x": 25.34928, - "y": 25.96264 - }, - { - "x": -2.523716, - "y": 6.6824179999999975 - }, - { - "x": -0.2446706, - "y": -0.7271909000000001 - }, - { - "x": -3.787227, - "y": 2.679385 - }, - { - "x": 4.1469190000000005, - "y": 13.84954 - }, - { - "x": 3.629787, - "y": -4.12287 - }, - { - "x": 27.08326, - "y": 19.22561 - }, - { - "x": 9.194675, - "y": 18.3967 - }, - { - "x": 12.34312, - "y": 2.642345 - }, - { - "x": 7.808153999999999, - "y": 4.437537 - }, - { - "x": 11.60988, - "y": 7.2919990000000015 - }, - { - "x": 5.989497, - "y": 8.107000000000001 - }, - { - "x": 4.259951999999998, - "y": 9.585877 - }, - { - "x": 16.388460000000002, - "y": 16.90853 - }, - { - "x": 5.568457, - "y": 7.2605520000000014 - }, - { - "x": 22.8137, - "y": 7.456842 - }, - { - "x": 14.04878, - "y": 15.9274 - }, - { - "x": 3.027084, - "y": 7.603089999999999 - }, - { - "x": 18.73794, - "y": 0.02478778 - }, - { - "x": 28.05616, - "y": 31.56779 - }, - { - "x": -0.3963638, - "y": -3.104964 - }, - { - "x": -1.199626, - "y": 12.69042 - }, - { - "x": 0.7270734000000001, - "y": 2.26189 - }, - { - "x": 27.091590000000004, - "y": 15.82479 - }, - { - "x": 8.936564, - "y": 4.499611 - }, - { - "x": 18.23345, - "y": 15.64262 - }, - { - "x": -0.429218, - "y": 2.211029 - }, - { - "x": 15.6607, - "y": 19.98972 - }, - { - "x": 14.23374, - "y": 15.76271 - }, - { - "x": 5.829822, - "y": 10.34468 - }, - { - "x": 4.230915, - "y": 1.735521 - }, - { - "x": 12.19179, - "y": 15.03855 - }, - { - "x": 5.103175, - "y": 3.64185 - }, - { - "x": 7.088660000000001, - "y": 6.2657 - }, - { - "x": 0.01341287, - "y": 14.39395 - }, - { - "x": 16.070510000000002, - "y": 12.18371 - }, - { - "x": 31.6029, - "y": 8.55297 - }, - { - "x": -14.94727, - "y": 16.5969 - }, - { - "x": 38.0434, - "y": 2.138592 - }, - { - "x": 24.30645, - "y": 7.067761 - }, - { - "x": 29.12768, - "y": 5.9111660000000015 - }, - { - "x": 2.734299, - "y": 9.551941 - }, - { - "x": 5.490974, - "y": 15.10988 - }, - { - "x": 25.76946, - "y": 3.324707 - }, - { - "x": 15.67774, - "y": 28.04655 - }, - { - "x": 27.45951, - "y": 4.004603 - }, - { - "x": 6.71577, - "y": 17.91905 - }, - { - "x": 4.453012, - "y": 4.265516000000001 - }, - { - "x": 21.77856, - "y": 12.28597 - }, - { - "x": 12.709, - "y": 12.25582 - }, - { - "x": 6.4600269999999975, - "y": 2.503197 - }, - { - "x": -8.207786, - "y": 27.72911 - }, - { - "x": 9.914433, - "y": 14.1201 - }, - { - "x": 14.48534, - "y": 4.178134 - }, - { - "x": 15.60438, - "y": 1.94312 - }, - { - "x": -1.809368, - "y": 9.6628 - }, - { - "x": 16.42695, - "y": -3.171427 - }, - { - "x": 6.084253, - "y": 10.33377 - }, - { - "x": 8.627294000000001, - "y": -2.30743 - }, - { - "x": 14.28665, - "y": 3.929615 - }, - { - "x": -11.54532, - "y": -20.01888 - }, - { - "x": 5.575772, - "y": 10.67374 - }, - { - "x": -2.537058, - "y": 10.25853 - }, - { - "x": 20.09051, - "y": 9.33872 - }, - { - "x": -8.85235, - "y": 13.48051 - }, - { - "x": 4.209417, - "y": 17.801070000000006 - }, - { - "x": 10.57944, - "y": 13.80524 - }, - { - "x": 1.86462, - "y": 11.39824 - }, - { - "x": 10.84852, - "y": 18.48534 - }, - { - "x": -0.7703359000000001, - "y": 24.88074 - }, - { - "x": 14.36989, - "y": 10.3415 - }, - { - "x": 1.489437, - "y": -4.19631 - }, - { - "x": 26.44959, - "y": 3.562471 - }, - { - "x": -4.266789, - "y": 3.653826 - }, - { - "x": 8.976836, - "y": 18.40393 - }, - { - "x": 20.77485, - "y": 13.18247 - }, - { - "x": 27.63714, - "y": 19.13911 - }, - { - "x": 16.29336, - "y": 8.550991999999999 - }, - { - "x": 16.87829, - "y": 14.83276 - }, - { - "x": 16.82551, - "y": 9.976617 - }, - { - "x": 5.165351, - "y": 6.9856 - }, - { - "x": -0.1216837, - "y": 14.117770000000002 - }, - { - "x": -8.032164999999999, - "y": 11.65195 - }, - { - "x": -0.7711908000000001, - "y": 9.478467 - }, - { - "x": 7.822278, - "y": 4.63563 - }, - { - "x": -2.542693, - "y": 31.29946 - }, - { - "x": 12.41543, - "y": 10.05657 - }, - { - "x": 10.44706, - "y": 6.147121 - }, - { - "x": 10.02766, - "y": 15.330329999999998 - }, - { - "x": 15.52898, - "y": 5.241399 - }, - { - "x": 9.747575, - "y": 11.99029 - }, - { - "x": 19.98159, - "y": 14.5416 - }, - { - "x": 18.364320000000006, - "y": -4.5937800000000015 - }, - { - "x": 13.22721, - "y": 7.873434 - }, - { - "x": -0.5568769, - "y": 6.233604 - }, - { - "x": 7.476011, - "y": 16.644470000000002 - }, - { - "x": -2.541061, - "y": 16.41452 - }, - { - "x": 14.30498, - "y": 11.84888 - }, - { - "x": 3.967357, - "y": 20.72875 - }, - { - "x": 0.2271643, - "y": 29.08483 - }, - { - "x": 11.57322, - "y": 14.5351 - }, - { - "x": 2.318771, - "y": 19.85869 - }, - { - "x": 1.748142, - "y": 10.93859 - }, - { - "x": 17.782529999999994, - "y": 4.558751999999999 - }, - { - "x": -4.290225, - "y": 4.425946 - }, - { - "x": 16.53104, - "y": 4.671925 - }, - { - "x": 7.546088, - "y": 10.27894 - }, - { - "x": 13.152029999999998, - "y": 8.540096 - }, - { - "x": 0.5304746, - "y": 18.33461 - }, - { - "x": 21.35885, - "y": 27.10033 - }, - { - "x": -0.5274979999999999, - "y": 17.29681 - }, - { - "x": 12.94586, - "y": 12.23683 - }, - { - "x": 20.56008, - "y": -0.5277433000000001 - }, - { - "x": 0.369141, - "y": -4.90859 - }, - { - "x": 10.88581, - "y": -2.084885 - }, - { - "x": 1.047853, - "y": 14.6625 - }, - { - "x": 17.284689999999998, - "y": 1.17794 - }, - { - "x": 8.224514, - "y": 18.21265 - }, - { - "x": 18.79663, - "y": 1.558912 - }, - { - "x": 2.294629, - "y": 11.46264 - }, - { - "x": 13.16382, - "y": 15.70806 - }, - { - "x": 11.96874, - "y": 22.31844 - }, - { - "x": 18.1468, - "y": 1.836594 - }, - { - "x": 6.30985, - "y": 10.4237 - }, - { - "x": 12.49809, - "y": 13.02343 - }, - { - "x": 6.254294, - "y": 28.35686 - }, - { - "x": 20.57987, - "y": 19.25847000000001 - }, - { - "x": -0.675866, - "y": 6.132365 - }, - { - "x": -2.52902, - "y": 29.84877 - }, - { - "x": 2.531129, - "y": 31.62439 - }, - { - "x": 16.98884, - "y": 14.57923 - }, - { - "x": 2.599834, - "y": 20.39453 - }, - { - "x": 6.326382, - "y": 0.826507 - }, - { - "x": 13.8971, - "y": 7.505789999999997 - }, - { - "x": -5.493487, - "y": 19.43579 - }, - { - "x": 21.96003, - "y": 24.61082 - }, - { - "x": 7.303667, - "y": 2.841022 - }, - { - "x": 22.35765, - "y": 1.493998 - }, - { - "x": 2.104918, - "y": 5.705926 - }, - { - "x": 26.18462, - "y": -9.62667 - }, - { - "x": 20.80766, - "y": 10.34603 - }, - { - "x": 10.57028, - "y": 34.39865 - }, - { - "x": -7.880563, - "y": 13.95659 - }, - { - "x": 6.534681, - "y": 16.05914 - }, - { - "x": 6.421189, - "y": 22.4082 - }, - { - "x": 2.5363290000000003, - "y": 2.955975 - }, - { - "x": 17.029429999999998, - "y": 29.76824 - }, - { - "x": -0.4862340999999999, - "y": 12.23679 - }, - { - "x": 1.188364, - "y": 8.102704 - }, - { - "x": -3.906957, - "y": 5.578883 - }, - { - "x": 5.441873, - "y": 5.874897 - }, - { - "x": 18.66013, - "y": -4.470882 - }, - { - "x": 13.33514, - "y": 3.557717 - }, - { - "x": 24.12527, - "y": 18.52547 - }, - { - "x": 12.98691, - "y": 17.43439 - }, - { - "x": 13.358770000000002, - "y": 9.173119 - }, - { - "x": 13.41857, - "y": -0.07619125 - }, - { - "x": 5.2243559999999984, - "y": 22.71993 - }, - { - "x": 10.34212, - "y": 16.27103 - }, - { - "x": -0.3693704, - "y": 11.25666 - }, - { - "x": 12.91639, - "y": 31.99353 - }, - { - "x": 0.9090181, - "y": 24.91849 - }, - { - "x": -1.409272, - "y": 9.203924 - }, - { - "x": -4.365977, - "y": 16.916610000000002 - }, - { - "x": 10.25595, - "y": 22.35262 - }, - { - "x": 12.43669, - "y": 10.23768 - }, - { - "x": -1.170456, - "y": 15.72802 - }, - { - "x": -6.2296010000000015, - "y": 23.02026 - }, - { - "x": 9.663633, - "y": 25.29418 - }, - { - "x": 9.05127, - "y": 12.58227 - }, - { - "x": 0.8767106, - "y": 20.08131 - }, - { - "x": 4.492934, - "y": 16.617639999999998 - }, - { - "x": 15.53079, - "y": 10.37215 - }, - { - "x": 0.789848, - "y": 22.08501 - }, - { - "x": 15.88278, - "y": 10.7026 - }, - { - "x": 15.65385, - "y": 1.855822 - }, - { - "x": 7.006049000000001, - "y": 1.034778 - }, - { - "x": 18.06041, - "y": -0.4099859 - }, - { - "x": 19.50145, - "y": 22.84672 - }, - { - "x": 14.34475, - "y": -0.5536328 - }, - { - "x": 6.584492, - "y": 24.95815 - }, - { - "x": 0.7217060000000001, - "y": 16.4536 - }, - { - "x": 8.034842, - "y": 9.826132 - }, - { - "x": 22.07318, - "y": 10.31959 - }, - { - "x": 8.208789999999999, - "y": 16.102610000000002 - }, - { - "x": -0.6540285, - "y": 7.418589999999999 - }, - { - "x": 33.90343, - "y": 3.274898 - }, - { - "x": 15.558320000000002, - "y": 13.55292 - }, - { - "x": 7.387878, - "y": 15.86786 - }, - { - "x": 5.051225, - "y": 16.534370000000006 - }, - { - "x": 5.229687, - "y": 18.39176 - }, - { - "x": 9.339954, - "y": 9.981995 - }, - { - "x": 14.02917, - "y": 2.41937 - }, - { - "x": 3.084545, - "y": 30.35293 - }, - { - "x": -9.022234, - "y": 3.566726 - }, - { - "x": 8.187902000000001, - "y": 10.07435 - }, - { - "x": 4.389926, - "y": 10.11696 - }, - { - "x": 17.49107, - "y": 9.631412 - }, - { - "x": 25.94192, - "y": 6.535813 - }, - { - "x": 14.06103, - "y": 2.905847 - }, - { - "x": 4.658055, - "y": -5.7647650000000015 - }, - { - "x": 19.84404, - "y": 19.12729 - }, - { - "x": 15.56143, - "y": 9.62353 - }, - { - "x": 7.178256, - "y": 14.85566 - }, - { - "x": 22.64227, - "y": 4.81697 - }, - { - "x": -7.8042880000000014, - "y": -1.111585 - }, - { - "x": -5.118906, - "y": 7.387376 - }, - { - "x": 6.152764, - "y": 14.22517 - }, - { - "x": 8.551857, - "y": 24.93599 - }, - { - "x": 3.134369, - "y": -6.632367 - }, - { - "x": -1.164893, - "y": 18.86306 - }, - { - "x": 29.06922, - "y": 31.39812 - }, - { - "x": 7.826419, - "y": 39.47855 - }, - { - "x": 29.47485, - "y": 32.19725 - } - ] - }, - { - "clusterNr": 1, - "centroid": { - "x": 69.92418447478987, - "y": -10.119641194361344 - }, - "points": [ - { - "x": 36.17882, - "y": -22.1776 - }, - { - "x": 50.97437, - "y": 19.26007 - }, - { - "x": 68.77616, - "y": -23.90883 - }, - { - "x": 56.22534, - "y": -5.294665 - }, - { - "x": 84.62974, - "y": -8.592495 - }, - { - "x": 95.91765, - "y": -17.08491 - }, - { - "x": 66.93266, - "y": -3.231932 - }, - { - "x": 68.5361, - "y": -26.18595 - }, - { - "x": 76.53591, - "y": -3.304326 - }, - { - "x": 76.23439, - "y": -11.4189 - }, - { - "x": 54.16949, - "y": -19.01123 - }, - { - "x": 72.58261999999998, - "y": -16.83923 - }, - { - "x": 81.56219, - "y": -1.6943830000000002 - }, - { - "x": 67.99164, - "y": -17.64808 - }, - { - "x": 64.71255, - "y": -14.86299 - }, - { - "x": 70.76205, - "y": -13.4053 - }, - { - "x": 80.15953, - "y": -1.895146 - }, - { - "x": 64.54890999999999, - "y": -1.18837 - }, - { - "x": 72.76769, - "y": -1.913954 - }, - { - "x": 79.9837, - "y": -20.64003 - }, - { - "x": 79.13871, - "y": 3.93355 - }, - { - "x": 44.28213, - "y": 1.785785 - }, - { - "x": 64.1403, - "y": -9.613207 - }, - { - "x": 59.16926, - "y": 13.10082 - }, - { - "x": 81.54203000000003, - "y": 8.749848 - }, - { - "x": 74.12215, - "y": -22.66961 - }, - { - "x": 69.51984, - "y": -12.94162 - }, - { - "x": 80.76501999999998, - "y": -7.238871 - }, - { - "x": 54.98248, - "y": -5.827399 - }, - { - "x": 63.85516, - "y": -1.502977 - }, - { - "x": 70.24579, - "y": -22.48083 - }, - { - "x": 64.31788, - "y": -12.37871 - }, - { - "x": 86.6356, - "y": -20.3488 - }, - { - "x": 84.94551, - "y": -11.81974 - }, - { - "x": 84.22009, - "y": 0.2136558 - }, - { - "x": 64.29858, - "y": -7.7486380000000015 - }, - { - "x": 78.10973, - "y": -14.83134 - }, - { - "x": 75.86112, - "y": -11.63541 - }, - { - "x": 90.31363, - "y": -6.734307 - }, - { - "x": 62.72575, - "y": -18.50824 - }, - { - "x": 75.54213, - "y": -4.170342 - }, - { - "x": 65.45658, - "y": -10.57994 - }, - { - "x": 61.91086, - "y": -20.55287 - }, - { - "x": 59.13503000000001, - "y": -18.54382 - }, - { - "x": 60.52482, - "y": 4.0029580000000005 - }, - { - "x": 80.68502, - "y": -10.62564 - }, - { - "x": 66.77925, - "y": -6.613982000000001 - }, - { - "x": 66.15932, - "y": -12.41949 - }, - { - "x": 66.32986, - "y": -0.9856625 - }, - { - "x": 63.90113, - "y": -8.54786 - }, - { - "x": 82.86773000000002, - "y": -7.530378 - }, - { - "x": 85.21556, - "y": -24.69871 - }, - { - "x": 67.60797, - "y": 6.669538 - }, - { - "x": 66.35771, - "y": -24.43254 - }, - { - "x": 65.34889, - "y": -16.15385 - }, - { - "x": 95.9356, - "y": -13.87495 - }, - { - "x": 55.30122, - "y": -3.164437 - }, - { - "x": 53.70588000000001, - "y": -22.06458 - }, - { - "x": 58.04943000000001, - "y": -2.860465 - }, - { - "x": 75.83075, - "y": -11.85008 - }, - { - "x": 61.31218000000001, - "y": -19.0784 - }, - { - "x": 77.7234, - "y": -2.877346 - }, - { - "x": 85.97015999999998, - "y": -17.81126 - }, - { - "x": 68.26375999999999, - "y": -19.15556 - }, - { - "x": 77.10473, - "y": -19.01528 - }, - { - "x": 78.19131999999998, - "y": -8.509058 - }, - { - "x": 65.10429, - "y": -3.43562 - }, - { - "x": 79.52807, - "y": -27.63379 - }, - { - "x": 75.18258, - "y": -6.52501 - }, - { - "x": 73.22818000000002, - "y": -3.601662 - }, - { - "x": 67.87865, - "y": 6.6700399999999975 - }, - { - "x": 67.49999, - "y": -3.656658 - }, - { - "x": 68.73451, - "y": -14.8505 - }, - { - "x": 68.80344000000001, - "y": 0.2036219 - }, - { - "x": 70.23388, - "y": -1.111902 - }, - { - "x": 74.11479, - "y": -7.362882000000001 - }, - { - "x": 52.94662, - "y": -26.11158 - }, - { - "x": 61.4234, - "y": 4.10658 - }, - { - "x": 75.64492, - "y": -27.29068 - }, - { - "x": 70.19157, - "y": -15.42674 - }, - { - "x": 57.02136, - "y": -28.37956 - }, - { - "x": 62.74637, - "y": -13.188 - }, - { - "x": 65.85207, - "y": -20.20264 - }, - { - "x": 74.1682, - "y": -9.089777 - }, - { - "x": 69.75043000000001, - "y": -0.3842613 - }, - { - "x": 57.04818, - "y": -16.48449 - }, - { - "x": 78.25997, - "y": -7.99833 - }, - { - "x": 63.72304000000001, - "y": -24.23505 - }, - { - "x": 64.25357, - "y": -12.80524 - }, - { - "x": 60.51129, - "y": -0.3604612 - }, - { - "x": 64.83588, - "y": -2.828358 - }, - { - "x": 64.00904, - "y": -28.74335 - }, - { - "x": 84.36928, - "y": 1.672451 - }, - { - "x": 65.89381999999999, - "y": -9.091981 - }, - { - "x": 66.97235, - "y": -19.93247 - }, - { - "x": 84.08383, - "y": 6.8520119999999975 - }, - { - "x": 68.23765, - "y": 2.762476 - }, - { - "x": 72.25073, - "y": -17.15958 - }, - { - "x": 55.23472, - "y": 3.789266000000002 - }, - { - "x": 75.93697, - "y": -4.40856 - }, - { - "x": 68.67339, - "y": -4.801611 - }, - { - "x": 56.01145, - "y": -17.8486 - }, - { - "x": 77.52585, - "y": -15.70033 - }, - { - "x": 88.95076999999998, - "y": -19.44843 - }, - { - "x": 61.68006999999999, - "y": 8.509057 - }, - { - "x": 94.70014, - "y": -6.385033 - }, - { - "x": 66.70215, - "y": -29.732640000000004 - }, - { - "x": 77.82463, - "y": -10.06171 - }, - { - "x": 87.91064, - "y": -30.96477 - }, - { - "x": 61.9166, - "y": -8.827060000000003 - }, - { - "x": 80.87708, - "y": -0.7162395 - }, - { - "x": 80.89673, - "y": -23.38986 - }, - { - "x": 66.70298000000001, - "y": 4.803512 - }, - { - "x": 63.19015, - "y": -20.61243 - }, - { - "x": 76.81371999999998, - "y": -26.90243 - }, - { - "x": 65.06876, - "y": 4.386009 - }, - { - "x": 95.32207, - "y": -16.98335 - }, - { - "x": 57.72156999999999, - "y": -15.60494 - }, - { - "x": 55.37355, - "y": 0.1582912999999999 - }, - { - "x": 69.38056999999999, - "y": -12.99076 - }, - { - "x": 67.81506, - "y": -4.811255 - }, - { - "x": 76.97593, - "y": -8.36036 - }, - { - "x": 77.27475, - "y": 4.903346 - }, - { - "x": 83.35947, - "y": -22.26367 - }, - { - "x": 61.09789, - "y": -14.29766 - }, - { - "x": 65.82687, - "y": -19.21419 - }, - { - "x": 74.95858, - "y": -4.134062 - }, - { - "x": 62.60687, - "y": 13.20539 - }, - { - "x": 51.71922, - "y": -0.1788583 - }, - { - "x": 74.93252, - "y": -0.5864232 - }, - { - "x": 79.38506, - "y": -19.2217 - }, - { - "x": 75.77722, - "y": -26.50406 - }, - { - "x": 58.46341999999999, - "y": -15.13272 - }, - { - "x": 75.47081, - "y": -22.60266 - }, - { - "x": 44.91439, - "y": -5.197128 - }, - { - "x": 68.68961, - "y": 12.47448 - }, - { - "x": 61.03369, - "y": 0.7950335999999999 - }, - { - "x": 58.83893000000001, - "y": -2.276435 - }, - { - "x": 82.02278000000003, - "y": -8.854353999999997 - }, - { - "x": 70.77445999999998, - "y": -12.75299 - }, - { - "x": 79.77535999999998, - "y": -28.66915 - }, - { - "x": 74.93503, - "y": -3.32777 - }, - { - "x": 72.12925, - "y": -12.27785 - }, - { - "x": 80.84456999999998, - "y": -2.636685 - }, - { - "x": 57.63159, - "y": -1.221671 - }, - { - "x": 80.52416, - "y": 6.845383 - }, - { - "x": 63.2352, - "y": -24.72682 - }, - { - "x": 82.18422, - "y": -29.512190000000004 - }, - { - "x": 97.35694, - "y": -2.163071 - }, - { - "x": 60.78475, - "y": -31.03982 - }, - { - "x": 70.74291, - "y": -22.15998 - }, - { - "x": 74.0169, - "y": 14.51656 - }, - { - "x": 66.91939, - "y": -12.24789 - }, - { - "x": 76.09503000000002, - "y": 4.343312999999998 - }, - { - "x": 81.78097, - "y": -8.727155999999999 - }, - { - "x": 80.09553000000002, - "y": -4.232298 - }, - { - "x": 73.32889, - "y": 1.538375 - }, - { - "x": 62.58947, - "y": 4.468431 - }, - { - "x": 67.35439000000001, - "y": -16.61995 - }, - { - "x": 86.32658, - "y": -14.45837 - }, - { - "x": 71.04987, - "y": -2.683244 - }, - { - "x": 83.78761999999998, - "y": 26.49733 - }, - { - "x": 74.85746999999998, - "y": -5.0595050000000015 - }, - { - "x": 77.72216, - "y": 6.093524 - }, - { - "x": 68.97789, - "y": -4.123292 - }, - { - "x": 59.17706999999999, - "y": -14.73758 - }, - { - "x": 50.49705, - "y": -17.90728 - }, - { - "x": 80.156, - "y": 6.28412 - }, - { - "x": 73.31786, - "y": -9.305126 - }, - { - "x": 59.61196, - "y": -4.425068 - }, - { - "x": 68.88152, - "y": -9.893832000000002 - }, - { - "x": 88.66383, - "y": -7.9094380000000015 - }, - { - "x": 54.22847, - "y": -16.32238 - }, - { - "x": 71.32836, - "y": 2.896152 - }, - { - "x": 77.83041999999998, - "y": -5.410922 - }, - { - "x": 72.29527, - "y": -1.6438080000000002 - }, - { - "x": 60.87722, - "y": -22.1124 - }, - { - "x": 90.33483, - "y": -5.948239 - }, - { - "x": 74.31378000000002, - "y": -20.85082 - }, - { - "x": 73.68491999999998, - "y": -4.392175 - }, - { - "x": 67.73080999999999, - "y": -18.78214 - }, - { - "x": 70.87401, - "y": -13.91332 - }, - { - "x": 58.89813, - "y": -1.263629 - }, - { - "x": 61.02101999999999, - "y": -13.00759 - }, - { - "x": 63.88495, - "y": 4.276434 - }, - { - "x": 60.26458, - "y": 0.7716272 - }, - { - "x": 70.30639000000001, - "y": -11.66815 - }, - { - "x": 73.19178000000002, - "y": -4.823114 - }, - { - "x": 58.26951, - "y": -13.58154 - }, - { - "x": 73.82600000000002, - "y": -5.296698999999999 - }, - { - "x": 76.70215999999998, - "y": -7.703344 - }, - { - "x": 69.07478, - "y": 2.6927380000000003 - }, - { - "x": 55.76127, - "y": -27.63965 - }, - { - "x": 84.63778, - "y": 0.841825 - }, - { - "x": 74.96148000000002, - "y": 11.91875 - }, - { - "x": 57.6636, - "y": -23.91239 - }, - { - "x": 64.04885, - "y": -6.910765 - }, - { - "x": 71.5033, - "y": -0.02369585 - }, - { - "x": 82.15275, - "y": -21.6081 - }, - { - "x": 63.34114, - "y": -25.3215 - }, - { - "x": 73.77465, - "y": -8.064701 - }, - { - "x": 72.78902, - "y": -25.23712 - }, - { - "x": 60.628, - "y": -17.69653 - }, - { - "x": 70.46724, - "y": -13.25096 - }, - { - "x": 71.33598, - "y": -35.30175999999999 - }, - { - "x": 78.18223, - "y": -4.003611 - }, - { - "x": 65.29634, - "y": -14.71507 - }, - { - "x": 79.06381, - "y": -17.52429 - }, - { - "x": 59.79717, - "y": -15.80204 - }, - { - "x": 77.98643, - "y": 0.14855 - }, - { - "x": 79.18679, - "y": -22.84098 - }, - { - "x": 61.1682, - "y": -17.87923 - }, - { - "x": 73.55363, - "y": 3.718564 - }, - { - "x": 71.21540999999998, - "y": -7.743013 - }, - { - "x": 72.69725, - "y": -10.52523 - }, - { - "x": 66.1658, - "y": 8.654269000000001 - }, - { - "x": 66.57901, - "y": -7.96869 - }, - { - "x": 77.53841, - "y": -7.255456 - }, - { - "x": 68.90079, - "y": -1.174505 - }, - { - "x": 75.15744000000002, - "y": -4.303189 - }, - { - "x": 60.93241, - "y": -19.6263 - }, - { - "x": 70.77526999999998, - "y": -15.19386 - }, - { - "x": 61.57277, - "y": -19.84966 - }, - { - "x": 74.40188, - "y": -12.65376 - }, - { - "x": 76.09886999999998, - "y": -8.812416 - }, - { - "x": 63.0071, - "y": 4.700768 - }, - { - "x": 55.08188000000001, - "y": -13.81331 - }, - { - "x": 62.74949, - "y": -7.885534 - }, - { - "x": 69.52172, - "y": -11.22383 - }, - { - "x": 72.21619, - "y": 1.537016 - }, - { - "x": 86.36201, - "y": -19.03397 - }, - { - "x": 57.06537, - "y": -8.751387 - }, - { - "x": 65.3979, - "y": -1.594234 - }, - { - "x": 62.21588000000001, - "y": -17.88168 - }, - { - "x": 66.55029, - "y": -26.34649000000001 - }, - { - "x": 63.71606, - "y": -2.147129 - }, - { - "x": 61.24889, - "y": 11.37515 - }, - { - "x": 67.01504, - "y": -13.9139 - }, - { - "x": 76.54024, - "y": 7.571401 - }, - { - "x": 51.77094, - "y": -18.34046 - }, - { - "x": 85.88293, - "y": 3.30276 - }, - { - "x": 61.10013000000001, - "y": -12.41815 - }, - { - "x": 59.85202, - "y": -5.652476 - }, - { - "x": 75.82624, - "y": -20.09061 - }, - { - "x": 61.68382, - "y": -13.309220000000002 - }, - { - "x": 57.11461, - "y": -14.71895 - }, - { - "x": 77.37225, - "y": -1.998448 - }, - { - "x": 56.9189, - "y": -5.607814 - }, - { - "x": 68.24065999999999, - "y": -16.7783 - }, - { - "x": 70.99341, - "y": -20.21861 - }, - { - "x": 55.90017, - "y": -24.42781 - }, - { - "x": 65.72708, - "y": -12.62672 - }, - { - "x": 86.9104, - "y": -2.218481 - }, - { - "x": 60.30796, - "y": -21.13974 - }, - { - "x": 58.89599000000001, - "y": -13.65608 - }, - { - "x": 64.42315, - "y": 2.896175 - }, - { - "x": 68.26449000000001, - "y": -1.292433 - }, - { - "x": 60.80457, - "y": -16.41014 - }, - { - "x": 74.24806, - "y": -23.90477000000001 - }, - { - "x": 68.40987, - "y": -1.351733 - }, - { - "x": 75.19914, - "y": -17.88874 - }, - { - "x": 53.99338, - "y": -16.79015 - }, - { - "x": 64.66423, - "y": -11.21753 - }, - { - "x": 78.41882, - "y": -8.131473 - }, - { - "x": 90.1256, - "y": -24.57763 - }, - { - "x": 78.52343, - "y": -23.97729 - }, - { - "x": 69.83008000000001, - "y": -6.202702 - }, - { - "x": 76.66716, - "y": -10.95484 - }, - { - "x": 73.33869, - "y": -14.50632 - }, - { - "x": 54.61538, - "y": 0.822026 - }, - { - "x": 75.07177, - "y": 2.72507 - }, - { - "x": 72.55125, - "y": 16.4744 - }, - { - "x": 75.25325, - "y": 4.462008999999999 - }, - { - "x": 63.05424, - "y": -12.70489 - }, - { - "x": 74.84572, - "y": -6.9136380000000015 - }, - { - "x": 81.29542, - "y": -18.13609 - }, - { - "x": 86.43307, - "y": 1.7146 - }, - { - "x": 58.70364, - "y": -4.059786 - }, - { - "x": 50.14929, - "y": -14.31598 - }, - { - "x": 63.98909, - "y": -11.18955 - }, - { - "x": 65.58124000000001, - "y": -11.16373 - }, - { - "x": 78.43384, - "y": 1.611536 - }, - { - "x": 81.6864, - "y": -7.565635 - }, - { - "x": 71.32661, - "y": -24.2114 - }, - { - "x": 56.50423000000001, - "y": -0.6708519000000001 - }, - { - "x": 66.49155, - "y": -11.93227 - }, - { - "x": 77.01996, - "y": -7.084207000000001 - }, - { - "x": 83.91402, - "y": -1.3721299999999998 - }, - { - "x": 69.80927, - "y": -12.62827 - }, - { - "x": 59.75429000000001, - "y": 1.039816 - }, - { - "x": 97.82028, - "y": -16.56395 - }, - { - "x": 91.93916, - "y": -1.150087 - }, - { - "x": 67.92403, - "y": -17.03266 - }, - { - "x": 61.81742, - "y": 9.498615 - }, - { - "x": 71.14845, - "y": -8.638981 - }, - { - "x": 66.59299, - "y": -32.46637 - }, - { - "x": 68.46967, - "y": -30.534990000000004 - }, - { - "x": 75.83458, - "y": -3.566499 - }, - { - "x": 79.48316, - "y": -30.800590000000003 - }, - { - "x": 63.92749, - "y": -11.3843 - }, - { - "x": 67.65975, - "y": -9.337537 - }, - { - "x": 67.92515999999999, - "y": 4.484799 - }, - { - "x": 65.09831, - "y": -11.52629 - }, - { - "x": 70.69653000000002, - "y": -15.150479999999998 - }, - { - "x": 77.50496, - "y": -9.722227 - }, - { - "x": 88.75939, - "y": -10.3208 - }, - { - "x": 66.10896, - "y": -26.77577 - }, - { - "x": 48.80508, - "y": -22.4844 - }, - { - "x": 77.87479, - "y": -5.751227 - }, - { - "x": 74.65789000000002, - "y": -8.919705 - }, - { - "x": 82.11505, - "y": -1.623908 - }, - { - "x": 73.36298000000002, - "y": -14.605429999999998 - }, - { - "x": 71.40567, - "y": -4.340033 - }, - { - "x": 58.62062, - "y": -10.19077 - }, - { - "x": 65.29805999999999, - "y": 2.156136 - }, - { - "x": 72.86081, - "y": -11.82809 - }, - { - "x": 71.3769, - "y": -9.252214 - }, - { - "x": 84.13731999999997, - "y": 8.626088000000001 - }, - { - "x": 70.62952, - "y": -29.13831 - }, - { - "x": 74.71705, - "y": -17.16086 - }, - { - "x": 69.74262, - "y": -8.386807000000001 - }, - { - "x": 72.60228000000002, - "y": -4.416258999999998 - }, - { - "x": 62.13006, - "y": -22.79853 - }, - { - "x": 60.11729, - "y": 11.88867 - }, - { - "x": 76.74555, - "y": -17.363889999999998 - }, - { - "x": 67.41577, - "y": -9.266467 - }, - { - "x": 73.11009, - "y": -23.10049 - }, - { - "x": 79.32548, - "y": -15.70281 - }, - { - "x": 104.3766, - "y": 4.351511 - }, - { - "x": 66.86716, - "y": -19.87777 - }, - { - "x": 89.33103, - "y": -12.80378 - }, - { - "x": 35.74094, - "y": -24.00127 - }, - { - "x": 76.09913, - "y": -18.21636 - }, - { - "x": 69.3201, - "y": -5.764337 - }, - { - "x": 64.45351, - "y": -9.646416 - }, - { - "x": 81.06175, - "y": -21.19148 - }, - { - "x": 58.83277, - "y": -3.300213 - }, - { - "x": 59.77071, - "y": -6.5734270000000015 - }, - { - "x": 69.73292, - "y": -22.09676 - }, - { - "x": 66.791, - "y": -10.47102 - }, - { - "x": 49.65516, - "y": -1.869738 - }, - { - "x": 70.70066, - "y": -15.89514 - }, - { - "x": 72.20053, - "y": -12.37627 - }, - { - "x": 65.95326, - "y": -16.931829999999998 - }, - { - "x": 74.20015, - "y": -14.89715 - }, - { - "x": 72.81212, - "y": -3.046355 - }, - { - "x": 57.88044, - "y": -4.081336 - }, - { - "x": 48.90072, - "y": -21.98084 - }, - { - "x": 61.67483000000001, - "y": 4.149319 - }, - { - "x": 72.80554000000002, - "y": -5.543254 - }, - { - "x": 82.24438, - "y": -8.71373 - }, - { - "x": 68.85194, - "y": -0.9684211 - }, - { - "x": 70.258, - "y": -5.573562 - }, - { - "x": 51.29503, - "y": 3.890627 - }, - { - "x": 71.87862, - "y": 1.95838 - }, - { - "x": 74.26682, - "y": 0.2268598 - }, - { - "x": 73.88967, - "y": -4.138421 - }, - { - "x": 72.43866, - "y": -8.702069999999999 - }, - { - "x": 68.84693, - "y": -4.473853 - }, - { - "x": 67.4579, - "y": -11.51909 - }, - { - "x": 63.23736, - "y": -4.332619 - }, - { - "x": 67.04571999999999, - "y": -8.749687 - }, - { - "x": 61.14106, - "y": -20.12918 - }, - { - "x": 59.06593, - "y": -36.59645 - }, - { - "x": 63.0932, - "y": -9.511965 - }, - { - "x": 64.19505, - "y": -4.122554 - }, - { - "x": 69.14381999999999, - "y": -6.864114999999999 - }, - { - "x": 68.2186, - "y": -13.96171 - }, - { - "x": 80.78811999999998, - "y": -21.61113 - }, - { - "x": 62.15595, - "y": -5.59855 - }, - { - "x": 76.2021, - "y": -0.3535414 - }, - { - "x": 67.71611999999999, - "y": -21.95391 - }, - { - "x": 66.87748, - "y": -13.76373 - }, - { - "x": 81.16841, - "y": -12.7322 - }, - { - "x": 77.52611999999998, - "y": -16.854770000000002 - }, - { - "x": 73.13333, - "y": -14.03496 - }, - { - "x": 62.926080000000006, - "y": -13.9975 - }, - { - "x": 51.79126, - "y": 6.185827 - }, - { - "x": 69.15686, - "y": -9.004087 - }, - { - "x": 62.27294000000001, - "y": -7.576707000000002 - }, - { - "x": 62.86968, - "y": -8.90002 - }, - { - "x": 59.75554, - "y": -18.64859 - }, - { - "x": 55.93825, - "y": -5.324996 - }, - { - "x": 63.37816, - "y": 8.626922 - }, - { - "x": 89.06512, - "y": -18.00787 - }, - { - "x": 59.49207, - "y": -21.839 - }, - { - "x": 63.0717, - "y": 4.1653 - }, - { - "x": 74.18266, - "y": -14.39385 - }, - { - "x": 72.99597, - "y": -21.99502 - }, - { - "x": 74.54878000000002, - "y": 0.68999 - }, - { - "x": 72.79072, - "y": -13.42379 - }, - { - "x": 68.58779, - "y": 0.4890194000000001 - }, - { - "x": 83.4991, - "y": -3.712483 - }, - { - "x": 85.60566, - "y": -2.347389 - }, - { - "x": 49.33336, - "y": -16.45131 - }, - { - "x": 80.25808, - "y": -17.90534 - }, - { - "x": 73.99424, - "y": -3.416731 - }, - { - "x": 71.49039, - "y": -32.68723 - }, - { - "x": 75.56421999999998, - "y": -35.10705 - }, - { - "x": 50.77177, - "y": -5.560257 - }, - { - "x": 63.31959000000001, - "y": 3.695687 - }, - { - "x": 62.63376, - "y": -20.60124 - }, - { - "x": 72.48474, - "y": -9.643281 - }, - { - "x": 55.5865, - "y": -23.30693 - }, - { - "x": 51.66027, - "y": -29.96612 - }, - { - "x": 53.65475, - "y": -5.412205999999999 - }, - { - "x": 89.75272, - "y": -8.296797999999999 - }, - { - "x": 60.46186, - "y": 2.98287 - }, - { - "x": 80.376, - "y": -11.60401 - }, - { - "x": 61.82471999999999, - "y": -13.03964 - }, - { - "x": 73.42504, - "y": -12.02837 - }, - { - "x": 72.77863, - "y": 1.591326 - }, - { - "x": 67.30395, - "y": -22.65711 - }, - { - "x": 71.1454, - "y": -6.820285 - }, - { - "x": 91.37652, - "y": -10.32453 - }, - { - "x": 70.45770999999998, - "y": -2.015341 - }, - { - "x": 65.35571, - "y": -2.156085 - }, - { - "x": 86.14405, - "y": -6.644713 - }, - { - "x": 40.98589000000001, - "y": -20.96894 - }, - { - "x": 85.28412, - "y": -16.273020000000002 - }, - { - "x": 84.69904, - "y": -11.24636 - }, - { - "x": 78.1619, - "y": -22.53974 - }, - { - "x": 63.30449, - "y": -7.1362830000000015 - }, - { - "x": 50.9626, - "y": -0.5868151999999999 - }, - { - "x": 78.5982, - "y": -24.0221 - }, - { - "x": 71.42413, - "y": -15.80383 - }, - { - "x": 73.3584, - "y": 1.431008 - }, - { - "x": 63.5102, - "y": -10.89118 - }, - { - "x": 64.3641, - "y": -38.68109000000001 - }, - { - "x": 79.91314, - "y": -16.899739999999998 - }, - { - "x": 70.61451, - "y": -13.64807 - }, - { - "x": 77.37191, - "y": -29.6917 - }, - { - "x": 62.43318000000001, - "y": 4.515735 - }, - { - "x": 66.53034, - "y": -23.73638 - }, - { - "x": 53.39924, - "y": -8.951078 - }, - { - "x": 82.79706999999998, - "y": -3.406174 - }, - { - "x": 65.8034, - "y": -11.19213 - }, - { - "x": 87.72446, - "y": -1.788042 - }, - { - "x": 68.37876999999999, - "y": -11.21265 - }, - { - "x": 76.46406999999998, - "y": 1.250499 - }, - { - "x": 67.35838000000001, - "y": -1.977294 - }, - { - "x": 89.75777, - "y": -20.19515 - }, - { - "x": 71.4421, - "y": -6.040679 - }, - { - "x": 74.56606, - "y": -8.156191999999999 - }, - { - "x": 68.46404, - "y": -7.4320179999999985 - }, - { - "x": 78.44227, - "y": -13.59282 - }, - { - "x": 73.10613000000002, - "y": 5.701017 - }, - { - "x": 62.34706, - "y": -22.54894 - }, - { - "x": 51.82533, - "y": -14.28696 - }, - { - "x": 70.39661, - "y": -5.694306 - }, - { - "x": 76.49829, - "y": -4.378538 - }, - { - "x": 61.48431, - "y": -16.319029999999998 - }, - { - "x": 61.80351999999999, - "y": 1.297201 - }, - { - "x": 76.0211, - "y": -7.230397999999999 - }, - { - "x": 60.64451, - "y": 7.604861 - }, - { - "x": 71.70814, - "y": -12.86116 - }, - { - "x": 76.83708, - "y": -18.12474 - }, - { - "x": 78.40621999999998, - "y": -18.09712 - }, - { - "x": 68.72024, - "y": -23.95237 - }, - { - "x": 50.06301, - "y": -20.20353 - }, - { - "x": 87.69691999999998, - "y": -11.42972 - }, - { - "x": 86.99996999999998, - "y": 4.574135 - }, - { - "x": 68.19161, - "y": -20.04976 - }, - { - "x": 68.08471, - "y": -28.09651 - }, - { - "x": 64.0625, - "y": -10.7499 - }, - { - "x": 74.93968000000002, - "y": -13.940029999999998 - }, - { - "x": 74.13194, - "y": -7.691431 - }, - { - "x": 67.39908, - "y": -22.57539 - }, - { - "x": 73.78174, - "y": 0.6641589 - }, - { - "x": 55.11437, - "y": -11.70788 - }, - { - "x": 82.80131999999998, - "y": -13.10405 - }, - { - "x": 61.3069, - "y": 7.839162 - }, - { - "x": 66.26919000000001, - "y": -2.282228 - }, - { - "x": 59.19792, - "y": -11.32849 - }, - { - "x": 62.44526, - "y": -30.15219 - }, - { - "x": 49.19779000000001, - "y": -11.71951 - }, - { - "x": 72.94774, - "y": -8.344704 - }, - { - "x": 59.87773000000001, - "y": -5.742763 - }, - { - "x": 73.47509000000002, - "y": -4.283149 - }, - { - "x": 85.36645, - "y": -16.46919 - }, - { - "x": 69.38539, - "y": -1.906945 - }, - { - "x": 62.15073, - "y": -5.052795 - }, - { - "x": 64.23725999999999, - "y": -13.3351 - }, - { - "x": 72.92104, - "y": 0.791644 - }, - { - "x": 77.48227, - "y": -23.13051 - }, - { - "x": 77.34316, - "y": 3.181548 - }, - { - "x": 69.85361, - "y": -9.066127 - }, - { - "x": 70.68101999999998, - "y": -3.58606 - }, - { - "x": 84.16232, - "y": -24.39767 - }, - { - "x": 57.46576, - "y": 4.544233999999999 - }, - { - "x": 63.88039000000001, - "y": 1.74088 - }, - { - "x": 92.76103, - "y": 1.320703 - }, - { - "x": 86.41515, - "y": -12.48442 - }, - { - "x": 63.23813000000001, - "y": 0.6457113 - }, - { - "x": 72.81642, - "y": -17.780910000000006 - }, - { - "x": 52.983230000000006, - "y": 1.240638 - }, - { - "x": 66.03696, - "y": -15.12986 - }, - { - "x": 63.82113, - "y": -8.541133 - }, - { - "x": 84.74937, - "y": -21.77988 - }, - { - "x": 66.82718, - "y": -18.49357 - }, - { - "x": 66.8739, - "y": -7.117552000000001 - }, - { - "x": 90.11309, - "y": -13.73802 - }, - { - "x": 43.88975, - "y": -13.82 - }, - { - "x": 81.08251, - "y": -12.44169 - }, - { - "x": 62.29297, - "y": -16.469920000000002 - }, - { - "x": 58.55329, - "y": -23.56855 - }, - { - "x": 56.00959, - "y": 8.877158999999997 - }, - { - "x": 76.57934, - "y": -6.1733970000000005 - }, - { - "x": 82.2019, - "y": -6.9652970000000005 - }, - { - "x": 73.04178, - "y": -14.76294 - }, - { - "x": 69.56355, - "y": -12.55183 - }, - { - "x": 52.04093, - "y": -14.04998 - }, - { - "x": 73.3532, - "y": -7.7899660000000015 - }, - { - "x": 63.90973, - "y": -12.61178 - }, - { - "x": 50.83435, - "y": -1.439128 - }, - { - "x": 72.19453, - "y": -16.442320000000002 - }, - { - "x": 74.73565, - "y": -25.90802 - }, - { - "x": 68.85865, - "y": -10.91415 - }, - { - "x": 80.10725, - "y": -4.844485 - }, - { - "x": 73.59379, - "y": -2.3005400000000003 - }, - { - "x": 64.91755, - "y": -17.796529999999994 - }, - { - "x": 69.18629, - "y": -1.3457290000000002 - }, - { - "x": 56.67511, - "y": -19.89974 - }, - { - "x": 63.84701, - "y": 7.070253 - }, - { - "x": 73.52853, - "y": -4.305105 - }, - { - "x": 77.77298, - "y": -20.97871 - }, - { - "x": 66.58747, - "y": -16.51202 - }, - { - "x": 74.68619, - "y": -13.78516 - }, - { - "x": 82.44135, - "y": -3.198811 - }, - { - "x": 52.30627, - "y": -19.96528 - }, - { - "x": 69.2922, - "y": -8.165172 - }, - { - "x": 64.40332, - "y": 11.5388 - }, - { - "x": 87.83745, - "y": -5.797536 - }, - { - "x": 73.06475999999998, - "y": 2.346044 - }, - { - "x": 58.63267, - "y": 1.1054 - }, - { - "x": 74.55995, - "y": -14.94582 - }, - { - "x": 74.27044000000002, - "y": -21.81354 - }, - { - "x": 50.25447, - "y": -9.793256 - }, - { - "x": 62.09311999999999, - "y": -22.10528 - }, - { - "x": 87.61305, - "y": 0.8871884 - }, - { - "x": 79.40338, - "y": 3.454682 - }, - { - "x": 77.56643000000003, - "y": 17.25978 - }, - { - "x": 87.67891, - "y": -5.012097 - }, - { - "x": 67.52089000000001, - "y": 0.5997717 - }, - { - "x": 79.92055, - "y": -2.785855 - }, - { - "x": 71.32548, - "y": -6.040786 - }, - { - "x": 57.68811, - "y": -26.8179 - }, - { - "x": 85.23694, - "y": -7.594192999999999 - }, - { - "x": 64.65368000000001, - "y": -8.68329 - }, - { - "x": 61.31142, - "y": 11.2666 - }, - { - "x": 59.06764, - "y": 7.5886520000000015 - }, - { - "x": 87.76017, - "y": -11.61341 - }, - { - "x": 68.24614, - "y": -26.37716 - }, - { - "x": 64.45452, - "y": -2.222824 - }, - { - "x": 65.53308, - "y": -29.09276 - }, - { - "x": 63.89614, - "y": -19.10272 - }, - { - "x": 80.11442, - "y": 13.05422 - }, - { - "x": 53.4408, - "y": -4.50005 - }, - { - "x": 71.92873, - "y": -16.93747 - }, - { - "x": 61.59669, - "y": -10.75492 - }, - { - "x": 66.93093, - "y": -13.782570000000002 - }, - { - "x": 50.34516, - "y": -9.613154 - }, - { - "x": 72.01345, - "y": -13.67514 - }, - { - "x": 83.8145, - "y": -24.73408 - }, - { - "x": 78.27926, - "y": -0.2117255999999999 - }, - { - "x": 63.37316, - "y": -5.140422 - }, - { - "x": 67.56707, - "y": 1.2630940000000002 - }, - { - "x": 78.30575999999998, - "y": -2.315313 - }, - { - "x": 64.15815, - "y": -9.960403 - }, - { - "x": 58.67935, - "y": -5.187703 - }, - { - "x": 84.99193000000002, - "y": -25.74853 - }, - { - "x": 66.11341, - "y": -4.922376 - }, - { - "x": 74.52394, - "y": -1.039614 - }, - { - "x": 70.64279, - "y": -8.465358 - }, - { - "x": 89.6064, - "y": 0.470834 - }, - { - "x": 76.0323, - "y": -3.837667 - }, - { - "x": 75.88329, - "y": -11.40071 - }, - { - "x": 91.41507, - "y": -18.58123 - }, - { - "x": 75.96584, - "y": -5.74556 - }, - { - "x": 56.82018000000001, - "y": -18.1518 - }, - { - "x": 65.26213, - "y": -1.156317 - }, - { - "x": 72.5354, - "y": -20.20325 - }, - { - "x": 42.97974, - "y": -8.860008 - }, - { - "x": 58.11489, - "y": -18.28166 - }, - { - "x": 73.26021999999998, - "y": -11.98803 - }, - { - "x": 77.94697, - "y": -12.41635 - }, - { - "x": 71.2361, - "y": -8.819086 - }, - { - "x": 80.56624000000002, - "y": 7.036737 - }, - { - "x": 88.41405999999998, - "y": -13.11624 - }, - { - "x": 72.93951, - "y": -8.774334 - }, - { - "x": 71.42486, - "y": -6.5686740000000015 - }, - { - "x": 85.37737, - "y": -2.574961 - }, - { - "x": 60.69893, - "y": 4.760236 - }, - { - "x": 84.41388, - "y": -6.6052880000000025 - }, - { - "x": 78.85013000000002, - "y": -11.48461 - }, - { - "x": 72.23626999999998, - "y": -3.3483300000000003 - }, - { - "x": 79.51451, - "y": -7.224457000000001 - }, - { - "x": 70.81756999999998, - "y": -20.52531 - }, - { - "x": 79.3355, - "y": -17.013379999999998 - }, - { - "x": 83.92007, - "y": -18.97531 - }, - { - "x": 64.99888, - "y": -4.225446 - }, - { - "x": 70.30046, - "y": 4.675978 - }, - { - "x": 72.4469, - "y": -14.50134 - }, - { - "x": 65.32914, - "y": -20.57936 - }, - { - "x": 69.68672, - "y": -8.770883999999999 - }, - { - "x": 82.80946999999998, - "y": -2.210701 - }, - { - "x": 66.12637, - "y": -24.65817 - }, - { - "x": 74.31614, - "y": 0.4964872 - }, - { - "x": 62.74274000000001, - "y": -19.14187 - }, - { - "x": 66.71625, - "y": -1.28301 - }, - { - "x": 52.76581, - "y": 2.2495990000000003 - }, - { - "x": 64.23697, - "y": 2.673515 - }, - { - "x": 82.93061999999998, - "y": -20.18061 - }, - { - "x": 36.50027, - "y": -21.49223 - }, - { - "x": 103.9198, - "y": -25.94061 - }, - { - "x": 78.92066, - "y": -12.20063 - }, - { - "x": 71.31289, - "y": 4.6782650000000015 - }, - { - "x": 70.89019, - "y": 15.4043 - }, - { - "x": 87.70451, - "y": -15.3165 - }, - { - "x": 58.66569000000001, - "y": -4.894761 - }, - { - "x": 65.94133000000001, - "y": -0.4717233 - }, - { - "x": 53.61496999999999, - "y": -20.94196 - }, - { - "x": 80.81969000000002, - "y": -30.37179 - }, - { - "x": 67.59589, - "y": -2.237453 - }, - { - "x": 70.45368, - "y": -14.35 - }, - { - "x": 52.61427, - "y": -5.968235 - }, - { - "x": 67.05726999999999, - "y": -18.36929 - }, - { - "x": 80.33527, - "y": 10.0038 - }, - { - "x": 65.81659, - "y": -7.6953960000000015 - }, - { - "x": 58.66797, - "y": -6.653395 - }, - { - "x": 63.55366, - "y": -33.60001 - }, - { - "x": 72.77927, - "y": -2.6015200000000003 - }, - { - "x": 70.05731, - "y": -6.740457000000001 - }, - { - "x": 63.67471, - "y": -19.57441 - }, - { - "x": 61.41443, - "y": -12.56155 - }, - { - "x": 59.91931, - "y": -11.40836 - }, - { - "x": 54.54313000000001, - "y": -9.975537 - }, - { - "x": 70.58784, - "y": -9.452148 - }, - { - "x": 53.50131999999999, - "y": -11.88279 - }, - { - "x": 72.78958, - "y": -28.22006 - }, - { - "x": 76.30181, - "y": -6.2316720000000005 - }, - { - "x": 51.48873, - "y": -31.35942 - }, - { - "x": 82.67635, - "y": -19.14385 - }, - { - "x": 64.73662, - "y": -20.46305 - }, - { - "x": 89.92531, - "y": -10.70861 - }, - { - "x": 82.33731999999998, - "y": -6.081996 - }, - { - "x": 67.7835, - "y": -13.78307 - }, - { - "x": 82.0141, - "y": 8.581901 - }, - { - "x": 65.64449, - "y": -3.324757 - }, - { - "x": 58.89835, - "y": -22.79558 - }, - { - "x": 50.28286, - "y": 4.203121 - }, - { - "x": 68.29051, - "y": -13.59784 - }, - { - "x": 85.31325, - "y": -9.977645 - }, - { - "x": 93.10153, - "y": -14.48068 - }, - { - "x": 64.6744, - "y": -1.08624 - }, - { - "x": 72.97454, - "y": 0.8260531999999999 - }, - { - "x": 74.51595999999998, - "y": -9.207847 - }, - { - "x": 68.41306, - "y": -2.750809 - }, - { - "x": 75.30674, - "y": -4.204458 - }, - { - "x": 53.84029, - "y": -12.40979 - }, - { - "x": 67.35263, - "y": -0.3542485999999999 - }, - { - "x": 67.39329000000001, - "y": -32.9488 - }, - { - "x": 56.93941, - "y": -4.871946 - }, - { - "x": 69.12279000000001, - "y": 5.317039 - }, - { - "x": 57.22761, - "y": -5.167954 - }, - { - "x": 76.05929, - "y": -5.5695260000000015 - }, - { - "x": 59.81583000000001, - "y": -4.150285 - }, - { - "x": 64.30556999999999, - "y": -27.2714 - }, - { - "x": 59.1149, - "y": -16.25977 - }, - { - "x": 91.61397, - "y": -12.11007 - }, - { - "x": 78.31008, - "y": -16.3773 - }, - { - "x": 68.59947, - "y": 0.7928145000000001 - }, - { - "x": 68.01685, - "y": 1.1088870000000002 - }, - { - "x": 82.84614, - "y": -12.49169 - }, - { - "x": 49.51263, - "y": -0.5111645 - }, - { - "x": 69.8973, - "y": -34.17 - }, - { - "x": 84.17336999999998, - "y": -4.631359 - }, - { - "x": 78.89444, - "y": -24.29788 - }, - { - "x": 70.69758, - "y": 9.444025 - }, - { - "x": 61.77013, - "y": -19.68894 - }, - { - "x": 78.0163, - "y": 4.23549 - }, - { - "x": 73.54946, - "y": -16.099420000000002 - }, - { - "x": 55.73493000000001, - "y": -12.74454 - }, - { - "x": 65.89819, - "y": 13.69386 - }, - { - "x": 57.39889, - "y": -13.82744 - }, - { - "x": 63.04364, - "y": -27.31653 - }, - { - "x": 90.12375, - "y": -18.2544 - }, - { - "x": 64.38116, - "y": -23.61167 - }, - { - "x": 63.44825, - "y": -5.62352 - }, - { - "x": 72.94678, - "y": -17.25217 - }, - { - "x": 52.57834, - "y": -13.12009 - }, - { - "x": 63.63273, - "y": 5.738944 - }, - { - "x": 71.99254, - "y": -10.99059 - }, - { - "x": 72.39277, - "y": -4.811533 - }, - { - "x": 79.11701, - "y": -4.512673 - }, - { - "x": 51.93237, - "y": -17.866229999999995 - }, - { - "x": 70.43403, - "y": -21.59988 - }, - { - "x": 73.80844, - "y": -2.224638 - }, - { - "x": 81.84084, - "y": -19.73066 - }, - { - "x": 60.51824000000001, - "y": -7.986828999999997 - }, - { - "x": 76.27816999999997, - "y": -26.23452 - }, - { - "x": 72.43248, - "y": -18.91511 - }, - { - "x": 68.76535, - "y": 1.418947 - }, - { - "x": 60.72785, - "y": 2.763541 - }, - { - "x": 68.29949, - "y": -11.58326 - }, - { - "x": 71.62149000000002, - "y": -26.87554 - }, - { - "x": 70.59952, - "y": -5.845408 - }, - { - "x": 80.10539, - "y": -10.8262 - }, - { - "x": 70.75399, - "y": 10.09409 - }, - { - "x": 61.23998, - "y": -21.44423 - }, - { - "x": 68.3528, - "y": 8.337489 - }, - { - "x": 61.51666, - "y": -12.43442 - }, - { - "x": 71.43109, - "y": -0.0061483519999999 - }, - { - "x": 62.02735, - "y": -24.19875 - }, - { - "x": 61.78095, - "y": 1.968633 - }, - { - "x": 98.66974, - "y": -2.164127 - }, - { - "x": 73.01436, - "y": -1.7224549999999998 - }, - { - "x": 82.94384000000002, - "y": -0.9408177 - }, - { - "x": 80.52203, - "y": -13.20871 - }, - { - "x": 53.52886, - "y": -3.686721 - }, - { - "x": 70.67194, - "y": -0.7722773 - }, - { - "x": 56.81425, - "y": -13.704579999999998 - }, - { - "x": 72.37652, - "y": -26.52538 - }, - { - "x": 49.83153, - "y": -8.861414 - }, - { - "x": 70.16466, - "y": -18.97082 - }, - { - "x": 72.25542, - "y": 17.13289 - }, - { - "x": 69.0665, - "y": 2.742776 - }, - { - "x": 57.83613, - "y": -1.477452 - }, - { - "x": 75.97397, - "y": -22.84942 - }, - { - "x": 68.33255, - "y": 0.6976613 - }, - { - "x": 60.67356, - "y": -8.95394 - }, - { - "x": 61.20472, - "y": -14.9268 - }, - { - "x": 65.426, - "y": -8.987577 - }, - { - "x": 77.37339, - "y": -3.91479 - }, - { - "x": 65.88091, - "y": -24.6382 - }, - { - "x": 68.68375999999999, - "y": -26.48481 - }, - { - "x": 83.17385, - "y": -11.66942 - }, - { - "x": 69.57141999999999, - "y": -1.19085 - }, - { - "x": 87.76274000000002, - "y": -12.09585 - }, - { - "x": 64.25253000000001, - "y": -4.659249 - }, - { - "x": 58.7633, - "y": -9.553751 - }, - { - "x": 87.6779, - "y": -14.57468 - }, - { - "x": 84.77951999999998, - "y": -28.19338 - }, - { - "x": 44.48759, - "y": -28.91912 - }, - { - "x": 71.15801, - "y": -4.96975 - }, - { - "x": 81.11289000000002, - "y": 1.820294 - }, - { - "x": 69.6739, - "y": -13.50128 - }, - { - "x": 77.81984, - "y": -29.2818 - }, - { - "x": 74.59189, - "y": -6.9690179999999975 - }, - { - "x": 87.18534, - "y": -7.561814 - }, - { - "x": 80.60636, - "y": 4.6757800000000005 - }, - { - "x": 84.97686999999998, - "y": -20.77276 - }, - { - "x": 79.38887, - "y": 18.96587 - }, - { - "x": 73.09005, - "y": -9.938504 - }, - { - "x": 83.21137, - "y": -35.36076 - }, - { - "x": 54.64416, - "y": -10.79429 - }, - { - "x": 73.64229, - "y": -16.80874 - }, - { - "x": 68.84037, - "y": -3.089466 - }, - { - "x": 75.82528, - "y": -25.17796 - }, - { - "x": 77.2142, - "y": -21.172320000000006 - }, - { - "x": 62.69973, - "y": -11.28403 - }, - { - "x": 65.87854, - "y": -18.35437 - }, - { - "x": 65.8312, - "y": -12.80048 - }, - { - "x": 69.75814, - "y": -6.189078 - }, - { - "x": 68.61625, - "y": -15.98461 - }, - { - "x": 64.98134, - "y": -16.78327 - }, - { - "x": 64.85876, - "y": -9.286581 - }, - { - "x": 66.79545999999999, - "y": -17.6295 - }, - { - "x": 43.56437, - "y": -14.07815 - }, - { - "x": 68.28453, - "y": -0.05283603 - }, - { - "x": 53.97722, - "y": -18.11732 - }, - { - "x": 72.37554, - "y": -14.15102 - }, - { - "x": 45.12958, - "y": 6.069386 - }, - { - "x": 79.23594, - "y": -7.783266999999999 - }, - { - "x": 67.89267, - "y": -20.79489 - }, - { - "x": 77.45593000000002, - "y": -6.610436999999999 - }, - { - "x": 67.28255, - "y": -3.456408 - }, - { - "x": 77.23093, - "y": -4.179791000000002 - }, - { - "x": 77.14531, - "y": -16.250220000000002 - }, - { - "x": 60.35104000000001, - "y": -16.18723 - }, - { - "x": 65.31193, - "y": -16.61032 - }, - { - "x": 77.93611, - "y": -32.70189 - }, - { - "x": 79.88167, - "y": -9.25513 - }, - { - "x": 64.06411999999999, - "y": -5.0536650000000005 - }, - { - "x": 55.65335, - "y": -2.3524540000000003 - }, - { - "x": 60.33708000000001, - "y": -0.5121532 - }, - { - "x": 69.20068, - "y": -13.57959 - }, - { - "x": 62.69723000000001, - "y": -10.16704 - }, - { - "x": 66.39989, - "y": -5.404058 - }, - { - "x": 60.86256, - "y": -17.942429999999995 - }, - { - "x": 74.03130999999998, - "y": -25.69833 - }, - { - "x": 82.44264, - "y": -17.38876 - }, - { - "x": 71.05726999999997, - "y": -20.94383 - }, - { - "x": 80.91493, - "y": -5.505733 - }, - { - "x": 74.19766, - "y": -3.398674 - }, - { - "x": 73.76104000000002, - "y": -9.804844 - }, - { - "x": 69.15085, - "y": -27.33672 - }, - { - "x": 73.74459, - "y": -22.24747 - }, - { - "x": 93.63296, - "y": -10.36324 - }, - { - "x": 72.05005, - "y": -1.98867 - }, - { - "x": 79.09496999999998, - "y": -17.7693 - }, - { - "x": 52.66147, - "y": -12.10119 - }, - { - "x": 91.25622, - "y": -26.76765 - }, - { - "x": 69.69169000000001, - "y": -7.789096000000002 - }, - { - "x": 47.71091, - "y": -6.095375 - }, - { - "x": 55.00807, - "y": 11.56722 - }, - { - "x": 67.68167, - "y": -9.785644 - }, - { - "x": 65.44644, - "y": -12.13077 - }, - { - "x": 84.56817, - "y": -6.077383 - }, - { - "x": 97.56903, - "y": -14.44639 - }, - { - "x": 53.24851999999999, - "y": -11.41788 - }, - { - "x": 67.16991, - "y": -4.073038 - }, - { - "x": 62.42045, - "y": -16.2767 - }, - { - "x": 59.63564, - "y": -37.79037 - }, - { - "x": 78.52355, - "y": -6.868666 - }, - { - "x": 68.07284, - "y": -9.450905 - }, - { - "x": 64.40905, - "y": -17.325689999999998 - }, - { - "x": 83.58873, - "y": -10.16413 - }, - { - "x": 83.71054000000002, - "y": -7.567408 - }, - { - "x": 76.59971999999998, - "y": -8.598391000000001 - }, - { - "x": 65.59871, - "y": -5.515496 - }, - { - "x": 64.16530999999999, - "y": -8.239429 - }, - { - "x": 72.31848000000002, - "y": -28.37739 - }, - { - "x": 72.89074000000002, - "y": -13.08401 - }, - { - "x": 71.85983, - "y": -7.281507 - }, - { - "x": 74.98594, - "y": 4.9548 - }, - { - "x": 68.01299, - "y": -12.93427 - }, - { - "x": 71.72321, - "y": -7.872746 - }, - { - "x": 85.0203, - "y": -22.10981 - }, - { - "x": 66.09438, - "y": 0.7196266 - }, - { - "x": 85.76525, - "y": -15.941579999999998 - }, - { - "x": 75.29033000000003, - "y": -20.52493 - }, - { - "x": 69.05731, - "y": -16.42671 - }, - { - "x": 84.21595, - "y": -13.29946 - }, - { - "x": 69.43209, - "y": -7.778992999999999 - }, - { - "x": 69.3489, - "y": -16.70996 - }, - { - "x": 67.49600000000001, - "y": 0.7695373000000001 - }, - { - "x": 54.37956, - "y": -2.373576 - }, - { - "x": 55.37194, - "y": -8.759966 - }, - { - "x": 65.99169, - "y": -4.956535 - }, - { - "x": 82.59654, - "y": -29.846390000000003 - }, - { - "x": 80.10463, - "y": -11.9095 - }, - { - "x": 62.44377, - "y": -16.1361 - }, - { - "x": 87.34288000000002, - "y": -11.94191 - }, - { - "x": 63.13534, - "y": -32.47361 - }, - { - "x": 80.38441999999998, - "y": -12.19301 - }, - { - "x": 53.62364, - "y": -20.69438 - }, - { - "x": 70.99268000000002, - "y": -3.2878010000000004 - }, - { - "x": 92.67575, - "y": -16.184620000000002 - }, - { - "x": 65.15415, - "y": -7.422444 - }, - { - "x": 79.33412, - "y": -22.18659 - }, - { - "x": 69.03038000000001, - "y": -13.70663 - }, - { - "x": 85.09824, - "y": -11.31437 - }, - { - "x": 75.07559, - "y": -1.20056 - }, - { - "x": 74.90408000000002, - "y": -31.59422 - }, - { - "x": 51.66653, - "y": 5.640219999999999 - }, - { - "x": 77.56271, - "y": -12.51884 - }, - { - "x": 83.9768, - "y": -15.20381 - }, - { - "x": 52.63898, - "y": 0.2466355 - }, - { - "x": 64.80269, - "y": -19.89357 - }, - { - "x": 60.91486999999999, - "y": -5.64697 - }, - { - "x": 76.31144, - "y": -13.2713 - }, - { - "x": 72.70005, - "y": -17.95129 - }, - { - "x": 54.85474, - "y": -4.231365 - }, - { - "x": 60.46303, - "y": -11.15464 - }, - { - "x": 73.09839000000002, - "y": -14.09135 - }, - { - "x": 58.33049000000001, - "y": -24.54733 - }, - { - "x": 78.08799, - "y": 4.297182 - }, - { - "x": 61.18767, - "y": -32.67201 - }, - { - "x": 76.27331, - "y": -27.69607 - }, - { - "x": 67.0222, - "y": -35.01962 - }, - { - "x": 83.54788, - "y": 1.910021 - }, - { - "x": 54.19945, - "y": -13.45955 - }, - { - "x": 67.80528000000001, - "y": 4.444605 - }, - { - "x": 87.90198000000002, - "y": 14.85406 - }, - { - "x": 62.05761, - "y": -0.1845935 - }, - { - "x": 67.43387, - "y": -4.600472 - }, - { - "x": 51.20422, - "y": -7.373769999999999 - }, - { - "x": 83.53147, - "y": -4.596114 - }, - { - "x": 63.07033000000001, - "y": -10.09449 - }, - { - "x": 62.59971, - "y": -7.99627 - }, - { - "x": 68.3894, - "y": -1.819404 - }, - { - "x": 75.60424, - "y": -8.007767 - }, - { - "x": 51.39455, - "y": -7.560444 - }, - { - "x": 54.05743, - "y": -30.14147 - }, - { - "x": 54.21433, - "y": 0.976269 - }, - { - "x": 66.1136, - "y": -2.307693 - }, - { - "x": 72.98232, - "y": -21.41706 - }, - { - "x": 63.47237, - "y": 0.4243742 - }, - { - "x": 67.75565999999999, - "y": -3.700921 - }, - { - "x": 59.91526999999999, - "y": -4.502811 - }, - { - "x": 59.59558000000001, - "y": 19.35797 - }, - { - "x": 74.9352, - "y": 2.191131 - }, - { - "x": 59.33881, - "y": -18.74531 - }, - { - "x": 79.36211999999998, - "y": 5.214438 - }, - { - "x": 82.11814, - "y": -13.61926 - }, - { - "x": 83.82712, - "y": -38.7955 - }, - { - "x": 74.61884, - "y": -11.33446 - }, - { - "x": 61.73203, - "y": -5.572901 - }, - { - "x": 68.48676999999999, - "y": -23.12137 - }, - { - "x": 69.30094, - "y": -27.30873 - }, - { - "x": 56.70621, - "y": -17.45695 - }, - { - "x": 71.53534, - "y": 0.8623791999999999 - }, - { - "x": 76.21033, - "y": 7.055012 - }, - { - "x": 63.84636, - "y": -17.7283 - }, - { - "x": 66.25222, - "y": -3.913034 - }, - { - "x": 81.44768, - "y": -24.24757 - }, - { - "x": 62.67937, - "y": -20.08821 - }, - { - "x": 54.33532, - "y": 1.649464 - }, - { - "x": 75.66274, - "y": -15.75875 - }, - { - "x": 80.03555, - "y": -14.61174 - }, - { - "x": 60.50964000000001, - "y": -18.80588 - }, - { - "x": 69.59801999999999, - "y": -15.57155 - }, - { - "x": 63.66285, - "y": -30.48215 - }, - { - "x": 56.05253, - "y": -7.357508 - }, - { - "x": 64.07648, - "y": -4.398561 - }, - { - "x": 64.70491, - "y": -10.37657 - }, - { - "x": 80.56889, - "y": 14.50799 - }, - { - "x": 86.61128000000002, - "y": -7.867749000000001 - }, - { - "x": 76.73148, - "y": -16.839389999999998 - }, - { - "x": 68.25068, - "y": -7.1420020000000015 - }, - { - "x": 83.53589000000002, - "y": -22.03176 - }, - { - "x": 84.63376, - "y": -10.65431 - }, - { - "x": 59.70858000000001, - "y": -7.02261 - }, - { - "x": 66.62059, - "y": 0.2782472 - }, - { - "x": 79.4429, - "y": -20.8802 - }, - { - "x": 59.14149000000001, - "y": -3.268589 - }, - { - "x": 62.93142, - "y": -9.67255 - }, - { - "x": 76.28171, - "y": 6.197267 - }, - { - "x": 81.7813, - "y": -17.89441 - }, - { - "x": 49.64519, - "y": -20.29111 - }, - { - "x": 58.37999, - "y": -12.982 - }, - { - "x": 74.68241, - "y": -22.74285 - }, - { - "x": 88.04621999999998, - "y": 2.73894 - }, - { - "x": 41.72015, - "y": -7.237918 - }, - { - "x": 61.91275, - "y": -12.98729 - }, - { - "x": 74.79148, - "y": -17.63764 - }, - { - "x": 61.99087, - "y": -15.7656 - }, - { - "x": 82.01159, - "y": -18.70377 - }, - { - "x": 78.71038, - "y": -15.10186 - }, - { - "x": 85.51906, - "y": -22.09427 - }, - { - "x": 76.5364, - "y": -11.39254 - }, - { - "x": 48.34201, - "y": -9.15055 - }, - { - "x": 69.69287, - "y": -7.0676289999999975 - }, - { - "x": 79.86285, - "y": -16.01771 - }, - { - "x": 69.80298, - "y": 4.93805 - }, - { - "x": 83.65175, - "y": -18.73922 - }, - { - "x": 85.6528, - "y": -6.461061 - }, - { - "x": 82.77088, - "y": -2.3732990000000003 - }, - { - "x": 64.46531999999999, - "y": -10.50136 - }, - { - "x": 90.72282, - "y": -12.25584 - }, - { - "x": 64.87976, - "y": -24.87731 - } - ] - }, - { - "clusterNr": 2, - "centroid": { - "x": 40.68362784160133, - "y": 59.7158927415144 - }, - "points": [ - { - "x": 24.2999, - "y": 40.42887 - }, - { - "x": 37.48364, - "y": 34.12808 - }, - { - "x": 48.1905, - "y": 56.00666999999999 - }, - { - "x": 48.32863, - "y": 76.0944 - }, - { - "x": 31.44145, - "y": 62.66712 - }, - { - "x": 37.60916, - "y": 64.75492 - }, - { - "x": 52.68577, - "y": 71.53609 - }, - { - "x": 48.723, - "y": 83.29384 - }, - { - "x": 31.85518, - "y": 59.354380000000006 - }, - { - "x": 55.55334000000001, - "y": 57.31956 - }, - { - "x": 29.06337000000001, - "y": 49.34992 - }, - { - "x": 50.45302, - "y": 78.01416 - }, - { - "x": 33.5429, - "y": 51.27797 - }, - { - "x": 45.11086, - "y": 46.34557 - }, - { - "x": 43.73054000000001, - "y": 67.13846 - }, - { - "x": 55.90229, - "y": 44.41355 - }, - { - "x": 35.51136, - "y": 63.02239 - }, - { - "x": 36.66438, - "y": 60.00176999999999 - }, - { - "x": 39.22292, - "y": 42.76795 - }, - { - "x": 25.76358, - "y": 72.0769 - }, - { - "x": 42.31278, - "y": 66.04035 - }, - { - "x": 46.66542000000001, - "y": 58.45405 - }, - { - "x": 57.76221, - "y": 50.79996 - }, - { - "x": 53.64062, - "y": 53.19439000000001 - }, - { - "x": 55.59307, - "y": 72.58209000000002 - }, - { - "x": 34.6382, - "y": 62.93818 - }, - { - "x": 68.81378000000001, - "y": 49.40914 - }, - { - "x": 38.22668, - "y": 55.08212 - }, - { - "x": 42.41835, - "y": 73.77797 - }, - { - "x": 44.42384000000001, - "y": 52.0499 - }, - { - "x": 32.44594, - "y": 52.46474 - }, - { - "x": 43.85302, - "y": 49.00594 - }, - { - "x": 52.93561, - "y": 51.52707 - }, - { - "x": 46.05927, - "y": 70.18995 - }, - { - "x": 44.43309, - "y": 58.9645 - }, - { - "x": 53.3247, - "y": 66.99565 - }, - { - "x": 54.93488000000001, - "y": 52.0303 - }, - { - "x": 44.00335, - "y": 60.1725 - }, - { - "x": 38.54234, - "y": 53.11563 - }, - { - "x": 26.89144000000001, - "y": 60.17693000000001 - }, - { - "x": 27.22742, - "y": 47.07473 - }, - { - "x": 24.60301, - "y": 58.44653 - }, - { - "x": 45.18391, - "y": 69.45772 - }, - { - "x": 35.58807, - "y": 73.17408 - }, - { - "x": 28.12908, - "y": 44.06283 - }, - { - "x": 39.83815, - "y": 48.70388 - }, - { - "x": 40.05444, - "y": 79.05227 - }, - { - "x": 54.45571999999999, - "y": 49.34488 - }, - { - "x": 58.99003, - "y": 59.51809 - }, - { - "x": 47.31255, - "y": 47.80124 - }, - { - "x": 46.05767, - "y": 70.08161 - }, - { - "x": 51.1862, - "y": 60.57783000000001 - }, - { - "x": 58.01156999999999, - "y": 62.87727 - }, - { - "x": 31.051240000000004, - "y": 61.88555 - }, - { - "x": 32.63545, - "y": 43.24568 - }, - { - "x": 59.21907, - "y": 75.16453 - }, - { - "x": 40.6654, - "y": 81.79757 - }, - { - "x": 35.82676, - "y": 67.83398000000001 - }, - { - "x": 49.35519, - "y": 75.29319 - }, - { - "x": 57.81302, - "y": 55.61863 - }, - { - "x": 36.07083, - "y": 51.26997 - }, - { - "x": 33.88886, - "y": 48.83694000000001 - }, - { - "x": 38.75301, - "y": 68.91596 - }, - { - "x": 44.30184000000001, - "y": 53.37654000000001 - }, - { - "x": 43.40867, - "y": 62.64091 - }, - { - "x": 36.25078, - "y": 46.24887 - }, - { - "x": 35.66046, - "y": 40.16179 - }, - { - "x": 44.1886, - "y": 74.18132 - }, - { - "x": 42.35297, - "y": 68.86938 - }, - { - "x": 59.72761, - "y": 71.64868 - }, - { - "x": 41.7742, - "y": 74.69192 - }, - { - "x": 39.48583, - "y": 58.30031999999999 - }, - { - "x": 46.18587, - "y": 49.02519 - }, - { - "x": 32.8916, - "y": 50.17133 - }, - { - "x": 31.03531, - "y": 72.2532 - }, - { - "x": 47.2611, - "y": 67.1427 - }, - { - "x": 43.63065, - "y": 63.04766 - }, - { - "x": 43.20379000000001, - "y": 57.58694000000001 - }, - { - "x": 34.45682, - "y": 54.82336 - }, - { - "x": 36.08501, - "y": 68.00059 - }, - { - "x": 55.93224, - "y": 63.07734 - }, - { - "x": 30.01013, - "y": 67.8034 - }, - { - "x": 40.17444, - "y": 50.23319 - }, - { - "x": 40.51248, - "y": 61.16069 - }, - { - "x": 44.84228, - "y": 59.17143000000001 - }, - { - "x": 44.95826, - "y": 65.09772 - }, - { - "x": 49.34734, - "y": 52.56688000000001 - }, - { - "x": 24.18327, - "y": 63.48712 - }, - { - "x": 41.57294, - "y": 48.41452 - }, - { - "x": 36.97141, - "y": 65.02328 - }, - { - "x": 39.83944, - "y": 49.22476 - }, - { - "x": 39.42764, - "y": 46.07249 - }, - { - "x": 33.85577, - "y": 58.8609 - }, - { - "x": 32.444520000000004, - "y": 46.98045 - }, - { - "x": 35.12357, - "y": 78.56973 - }, - { - "x": 36.99186, - "y": 63.62753000000001 - }, - { - "x": 44.04283, - "y": 69.94757 - }, - { - "x": 47.66477, - "y": 59.80407 - }, - { - "x": 46.3599, - "y": 59.65951999999999 - }, - { - "x": 71.56260999999998, - "y": 53.91534 - }, - { - "x": 28.928690000000003, - "y": 46.33052 - }, - { - "x": 47.19929000000001, - "y": 41.39569 - }, - { - "x": 48.15507, - "y": 83.98581 - }, - { - "x": 48.4477, - "y": 54.65174 - }, - { - "x": 35.18339, - "y": 68.19836 - }, - { - "x": 52.26128, - "y": 50.64056 - }, - { - "x": 35.77592, - "y": 62.37214 - }, - { - "x": 43.37792, - "y": 60.65264000000001 - }, - { - "x": 40.40879, - "y": 53.21294 - }, - { - "x": 46.39126, - "y": 64.80001999999999 - }, - { - "x": 61.87996, - "y": 62.7935 - }, - { - "x": 18.99094, - "y": 54.79462 - }, - { - "x": 35.54591, - "y": 64.34436 - }, - { - "x": 50.37548, - "y": 68.05591 - }, - { - "x": 54.54673, - "y": 60.98913 - }, - { - "x": 44.13707, - "y": 53.40706 - }, - { - "x": 45.55372, - "y": 70.63025 - }, - { - "x": 45.68042, - "y": 41.9937 - }, - { - "x": 55.04569, - "y": 48.46728 - }, - { - "x": 37.81383, - "y": 42.24533 - }, - { - "x": 33.56491, - "y": 78.10993 - }, - { - "x": 19.2699, - "y": 67.18515 - }, - { - "x": 37.28481, - "y": 37.79198 - }, - { - "x": 39.77556, - "y": 44.83249 - }, - { - "x": 35.46314, - "y": 70.30631 - }, - { - "x": 40.41439, - "y": 65.25805 - }, - { - "x": 26.7135, - "y": 60.60958 - }, - { - "x": 40.50345, - "y": 57.22231 - }, - { - "x": 29.83138, - "y": 55.35326 - }, - { - "x": 40.04233, - "y": 60.38692 - }, - { - "x": 40.95189, - "y": 51.6069 - }, - { - "x": 51.68887, - "y": 52.47176 - }, - { - "x": 24.69499, - "y": 50.50501 - }, - { - "x": 62.78684000000001, - "y": 55.41728000000001 - }, - { - "x": 21.08624, - "y": 48.07032 - }, - { - "x": 22.0205, - "y": 45.01294 - }, - { - "x": 41.01136, - "y": 45.20848 - }, - { - "x": 41.47629000000001, - "y": 49.69875 - }, - { - "x": 43.15526, - "y": 69.96186999999999 - }, - { - "x": 33.97264000000001, - "y": 58.3128 - }, - { - "x": 35.58473, - "y": 46.37667 - }, - { - "x": 31.52146, - "y": 61.44991 - }, - { - "x": 38.50949, - "y": 54.9348 - }, - { - "x": 48.51959, - "y": 45.1665 - }, - { - "x": 51.80655, - "y": 48.92263 - }, - { - "x": 59.93333000000001, - "y": 41.36604000000001 - }, - { - "x": 37.52437000000001, - "y": 65.41436 - }, - { - "x": 41.38512, - "y": 58.3734 - }, - { - "x": 59.89985, - "y": 45.3802 - }, - { - "x": 46.32288, - "y": 49.54236 - }, - { - "x": 45.69158, - "y": 60.92593000000001 - }, - { - "x": 36.79516, - "y": 78.20391 - }, - { - "x": 30.70871, - "y": 70.33036 - }, - { - "x": 51.97064, - "y": 80.70323 - }, - { - "x": 50.47091, - "y": 64.8867 - }, - { - "x": 52.55752, - "y": 66.85835 - }, - { - "x": 38.0208, - "y": 75.94703 - }, - { - "x": 47.81833, - "y": 58.65439 - }, - { - "x": 45.85127, - "y": 67.85252 - }, - { - "x": 51.34424, - "y": 68.26302 - }, - { - "x": 37.33317, - "y": 67.98246999999999 - }, - { - "x": 45.61133, - "y": 63.20619 - }, - { - "x": 31.50764, - "y": 65.71172 - }, - { - "x": 28.51895, - "y": 73.79701 - }, - { - "x": 50.74807, - "y": 53.57638000000001 - }, - { - "x": 39.53701, - "y": 69.93831999999999 - }, - { - "x": 49.56372, - "y": 68.6858 - }, - { - "x": 57.41644, - "y": 42.79595 - }, - { - "x": 35.55559, - "y": 58.52347 - }, - { - "x": 42.96314, - "y": 37.97548 - }, - { - "x": 41.98642, - "y": 55.80981 - }, - { - "x": 32.55532, - "y": 46.44257 - }, - { - "x": 32.345279999999995, - "y": 60.57506 - }, - { - "x": 24.44857, - "y": 51.36618 - }, - { - "x": 39.53357000000001, - "y": 64.53081999999999 - }, - { - "x": 28.80983, - "y": 55.80426 - }, - { - "x": 39.83018, - "y": 55.04155 - }, - { - "x": 39.42011, - "y": 44.53216 - }, - { - "x": 42.75812, - "y": 66.42826 - }, - { - "x": 23.17606, - "y": 56.86704 - }, - { - "x": 25.55901, - "y": 68.7241 - }, - { - "x": 18.26403, - "y": 40.02327 - }, - { - "x": 30.70777, - "y": 63.31014 - }, - { - "x": 49.43437, - "y": 79.62605 - }, - { - "x": 41.15351, - "y": 60.28376 - }, - { - "x": 36.17541, - "y": 65.56798 - }, - { - "x": 44.08116, - "y": 51.84447 - }, - { - "x": 43.27453, - "y": 68.85571 - }, - { - "x": 49.39423, - "y": 60.62898000000001 - }, - { - "x": 50.53357000000001, - "y": 46.03307 - }, - { - "x": 42.95269, - "y": 71.277 - }, - { - "x": 30.574040000000004, - "y": 76.27772 - }, - { - "x": 35.20991, - "y": 69.40798000000001 - }, - { - "x": 39.5469, - "y": 58.25396 - }, - { - "x": 40.54202, - "y": 68.29326 - }, - { - "x": 42.14727, - "y": 63.224 - }, - { - "x": 39.30898, - "y": 55.78019000000001 - }, - { - "x": 50.05859, - "y": 57.09342 - }, - { - "x": 43.67538, - "y": 63.21723000000001 - }, - { - "x": 39.79353, - "y": 43.73809 - }, - { - "x": 43.44539, - "y": 50.19695 - }, - { - "x": 41.67813, - "y": 55.28961999999999 - }, - { - "x": 48.594, - "y": 69.64589000000001 - }, - { - "x": 38.46082, - "y": 61.08416 - }, - { - "x": 53.26524000000001, - "y": 63.82018000000001 - }, - { - "x": 49.0517, - "y": 66.49995 - }, - { - "x": 39.31737, - "y": 67.48604 - }, - { - "x": 41.24618, - "y": 49.47654 - }, - { - "x": 37.88715, - "y": 59.91647 - }, - { - "x": 41.14622, - "y": 63.44699 - }, - { - "x": 32.521640000000005, - "y": 73.23534000000002 - }, - { - "x": 41.10812, - "y": 44.68184 - }, - { - "x": 25.34895, - "y": 55.25141 - }, - { - "x": 41.9661, - "y": 60.38896 - }, - { - "x": 40.65187, - "y": 61.11229 - }, - { - "x": 31.38396, - "y": 66.525 - }, - { - "x": 59.78578, - "y": 38.49133 - }, - { - "x": 31.3399, - "y": 63.09048000000001 - }, - { - "x": 40.92554000000001, - "y": 60.43771 - }, - { - "x": 29.67727, - "y": 66.38073 - }, - { - "x": 32.59683, - "y": 33.867090000000005 - }, - { - "x": 20.88727, - "y": 56.18753 - }, - { - "x": 37.8447, - "y": 51.01321 - }, - { - "x": 40.57783, - "y": 69.06488 - }, - { - "x": 59.67326, - "y": 74.55561999999998 - }, - { - "x": 36.6854, - "y": 50.43604000000001 - }, - { - "x": 45.94, - "y": 57.68176 - }, - { - "x": 64.98144, - "y": 79.71206 - }, - { - "x": 36.98331, - "y": 65.35463 - }, - { - "x": 45.67468, - "y": 55.15185 - }, - { - "x": 37.51643, - "y": 49.06353 - }, - { - "x": 51.32067, - "y": 56.63374 - }, - { - "x": 46.13968, - "y": 46.26812 - }, - { - "x": 46.3057, - "y": 50.07933 - }, - { - "x": 58.78482, - "y": 35.37284000000001 - }, - { - "x": 24.40643, - "y": 58.87376 - }, - { - "x": 42.22782, - "y": 61.23968000000001 - }, - { - "x": 19.33637, - "y": 69.78316 - }, - { - "x": 39.09501, - "y": 60.00454000000001 - }, - { - "x": 31.54544000000001, - "y": 56.18556 - }, - { - "x": 46.81052, - "y": 51.33483 - }, - { - "x": 37.31417, - "y": 60.64799 - }, - { - "x": 35.31276, - "y": 64.61462 - }, - { - "x": 47.03397, - "y": 66.32737 - }, - { - "x": 43.20051, - "y": 64.01385 - }, - { - "x": 57.78369, - "y": 73.30975 - }, - { - "x": 51.95346, - "y": 50.6932 - }, - { - "x": 37.04092, - "y": 60.51894 - }, - { - "x": 33.26079, - "y": 75.71045 - }, - { - "x": 45.94416, - "y": 71.49937 - }, - { - "x": 35.73385, - "y": 46.9001 - }, - { - "x": 40.76379, - "y": 67.68751 - }, - { - "x": 35.145540000000004, - "y": 65.5663 - }, - { - "x": 35.66175, - "y": 56.80016 - }, - { - "x": 28.88317, - "y": 43.26803 - }, - { - "x": 31.27264000000001, - "y": 66.3293 - }, - { - "x": 34.13748, - "y": 60.96088 - }, - { - "x": 47.33729, - "y": 68.169 - }, - { - "x": 31.18816, - "y": 78.43963000000002 - }, - { - "x": 37.92156, - "y": 63.1141 - }, - { - "x": 53.294, - "y": 55.50261999999999 - }, - { - "x": 61.38426, - "y": 59.91205 - }, - { - "x": 43.75808, - "y": 67.45812 - }, - { - "x": 38.92632, - "y": 43.12086 - }, - { - "x": 30.63075, - "y": 79.46695 - }, - { - "x": 28.52392, - "y": 59.14458000000001 - }, - { - "x": 34.3243, - "y": 60.94347 - }, - { - "x": 24.5469, - "y": 64.80247 - }, - { - "x": 36.00817, - "y": 46.68387 - }, - { - "x": 21.60583, - "y": 46.62644 - }, - { - "x": 44.03259, - "y": 64.42778 - }, - { - "x": 33.99769000000001, - "y": 56.55145 - }, - { - "x": 43.60366, - "y": 61.25346 - }, - { - "x": 46.92525, - "y": 54.08689 - }, - { - "x": 50.50127, - "y": 60.62361 - }, - { - "x": 53.49198000000001, - "y": 41.07875 - }, - { - "x": 42.67635, - "y": 55.93246 - }, - { - "x": 27.99422, - "y": 53.68188000000001 - }, - { - "x": 39.43207, - "y": 57.01566 - }, - { - "x": 26.77366, - "y": 63.055 - }, - { - "x": 42.40971, - "y": 49.95729 - }, - { - "x": 36.22691, - "y": 57.21221 - }, - { - "x": 38.46163, - "y": 67.33074 - }, - { - "x": 43.78143, - "y": 65.92309 - }, - { - "x": 32.78291, - "y": 73.01238000000002 - }, - { - "x": 34.33231, - "y": 60.31763 - }, - { - "x": 38.62762, - "y": 57.39558 - }, - { - "x": 40.80154, - "y": 39.94366 - }, - { - "x": 34.4872, - "y": 50.56793 - }, - { - "x": 37.28235, - "y": 51.46425 - }, - { - "x": 36.29004000000001, - "y": 72.62875 - }, - { - "x": 27.32446, - "y": 51.97536 - }, - { - "x": 43.01795, - "y": 72.62218 - }, - { - "x": 30.62136, - "y": 49.73988 - }, - { - "x": 51.54357, - "y": 37.5978 - }, - { - "x": 54.47479000000001, - "y": 52.03507000000001 - }, - { - "x": 46.6837, - "y": 76.38964 - }, - { - "x": 36.40191, - "y": 55.50854 - }, - { - "x": 32.79919, - "y": 57.24132 - }, - { - "x": 63.01716999999999, - "y": 51.67786 - }, - { - "x": 30.48439, - "y": 39.33047 - }, - { - "x": 36.6763, - "y": 87.27119 - }, - { - "x": 18.94383, - "y": 59.33327 - }, - { - "x": 43.45898, - "y": 51.92991 - }, - { - "x": 37.48009, - "y": 68.55787 - }, - { - "x": 45.79938, - "y": 71.73394 - }, - { - "x": 39.69381, - "y": 58.77897 - }, - { - "x": 43.60521, - "y": 51.59496 - }, - { - "x": 49.18213, - "y": 66.20721 - }, - { - "x": 25.83677, - "y": 47.10274 - }, - { - "x": 30.90342, - "y": 53.13581 - }, - { - "x": 40.20493, - "y": 60.96742 - }, - { - "x": 46.98463, - "y": 52.61281 - }, - { - "x": 39.37106, - "y": 46.29081 - }, - { - "x": 40.281, - "y": 59.03583 - }, - { - "x": 40.44173, - "y": 47.78119 - }, - { - "x": 37.66053, - "y": 59.73406 - }, - { - "x": 38.11046, - "y": 44.89672 - }, - { - "x": 48.2845, - "y": 41.49009 - }, - { - "x": 49.2973, - "y": 63.16118 - }, - { - "x": 22.48131, - "y": 74.58899 - }, - { - "x": 52.90003000000001, - "y": 58.66274 - }, - { - "x": 39.1711, - "y": 60.65303 - }, - { - "x": 46.23943, - "y": 65.03093 - }, - { - "x": 38.69597, - "y": 84.08148 - }, - { - "x": 40.79527, - "y": 49.7543 - }, - { - "x": 42.84691, - "y": 57.79911 - }, - { - "x": 65.71859, - "y": 53.45975 - }, - { - "x": 32.24807, - "y": 67.18961999999999 - }, - { - "x": 37.50528, - "y": 72.15233 - }, - { - "x": 46.19626, - "y": 63.37228 - }, - { - "x": 46.93901, - "y": 50.99902 - }, - { - "x": 30.82879, - "y": 59.55766 - }, - { - "x": 53.35965, - "y": 52.76179000000001 - }, - { - "x": 48.15439, - "y": 68.73671999999999 - }, - { - "x": 33.211659999999995, - "y": 38.87962 - }, - { - "x": 29.92048, - "y": 77.03939 - }, - { - "x": 37.6465, - "y": 56.99416 - }, - { - "x": 35.9354, - "y": 77.82079 - }, - { - "x": 47.70036, - "y": 64.47489 - }, - { - "x": 25.77065, - "y": 62.45383 - }, - { - "x": 41.92523, - "y": 57.7624 - }, - { - "x": 34.45473, - "y": 60.32253000000001 - }, - { - "x": 30.77576, - "y": 52.58115 - }, - { - "x": 26.14364, - "y": 66.58151 - }, - { - "x": 47.21836, - "y": 51.68076 - }, - { - "x": 55.78841, - "y": 57.97879 - }, - { - "x": 43.2989, - "y": 56.97968 - }, - { - "x": 40.87212, - "y": 27.31616 - }, - { - "x": 49.88417000000001, - "y": 32.45283 - }, - { - "x": 20.55912, - "y": 57.01987 - }, - { - "x": 25.06116, - "y": 44.75805 - }, - { - "x": 26.01595, - "y": 55.76411 - }, - { - "x": 37.25416, - "y": 65.31094 - }, - { - "x": 53.36999, - "y": 53.56238000000001 - }, - { - "x": 38.84896, - "y": 56.97574 - }, - { - "x": 39.51915, - "y": 61.65769 - }, - { - "x": 37.02022, - "y": 69.50709 - }, - { - "x": 50.74908, - "y": 56.24477 - }, - { - "x": 35.7051, - "y": 58.49562 - }, - { - "x": 44.44394000000001, - "y": 67.48245 - }, - { - "x": 54.81738000000001, - "y": 61.41306 - }, - { - "x": 45.88216, - "y": 63.42376 - }, - { - "x": 39.53611, - "y": 65.04189000000001 - }, - { - "x": 44.80203, - "y": 50.21186 - }, - { - "x": 29.91771, - "y": 71.56390999999998 - }, - { - "x": 25.37846, - "y": 64.61015 - }, - { - "x": 41.21589, - "y": 64.27741999999999 - }, - { - "x": 51.48426, - "y": 68.01100000000001 - }, - { - "x": 59.85225, - "y": 60.61618000000001 - }, - { - "x": 51.70456, - "y": 47.81819 - }, - { - "x": 47.91999000000001, - "y": 46.15824 - }, - { - "x": 41.99199, - "y": 65.34492 - }, - { - "x": 53.38919, - "y": 71.59792 - }, - { - "x": 50.13654, - "y": 58.47133 - }, - { - "x": 43.55886, - "y": 50.07811 - }, - { - "x": 44.48821, - "y": 73.62916 - }, - { - "x": 27.92514000000001, - "y": 67.88335 - }, - { - "x": 36.57076, - "y": 72.47041999999998 - }, - { - "x": 35.29817, - "y": 65.07594 - }, - { - "x": 51.4997, - "y": 63.69956 - }, - { - "x": 49.04667, - "y": 65.28074000000001 - }, - { - "x": 38.21852, - "y": 56.44799 - }, - { - "x": 35.58804, - "y": 44.72433 - }, - { - "x": 27.65341, - "y": 61.1188 - }, - { - "x": 41.22976, - "y": 53.65146 - }, - { - "x": 32.00885, - "y": 46.29029 - }, - { - "x": 46.49651, - "y": 55.93187 - }, - { - "x": 25.12809, - "y": 45.54561 - }, - { - "x": 31.50795, - "y": 35.048320000000004 - }, - { - "x": 32.441, - "y": 70.15026 - }, - { - "x": 50.46987, - "y": 56.49627 - }, - { - "x": 53.02414, - "y": 48.18963 - }, - { - "x": 46.28482, - "y": 64.75075 - }, - { - "x": 21.90914, - "y": 60.49558 - }, - { - "x": 38.16132, - "y": 56.99729 - }, - { - "x": 32.70623, - "y": 53.865080000000006 - }, - { - "x": 30.58785, - "y": 74.07853 - }, - { - "x": 42.87658, - "y": 64.60489 - }, - { - "x": 41.16918, - "y": 50.85736 - }, - { - "x": 40.4065, - "y": 56.96268000000001 - }, - { - "x": 27.98043, - "y": 54.99941 - }, - { - "x": 39.86144, - "y": 65.40418000000001 - }, - { - "x": 44.06916, - "y": 58.01787 - }, - { - "x": 41.27358, - "y": 47.03271 - }, - { - "x": 29.50536, - "y": 50.07637 - }, - { - "x": 42.72526, - "y": 52.06594000000001 - }, - { - "x": 55.88999, - "y": 57.75395 - }, - { - "x": 43.43729, - "y": 45.53989 - }, - { - "x": 45.21592, - "y": 56.23551 - }, - { - "x": 21.46886, - "y": 50.97331 - }, - { - "x": 40.8175, - "y": 63.63504 - }, - { - "x": 34.897240000000004, - "y": 64.74254 - }, - { - "x": 38.82377, - "y": 54.30611999999999 - }, - { - "x": 39.81253, - "y": 61.8196 - }, - { - "x": 42.25532000000001, - "y": 62.65005 - }, - { - "x": 44.36548, - "y": 49.87988 - }, - { - "x": 31.58178, - "y": 55.53971 - }, - { - "x": 35.25133, - "y": 53.15156999999999 - }, - { - "x": 50.77632, - "y": 74.22147 - }, - { - "x": 46.64062, - "y": 37.81122 - }, - { - "x": 50.71756, - "y": 53.06595 - }, - { - "x": 49.07775, - "y": 59.12901 - }, - { - "x": 26.63234000000001, - "y": 64.19726999999999 - }, - { - "x": 48.79625, - "y": 38.62079 - }, - { - "x": 22.20029, - "y": 73.11573 - }, - { - "x": 44.41, - "y": 53.04649000000001 - }, - { - "x": 63.88825, - "y": 48.97889 - }, - { - "x": 33.57092, - "y": 63.84941 - }, - { - "x": 44.85232, - "y": 62.17386 - }, - { - "x": 43.81482000000001, - "y": 57.73569000000001 - }, - { - "x": 32.16317, - "y": 58.71496 - }, - { - "x": 34.76834, - "y": 55.57443000000001 - }, - { - "x": 27.02004, - "y": 60.16687 - }, - { - "x": 36.84926, - "y": 46.01221 - }, - { - "x": 36.16788, - "y": 68.04738 - }, - { - "x": 54.34972, - "y": 51.9426 - }, - { - "x": 47.11679, - "y": 77.18788 - }, - { - "x": 57.4229, - "y": 32.305 - }, - { - "x": 52.18029, - "y": 65.10573000000001 - }, - { - "x": 51.85909, - "y": 67.51661 - }, - { - "x": 49.03182, - "y": 60.34069 - }, - { - "x": 45.43005, - "y": 59.77699000000001 - }, - { - "x": 33.160070000000005, - "y": 67.7972 - }, - { - "x": 28.07412, - "y": 60.4441 - }, - { - "x": 37.39232, - "y": 60.04588 - }, - { - "x": 41.7159, - "y": 54.8672 - }, - { - "x": 32.7979, - "y": 73.65913 - }, - { - "x": 48.73786, - "y": 49.54446 - }, - { - "x": 55.61709000000001, - "y": 57.06916 - }, - { - "x": 26.59618, - "y": 54.89858 - }, - { - "x": 42.08567, - "y": 40.12172 - }, - { - "x": 52.21176, - "y": 52.75539000000001 - }, - { - "x": 36.55513, - "y": 62.31943 - }, - { - "x": 31.43811, - "y": 50.33373 - }, - { - "x": 40.87347000000001, - "y": 69.90448 - }, - { - "x": 25.97094, - "y": 68.05601999999999 - }, - { - "x": 35.18777, - "y": 47.83521 - }, - { - "x": 30.72323, - "y": 53.49924 - }, - { - "x": 41.99314, - "y": 50.87471 - }, - { - "x": 30.88503, - "y": 59.03542 - }, - { - "x": 55.63384, - "y": 51.22741 - }, - { - "x": 37.70752, - "y": 54.48603000000001 - }, - { - "x": 27.17879000000001, - "y": 73.22714 - }, - { - "x": 55.74353000000001, - "y": 35.89603 - }, - { - "x": 25.66439, - "y": 58.53562 - }, - { - "x": 17.00957, - "y": 68.39095999999999 - }, - { - "x": 43.95091, - "y": 61.0425 - }, - { - "x": 38.8072, - "y": 53.42418000000001 - }, - { - "x": 40.30421, - "y": 55.30517 - }, - { - "x": 39.78672, - "y": 57.06535 - }, - { - "x": 63.90414000000001, - "y": 56.32496 - }, - { - "x": 48.88094, - "y": 67.82444 - }, - { - "x": 58.40254, - "y": 79.28048000000003 - }, - { - "x": 39.70721, - "y": 64.78928 - }, - { - "x": 47.59079000000001, - "y": 51.5511 - }, - { - "x": 44.84636, - "y": 52.34264 - }, - { - "x": 21.27829, - "y": 50.89752 - }, - { - "x": 56.59843000000001, - "y": 65.83452 - }, - { - "x": 37.48017, - "y": 57.39704 - }, - { - "x": 49.15954, - "y": 46.12192 - }, - { - "x": 37.66307000000001, - "y": 57.0688 - }, - { - "x": 41.86126, - "y": 63.41366 - }, - { - "x": 51.73052, - "y": 66.6951 - }, - { - "x": 47.64847, - "y": 58.08665 - }, - { - "x": 35.17402, - "y": 56.00186 - }, - { - "x": 45.44158, - "y": 84.85019 - }, - { - "x": 63.14872, - "y": 70.52519000000002 - }, - { - "x": 42.08557, - "y": 54.22346999999999 - }, - { - "x": 46.01514, - "y": 58.37922 - }, - { - "x": 42.11817, - "y": 66.59673000000001 - }, - { - "x": 26.51054, - "y": 64.8716 - }, - { - "x": 28.67938, - "y": 67.39531 - }, - { - "x": 29.98758, - "y": 56.67641 - }, - { - "x": 23.97532, - "y": 53.69432 - }, - { - "x": 54.47663000000001, - "y": 68.48246999999999 - }, - { - "x": 25.66849, - "y": 56.62031999999999 - }, - { - "x": 36.40398, - "y": 63.52458000000001 - }, - { - "x": 37.76594, - "y": 48.95203 - }, - { - "x": 44.49676, - "y": 53.93384 - }, - { - "x": 41.21254, - "y": 67.43937 - }, - { - "x": 14.46949, - "y": 62.26729 - }, - { - "x": 26.00632, - "y": 58.30301 - }, - { - "x": 47.84569000000001, - "y": 51.46759 - }, - { - "x": 44.96501, - "y": 81.81427 - }, - { - "x": 52.12286, - "y": 65.78259 - }, - { - "x": 34.2726, - "y": 65.021 - }, - { - "x": 36.36313, - "y": 63.94629000000001 - }, - { - "x": 20.33037, - "y": 62.20769 - }, - { - "x": 58.24481, - "y": 54.45848 - }, - { - "x": 28.1422, - "y": 76.06569 - }, - { - "x": 40.83747, - "y": 60.21198 - }, - { - "x": 29.58027, - "y": 51.32616 - }, - { - "x": 41.68749, - "y": 56.74836 - }, - { - "x": 19.3453, - "y": 49.81644 - }, - { - "x": 39.10978, - "y": 59.98583000000001 - }, - { - "x": 30.06011, - "y": 59.57409000000001 - }, - { - "x": 30.11872, - "y": 48.14224 - }, - { - "x": 26.80173, - "y": 69.78267 - }, - { - "x": 41.4497, - "y": 56.78115 - }, - { - "x": 39.84126, - "y": 49.97964 - }, - { - "x": 59.78358000000001, - "y": 61.26106 - }, - { - "x": 45.44818, - "y": 64.82023000000001 - }, - { - "x": 58.4162, - "y": 58.58034 - }, - { - "x": 36.46915, - "y": 65.33484 - }, - { - "x": 47.39338, - "y": 54.89619 - }, - { - "x": 55.97659, - "y": 75.71833000000002 - }, - { - "x": 25.90733, - "y": 51.43085 - }, - { - "x": 56.32167, - "y": 55.58431 - }, - { - "x": 59.47724, - "y": 54.72548000000001 - }, - { - "x": 36.04946, - "y": 34.22141 - }, - { - "x": 34.61991, - "y": 75.20385 - }, - { - "x": 40.56393, - "y": 60.7759 - }, - { - "x": 23.05746, - "y": 43.83699 - }, - { - "x": 49.64375, - "y": 49.0249 - }, - { - "x": 22.87106, - "y": 59.36683000000001 - }, - { - "x": 41.12026, - "y": 55.79939 - }, - { - "x": 55.2759, - "y": 52.32505 - }, - { - "x": 45.41858, - "y": 69.30771 - }, - { - "x": 42.58969, - "y": 48.27374 - }, - { - "x": 59.78563000000001, - "y": 54.97828000000001 - }, - { - "x": 46.41741, - "y": 52.72119 - }, - { - "x": 13.429479999999998, - "y": 57.03562 - }, - { - "x": 50.9471, - "y": 56.93176 - }, - { - "x": 46.0973, - "y": 47.2256 - }, - { - "x": 34.89751, - "y": 71.07395 - }, - { - "x": 26.31495, - "y": 49.99565 - }, - { - "x": 30.89327, - "y": 79.22578 - }, - { - "x": 43.23482, - "y": 46.73741 - }, - { - "x": 44.94405, - "y": 50.6335 - }, - { - "x": 45.22232, - "y": 80.58161 - }, - { - "x": 33.076190000000004, - "y": 72.86371 - }, - { - "x": 52.04657, - "y": 62.56454 - }, - { - "x": 41.67568, - "y": 60.35936 - }, - { - "x": 55.84756, - "y": 67.5848 - }, - { - "x": 36.04547, - "y": 49.41498 - }, - { - "x": 36.28569, - "y": 60.10168 - }, - { - "x": 45.72856, - "y": 50.07189 - }, - { - "x": 39.05539, - "y": 54.94165 - }, - { - "x": 20.2726, - "y": 48.62656 - }, - { - "x": 27.33974000000001, - "y": 51.36997 - }, - { - "x": 46.13468, - "y": 55.69144 - }, - { - "x": 44.96999, - "y": 65.99128 - }, - { - "x": 46.39057, - "y": 67.48663 - }, - { - "x": 47.08233, - "y": 60.20998 - }, - { - "x": 36.53939, - "y": 60.50986 - }, - { - "x": 38.75325, - "y": 61.35403 - }, - { - "x": 42.64909, - "y": 57.29917 - }, - { - "x": 23.09582, - "y": 70.34206 - }, - { - "x": 42.44851, - "y": 44.21829 - }, - { - "x": 33.49563, - "y": 71.32774 - }, - { - "x": 47.07288, - "y": 55.7378 - }, - { - "x": 24.9612, - "y": 53.32379 - }, - { - "x": 45.48775, - "y": 65.85651 - }, - { - "x": 59.20356, - "y": 68.74465 - }, - { - "x": 44.00992, - "y": 50.52786 - }, - { - "x": 43.68642, - "y": 83.65863 - }, - { - "x": 41.87053, - "y": 51.92226 - }, - { - "x": 43.72969000000001, - "y": 46.00091 - }, - { - "x": 38.52629, - "y": 76.75724 - }, - { - "x": 53.42536, - "y": 73.632 - }, - { - "x": 39.33739, - "y": 51.29871 - }, - { - "x": 36.66598, - "y": 51.51536 - }, - { - "x": 41.96913, - "y": 61.30644 - }, - { - "x": 35.25198, - "y": 60.78493 - }, - { - "x": 33.56147, - "y": 59.85432 - }, - { - "x": 33.07125, - "y": 49.41556 - }, - { - "x": 48.44303, - "y": 51.90851 - }, - { - "x": 40.75025, - "y": 68.0989 - }, - { - "x": 50.35784, - "y": 54.57351 - }, - { - "x": 44.57279000000001, - "y": 78.77866999999998 - }, - { - "x": 24.52693, - "y": 68.57829 - }, - { - "x": 54.20255, - "y": 63.61836 - }, - { - "x": 41.30357, - "y": 66.8662 - }, - { - "x": 37.41374, - "y": 71.92524 - }, - { - "x": 26.862040000000004, - "y": 55.37459000000001 - }, - { - "x": 39.55137, - "y": 43.2294 - }, - { - "x": 47.00566, - "y": 53.65933 - }, - { - "x": 38.12361, - "y": 57.12999 - }, - { - "x": 37.52485, - "y": 80.64694 - }, - { - "x": 39.20578, - "y": 62.21249 - }, - { - "x": 52.36179, - "y": 58.99351 - }, - { - "x": 45.0324, - "y": 47.69177 - }, - { - "x": 40.86912, - "y": 38.84561 - }, - { - "x": 48.08253, - "y": 68.39591999999999 - }, - { - "x": 54.8749, - "y": 66.84655 - }, - { - "x": 24.57269, - "y": 71.18354000000002 - }, - { - "x": 35.00761, - "y": 57.033 - }, - { - "x": 43.44146, - "y": 65.25961 - }, - { - "x": 43.16221, - "y": 47.03518 - }, - { - "x": 34.24286, - "y": 62.92888000000001 - }, - { - "x": 43.58324, - "y": 56.57035 - }, - { - "x": 36.35557, - "y": 67.91736999999999 - }, - { - "x": 35.1833, - "y": 55.002280000000006 - }, - { - "x": 44.51795, - "y": 68.3382 - }, - { - "x": 54.39144, - "y": 37.30894 - }, - { - "x": 45.86727, - "y": 87.3137 - }, - { - "x": 39.09084, - "y": 66.78102 - }, - { - "x": 27.79925, - "y": 58.74916999999999 - }, - { - "x": 33.06475, - "y": 78.47807 - }, - { - "x": 23.54635, - "y": 55.19841 - }, - { - "x": 43.46392, - "y": 64.71713000000001 - }, - { - "x": 35.42679000000001, - "y": 54.08204 - }, - { - "x": 34.19314, - "y": 71.58672 - }, - { - "x": 10.8867, - "y": 68.44097 - }, - { - "x": 56.59104, - "y": 64.01100000000001 - }, - { - "x": 47.3817, - "y": 56.87357 - }, - { - "x": 38.49504, - "y": 60.46255 - }, - { - "x": 52.51262, - "y": 67.06044 - }, - { - "x": 44.5458, - "y": 57.88389 - }, - { - "x": 44.03849, - "y": 53.62613 - }, - { - "x": 36.41589000000001, - "y": 56.97656 - }, - { - "x": 50.31431, - "y": 61.40527 - }, - { - "x": 30.72297, - "y": 53.84721999999999 - }, - { - "x": 29.87761, - "y": 61.21636 - }, - { - "x": 59.26816, - "y": 69.29843000000001 - }, - { - "x": 35.04088, - "y": 61.20282 - }, - { - "x": 44.87322, - "y": 43.20948 - }, - { - "x": 29.24664000000001, - "y": 51.7367 - }, - { - "x": 50.04572, - "y": 53.45699000000001 - }, - { - "x": 47.97724, - "y": 69.38969 - }, - { - "x": 29.6133, - "y": 70.91985 - }, - { - "x": 30.89345, - "y": 61.36776 - }, - { - "x": 31.74421, - "y": 58.71527 - }, - { - "x": 36.60416, - "y": 56.83749 - }, - { - "x": 47.78417, - "y": 53.40695 - }, - { - "x": 23.22726, - "y": 57.4777 - }, - { - "x": 51.37993, - "y": 65.01276 - }, - { - "x": 31.36008, - "y": 63.86529 - }, - { - "x": 46.77678, - "y": 65.41521999999999 - }, - { - "x": 44.1524, - "y": 46.76581 - }, - { - "x": 41.43843, - "y": 54.11403000000001 - }, - { - "x": 53.77942, - "y": 55.54833000000001 - }, - { - "x": 33.7694, - "y": 79.58606999999998 - }, - { - "x": 35.79716, - "y": 55.52056 - }, - { - "x": 30.53843, - "y": 72.95658 - }, - { - "x": 46.22857, - "y": 34.535509999999995 - }, - { - "x": 39.67892, - "y": 62.87499 - }, - { - "x": 36.81919, - "y": 52.38703 - }, - { - "x": 34.27178, - "y": 48.92915 - }, - { - "x": 42.32842, - "y": 63.12152 - }, - { - "x": 46.33527, - "y": 63.28706999999999 - }, - { - "x": 53.53398000000001, - "y": 51.14082 - }, - { - "x": 40.61128, - "y": 50.21093 - }, - { - "x": 50.62107, - "y": 40.45209000000001 - }, - { - "x": 36.47783, - "y": 78.33963 - }, - { - "x": 52.38983, - "y": 64.53774 - }, - { - "x": 30.01806, - "y": 75.31725 - }, - { - "x": 39.00967, - "y": 50.87296 - }, - { - "x": 22.71875, - "y": 67.99089000000001 - }, - { - "x": 61.24, - "y": 65.89064 - }, - { - "x": 39.18396, - "y": 65.65822 - }, - { - "x": 44.69035, - "y": 57.93645 - }, - { - "x": 58.0471, - "y": 69.76289 - }, - { - "x": 51.25563, - "y": 61.33045 - }, - { - "x": 46.92124, - "y": 83.3785 - }, - { - "x": 46.25302, - "y": 66.06521 - }, - { - "x": 52.40546, - "y": 66.73065 - }, - { - "x": 40.28902, - "y": 53.28891 - }, - { - "x": 44.73831, - "y": 63.29274 - }, - { - "x": 43.15397, - "y": 65.65951 - }, - { - "x": 44.85846, - "y": 77.73084 - }, - { - "x": 42.86439, - "y": 67.90505 - }, - { - "x": 56.25276, - "y": 58.54541 - }, - { - "x": 51.62415, - "y": 67.15460999999999 - }, - { - "x": 44.7667, - "y": 61.48524000000001 - }, - { - "x": 48.91067, - "y": 66.60661 - }, - { - "x": 20.23477, - "y": 59.03073000000001 - }, - { - "x": 18.98427, - "y": 70.79776 - }, - { - "x": 16.33768, - "y": 68.84142 - }, - { - "x": 49.40031, - "y": 47.88199 - }, - { - "x": 41.66533, - "y": 67.50779 - }, - { - "x": 59.2293, - "y": 74.68412 - }, - { - "x": 58.47326, - "y": 53.63286 - }, - { - "x": 62.36666999999999, - "y": 50.95881 - }, - { - "x": 21.85536, - "y": 54.86045 - }, - { - "x": 40.38865, - "y": 61.31855 - }, - { - "x": 40.74187, - "y": 47.65873 - }, - { - "x": 58.00854, - "y": 42.82972 - }, - { - "x": 45.35452, - "y": 41.83214 - }, - { - "x": 66.66133, - "y": 50.6532 - }, - { - "x": 33.77558, - "y": 62.47507 - }, - { - "x": 48.09134, - "y": 64.89226 - }, - { - "x": 40.08256, - "y": 51.44899 - }, - { - "x": 29.58933, - "y": 58.19596 - }, - { - "x": 43.58031, - "y": 65.94927 - }, - { - "x": 53.30803, - "y": 36.98284 - }, - { - "x": 28.87137, - "y": 51.90188 - }, - { - "x": 56.40753, - "y": 62.59392 - }, - { - "x": 33.29645, - "y": 67.43765 - }, - { - "x": 38.72936, - "y": 56.59565 - }, - { - "x": 32.29439, - "y": 53.9696 - }, - { - "x": 32.41527, - "y": 48.44307 - }, - { - "x": 45.76281, - "y": 64.38473 - }, - { - "x": 33.8258, - "y": 59.16824 - }, - { - "x": 22.67527, - "y": 54.22386 - }, - { - "x": 13.199420000000002, - "y": 60.1388 - }, - { - "x": 29.50579, - "y": 55.28771 - }, - { - "x": 45.70325, - "y": 56.31371 - }, - { - "x": 43.70217, - "y": 61.486 - }, - { - "x": 29.53128, - "y": 66.01217 - }, - { - "x": 34.58708, - "y": 54.27694 - }, - { - "x": 51.84493, - "y": 61.97 - }, - { - "x": 46.43159, - "y": 55.3816 - }, - { - "x": 47.37223, - "y": 63.45379000000001 - }, - { - "x": 28.52821, - "y": 68.99037 - }, - { - "x": 53.74314, - "y": 61.20763 - }, - { - "x": 29.91581, - "y": 63.06654 - }, - { - "x": 51.85804, - "y": 68.08115 - }, - { - "x": 24.65317000000001, - "y": 60.97069000000001 - }, - { - "x": 45.07661, - "y": 64.13075 - }, - { - "x": 34.09175, - "y": 59.97359 - }, - { - "x": 49.69564, - "y": 67.62843000000001 - }, - { - "x": 43.0814, - "y": 55.20282 - }, - { - "x": 36.45465, - "y": 50.92306 - }, - { - "x": 45.95494, - "y": 50.09121 - }, - { - "x": 34.863040000000005, - "y": 61.43269 - }, - { - "x": 31.35199, - "y": 65.54097 - }, - { - "x": 28.85687, - "y": 70.20236 - }, - { - "x": 38.01644, - "y": 45.00452 - }, - { - "x": 39.33137, - "y": 61.01991 - }, - { - "x": 45.43656, - "y": 53.36308 - }, - { - "x": 21.14175, - "y": 39.8683 - }, - { - "x": 52.64809, - "y": 71.72782 - }, - { - "x": 36.58138, - "y": 39.92153 - }, - { - "x": 36.92193, - "y": 64.58077 - }, - { - "x": 17.71107, - "y": 64.94933 - }, - { - "x": 43.15869, - "y": 54.23448000000001 - }, - { - "x": 47.18889, - "y": 60.86159 - }, - { - "x": 43.73414, - "y": 62.9692 - }, - { - "x": 46.89299000000001, - "y": 65.56661 - }, - { - "x": 42.87272, - "y": 43.29337 - }, - { - "x": 40.53452, - "y": 61.72891 - }, - { - "x": 48.3142, - "y": 54.04765 - }, - { - "x": 38.05576, - "y": 45.26198 - }, - { - "x": 22.1779, - "y": 68.1016 - }, - { - "x": 56.94226999999999, - "y": 86.55324 - }, - { - "x": 34.75308, - "y": 55.7262 - }, - { - "x": 33.97889, - "y": 52.78297 - }, - { - "x": 40.91016, - "y": 65.19449 - }, - { - "x": 33.7199, - "y": 57.27735 - }, - { - "x": 49.14691, - "y": 64.16595 - }, - { - "x": 48.61678, - "y": 65.28603000000001 - }, - { - "x": 28.11857, - "y": 45.33089 - }, - { - "x": 20.4317, - "y": 51.46033 - }, - { - "x": 50.93737, - "y": 74.1835 - }, - { - "x": 22.29103, - "y": 75.65685 - }, - { - "x": 43.51035, - "y": 58.55402 - }, - { - "x": 60.11131999999999, - "y": 58.98568 - }, - { - "x": 61.21623, - "y": 69.80801 - }, - { - "x": 48.33622, - "y": 41.19602 - }, - { - "x": 33.39445, - "y": 65.82391 - }, - { - "x": 29.34521, - "y": 59.855880000000006 - }, - { - "x": 54.38664, - "y": 80.36837 - }, - { - "x": 34.7127, - "y": 57.47011 - }, - { - "x": 40.33881, - "y": 57.22665 - }, - { - "x": 62.24166, - "y": 51.57828 - }, - { - "x": 40.15035, - "y": 56.58465 - }, - { - "x": 38.71685, - "y": 70.14773000000001 - }, - { - "x": 39.12633, - "y": 60.63593 - }, - { - "x": 51.69781, - "y": 63.27919 - }, - { - "x": 25.68791, - "y": 40.27335 - }, - { - "x": 47.94294, - "y": 43.08792 - }, - { - "x": 67.88265, - "y": 60.98403 - }, - { - "x": 26.55077, - "y": 50.80384 - }, - { - "x": 46.29426, - "y": 47.39325 - }, - { - "x": 31.52882, - "y": 62.19854 - }, - { - "x": 57.78245, - "y": 63.38965 - }, - { - "x": 38.04019, - "y": 67.43048 - }, - { - "x": 37.7145, - "y": 51.81503 - }, - { - "x": 62.57692, - "y": 60.83238000000001 - }, - { - "x": 28.86001, - "y": 51.2246 - }, - { - "x": 41.62214, - "y": 58.10787 - }, - { - "x": 23.74967, - "y": 67.99766 - }, - { - "x": 46.85755, - "y": 54.24618 - }, - { - "x": 37.5762, - "y": 62.86578000000001 - }, - { - "x": 56.43054, - "y": 64.46651999999999 - }, - { - "x": 23.42326, - "y": 62.49845 - }, - { - "x": 44.27762, - "y": 57.30138 - }, - { - "x": 40.88654, - "y": 73.0129 - }, - { - "x": 35.14983, - "y": 69.20756 - }, - { - "x": 24.17791, - "y": 55.47302 - }, - { - "x": 41.70554, - "y": 59.55818000000001 - }, - { - "x": 36.33261, - "y": 42.50658 - }, - { - "x": 39.01491, - "y": 47.29492 - }, - { - "x": 44.81983, - "y": 67.23057 - }, - { - "x": 40.07327, - "y": 53.91739000000001 - }, - { - "x": 30.90242000000001, - "y": 79.43701999999998 - }, - { - "x": 36.81031, - "y": 51.52639 - }, - { - "x": 43.03812, - "y": 57.54671 - }, - { - "x": 32.79469, - "y": 64.19816 - }, - { - "x": 37.48284, - "y": 63.44551 - }, - { - "x": 45.29159, - "y": 76.73057 - }, - { - "x": 35.24219, - "y": 55.9317 - }, - { - "x": 38.39624, - "y": 63.38412 - }, - { - "x": 34.79193, - "y": 55.69379 - }, - { - "x": 48.43391, - "y": 46.13215 - }, - { - "x": 59.01439, - "y": 65.74738 - }, - { - "x": 35.53230999999999, - "y": 63.11478 - }, - { - "x": 40.90201, - "y": 74.3216 - }, - { - "x": 41.53148, - "y": 42.03367 - }, - { - "x": 35.52626, - "y": 83.71515 - }, - { - "x": 27.84255, - "y": 60.091 - }, - { - "x": 43.60266, - "y": 62.19615 - }, - { - "x": 24.29746, - "y": 62.7834 - }, - { - "x": 30.38543, - "y": 52.90134000000001 - }, - { - "x": 52.67648000000001, - "y": 32.67734 - }, - { - "x": 36.9756, - "y": 68.24067 - }, - { - "x": 37.8756, - "y": 68.28506 - }, - { - "x": 48.75739, - "y": 53.39937 - }, - { - "x": 56.86054, - "y": 59.49221 - }, - { - "x": 57.58251, - "y": 67.85455 - }, - { - "x": 42.30235, - "y": 54.44661 - }, - { - "x": 56.72005, - "y": 71.69892 - }, - { - "x": 34.09218, - "y": 56.2818 - }, - { - "x": 47.25593, - "y": 56.96026 - }, - { - "x": 23.48291, - "y": 54.36535 - }, - { - "x": 23.12866, - "y": 65.25963 - }, - { - "x": 51.5916, - "y": 62.71912 - }, - { - "x": 20.53896, - "y": 47.69149 - }, - { - "x": 51.81452, - "y": 52.07644000000001 - }, - { - "x": 48.44256, - "y": 51.18517 - }, - { - "x": 62.44255, - "y": 45.78976 - }, - { - "x": 17.27593, - "y": 60.46275 - }, - { - "x": 53.77579, - "y": 65.79630999999999 - }, - { - "x": 37.08417, - "y": 63.94993 - }, - { - "x": 47.97955, - "y": 55.61669000000001 - }, - { - "x": 35.22937, - "y": 74.55077 - }, - { - "x": 26.42555, - "y": 55.0765 - }, - { - "x": 40.20962, - "y": 64.5191 - }, - { - "x": 58.95403, - "y": 59.6799 - }, - { - "x": 17.213810000000002, - "y": 69.54397 - }, - { - "x": 32.95241, - "y": 52.18707 - }, - { - "x": 59.68467, - "y": 40.53054 - }, - { - "x": 30.58042, - "y": 63.08006999999999 - }, - { - "x": 48.74949, - "y": 70.51133 - }, - { - "x": 50.65636, - "y": 59.32031 - }, - { - "x": 40.4251, - "y": 50.73494 - }, - { - "x": 45.28402, - "y": 51.53691 - }, - { - "x": 34.34718, - "y": 47.58747 - }, - { - "x": 38.59024, - "y": 51.33721 - }, - { - "x": 40.71961, - "y": 74.12315 - }, - { - "x": 40.37913, - "y": 50.36806 - }, - { - "x": 47.26266, - "y": 70.09016 - }, - { - "x": 34.55216, - "y": 56.49265 - }, - { - "x": 42.125, - "y": 66.37105 - }, - { - "x": 56.81907, - "y": 44.97096 - }, - { - "x": 53.69396999999999, - "y": 66.83374 - }, - { - "x": 45.11847, - "y": 74.85613000000002 - }, - { - "x": 27.42444, - "y": 66.70893000000001 - }, - { - "x": 11.50407, - "y": 56.95046 - }, - { - "x": 49.0322, - "y": 62.76543 - }, - { - "x": 23.48502, - "y": 75.85309000000002 - }, - { - "x": 50.98872, - "y": 71.68141 - }, - { - "x": 27.57767, - "y": 62.33503 - }, - { - "x": 47.66222, - "y": 65.10868 - }, - { - "x": 45.13893, - "y": 67.17903000000001 - }, - { - "x": 45.78568, - "y": 69.31007 - }, - { - "x": 47.92223, - "y": 65.00936 - }, - { - "x": 48.03205, - "y": 47.78571 - }, - { - "x": 43.65009000000001, - "y": 56.48259 - }, - { - "x": 28.54301, - "y": 59.48517 - }, - { - "x": 48.14451, - "y": 60.26351 - }, - { - "x": 30.73458, - "y": 53.41976 - }, - { - "x": 41.65806, - "y": 72.97176999999998 - }, - { - "x": 47.42073, - "y": 72.11551 - }, - { - "x": 54.31567, - "y": 51.07155 - }, - { - "x": 37.98036, - "y": 67.0989 - }, - { - "x": 58.32997, - "y": 63.25209 - }, - { - "x": 43.19876, - "y": 60.36071999999999 - }, - { - "x": 28.113090000000003, - "y": 72.51996 - }, - { - "x": 37.01089, - "y": 69.21339 - }, - { - "x": 32.97436, - "y": 69.77639 - }, - { - "x": 34.20864, - "y": 61.29887 - }, - { - "x": 31.93696, - "y": 62.87588 - }, - { - "x": 30.94324000000001, - "y": 70.95922 - }, - { - "x": 43.49319000000001, - "y": 59.84101 - }, - { - "x": 27.81164, - "y": 72.67459000000002 - }, - { - "x": 32.15255, - "y": 42.51905 - }, - { - "x": 51.29612, - "y": 79.81878 - }, - { - "x": 38.0315, - "y": 54.71503000000001 - }, - { - "x": 29.27812, - "y": 62.24455 - }, - { - "x": 44.40411, - "y": 68.84855 - }, - { - "x": 23.34787, - "y": 61.94084 - }, - { - "x": 49.36656, - "y": 64.14016 - }, - { - "x": 17.60005, - "y": 69.14876 - }, - { - "x": 30.85341, - "y": 54.0978 - }, - { - "x": 44.90497, - "y": 63.7959 - }, - { - "x": 57.36587, - "y": 58.50857 - }, - { - "x": 49.0943, - "y": 69.75703 - }, - { - "x": 26.6611, - "y": 68.32285 - }, - { - "x": 40.70467, - "y": 53.43072 - }, - { - "x": 28.55086, - "y": 56.30226 - }, - { - "x": 36.25912, - "y": 59.3196 - }, - { - "x": 48.98826, - "y": 66.10667 - }, - { - "x": 33.26312, - "y": 69.86829 - }, - { - "x": 32.02353, - "y": 58.18483000000001 - }, - { - "x": 27.304240000000004, - "y": 55.4792 - }, - { - "x": 51.44975, - "y": 71.13834 - }, - { - "x": 59.81329, - "y": 47.9164 - }, - { - "x": 51.14651, - "y": 60.19600000000001 - }, - { - "x": 61.69583000000001, - "y": 47.11762 - }, - { - "x": 36.56804, - "y": 68.23382 - }, - { - "x": 40.64832, - "y": 66.75034000000001 - }, - { - "x": 45.86368, - "y": 68.31128000000001 - }, - { - "x": 44.60644, - "y": 60.16793000000001 - }, - { - "x": 35.88663, - "y": 49.38532 - }, - { - "x": 57.68279, - "y": 60.16859 - }, - { - "x": 51.6255, - "y": 49.49683 - }, - { - "x": 42.5861, - "y": 62.54503 - }, - { - "x": 46.0202, - "y": 56.69676 - }, - { - "x": 46.45453, - "y": 58.70955 - }, - { - "x": 38.30502, - "y": 49.6469 - }, - { - "x": 48.84556, - "y": 65.31183 - }, - { - "x": 30.15666, - "y": 63.67134 - }, - { - "x": 38.53791, - "y": 56.76666 - }, - { - "x": 23.9704, - "y": 68.72659 - }, - { - "x": 50.02861, - "y": 63.9783 - }, - { - "x": 45.18616, - "y": 61.15616 - }, - { - "x": 43.502, - "y": 73.08999 - }, - { - "x": 44.7494, - "y": 43.9657 - }, - { - "x": 60.56076, - "y": 43.47697 - }, - { - "x": 51.11581, - "y": 80.65344 - }, - { - "x": 35.88928, - "y": 62.03462 - }, - { - "x": 32.33509, - "y": 52.6811 - }, - { - "x": 49.07877, - "y": 68.18728 - }, - { - "x": 50.33895, - "y": 64.57106 - }, - { - "x": 49.26652, - "y": 79.60231 - }, - { - "x": 18.55579, - "y": 68.16774000000001 - }, - { - "x": 41.00905, - "y": 45.10266 - }, + "x": 14.37, + "y": 14.39 + } + ] + }, + { + "clusterNr": 1, + "centroid": { + "x": 18.969310344827587, + "y": 16.382758620689657 + }, + "points": [ { - "x": 28.00344, - "y": 61.47371 + "x": 19.11, + "y": 16.26 }, { - "x": 18.14624, - "y": 60.1302 + "x": 19.57, + "y": 16.74 }, { - "x": 53.95843000000001, - "y": 68.46303 + "x": 19.51, + "y": 16.71 }, { - "x": 52.5372, - "y": 68.16769000000001 + "x": 18.27, + "y": 16.09 }, { - "x": 38.93926, - "y": 62.98392 + "x": 18.88, + "y": 16.26 }, { - "x": 29.05058, - "y": 62.4427 + "x": 20.1, + "y": 16.99 }, { - "x": 41.75223, - "y": 64.63294 + "x": 18.76, + "y": 16.2 }, { - "x": 37.64791, - "y": 47.91551 + "x": 18.81, + "y": 16.29 }, { - "x": 48.79252, - "y": 64.57806 + "x": 19.31, + "y": 16.59 }, { - "x": 51.77635, - "y": 55.95868000000001 + "x": 18.98, + "y": 16.57 }, { - "x": 27.10765, - "y": 58.84145 + "x": 18.17, + "y": 16.26 }, { - "x": 38.6845, - "y": 49.5615 + "x": 18.72, + "y": 16.34 }, { - "x": 44.48639, - "y": 56.53763000000001 + "x": 17.99, + "y": 15.86 }, { - "x": 23.60541, - "y": 43.46694 + "x": 19.18, + "y": 16.63 }, { - "x": 38.7037, - "y": 61.0992 + "x": 18.95, + "y": 16.42 }, { - "x": 43.00739, - "y": 55.95437 + "x": 18.83, + "y": 16.29 }, { - "x": 51.56791, - "y": 63.63943 + "x": 18.85, + "y": 16.17 }, { - "x": 25.26915, - "y": 63.87523 + "x": 19.94, + "y": 16.92 }, { - "x": 42.56982, - "y": 67.66801 + "x": 18.55, + "y": 16.22 }, { - "x": 38.08915, - "y": 64.5408 + "x": 18.45, + "y": 16.12 }, { - "x": 34.78496, - "y": 45.51393 + "x": 19.13, + "y": 16.31 }, { - "x": 35.88933, - "y": 55.3666 + "x": 19.06, + "y": 16.45 }, { - "x": 47.22242, - "y": 66.03583 + "x": 19.15, + "y": 16.45 }, { - "x": 51.96253, - "y": 51.7511 + "x": 20.03, + "y": 16.9 }, { - "x": 40.78976, - "y": 59.28554000000001 + "x": 18.43, + "y": 15.97 }, { - "x": 41.27407, - "y": 67.80852 + "x": 17.98, + "y": 15.85 }, { - "x": 44.66972, - "y": 69.17705 + "x": 20.16, + "y": 17.03 }, { - "x": 39.15088, - "y": 54.56051 + "x": 18.3, + "y": 15.89 }, { - "x": 29.16955, - "y": 64.9487 - }, + "x": 18.94, + "y": 16.32 + } + ] + }, + { + "clusterNr": 2, + "centroid": { + "x": 10.994444444444445, + "y": 12.76222222222222 + }, + "points": [ { - "x": 31.77423, - "y": 66.87607 + "x": 11.27, + "y": 12.97 }, { - "x": 53.4651, - "y": 62.77485 + "x": 10.8, + "y": 12.57 }, { - "x": 40.41047, - "y": 72.14114000000002 + "x": 10.74, + "y": 12.73 }, { - "x": 42.61213, - "y": 59.06376 + "x": 11.41, + "y": 12.95 }, { - "x": 39.57467000000001, - "y": 62.27438000000001 + "x": 10.91, + "y": 12.8 }, { - "x": 54.50277, - "y": 49.35228 + "x": 10.59, + "y": 12.41 }, { - "x": 57.91767, - "y": 56.73445 + "x": 10.82, + "y": 12.83 }, { - "x": 45.64944000000001, - "y": 53.13589 + "x": 11.18, + "y": 12.72 }, { - "x": 21.88918, - "y": 49.30231 - }, + "x": 11.23, + "y": 12.88 + } + ] + }, + { + "clusterNr": 3, + "centroid": { + "x": 15.907272727272725, + "y": 15.098181818181816 + }, + "points": [ { - "x": 51.04494, - "y": 68.31933000000001 + "x": 16.53, + "y": 15.34 }, { - "x": 42.09716, - "y": 72.15952 + "x": 16.41, + "y": 15.25 }, { - "x": 43.04227, - "y": 53.48631999999999 + "x": 16.17, + "y": 15.38 }, { - "x": 47.14463, - "y": 56.0835 + "x": 15.99, + "y": 14.89 }, { - "x": 45.62461, - "y": 77.81975 + "x": 15.38, + "y": 14.9 }, { - "x": 55.20789, - "y": 58.71653000000001 + "x": 16.16, + "y": 15.33 }, { - "x": 36.05181, - "y": 53.08629000000001 + "x": 15.56, + "y": 14.89 }, { - "x": 43.73998, - "y": 58.94337 + "x": 15.38, + "y": 14.66 }, { - "x": 34.23256, - "y": 65.07769 + "x": 15.57, + "y": 15.15 }, { - "x": 20.95196, - "y": 74.2487 + "x": 15.6, + "y": 15.11 }, { - "x": 32.883140000000004, - "y": 79.69149 - }, + "x": 16.23, + "y": 15.18 + } + ] + }, + { + "clusterNr": 4, + "centroid": { + "x": 12.53, + "y": 13.56111111111111 + }, + "points": [ { - "x": 38.36533, - "y": 59.0739 + "x": 13.07, + "y": 13.92 }, { - "x": 44.56165, - "y": 52.40328 + "x": 13.34, + "y": 13.95 }, { - "x": 39.33794, - "y": 70.14443 + "x": 12.22, + "y": 13.32 }, { - "x": 49.1245, - "y": 67.76719 + "x": 12.49, + "y": 13.46 }, { - "x": 22.91567, - "y": 56.11771 + "x": 12.26, + "y": 13.6 }, { - "x": 45.63892, - "y": 47.58675 + "x": 12.13, + "y": 13.73 }, { - "x": 42.75653, - "y": 63.07043 + "x": 12.05, + "y": 13.41 }, { - "x": 46.39609, - "y": 68.40751 + "x": 12.55, + "y": 13.57 }, { - "x": 46.88703, - "y": 66.433 + "x": 12.44, + "y": 13.59 }, { - "x": 54.88489000000001, - "y": 75.612 + "x": 12.46, + "y": 13.41 }, { - "x": 34.0548, - "y": 57.12219 + "x": 12.19, + "y": 13.36 }, { - "x": 37.38898, - "y": 62.3226 + "x": 12.89, + "y": 13.77 }, { - "x": 48.23034000000001, - "y": 62.03111 + "x": 11.81, + "y": 13.45 }, { - "x": 54.79646999999999, - "y": 59.39724 + "x": 12.8, + "y": 13.47 }, { - "x": 59.52773000000001, - "y": 50.58208 + "x": 12.79, + "y": 13.53 }, { - "x": 50.2512, - "y": 67.96679 + "x": 13.37, + "y": 13.78 }, { - "x": 46.22677, - "y": 54.53655 + "x": 12.38, + "y": 13.44 }, { - "x": 48.98464, - "y": 58.14621 - }, + "x": 12.3, + "y": 13.34 + } + ] + }, + { + "clusterNr": 5, + "centroid": { + "x": 18.901666666666667, + "y": 16.396666666666665 + }, + "points": [ { - "x": 45.09392, - "y": 64.88113 + "x": 18.94, + "y": 16.49 }, { - "x": 44.77223, - "y": 44.4438 + "x": 18.72, + "y": 16.19 }, { - "x": 34.00083, - "y": 59.08957 + "x": 18.98, + "y": 16.66 }, { - "x": 28.31505, - "y": 36.30374000000001 + "x": 18.59, + "y": 16.05 }, { - "x": 53.05011, - "y": 67.34682 + "x": 18.36, + "y": 16.52 }, { - "x": 25.10745, - "y": 42.70245 + "x": 19.46, + "y": 16.5 }, { - "x": 46.08558, - "y": 61.97675 + "x": 19.38, + "y": 16.72 }, { - "x": 50.62893, - "y": 45.19788 + "x": 19.14, + "y": 16.61 }, { - "x": 46.68802, - "y": 47.42063 + "x": 18.96, + "y": 16.2 }, { - "x": 43.07386, - "y": 77.93637 + "x": 18.89, + "y": 16.23 }, { - "x": 36.70228, - "y": 53.66054000000001 + "x": 18.75, + "y": 16.18 }, { - "x": 11.47373, - "y": 68.61527 - }, + "x": 18.65, + "y": 16.41 + } + ] + }, + { + "clusterNr": 6, + "centroid": { + "x": 12.102500000000001, + "y": 13.2675 + }, + "points": [ { - "x": 42.08087, - "y": 66.43765 + "x": 11.43, + "y": 13.13 }, { - "x": 37.96224, - "y": 52.46353000000001 + "x": 12.1, + "y": 13.15 }, { - "x": 28.30779, - "y": 70.53446 + "x": 12.21, + "y": 13.47 }, { - "x": 59.18555, - "y": 62.19979 - }, + "x": 12.67, + "y": 13.32 + } + ] + }, + { + "clusterNr": 7, + "centroid": { + "x": 15.5075, + "y": 14.89 + }, + "points": [ { - "x": 43.39802, - "y": 63.35423 + "x": 15.26, + "y": 14.85 }, { - "x": 37.68739, - "y": 55.33306 + "x": 15.49, + "y": 14.94 }, { - "x": 48.85135, - "y": 64.6936 + "x": 15.5, + "y": 14.86 }, { - "x": 42.29553, - "y": 61.3545 - }, + "x": 15.78, + "y": 14.91 + } + ] + }, + { + "clusterNr": 8, + "centroid": { + "x": 12.473333333333334, + "y": 13.386666666666665 + }, + "points": [ { - "x": 53.10208000000001, - "y": 61.65183 + "x": 12.72, + "y": 13.57 }, { - "x": 44.18706, - "y": 56.29505 + "x": 13.02, + "y": 13.76 }, { - "x": 47.34497, - "y": 61.47756999999999 + "x": 12.74, + "y": 13.67 }, { - "x": 34.5298, - "y": 67.07189 + "x": 13.16, + "y": 13.55 }, { - "x": 22.82447, - "y": 57.02137 + "x": 11.42, + "y": 12.86 }, { - "x": 48.27827, - "y": 53.97093 + "x": 11.23, + "y": 12.63 }, { - "x": 45.27673, - "y": 52.04495 + "x": 12.36, + "y": 13.19 }, { - "x": 44.17967, - "y": 64.35678 + "x": 12.88, + "y": 13.5 }, { - "x": 33.85752, - "y": 60.59858000000001 - }, + "x": 12.73, + "y": 13.75 + } + ] + }, + { + "clusterNr": 9, + "centroid": { + "x": 15.590588235294119, + "y": 14.884117647058826 + }, + "points": [ { - "x": 29.57068, - "y": 55.91483 + "x": 15.26, + "y": 14.84 }, { - "x": 43.5061, - "y": 62.07275 + "x": 14.88, + "y": 14.57 }, { - "x": 26.33832, - "y": 73.38955 + "x": 16.14, + "y": 14.99 }, { - "x": 13.77208, - "y": 64.03381 + "x": 16.63, + "y": 15.46 }, { - "x": 37.39434, - "y": 60.17785 + "x": 16.44, + "y": 15.25 }, { - "x": 25.09434, - "y": 55.0823 + "x": 15.69, + "y": 14.75 }, { - "x": 41.91991, - "y": 45.2935 + "x": 15.88, + "y": 14.9 }, { - "x": 54.314780000000006, - "y": 53.6106 + "x": 15.01, + "y": 14.76 }, { - "x": 42.18649, - "y": 61.34159 + "x": 16.19, + "y": 15.16 }, { - "x": 47.74056, - "y": 60.98222 + "x": 15.05, + "y": 14.68 }, { - "x": 38.6671, - "y": 54.8464 + "x": 16.12, + "y": 15 }, { - "x": 34.33136, - "y": 63.66866 + "x": 16.2, + "y": 15.27 }, { - "x": 45.49676, - "y": 46.21109000000001 + "x": 15.36, + "y": 14.76 }, { - "x": 48.64805, - "y": 50.69878 + "x": 14.86, + "y": 14.67 }, { - "x": 59.7194, - "y": 53.67238 + "x": 15.03, + "y": 14.77 }, { - "x": 48.14389, - "y": 64.17408 + "x": 14.92, + "y": 14.43 }, { - "x": 55.16922, - "y": 76.47846 - }, + "x": 15.38, + "y": 14.77 + } + ] + }, + { + "clusterNr": 10, + "centroid": { + "x": 20.696666666666665, + "y": 17.09 + }, + "points": [ { - "x": 51.50727, - "y": 65.82463 + "x": 20.71, + "y": 17.23 }, { - "x": 42.69824000000001, - "y": 71.33099 + "x": 20.2, + "y": 16.89 }, { - "x": 52.7367, - "y": 66.52017 + "x": 21.18, + "y": 17.21 }, { - "x": 44.49347, - "y": 44.03264 + "x": 20.88, + "y": 17.05 }, { - "x": 42.79715, - "y": 51.57061 + "x": 20.97, + "y": 17.25 }, { - "x": 50.60694, - "y": 52.83994000000001 - }, + "x": 20.24, + "y": 16.91 + } + ] + }, + { + "clusterNr": 11, + "centroid": { + "x": 14.106250000000001, + "y": 14.258750000000001 + }, + "points": [ { - "x": 37.5125, - "y": 68.15924 + "x": 14.69, + "y": 14.49 }, { - "x": 46.73844, - "y": 65.58825 + "x": 13.89, + "y": 14.02 }, { - "x": 30.74257, - "y": 54.61626999999999 + "x": 14.59, + "y": 14.28 }, { - "x": 52.50878, - "y": 63.62914 + "x": 13.45, + "y": 14.02 }, { - "x": 18.06539, - "y": 67.96441 + "x": 14.09, + "y": 14.41 }, { - "x": 36.22066, - "y": 49.6668 + "x": 14.43, + "y": 14.4 }, { - "x": 26.8746, - "y": 69.52796 + "x": 14.49, + "y": 14.61 }, { - "x": 46.44655, - "y": 53.95027 - }, + "x": 13.22, + "y": 13.84 + } + ] + }, + { + "clusterNr": 12, + "centroid": { + "x": 13.073333333333332, + "y": 13.670000000000002 + }, + "points": [ { - "x": 37.5481, - "y": 59.69554 + "x": 13.32, + "y": 13.94 }, { - "x": 26.17275, - "y": 73.02736 + "x": 12.7, + "y": 13.41 }, { - "x": 42.92903, - "y": 70.03363 - }, + "x": 13.2, + "y": 13.66 + } + ] + }, + { + "clusterNr": 13, + "centroid": { + "x": 11.593076923076923, + "y": 13.153846153846157 + }, + "points": [ { - "x": 36.25652, - "y": 64.53602 + "x": 11.82, + "y": 13.4 }, { - "x": 32.719390000000004, - "y": 57.83974 + "x": 11.18, + "y": 13.04 }, { - "x": 45.61599, - "y": 61.58367 + "x": 11.36, + "y": 13.05 }, { - "x": 39.26789, - "y": 57.98376 + "x": 11.34, + "y": 12.87 }, { - "x": 34.55469, - "y": 66.68845 + "x": 11.75, + "y": 13.52 }, { - "x": 36.45908, - "y": 70.13852 + "x": 12.02, + "y": 13.33 }, { - "x": 41.83166, - "y": 77.96375 + "x": 11.35, + "y": 13.12 }, { - "x": 25.83818, - "y": 63.53773 + "x": 11.24, + "y": 13 }, { - "x": 27.9007, - "y": 58.79853000000001 + "x": 11.56, + "y": 13.31 }, { - "x": 41.00502, - "y": 68.62589 + "x": 11.27, + "y": 12.86 }, { - "x": 34.09975, - "y": 75.41776999999998 + "x": 11.87, + "y": 13.02 }, { - "x": 29.14662, - "y": 51.12136 + "x": 12.11, + "y": 13.27 }, { - "x": 41.39825, - "y": 53.92034 - }, + "x": 11.84, + "y": 13.21 + } + ] + }, + { + "clusterNr": 14, + "centroid": { + "x": 12.475714285714286, + "y": 13.507142857142856 + }, + "points": [ { - "x": 54.13261, - "y": 51.89971 + "x": 12.7, + "y": 13.71 }, { - "x": 36.2243, - "y": 62.59828 + "x": 12.54, + "y": 13.67 }, { - "x": 29.95055, - "y": 56.40722 + "x": 12.15, + "y": 13.45 }, { - "x": 46.80503, - "y": 70.14497 + "x": 12.62, + "y": 13.67 }, { - "x": 41.96831, - "y": 67.27118 + "x": 12.76, + "y": 13.38 }, { - "x": 12.71827, - "y": 62.29628 + "x": 12.37, + "y": 13.47 }, { - "x": 44.39297, - "y": 59.58195 - }, + "x": 12.19, + "y": 13.2 + } + ] + }, + { + "clusterNr": 15, + "centroid": { + "x": 12.5325, + "y": 13.5225 + }, + "points": [ { - "x": 24.46523, - "y": 63.57868000000001 + "x": 12.08, + "y": 13.23 }, { - "x": 29.6177, - "y": 59.74445 + "x": 13.16, + "y": 13.82 }, { - "x": 21.74248, - "y": 50.45285 + "x": 12.11, + "y": 13.47 }, { - "x": 29.35508, - "y": 70.05808 - }, + "x": 12.78, + "y": 13.57 + } + ] + }, + { + "clusterNr": 16, + "centroid": { + "x": 17.260769230769235, + "y": 15.723076923076924 + }, + "points": [ { - "x": 27.226440000000004, - "y": 75.18531999999998 + "x": 17.08, + "y": 15.38 }, { - "x": 51.79697, - "y": 61.69157 + "x": 17.63, + "y": 15.98 }, { - "x": 44.62026, - "y": 47.41006 + "x": 16.84, + "y": 15.67 }, { - "x": 34.06684, - "y": 52.82305 + "x": 17.26, + "y": 15.73 }, { - "x": 43.62076, - "y": 50.27394 + "x": 16.82, + "y": 15.51 }, { - "x": 42.41596, - "y": 68.93131 + "x": 16.77, + "y": 15.62 }, { - "x": 49.61633, - "y": 54.8229 + "x": 17.32, + "y": 15.91 }, { - "x": 33.73294, - "y": 67.42624 + "x": 17.12, + "y": 15.55 }, { - "x": 55.72386, - "y": 76.51932 + "x": 16.87, + "y": 15.65 }, { - "x": 27.83457000000001, - "y": 62.72257 + "x": 17.63, + "y": 15.86 }, { - "x": 49.89798, - "y": 51.15889 + "x": 18.14, + "y": 16.12 }, { - "x": 60.58085, - "y": 69.45195 + "x": 17.55, + "y": 15.66 }, { - "x": 56.16206999999999, - "y": 70.20759 - }, + "x": 17.36, + "y": 15.76 + } + ] + }, + { + "clusterNr": 17, + "centroid": { + "x": 11.27818181818182, + "y": 13.048181818181819 + }, + "points": [ { - "x": 51.31114, - "y": 74.59144 + "x": 11.21, + "y": 13.13 }, { - "x": 40.39541, - "y": 54.17054 + "x": 10.79, + "y": 12.93 }, { - "x": 52.45226, - "y": 55.42988 + "x": 11.83, + "y": 13.23 }, { - "x": 45.69188, - "y": 51.24299 + "x": 11.19, + "y": 13.05 }, { - "x": 45.85658, - "y": 65.63105 + "x": 11.49, + "y": 13.22 }, { - "x": 55.69338000000001, - "y": 65.96500999999999 + "x": 11.4, + "y": 13.08 }, { - "x": 36.04146, - "y": 62.1499 + "x": 10.83, + "y": 12.96 }, { - "x": 28.33257, - "y": 70.274 + "x": 11.26, + "y": 13.01 }, { - "x": 41.79587, - "y": 77.08113 + "x": 11.48, + "y": 13.05 }, { - "x": 38.54986, - "y": 81.29446999999998 + "x": 11.65, + "y": 13.07 }, { - "x": 40.67175, - "y": 54.77458000000001 - }, + "x": 10.93, + "y": 12.8 + } + ] + }, + { + "clusterNr": 18, + "centroid": { + "x": 14.135, + "y": 14 + }, + "points": [ { - "x": 38.67076, - "y": 67.80664 + "x": 13.99, + "y": 13.83 }, { - "x": 35.75459, - "y": 52.14807 - }, + "x": 14.28, + "y": 14.17 + } + ] + }, + { + "clusterNr": 19, + "centroid": { + "x": 11.39, + "y": 13.046000000000001 + }, + "points": [ { - "x": 47.64047, - "y": 62.95349 + "x": 12.01, + "y": 13.52 }, { - "x": 44.38814, - "y": 50.86422 + "x": 11.14, + "y": 12.79 }, { - "x": 55.07092, - "y": 45.49946 + "x": 11.02, + "y": 13 }, { - "x": 47.48012, - "y": 58.80583000000001 + "x": 11.55, + "y": 13.1 }, { - "x": 40.05356, - "y": 72.84874 - }, + "x": 11.23, + "y": 12.82 + } + ] + }, + { + "clusterNr": 20, + "centroid": { + "x": 14.368571428571428, + "y": 14.294285714285717 + }, + "points": [ { - "x": 41.29422, - "y": 67.83528000000001 + "x": 14.29, + "y": 14.09 }, { - "x": 36.53526, - "y": 78.04978 + "x": 14.38, + "y": 14.21 }, { - "x": 23.52244, - "y": 51.33826 + "x": 14.11, + "y": 14.1 }, { - "x": 42.98621, - "y": 55.51208000000001 + "x": 13.78, + "y": 14.06 }, { - "x": 25.60867, - "y": 47.51016 + "x": 13.74, + "y": 14.05 }, { - "x": 31.30385, - "y": 71.48902 + "x": 14.16, + "y": 14.4 }, { - "x": 54.79936, - "y": 68.69215 + "x": 14.11, + "y": 14.26 }, { - "x": 33.320640000000004, - "y": 69.45271 + "x": 14.11, + "y": 14.18 }, { - "x": 42.24906, - "y": 47.52644 + "x": 14.8, + "y": 14.52 }, { - "x": 29.504, - "y": 48.87712 + "x": 15.11, + "y": 14.54 }, { - "x": 31.42953, - "y": 52.80237 + "x": 14.99, + "y": 14.56 }, { - "x": 51.66205, - "y": 57.32731999999999 + "x": 14.79, + "y": 14.52 }, { - "x": 38.16498, - "y": 53.45429 + "x": 14.33, + "y": 14.28 }, { - "x": 44.65573, - "y": 61.14825 + "x": 14.46, + "y": 14.35 } ] } ], - "x_label": "V1", - "y_label": "V2", - "iterations": 2, - "distance_metric": "EUCLIDEAN", - "silhouette_score": 0.6945587736089913, - "davies_bouldin_index": 0.4205615850847846 + "x_label": "A", + "y_label": "P", + "iterations": 4, + "used_distance_metric": "EUCLIDEAN", + "used_optK_method": "ELBOW", + "clusters_elbow": 21, + "clusters_silhouette": 2 } diff --git a/src/app/home/home-services/api.service.spec.ts b/src/app/home/home-services/api.service.spec.ts new file mode 100644 index 0000000..c0310ae --- /dev/null +++ b/src/app/home/home-services/api.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing'; + +import { ApiService } from './api.service'; + +describe('ApiService', () => { + let service: ApiService; + + beforeEach(() => { + TestBed.configureTestingModule({}); + service = TestBed.inject(ApiService); + }); + + it('should be created', () => { + expect(service).toBeTruthy(); + }); +}); diff --git a/src/app/home/home-services/api.service.ts b/src/app/home/home-services/api.service.ts new file mode 100644 index 0000000..9ff492f --- /dev/null +++ b/src/app/home/home-services/api.service.ts @@ -0,0 +1,49 @@ +import { Injectable } from '@angular/core'; +import {HttpClient, HttpParams} from "@angular/common/http"; +import {Observable} from "rxjs"; +import {ResponseInterface} from "../../interfaces/response-interface"; + +@Injectable({ + providedIn: 'root' +}) +export class ApiService { + + public postKmeans( + csv: File, + column1?: number, + column2?: number, + kCluster?: number, + distanceMetric?: string, + clusterDetermination?: string, + ): Observable { + + const Params: HttpParams = new HttpParams() + + if (column1) { + Params.set('column1', column1); + } + if (column2) { + Params.set('column2', column2); + } + if (kCluster) { + Params.set('kCluster', kCluster); + } + if (distanceMetric) { + Params.set('distanceMetric', distanceMetric); + } + if (clusterDetermination) { + Params.set('clusterDetermination', clusterDetermination); + } + + const formData = new FormData() + formData.append( 'file', new Blob([csv], { type: 'text/csv' }), csv.name); + + return this.http.post( + 'https://beta.axellotl.de/clustering/perform-kmeans-clustering/', + formData, + {params: Params} + ) + } + + constructor(private http: HttpClient) { } +} diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html index 9ce76f0..86adfa9 100644 --- a/src/app/home/home.component.html +++ b/src/app/home/home.component.html @@ -22,7 +22,7 @@

Historie

- +
diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index a367c33..b44134e 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -1,5 +1,6 @@ import { Component } from '@angular/core'; import {Router} from "@angular/router"; +import {ResponseInterface} from "../interfaces/response-interface"; @Component({ selector: 'app-home', @@ -7,9 +8,15 @@ import {Router} from "@angular/router"; styleUrls: ['./home.component.css'] }) export class HomeComponent { + apiResponse: ResponseInterface | undefined; constructor(private router: Router) {} + public handleAPIResponse(response: ResponseInterface) { + this.apiResponse = response; + console.log(this.apiResponse); + } + public routeToLogin(){ this.router.navigate(['/login']) } diff --git a/src/app/home/input/input.component.ts b/src/app/home/input/input.component.ts index 62f3602..deafe37 100644 --- a/src/app/home/input/input.component.ts +++ b/src/app/home/input/input.component.ts @@ -1,7 +1,9 @@ -import { Component } from '@angular/core'; +import {Component, EventEmitter, Output} from '@angular/core'; import {FormControl, FormGroup} from "@angular/forms"; -import {HttpClient} from "@angular/common/http"; +import {HttpClient, HttpResponse} from "@angular/common/http"; import {MatSnackBar} from "@angular/material/snack-bar"; +import {ApiService} from "../home-services/api.service"; +import {ResponseInterface} from "../../interfaces/response-interface"; @Component({ selector: 'app-input', @@ -13,8 +15,13 @@ export class InputComponent { clusterName: new FormControl(''), k: new FormControl(''), }); + @Output() apiResponse: EventEmitter = new EventEmitter() + // apiResponse: ResponseInterface | undefined; - constructor(private http: HttpClient, private snackbar: MatSnackBar) { //http wird später für die API Anbindung benutzt + constructor( + private snackbar: MatSnackBar, + private apiService: ApiService, + ) { //http wird später für die API Anbindung benutzt } public file?: File; @@ -34,15 +41,18 @@ export class InputComponent { } onChange(event:any){ - this.onFileChange(event.target.files[0]); } private onFileChange(file: File){ - if(file.type == 'text/csv' || file.type =='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'){ this.file = file; this.snackbar.open('Ich lade die Datei '+file.name+' hoch wenn die API Jungs soweit sind','Okay'); + + this.apiService.postKmeans(this.file, 2).subscribe((response: ResponseInterface) => { + // console.log(response); + this.apiResponse.emit(response); + }) } else { this.snackbar.open('Falsches Dateiformat','Okay'); diff --git a/src/app/interfaces/response-interface.ts b/src/app/interfaces/response-interface.ts index 69d160a..b764a63 100644 --- a/src/app/interfaces/response-interface.ts +++ b/src/app/interfaces/response-interface.ts @@ -1,12 +1,15 @@ export interface ResponseInterface { + "user_id": number, + "request_id": number, "name": string, "cluster": Array, "x_label": string, "y_label": string, "iterations": number, - "distance_metric": string, - "silhouette_score": number, - "davies_bouldin_index": number, + "used_distance_metric": string, + "used_optK_method": string, + "clusters_elbow": number, + "clusters_silhouette": number, } interface Cluster { From a9497222ec3ed8eaec12dc16f72778e47d162666 Mon Sep 17 00:00:00 2001 From: cepurwin Date: Tue, 26 Sep 2023 10:51:56 +0200 Subject: [PATCH 08/24] Removed unused imports --- src/app/home/home-services/api.service.ts | 1 - src/app/home/input/input.component.ts | 1 - 2 files changed, 2 deletions(-) diff --git a/src/app/home/home-services/api.service.ts b/src/app/home/home-services/api.service.ts index 9ff492f..ab8c148 100644 --- a/src/app/home/home-services/api.service.ts +++ b/src/app/home/home-services/api.service.ts @@ -1,7 +1,6 @@ import { Injectable } from '@angular/core'; import {HttpClient, HttpParams} from "@angular/common/http"; import {Observable} from "rxjs"; -import {ResponseInterface} from "../../interfaces/response-interface"; @Injectable({ providedIn: 'root' diff --git a/src/app/home/input/input.component.ts b/src/app/home/input/input.component.ts index deafe37..f9b276e 100644 --- a/src/app/home/input/input.component.ts +++ b/src/app/home/input/input.component.ts @@ -1,6 +1,5 @@ import {Component, EventEmitter, Output} from '@angular/core'; import {FormControl, FormGroup} from "@angular/forms"; -import {HttpClient, HttpResponse} from "@angular/common/http"; import {MatSnackBar} from "@angular/material/snack-bar"; import {ApiService} from "../home-services/api.service"; import {ResponseInterface} from "../../interfaces/response-interface"; From 0dc3ea4e6f10d3cc3e312b3df9f95b36a0632e29 Mon Sep 17 00:00:00 2001 From: cepurwin Date: Tue, 26 Sep 2023 11:17:44 +0200 Subject: [PATCH 09/24] Chart gets displayed after csv upload --- .../chart-container.component.html | 2 +- .../chart-container.component.ts | 4 +++- .../chart-container/chart/chart.component.ts | 20 +++++++++++++++---- src/app/home/home.component.html | 2 +- src/app/home/input/input.component.ts | 3 +-- 5 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/app/home/chart-container/chart-container.component.html b/src/app/home/chart-container/chart-container.component.html index df7ab95..79d1413 100644 --- a/src/app/home/chart-container/chart-container.component.html +++ b/src/app/home/chart-container/chart-container.component.html @@ -1 +1 @@ - + diff --git a/src/app/home/chart-container/chart-container.component.ts b/src/app/home/chart-container/chart-container.component.ts index 7aa525c..4585505 100644 --- a/src/app/home/chart-container/chart-container.component.ts +++ b/src/app/home/chart-container/chart-container.component.ts @@ -1,4 +1,5 @@ -import { Component } from '@angular/core'; +import {Component, Input} from '@angular/core'; +import {ResponseInterface} from "../../interfaces/response-interface"; @Component({ selector: 'app-chart-container', @@ -6,4 +7,5 @@ import { Component } from '@angular/core'; styleUrls: ['./chart-container.component.css'] }) export class ChartContainerComponent { + @Input() apiResponse: ResponseInterface | undefined; } diff --git a/src/app/home/chart-container/chart/chart.component.ts b/src/app/home/chart-container/chart/chart.component.ts index b096235..35277ea 100644 --- a/src/app/home/chart-container/chart/chart.component.ts +++ b/src/app/home/chart-container/chart/chart.component.ts @@ -1,4 +1,4 @@ -import {AfterViewInit, Component} from '@angular/core'; +import {AfterViewInit, Component, Input, OnChanges, SimpleChanges} from '@angular/core'; import {Chart} from "chart.js/auto"; import {Points, ResponseInterface} from "../../../interfaces/response-interface"; import {CentroidDatesetInterface, ChartDatasetInterface} from "../../../interfaces/chartDataset-interface"; @@ -9,19 +9,31 @@ import {MockDaten} from "./mock-daten"; templateUrl: './chart.component.html', styleUrls: ['./chart.component.css'] }) -export class ChartComponent implements AfterViewInit{ +export class ChartComponent implements AfterViewInit, OnChanges{ public chart: any; - MockData: ResponseInterface = MockDaten + chartData: ResponseInterface = MockDaten datasets: Array = []; + @Input() apiResponse: ResponseInterface | undefined; ngAfterViewInit() { this.renderChart(); } + ngOnChanges(changes: SimpleChanges) { + if (changes['apiResponse'].currentValue != undefined){ + if(this.apiResponse){ + this.datasets = []; + this.chartData = this.apiResponse; + } + this.chart.destroy() + this.renderChart() + } + } + generateDatasets() { let centroids: Array = []; let clusterArray: Array = []; - this.MockData.cluster.map(cluster => { + this.chartData.cluster.map(cluster => { let dataset: ChartDatasetInterface = { label: "Cluster " + (cluster.clusterNr + 1), data: cluster.points diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html index 86adfa9..bc050ae 100644 --- a/src/app/home/home.component.html +++ b/src/app/home/home.component.html @@ -25,7 +25,7 @@

Historie

- +
diff --git a/src/app/home/input/input.component.ts b/src/app/home/input/input.component.ts index f9b276e..eaeb63f 100644 --- a/src/app/home/input/input.component.ts +++ b/src/app/home/input/input.component.ts @@ -15,7 +15,6 @@ export class InputComponent { k: new FormControl(''), }); @Output() apiResponse: EventEmitter = new EventEmitter() - // apiResponse: ResponseInterface | undefined; constructor( private snackbar: MatSnackBar, @@ -48,7 +47,7 @@ export class InputComponent { this.file = file; this.snackbar.open('Ich lade die Datei '+file.name+' hoch wenn die API Jungs soweit sind','Okay'); - this.apiService.postKmeans(this.file, 2).subscribe((response: ResponseInterface) => { + this.apiService.postKmeans(this.file, 1, 2).subscribe((response: ResponseInterface) => { // console.log(response); this.apiResponse.emit(response); }) From f905d9fb293b0031e200c906f23a7fd134e9c912 Mon Sep 17 00:00:00 2001 From: cepurwin Date: Tue, 26 Sep 2023 11:35:44 +0200 Subject: [PATCH 10/24] Testupload working --- .../chart-container/chart/chart.component.ts | 6 +++--- src/app/home/home-services/api.service.ts | 18 ++++++++++-------- src/app/home/input/input.component.ts | 2 +- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/app/home/chart-container/chart/chart.component.ts b/src/app/home/chart-container/chart/chart.component.ts index 35277ea..2ff3341 100644 --- a/src/app/home/chart-container/chart/chart.component.ts +++ b/src/app/home/chart-container/chart/chart.component.ts @@ -75,20 +75,20 @@ export class ChartComponent implements AfterViewInit, OnChanges{ plugins: { title: { display: true, - text: MockDaten.name + text: this.chartData.name }, }, scales: { y: { title: { display: true, - text: MockDaten.y_label + text: this.chartData.y_label } }, x: { title: { display: true, - text: MockDaten.x_label + text: this.chartData.x_label } } } diff --git a/src/app/home/home-services/api.service.ts b/src/app/home/home-services/api.service.ts index ab8c148..a112a81 100644 --- a/src/app/home/home-services/api.service.ts +++ b/src/app/home/home-services/api.service.ts @@ -16,27 +16,29 @@ export class ApiService { clusterDetermination?: string, ): Observable { - const Params: HttpParams = new HttpParams() + let Params: HttpParams = new HttpParams() - if (column1) { - Params.set('column1', column1); + if (column1 && column1 != -1) { + Params = Params.set('column1', column1); } - if (column2) { - Params.set('column2', column2); + if (column2 && column2 != -1) { + Params = Params.set('column2', column2); } if (kCluster) { - Params.set('kCluster', kCluster); + Params = Params.set('kCluster', kCluster); } if (distanceMetric) { - Params.set('distanceMetric', distanceMetric); + Params = Params.set('distanceMetric', distanceMetric); } if (clusterDetermination) { - Params.set('clusterDetermination', clusterDetermination); + Params = Params.set('clusterDetermination', clusterDetermination); } const formData = new FormData() formData.append( 'file', new Blob([csv], { type: 'text/csv' }), csv.name); + console.log(Params); + return this.http.post( 'https://beta.axellotl.de/clustering/perform-kmeans-clustering/', formData, diff --git a/src/app/home/input/input.component.ts b/src/app/home/input/input.component.ts index eaeb63f..d4253a9 100644 --- a/src/app/home/input/input.component.ts +++ b/src/app/home/input/input.component.ts @@ -47,7 +47,7 @@ export class InputComponent { this.file = file; this.snackbar.open('Ich lade die Datei '+file.name+' hoch wenn die API Jungs soweit sind','Okay'); - this.apiService.postKmeans(this.file, 1, 2).subscribe((response: ResponseInterface) => { + this.apiService.postKmeans(this.file, -1, -1).subscribe((response: ResponseInterface) => { // console.log(response); this.apiResponse.emit(response); }) From 71e694d64b0f6d63e23cba11122287abc3dd9f3e Mon Sep 17 00:00:00 2001 From: cepurwin Date: Tue, 26 Sep 2023 14:32:22 +0200 Subject: [PATCH 11/24] Added Loading Spinner and simple error message --- src/app/app.module.ts | 28 ++++++++++++----------- src/app/home/home-services/api.service.ts | 4 +--- src/app/home/home.component.css | 16 +++++++++++++ src/app/home/home.component.html | 4 +++- src/app/home/home.component.ts | 5 ++++ src/app/home/input/input.component.ts | 9 +++++++- 6 files changed, 48 insertions(+), 18 deletions(-) diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 01b9644..46a344c 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -14,8 +14,9 @@ import { LoginComponent } from './login/login.component'; import { RouterModule, Routes } from '@angular/router' import {MatInputModule} from "@angular/material/input"; import {ReactiveFormsModule} from "@angular/forms"; -import {HttpClient, HttpClientModule} from "@angular/common/http"; +import {HttpClientModule} from "@angular/common/http"; import {MatSnackBarModule} from "@angular/material/snack-bar"; +import {MatProgressSpinnerModule} from "@angular/material/progress-spinner"; const routes: Routes = [ { path: 'home', component: HomeComponent }, { path: '', redirectTo: '/home', pathMatch: 'full' }, @@ -29,18 +30,19 @@ const routes: Routes = [ { path: 'home', component: HomeComponent }, ChartComponent, LoginComponent ], - imports: [ - BrowserModule, - BrowserAnimationsModule, - MatButtonModule, - MatSidenavModule, - MatIconModule, - RouterModule.forRoot(routes), - MatInputModule, - ReactiveFormsModule, - HttpClientModule, - MatSnackBarModule - ], + imports: [ + BrowserModule, + BrowserAnimationsModule, + MatButtonModule, + MatSidenavModule, + MatIconModule, + RouterModule.forRoot(routes), + MatInputModule, + ReactiveFormsModule, + HttpClientModule, + MatSnackBarModule, + MatProgressSpinnerModule + ], providers: [], bootstrap: [AppComponent] }) diff --git a/src/app/home/home-services/api.service.ts b/src/app/home/home-services/api.service.ts index a112a81..e570b15 100644 --- a/src/app/home/home-services/api.service.ts +++ b/src/app/home/home-services/api.service.ts @@ -36,9 +36,7 @@ export class ApiService { const formData = new FormData() formData.append( 'file', new Blob([csv], { type: 'text/csv' }), csv.name); - - console.log(Params); - + return this.http.post( 'https://beta.axellotl.de/clustering/perform-kmeans-clustering/', formData, diff --git a/src/app/home/home.component.css b/src/app/home/home.component.css index 3dfc867..7b47052 100644 --- a/src/app/home/home.component.css +++ b/src/app/home/home.component.css @@ -52,3 +52,19 @@ mat-drawer { position:absolute; bottom:0; } + +.loading-spinner { + position: absolute; + left: 50%; + top: 50%; + font-size: 200px; + z-index: 10; +} + +.grey-background { + background-color: rgba(106, 106, 106, 0.5); + position: absolute; + width: 100vw; + height: 100vh; + z-index: 9; +} diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html index bc050ae..195148b 100644 --- a/src/app/home/home.component.html +++ b/src/app/home/home.component.html @@ -17,12 +17,14 @@

Historie

+ +
- +
diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index b44134e..56740ac 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -9,6 +9,7 @@ import {ResponseInterface} from "../interfaces/response-interface"; }) export class HomeComponent { apiResponse: ResponseInterface | undefined; + isLoading: boolean = false; constructor(private router: Router) {} @@ -17,6 +18,10 @@ export class HomeComponent { console.log(this.apiResponse); } + public handleLoading(status: boolean) { + this.isLoading = status; + } + public routeToLogin(){ this.router.navigate(['/login']) } diff --git a/src/app/home/input/input.component.ts b/src/app/home/input/input.component.ts index d4253a9..1ef07ba 100644 --- a/src/app/home/input/input.component.ts +++ b/src/app/home/input/input.component.ts @@ -15,6 +15,7 @@ export class InputComponent { k: new FormControl(''), }); @Output() apiResponse: EventEmitter = new EventEmitter() + @Output() isLoading: EventEmitter = new EventEmitter() constructor( private snackbar: MatSnackBar, @@ -45,11 +46,17 @@ export class InputComponent { private onFileChange(file: File){ if(file.type == 'text/csv' || file.type =='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'){ this.file = file; - this.snackbar.open('Ich lade die Datei '+file.name+' hoch wenn die API Jungs soweit sind','Okay'); + this.snackbar.open('Datei '+file.name+' wird hochgeladen','Okay'); + this.isLoading.emit(true); this.apiService.postKmeans(this.file, -1, -1).subscribe((response: ResponseInterface) => { // console.log(response); this.apiResponse.emit(response); + this.isLoading.emit(false); + }, error => { + this.isLoading.emit(false); + this.snackbar.open('Ein Fehler ist aufgetreten','Okay'); + console.log(error); }) } else { From aeb1675425f0b77c2e4c780bd48d78ad9fdfb410 Mon Sep 17 00:00:00 2001 From: cepurwin Date: Tue, 26 Sep 2023 14:54:24 +0200 Subject: [PATCH 12/24] Small fix --- src/app/home/input/input.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/home/input/input.component.ts b/src/app/home/input/input.component.ts index 1ef07ba..d31b404 100644 --- a/src/app/home/input/input.component.ts +++ b/src/app/home/input/input.component.ts @@ -46,7 +46,7 @@ export class InputComponent { private onFileChange(file: File){ if(file.type == 'text/csv' || file.type =='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'){ this.file = file; - this.snackbar.open('Datei '+file.name+' wird hochgeladen','Okay'); + this.snackbar.open('Datei '+file.name+' wird hochgeladen','Okay', {duration: 2000}); this.isLoading.emit(true); this.apiService.postKmeans(this.file, -1, -1).subscribe((response: ResponseInterface) => { @@ -60,7 +60,7 @@ export class InputComponent { }) } else { - this.snackbar.open('Falsches Dateiformat','Okay'); + this.snackbar.open('Falsches Dateiformat','Okay', {duration: 3000}); } } From f0bcea125f9125d4008d2900e76a499caa22c99b Mon Sep 17 00:00:00 2001 From: REDDERD <143699981+REDDERD@users.noreply.github.com> Date: Wed, 27 Sep 2023 09:30:54 +0200 Subject: [PATCH 13/24] Fixed reloading bug (#35) * Update app.yaml * Update cloudbuild.yaml --- app.yaml | 38 ++++++++++++++++++++++---------------- cloudbuild.yaml | 4 ++-- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/app.yaml b/app.yaml index f1ab566..93a403c 100644 --- a/app.yaml +++ b/app.yaml @@ -1,20 +1,26 @@ -runtime: python27 -api_version: 1 -threadsafe: yes +runtime: nodejs18 +instance_class: F2 + +automatic_scaling: + target_cpu_utilization: 0.65 + min_instances: 1 + max_instances: 5 + +entrypoint: npm start + +env_variables: + PORT: 8080 # der Port, auf dem der App Engine-Proxy auf Anfragen hört handlers: - - url: / + - url: /(.*\.(js|css|map|json|png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot|ico)) + secure: always + static_files: dist/programmierprojekt/\1 + upload: dist/programmierprojekt/.*\.(js|css|map|json|png|jpg|jpeg|gif|svg|woff|woff2|ttf|eot|ico)$ + + # Alle anderen URLs werden an die Angular-App weitergeleitet + - url: /.* + secure: always static_files: dist/programmierprojekt/index.html upload: dist/programmierprojekt/index.html - - url: / - static_dir: dist/programmierprojekt - -skip_files: - - e2e/ - - node_modules/ - - src/ - - ^(.*/)?\..*$ - - ^(.*/)?.*\.json$ - - ^(.*/)?.*\.md$ - - ^(.*/)?.*\.yaml$ - - ^LICENSE + http_headers: + Cache-Control: "no-cache, must-revalidate" diff --git a/cloudbuild.yaml b/cloudbuild.yaml index a655c25..5f2c96c 100644 --- a/cloudbuild.yaml +++ b/cloudbuild.yaml @@ -6,11 +6,11 @@ steps: # Build productive files - name: 'gcr.io/cloud-builders/npm' - args: [ 'run', 'build', '--prod' ] + args: [ 'run', 'build', '--output-path=dist/programmierprojekt', '--prod' ] # Build productive files - name: 'gcr.io/cloud-builders/npm' - args: [ 'run', 'build', '--prod' ] + args: [ 'run', 'build', '--output-path=dist/programmierprojekt', '--prod' ] # Deploy to google cloud app engine - name: 'gcr.io/cloud-builders/gcloud' From 294537024ef540b45d4770c5906cc801080c38d9 Mon Sep 17 00:00:00 2001 From: cepurwin Date: Wed, 27 Sep 2023 12:09:00 +0200 Subject: [PATCH 14/24] Inputs working --- src/app/app.module.ts | 4 ++- src/app/home/home-services/api.service.ts | 11 ++++--- src/app/home/input/input.component.css | 3 +- src/app/home/input/input.component.html | 19 ++++++++++-- src/app/home/input/input.component.ts | 38 ++++++++++++++++------- 5 files changed, 55 insertions(+), 20 deletions(-) diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 46a344c..c2273ac 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -17,6 +17,7 @@ import {ReactiveFormsModule} from "@angular/forms"; import {HttpClientModule} from "@angular/common/http"; import {MatSnackBarModule} from "@angular/material/snack-bar"; import {MatProgressSpinnerModule} from "@angular/material/progress-spinner"; +import {MatSelectModule} from "@angular/material/select"; const routes: Routes = [ { path: 'home', component: HomeComponent }, { path: '', redirectTo: '/home', pathMatch: 'full' }, @@ -41,7 +42,8 @@ const routes: Routes = [ { path: 'home', component: HomeComponent }, ReactiveFormsModule, HttpClientModule, MatSnackBarModule, - MatProgressSpinnerModule + MatProgressSpinnerModule, + MatSelectModule ], providers: [], bootstrap: [AppComponent] diff --git a/src/app/home/home-services/api.service.ts b/src/app/home/home-services/api.service.ts index e570b15..e1ac2d7 100644 --- a/src/app/home/home-services/api.service.ts +++ b/src/app/home/home-services/api.service.ts @@ -18,25 +18,28 @@ export class ApiService { let Params: HttpParams = new HttpParams() - if (column1 && column1 != -1) { + if (column1) { Params = Params.set('column1', column1); } - if (column2 && column2 != -1) { + if (column2) { Params = Params.set('column2', column2); } - if (kCluster) { + if (kCluster && kCluster > 0) { Params = Params.set('kCluster', kCluster); } if (distanceMetric) { + console.log('distance Metric: ' + distanceMetric) Params = Params.set('distanceMetric', distanceMetric); } if (clusterDetermination) { Params = Params.set('clusterDetermination', clusterDetermination); } + console.log(Params) + const formData = new FormData() formData.append( 'file', new Blob([csv], { type: 'text/csv' }), csv.name); - + return this.http.post( 'https://beta.axellotl.de/clustering/perform-kmeans-clustering/', formData, diff --git a/src/app/home/input/input.component.css b/src/app/home/input/input.component.css index 49efa06..0850f4b 100644 --- a/src/app/home/input/input.component.css +++ b/src/app/home/input/input.component.css @@ -6,9 +6,10 @@ } .form-container { - width: 100%; + width: 98%; display: grid; grid-template-columns: 50% 50%; + grid-gap: 20px; } .grid-over-two-columns { diff --git a/src/app/home/input/input.component.html b/src/app/home/input/input.component.html index afb9271..2701183 100644 --- a/src/app/home/input/input.component.html +++ b/src/app/home/input/input.component.html @@ -3,7 +3,7 @@

Clustering

Name des Clusters - +
@@ -13,7 +13,7 @@

Ziehe eine .csv / .xslx Datei per Drag & Drop hierher

oder

-
@@ -30,6 +30,21 @@

oder

k= + + Distance Metric + + Euclidean + Manhattan + Jaccards + + + + Cluster Determination + + Elbow + Silhouette + +
diff --git a/src/app/home/input/input.component.ts b/src/app/home/input/input.component.ts index d31b404..20d46b2 100644 --- a/src/app/home/input/input.component.ts +++ b/src/app/home/input/input.component.ts @@ -13,6 +13,8 @@ export class InputComponent { clusterInputFormGroup = new FormGroup({ clusterName: new FormControl(''), k: new FormControl(''), + distanceMetric: new FormControl('EUCLIDEAN'), + clusterDetermination: new FormControl('ELBOW'), }); @Output() apiResponse: EventEmitter = new EventEmitter() @Output() isLoading: EventEmitter = new EventEmitter() @@ -20,13 +22,34 @@ export class InputComponent { constructor( private snackbar: MatSnackBar, private apiService: ApiService, - ) { //http wird später für die API Anbindung benutzt + ) { } public file?: File; submit() { - console.log(JSON.stringify(this.clusterInputFormGroup.value)); + console.log(this.clusterInputFormGroup.value.clusterDetermination); + + if(this.file && this.clusterInputFormGroup.value.distanceMetric && this.clusterInputFormGroup.value.clusterDetermination) { + this.isLoading.emit(true); + this.apiService.postKmeans( + this.file, + undefined, + undefined, + Number(this.clusterInputFormGroup.value.k), + this.clusterInputFormGroup.value.distanceMetric, + this.clusterInputFormGroup.value.clusterDetermination + ).subscribe((response: ResponseInterface) => { + this.apiResponse.emit(response); + this.isLoading.emit(false); + }, error => { + this.isLoading.emit(false); + this.snackbar.open('Ein Fehler ist aufgetreten. Meldung: ' + error.error.detail,'Okay'); + console.log(error); + }) + } else { + this.snackbar.open('Bitte lade erst eine Datei hoch','Okay', {duration: 3000}); + } } onDragOver(event: any){ @@ -48,16 +71,7 @@ export class InputComponent { this.file = file; this.snackbar.open('Datei '+file.name+' wird hochgeladen','Okay', {duration: 2000}); - this.isLoading.emit(true); - this.apiService.postKmeans(this.file, -1, -1).subscribe((response: ResponseInterface) => { - // console.log(response); - this.apiResponse.emit(response); - this.isLoading.emit(false); - }, error => { - this.isLoading.emit(false); - this.snackbar.open('Ein Fehler ist aufgetreten','Okay'); - console.log(error); - }) + } else { this.snackbar.open('Falsches Dateiformat','Okay', {duration: 3000}); From 44198b354cfff17f82f384cdb311111459901f89 Mon Sep 17 00:00:00 2001 From: cepurwin Date: Thu, 28 Sep 2023 12:23:53 +0200 Subject: [PATCH 15/24] removed testing console logs --- src/app/home/home-services/api.service.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/app/home/home-services/api.service.ts b/src/app/home/home-services/api.service.ts index e1ac2d7..28e5453 100644 --- a/src/app/home/home-services/api.service.ts +++ b/src/app/home/home-services/api.service.ts @@ -28,15 +28,12 @@ export class ApiService { Params = Params.set('kCluster', kCluster); } if (distanceMetric) { - console.log('distance Metric: ' + distanceMetric) Params = Params.set('distanceMetric', distanceMetric); } if (clusterDetermination) { Params = Params.set('clusterDetermination', clusterDetermination); } - console.log(Params) - const formData = new FormData() formData.append( 'file', new Blob([csv], { type: 'text/csv' }), csv.name); From 60329864963af04b0ec6fc20601604f140a75338 Mon Sep 17 00:00:00 2001 From: cepurwin <113333536+cepurwin@users.noreply.github.com> Date: Thu, 28 Sep 2023 13:08:09 +0200 Subject: [PATCH 16/24] functional fix for sidenav button bug (#40) --- src/app/home/home.component.css | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/app/home/home.component.css b/src/app/home/home.component.css index 3dfc867..03d91dc 100644 --- a/src/app/home/home.component.css +++ b/src/app/home/home.component.css @@ -25,7 +25,7 @@ flex: 1; } -@media (max-width: 60rem) { +@media (max-width: 60rem) { /*Bei Mobile Bildschirmen in Hochkant*/ .sidenav-content { display: flex; flex-wrap: wrap; @@ -35,6 +35,11 @@ transform: translateX(50px); margin-bottom: 30px; } + .drawer-header { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + } } mat-drawer { From 3eed8e183ff524e27c2ea4ae4d9943be341fe059 Mon Sep 17 00:00:00 2001 From: cepurwin Date: Thu, 28 Sep 2023 14:47:17 +0200 Subject: [PATCH 17/24] Added Cocis inputs and disabled submit button if no file is uploaded --- src/app/app.module.ts | 34 +++++++----- src/app/home/input/input.component.css | 8 +++ src/app/home/input/input.component.html | 69 +++++++++++++++++-------- src/app/home/input/input.component.ts | 2 +- 4 files changed, 76 insertions(+), 37 deletions(-) diff --git a/src/app/app.module.ts b/src/app/app.module.ts index c2273ac..46b3010 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -18,6 +18,9 @@ import {HttpClientModule} from "@angular/common/http"; import {MatSnackBarModule} from "@angular/material/snack-bar"; import {MatProgressSpinnerModule} from "@angular/material/progress-spinner"; import {MatSelectModule} from "@angular/material/select"; +import {MatButtonToggleModule} from "@angular/material/button-toggle"; +import {MatExpansionModule} from "@angular/material/expansion"; +import {MatSlideToggleModule} from "@angular/material/slide-toggle"; const routes: Routes = [ { path: 'home', component: HomeComponent }, { path: '', redirectTo: '/home', pathMatch: 'full' }, @@ -31,20 +34,23 @@ const routes: Routes = [ { path: 'home', component: HomeComponent }, ChartComponent, LoginComponent ], - imports: [ - BrowserModule, - BrowserAnimationsModule, - MatButtonModule, - MatSidenavModule, - MatIconModule, - RouterModule.forRoot(routes), - MatInputModule, - ReactiveFormsModule, - HttpClientModule, - MatSnackBarModule, - MatProgressSpinnerModule, - MatSelectModule - ], + imports: [ + BrowserModule, + BrowserAnimationsModule, + MatButtonModule, + MatSidenavModule, + MatIconModule, + RouterModule.forRoot(routes), + MatInputModule, + ReactiveFormsModule, + HttpClientModule, + MatSnackBarModule, + MatProgressSpinnerModule, + MatSelectModule, + MatButtonToggleModule, + MatExpansionModule, + MatSlideToggleModule + ], providers: [], bootstrap: [AppComponent] }) diff --git a/src/app/home/input/input.component.css b/src/app/home/input/input.component.css index 0850f4b..b1ca2eb 100644 --- a/src/app/home/input/input.component.css +++ b/src/app/home/input/input.component.css @@ -51,3 +51,11 @@ margin-bottom: 20px; } + +.settings-grid { + width: 100%; + display: grid; + align-items: center; + grid-template-columns: 35% 65%; + grid-gap: 20px; +} diff --git a/src/app/home/input/input.component.html b/src/app/home/input/input.component.html index 2701183..6414dd7 100644 --- a/src/app/home/input/input.component.html +++ b/src/app/home/input/input.component.html @@ -25,27 +25,52 @@

oder

{{file.name}}
- - k definieren - - k= - - - Distance Metric - - Euclidean - Manhattan - Jaccards - - - - Cluster Determination - - Elbow - Silhouette - - -
- +
+ + + + Experteneinstellungen + + + +
+
Anzahl der Cluster (optional)
+
+ + k definieren (optional) + + k= + +
+
+

Berechnungsmethode

+
+
+ + Euklidisch (Standard) + Manhattan + Jaccard + +
+
+

Methode zur Bestimmung von K

+
+
+ + Ellenbogen (Standard) + Silhouette + +
+
+ Lokal im Browser ausführen + +
+
+
+
+
+ + +
diff --git a/src/app/home/input/input.component.ts b/src/app/home/input/input.component.ts index 20d46b2..122aaa9 100644 --- a/src/app/home/input/input.component.ts +++ b/src/app/home/input/input.component.ts @@ -28,7 +28,7 @@ export class InputComponent { public file?: File; submit() { - console.log(this.clusterInputFormGroup.value.clusterDetermination); + console.log(this.clusterInputFormGroup.value); if(this.file && this.clusterInputFormGroup.value.distanceMetric && this.clusterInputFormGroup.value.clusterDetermination) { this.isLoading.emit(true); From 24b9454cc926e6a8c9305dc295daae1e8b2d0248 Mon Sep 17 00:00:00 2001 From: REDDERD <143699981+REDDERD@users.noreply.github.com> Date: Tue, 3 Oct 2023 15:49:33 +0200 Subject: [PATCH 18/24] Fixed all Linting errors (#43) * For importing linting to main without merge-conflicts * Autofixed ~12.000 Linting errors * Fixed most linting errors * Created ESLintIgnore for not linting .html-Files with TypeScript-Linter --------- Co-authored-by: cepurwin --- .eslintignore | 1 + .eslintrc.json | 48 + .eslintrc.yml | 6 +- .github/workflows/lint.yaml | 25 + angular.json | 14 +- package-lock.json | 3179 ++++++++++++----- package.json | 11 +- src/app/app.component.spec.ts | 52 +- src/app/app.component.ts | 4 +- src/app/app.module.ts | 48 +- .../chart-container.component.spec.ts | 26 +- .../chart-container.component.ts | 6 +- .../chart/chart.component.spec.ts | 26 +- .../chart-container/chart/chart.component.ts | 75 +- .../home/chart-container/chart/mock-daten.ts | 1074 +++--- .../home/home-services/api.service.spec.ts | 18 +- src/app/home/home-services/api.service.ts | 52 +- src/app/home/home.component.spec.ts | 34 +- src/app/home/home.component.ts | 26 +- src/app/home/input/input.component.spec.ts | 28 +- src/app/home/input/input.component.ts | 87 +- src/app/interfaces/chartDataset-interface.ts | 14 +- src/app/interfaces/response-interface.ts | 36 +- src/app/login/login.component.spec.ts | 24 +- src/app/login/login.component.ts | 13 +- src/main.ts | 7 +- 26 files changed, 3251 insertions(+), 1683 deletions(-) create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 .github/workflows/lint.yaml diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..2d19fc7 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +*.html diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..176eefd --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,48 @@ +{ + "root": true, + "ignorePatterns": [ + "projects/**/*" + ], + "overrides": [ + { + "files": [ + "*.ts", + "*.html" + ], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:@angular-eslint/recommended", + "plugin:@angular-eslint/template/process-inline-templates" + ], + "rules": { + "@angular-eslint/directive-selector": [ + "error", + { + "type": "attribute", + "prefix": "app", + "style": "camelCase" + } + ], + "@angular-eslint/component-selector": [ + "error", + { + "type": "element", + "prefix": "app", + "style": "kebab-case" + } + ] + } + }, + { + "files": [ + "*.html" + ], + "extends": [ + "plugin:@angular-eslint/template/recommended", + "plugin:@angular-eslint/template/accessibility" + ], + "rules": {} + } + ] +} diff --git a/.eslintrc.yml b/.eslintrc.yml index 36a7fd4..313ea43 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -5,4 +5,8 @@ extends: standard-with-typescript parserOptions: ecmaVersion: latest sourceType: module -rules: {} +rules: { + '@typescript-eslint/consistent-type-imports': 'off', + '@typescript-eslint/consistent-type-exports': 'off', + '@typescript-eslint/prefer-readonly': 'off', +} diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml new file mode 100644 index 0000000..1b10dc6 --- /dev/null +++ b/.github/workflows/lint.yaml @@ -0,0 +1,25 @@ +name: Linting # Diese GitHub-Action muss erfoolgreich durchlaufen, sonst darf keine Pull-Req gemergt werden + +on: + push: + branches: + - '**' # Wird für jeden Push auf jeden Branch durchgeführt + +jobs: + lint: + runs-on: ubuntu-latest + + steps: + - name: Checkout Code + uses: actions/checkout@v2 + + - name: Install Node.js + uses: actions/setup-node@v2 + with: + node-version: '16' + + - name: Install Dependencies + run: npm install + + - name: Run ng lint + run: npx ng lint diff --git a/angular.json b/angular.json index 09cccc1..07c6667 100644 --- a/angular.json +++ b/angular.json @@ -93,11 +93,23 @@ ], "scripts": [] } + }, + "lint": { + "builder": "@angular-eslint/builder:lint", + "options": { + "lintFilePatterns": [ + "src/**/*.ts", + "src/**/*.html" + ] + } } } } }, "cli": { - "analytics": "877cf958-4b8f-4755-bc70-9895434252db" + "analytics": "877cf958-4b8f-4755-bc70-9895434252db", + "schematicCollections": [ + "@angular-eslint/schematics" + ] } } diff --git a/package-lock.json b/package-lock.json index f1c72c2..96a5020 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,12 +25,18 @@ }, "devDependencies": { "@angular-devkit/build-angular": "^16.2.1", + "@angular-eslint/builder": "16.2.0", + "@angular-eslint/eslint-plugin": "16.2.0", + "@angular-eslint/eslint-plugin-template": "16.2.0", + "@angular-eslint/schematics": "16.2.0", + "@angular-eslint/template-parser": "16.2.0", "@angular/cli": "~16.2.1", "@angular/compiler-cli": "^16.2.0", "@playwright/test": "^1.38.0", "@types/jasmine": "~4.3.0", "@types/node": "^20.6.3", - "@typescript-eslint/eslint-plugin": "^6.7.2", + "@typescript-eslint/eslint-plugin": "^6.4.0", + "@typescript-eslint/parser": "^6.4.0", "eslint": "^8.49.0", "eslint-config-standard-with-typescript": "^39.0.0", "eslint-plugin-import": "^2.28.1", @@ -274,628 +280,1168 @@ "yarn": ">= 1.13.0" } }, - "node_modules/@angular/animations": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.3.tgz", - "integrity": "sha512-MEjCWjN7RcHNFHkDYB3ZvEQqt94EzwevVXfld6rcOZNwJxcOVyi7+nQQ1YhWLPSW81HF76bpwD3RWWhZpKdXQQ==", + "node_modules/@angular-eslint/builder": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/builder/-/builder-16.2.0.tgz", + "integrity": "sha512-SZjXOi3YIjuX2CocuRsR2QH6k1ca9lRO6IMm0YIYMmBPFCRP2KFHkL6aQnXM6DSaymQNN2TXfpuvUd45NxhU1w==", + "dev": true, "dependencies": { - "tslib": "^2.3.0" - }, - "engines": { - "node": "^16.14.0 || >=18.10.0" + "@nx/devkit": "16.5.1", + "nx": "16.5.1" }, "peerDependencies": { - "@angular/core": "16.2.3" + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" } }, - "node_modules/@angular/cdk": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.2.tgz", - "integrity": "sha512-luUmeIFuEX4N3EOLhg1DM2hgsR+Is1Qd0a5xflbo30hZFnufppyzjaOvljNYUFtNTD9BaQRXaZDFA2cyTgfzZw==", + "node_modules/@angular-eslint/bundled-angular-compiler": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/bundled-angular-compiler/-/bundled-angular-compiler-16.2.0.tgz", + "integrity": "sha512-ct9orDYxkMl2+uvM7UBfgV28Dq57V4dEs+Drh7cD673JIMa6sXbgmd0QEtm8W3cmyK/jcTzmuoufxbH7hOxd6g==", + "dev": true + }, + "node_modules/@angular-eslint/eslint-plugin": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin/-/eslint-plugin-16.2.0.tgz", + "integrity": "sha512-zdiAIox1T+B71HL+A8m+1jWdU34nvPGLhCRw/uZNwHzknsF4tYzNQ9W7T/SC/g/2s1yT2yNosEVNJSGSFvunJg==", + "dev": true, "dependencies": { - "tslib": "^2.3.0" - }, - "optionalDependencies": { - "parse5": "^7.1.2" + "@angular-eslint/utils": "16.2.0", + "@typescript-eslint/utils": "5.62.0" }, "peerDependencies": { - "@angular/common": "^16.0.0 || ^17.0.0", - "@angular/core": "^16.0.0 || ^17.0.0", - "rxjs": "^6.5.3 || ^7.4.0" + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" } }, - "node_modules/@angular/cdk/node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "optional": true, + "node_modules/@angular-eslint/eslint-plugin-template": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/eslint-plugin-template/-/eslint-plugin-template-16.2.0.tgz", + "integrity": "sha512-YFdQ6hHX6NlQj0lfogZwfyKjU8pqkJU+Zsk0ehjlXP8VfKFVmDeQT5/Xr6Df9C8pveC3hvq6Jgd8vo67S9Enxg==", + "dev": true, "dependencies": { - "entities": "^4.4.0" + "@angular-eslint/bundled-angular-compiler": "16.2.0", + "@angular-eslint/utils": "16.2.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "aria-query": "5.3.0", + "axobject-query": "3.2.1" }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" } }, - "node_modules/@angular/cli": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.1.tgz", - "integrity": "sha512-nuCc0VOGjuUFQo1Pu9CyFQ4VTy7OuwTiwxOG9qbut4FSGz2CO9NeqoamPUuy6rpKVu5JxVe+L6Y4OFaNKv2n3Q==", + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1602.1", - "@angular-devkit/core": "16.2.1", - "@angular-devkit/schematics": "16.2.1", - "@schematics/angular": "16.2.1", - "@yarnpkg/lockfile": "1.1.0", - "ansi-colors": "4.1.3", - "ini": "4.1.1", - "inquirer": "8.2.4", - "jsonc-parser": "3.2.0", - "npm-package-arg": "10.1.0", - "npm-pick-manifest": "8.0.1", - "open": "8.4.2", - "ora": "5.4.1", - "pacote": "15.2.0", - "resolve": "1.22.2", - "semver": "7.5.4", - "symbol-observable": "4.0.0", - "yargs": "17.7.2" - }, - "bin": { - "ng": "bin/ng.js" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0", - "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", - "yarn": ">= 1.13.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@angular/common": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.3.tgz", - "integrity": "sha512-hOC2yqISBRAzltuVJQ3CEJxHRp9mWggysp0or5HydbcmvB6WIroECL7U0u36VA95zC9SXnymHA13OwiFPpmahA==", + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, "dependencies": { - "tslib": "^2.3.0" + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@angular/core": "16.2.3", - "rxjs": "^6.5.3 || ^7.4.0" + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@angular/compiler": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.3.tgz", - "integrity": "sha512-bFc7YRHNdBJZD2HiORBQun2p40emvEt8D4JwXnW1JIStAWKJOXLyEjx045wNddqH7NpUq8AE2F1i82hIDNQZ1g==", + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, "dependencies": { - "tslib": "^2.3.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "@angular/core": "16.2.3" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { - "@angular/core": { + "typescript": { "optional": true } } }, - "node_modules/@angular/compiler-cli": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.3.tgz", - "integrity": "sha512-4p1tDeeONiq/zceC0T6unXDuqyWiAe7v2Ag7+ewwM9V8BF+YOEpEI/41lxzmbK2U1YUvG3jWfZyw3ertQlMp0Q==", + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { - "@babel/core": "7.22.5", - "@jridgewell/sourcemap-codec": "^1.4.14", - "chokidar": "^3.0.0", - "convert-source-map": "^1.5.1", - "reflect-metadata": "^0.1.2", - "semver": "^7.0.0", - "tslib": "^2.3.0", - "yargs": "^17.2.1" - }, - "bin": { - "ng-xi18n": "bundles/src/bin/ng_xi18n.js", - "ngc": "bundles/src/bin/ngc.js", - "ngcc": "bundles/ngcc/index.js" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@angular/compiler": "16.2.3", - "typescript": ">=4.9.3 <5.2" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", - "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/babel" + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@angular/core": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.3.tgz", - "integrity": "sha512-YCzm7Rd2l0Ti0dZ1Mw3OfoQqlLolDN6jBEPy9Ah1s/KB+jKwNK9An3g8A9H6/jQIFwHCtxRad3LYH5ftknNMBQ==", + "node_modules/@angular-eslint/eslint-plugin-template/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, "dependencies": { - "tslib": "^2.3.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "rxjs": "^6.5.3 || ^7.4.0", - "zone.js": "~0.13.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@angular/forms": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.3.tgz", - "integrity": "sha512-d2ELs3PU4o1Yb89w4X3trD3CFWrDUsuFKs1hyNSYPWqCmcQ+tAfr9mizYPTVPSvee/RPRBqDEa0YTzfVpOvX4Q==", + "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, "dependencies": { - "tslib": "^2.3.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "@angular/common": "16.2.3", - "@angular/core": "16.2.3", - "@angular/platform-browser": "16.2.3", - "rxjs": "^6.5.3 || ^7.4.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@angular/material": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.2.2.tgz", - "integrity": "sha512-0SaBPZsZ1jxq5yJeey+V2k7nq1Izw63fjxkyLx7rCcdowwwoBnG/dZsY97/5Qs2cZX0J+Z0iNpMYVJZd72GsvQ==", + "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, "dependencies": { - "@material/animation": "15.0.0-canary.bc9ae6c9c.0", - "@material/auto-init": "15.0.0-canary.bc9ae6c9c.0", - "@material/banner": "15.0.0-canary.bc9ae6c9c.0", - "@material/base": "15.0.0-canary.bc9ae6c9c.0", - "@material/button": "15.0.0-canary.bc9ae6c9c.0", - "@material/card": "15.0.0-canary.bc9ae6c9c.0", - "@material/checkbox": "15.0.0-canary.bc9ae6c9c.0", - "@material/chips": "15.0.0-canary.bc9ae6c9c.0", - "@material/circular-progress": "15.0.0-canary.bc9ae6c9c.0", - "@material/data-table": "15.0.0-canary.bc9ae6c9c.0", - "@material/density": "15.0.0-canary.bc9ae6c9c.0", - "@material/dialog": "15.0.0-canary.bc9ae6c9c.0", - "@material/dom": "15.0.0-canary.bc9ae6c9c.0", - "@material/drawer": "15.0.0-canary.bc9ae6c9c.0", - "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", - "@material/fab": "15.0.0-canary.bc9ae6c9c.0", - "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", - "@material/floating-label": "15.0.0-canary.bc9ae6c9c.0", - "@material/form-field": "15.0.0-canary.bc9ae6c9c.0", - "@material/icon-button": "15.0.0-canary.bc9ae6c9c.0", - "@material/image-list": "15.0.0-canary.bc9ae6c9c.0", - "@material/layout-grid": "15.0.0-canary.bc9ae6c9c.0", - "@material/line-ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/linear-progress": "15.0.0-canary.bc9ae6c9c.0", - "@material/list": "15.0.0-canary.bc9ae6c9c.0", - "@material/menu": "15.0.0-canary.bc9ae6c9c.0", - "@material/menu-surface": "15.0.0-canary.bc9ae6c9c.0", - "@material/notched-outline": "15.0.0-canary.bc9ae6c9c.0", - "@material/radio": "15.0.0-canary.bc9ae6c9c.0", - "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", - "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", - "@material/segmented-button": "15.0.0-canary.bc9ae6c9c.0", - "@material/select": "15.0.0-canary.bc9ae6c9c.0", - "@material/shape": "15.0.0-canary.bc9ae6c9c.0", - "@material/slider": "15.0.0-canary.bc9ae6c9c.0", - "@material/snackbar": "15.0.0-canary.bc9ae6c9c.0", - "@material/switch": "15.0.0-canary.bc9ae6c9c.0", - "@material/tab": "15.0.0-canary.bc9ae6c9c.0", - "@material/tab-bar": "15.0.0-canary.bc9ae6c9c.0", - "@material/tab-indicator": "15.0.0-canary.bc9ae6c9c.0", - "@material/tab-scroller": "15.0.0-canary.bc9ae6c9c.0", - "@material/textfield": "15.0.0-canary.bc9ae6c9c.0", - "@material/theme": "15.0.0-canary.bc9ae6c9c.0", - "@material/tooltip": "15.0.0-canary.bc9ae6c9c.0", - "@material/top-app-bar": "15.0.0-canary.bc9ae6c9c.0", - "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", - "@material/typography": "15.0.0-canary.bc9ae6c9c.0", - "tslib": "^2.3.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@angular/animations": "^16.0.0 || ^17.0.0", - "@angular/cdk": "16.2.2", - "@angular/common": "^16.0.0 || ^17.0.0", - "@angular/core": "^16.0.0 || ^17.0.0", - "@angular/forms": "^16.0.0 || ^17.0.0", - "@angular/platform-browser": "^16.0.0 || ^17.0.0", - "rxjs": "^6.5.3 || ^7.4.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@angular/platform-browser": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.3.tgz", - "integrity": "sha512-adWINGgjIMxwbWJhkMwpEfb4FRFMda5X6ahxWQX2E03Nl0kzePI6cvlJqAgp+iBwTkieWeU8BThJk2/rMkS3bw==", + "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, "dependencies": { - "tslib": "^2.3.0" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" - }, - "peerDependencies": { - "@angular/animations": "16.2.3", - "@angular/common": "16.2.3", - "@angular/core": "16.2.3" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependenciesMeta": { - "@angular/animations": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@angular/platform-browser-dynamic": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.3.tgz", - "integrity": "sha512-Y3cYob1VGzT1xSMbuLGVxPlyuhv4zshYEo/yy2626YD63DigqYwGzj+gT0JoU1eNuXw2UWp3R67d9F8SC015Jw==", + "node_modules/@angular-eslint/eslint-plugin/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, "dependencies": { - "tslib": "^2.3.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@angular-eslint/eslint-plugin/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@angular-eslint/schematics": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.2.0.tgz", + "integrity": "sha512-2JUVR7hAKx37mgWeDjvyWEMH5uSeeksYuaQT5wwlgIzgrO4BNFuqs6Rgyp2jiYa7BFMX/qHULSa+bSq5J5ceEA==", + "dev": true, + "dependencies": { + "@angular-eslint/eslint-plugin": "16.2.0", + "@angular-eslint/eslint-plugin-template": "16.2.0", + "@nx/devkit": "16.5.1", + "ignore": "5.2.4", + "nx": "16.5.1", + "strip-json-comments": "3.1.1", + "tmp": "0.2.1" }, "peerDependencies": { - "@angular/common": "16.2.3", - "@angular/compiler": "16.2.3", - "@angular/core": "16.2.3", - "@angular/platform-browser": "16.2.3" + "@angular/cli": ">= 16.0.0 < 17.0.0" } }, - "node_modules/@angular/router": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.3.tgz", - "integrity": "sha512-xjF5v6BzXanPB0VoIxeKXg1DO95nKJ9UjTsmB5ZOufDcqQXE81NAnH7iEKOymvU7aacqrgD467vcDtGNWJdfQQ==", + "node_modules/@angular-eslint/schematics/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, "dependencies": { - "tslib": "^2.3.0" + "rimraf": "^3.0.0" }, "engines": { - "node": "^16.14.0 || >=18.10.0" + "node": ">=8.17.0" + } + }, + "node_modules/@angular-eslint/template-parser": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.2.0.tgz", + "integrity": "sha512-v2jVKTy2wN7iM9nHpBkxLn2wfL8jSl4IlPrXThIqj8No2VHtpLQZPKuXbGPUXQX05VS2Mj5feScQ36ZVGS8Rbw==", + "dev": true, + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "16.2.0", + "eslint-scope": "^7.0.0" }, "peerDependencies": { - "@angular/common": "16.2.3", - "@angular/core": "16.2.3", - "@angular/platform-browser": "16.2.3", - "rxjs": "^6.5.3 || ^7.4.0" + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" } }, - "node_modules/@assemblyscript/loader": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", - "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", - "dev": true - }, - "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "node_modules/@angular-eslint/template-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "node_modules/@angular-eslint/utils": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.2.0.tgz", + "integrity": "sha512-NxMRwnlIgzmbJQfWkfd9y3Sz0hzjFdK5LH44i+3D5NhpPdZ6SzwHAjMYWoYsmmNQX5tlDXoicYF9Mz9Wz8DJ/A==", "dev": true, - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@angular-eslint/bundled-angular-compiler": "16.2.0", + "@typescript-eslint/utils": "5.62.0" + }, + "peerDependencies": { + "eslint": "^7.20.0 || ^8.0.0", + "typescript": "*" } }, - "node_modules/@babel/core": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", - "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "node_modules/@angular-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.9", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.1" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/babel" + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@angular-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@babel/generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", - "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "node_modules/@angular-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "node_modules/@angular-eslint/utils/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" }, "engines": { - "node": ">=6.9.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", - "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "node_modules/@angular-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "dependencies": { - "@babel/types": "^7.22.10" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", - "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", + "node_modules/@angular-eslint/utils/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=10" }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/@angular-eslint/utils/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "bin": { - "semver": "bin/semver.js" + "engines": { + "node": ">=8" } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", - "dev": true, + "node_modules/@angular/animations": { + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.3.tgz", + "integrity": "sha512-MEjCWjN7RcHNFHkDYB3ZvEQqt94EzwevVXfld6rcOZNwJxcOVyi7+nQQ1YhWLPSW81HF76bpwD3RWWhZpKdXQQ==", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" + "tslib": "^2.3.0" }, "engines": { - "node": ">=6.9.0" + "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "@angular/core": "16.2.3" } }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", - "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", - "dev": true, + "node_modules/@angular/cdk": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.2.tgz", + "integrity": "sha512-luUmeIFuEX4N3EOLhg1DM2hgsR+Is1Qd0a5xflbo30hZFnufppyzjaOvljNYUFtNTD9BaQRXaZDFA2cyTgfzZw==", "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^7.1.2" }, "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" + "@angular/common": "^16.0.0 || ^17.0.0", + "@angular/core": "^16.0.0 || ^17.0.0", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, + "node_modules/@angular/cdk/node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "optional": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "entities": "^4.4.0" }, - "engines": { - "node": ">=6.9.0" + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "node_modules/@angular/cli": { + "version": "16.2.1", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.1.tgz", + "integrity": "sha512-nuCc0VOGjuUFQo1Pu9CyFQ4VTy7OuwTiwxOG9qbut4FSGz2CO9NeqoamPUuy6rpKVu5JxVe+L6Y4OFaNKv2n3Q==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@angular-devkit/architect": "0.1602.1", + "@angular-devkit/core": "16.2.1", + "@angular-devkit/schematics": "16.2.1", + "@schematics/angular": "16.2.1", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.4", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" }, "engines": { - "node": ">=6.9.0" + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" } }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", - "dev": true, + "node_modules/@angular/common": { + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.3.tgz", + "integrity": "sha512-hOC2yqISBRAzltuVJQ3CEJxHRp9mWggysp0or5HydbcmvB6WIroECL7U0u36VA95zC9SXnymHA13OwiFPpmahA==", "dependencies": { - "@babel/types": "^7.22.5" + "tslib": "^2.3.0" }, "engines": { - "node": ">=6.9.0" + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.2.3", + "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, + "node_modules/@angular/compiler": { + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.3.tgz", + "integrity": "sha512-bFc7YRHNdBJZD2HiORBQun2p40emvEt8D4JwXnW1JIStAWKJOXLyEjx045wNddqH7NpUq8AE2F1i82hIDNQZ1g==", "dependencies": { - "@babel/types": "^7.22.5" + "tslib": "^2.3.0" }, "engines": { - "node": ">=6.9.0" + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.2.3" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "node_modules/@angular/compiler-cli": { + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.3.tgz", + "integrity": "sha512-4p1tDeeONiq/zceC0T6unXDuqyWiAe7v2Ag7+ewwM9V8BF+YOEpEI/41lxzmbK2U1YUvG3jWfZyw3ertQlMp0Q==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/core": "7.22.5", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" }, "engines": { - "node": ">=6.9.0" + "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@angular/compiler": "16.2.3", + "typescript": ">=4.9.3 <5.2" } }, - "node_modules/@babel/helper-optimise-call-expression": { + "node_modules/@angular/compiler-cli/node_modules/@babel/core": { "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@angular/compiler-cli/node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@angular/core": { + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.3.tgz", + "integrity": "sha512-YCzm7Rd2l0Ti0dZ1Mw3OfoQqlLolDN6jBEPy9Ah1s/KB+jKwNK9An3g8A9H6/jQIFwHCtxRad3LYH5ftknNMBQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.13.0" + } + }, + "node_modules/@angular/forms": { + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.3.tgz", + "integrity": "sha512-d2ELs3PU4o1Yb89w4X3trD3CFWrDUsuFKs1hyNSYPWqCmcQ+tAfr9mizYPTVPSvee/RPRBqDEa0YTzfVpOvX4Q==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.2.3", + "@angular/core": "16.2.3", + "@angular/platform-browser": "16.2.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/material": { + "version": "16.2.2", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.2.2.tgz", + "integrity": "sha512-0SaBPZsZ1jxq5yJeey+V2k7nq1Izw63fjxkyLx7rCcdowwwoBnG/dZsY97/5Qs2cZX0J+Z0iNpMYVJZd72GsvQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.bc9ae6c9c.0", + "@material/auto-init": "15.0.0-canary.bc9ae6c9c.0", + "@material/banner": "15.0.0-canary.bc9ae6c9c.0", + "@material/base": "15.0.0-canary.bc9ae6c9c.0", + "@material/button": "15.0.0-canary.bc9ae6c9c.0", + "@material/card": "15.0.0-canary.bc9ae6c9c.0", + "@material/checkbox": "15.0.0-canary.bc9ae6c9c.0", + "@material/chips": "15.0.0-canary.bc9ae6c9c.0", + "@material/circular-progress": "15.0.0-canary.bc9ae6c9c.0", + "@material/data-table": "15.0.0-canary.bc9ae6c9c.0", + "@material/density": "15.0.0-canary.bc9ae6c9c.0", + "@material/dialog": "15.0.0-canary.bc9ae6c9c.0", + "@material/dom": "15.0.0-canary.bc9ae6c9c.0", + "@material/drawer": "15.0.0-canary.bc9ae6c9c.0", + "@material/elevation": "15.0.0-canary.bc9ae6c9c.0", + "@material/fab": "15.0.0-canary.bc9ae6c9c.0", + "@material/feature-targeting": "15.0.0-canary.bc9ae6c9c.0", + "@material/floating-label": "15.0.0-canary.bc9ae6c9c.0", + "@material/form-field": "15.0.0-canary.bc9ae6c9c.0", + "@material/icon-button": "15.0.0-canary.bc9ae6c9c.0", + "@material/image-list": "15.0.0-canary.bc9ae6c9c.0", + "@material/layout-grid": "15.0.0-canary.bc9ae6c9c.0", + "@material/line-ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/linear-progress": "15.0.0-canary.bc9ae6c9c.0", + "@material/list": "15.0.0-canary.bc9ae6c9c.0", + "@material/menu": "15.0.0-canary.bc9ae6c9c.0", + "@material/menu-surface": "15.0.0-canary.bc9ae6c9c.0", + "@material/notched-outline": "15.0.0-canary.bc9ae6c9c.0", + "@material/radio": "15.0.0-canary.bc9ae6c9c.0", + "@material/ripple": "15.0.0-canary.bc9ae6c9c.0", + "@material/rtl": "15.0.0-canary.bc9ae6c9c.0", + "@material/segmented-button": "15.0.0-canary.bc9ae6c9c.0", + "@material/select": "15.0.0-canary.bc9ae6c9c.0", + "@material/shape": "15.0.0-canary.bc9ae6c9c.0", + "@material/slider": "15.0.0-canary.bc9ae6c9c.0", + "@material/snackbar": "15.0.0-canary.bc9ae6c9c.0", + "@material/switch": "15.0.0-canary.bc9ae6c9c.0", + "@material/tab": "15.0.0-canary.bc9ae6c9c.0", + "@material/tab-bar": "15.0.0-canary.bc9ae6c9c.0", + "@material/tab-indicator": "15.0.0-canary.bc9ae6c9c.0", + "@material/tab-scroller": "15.0.0-canary.bc9ae6c9c.0", + "@material/textfield": "15.0.0-canary.bc9ae6c9c.0", + "@material/theme": "15.0.0-canary.bc9ae6c9c.0", + "@material/tooltip": "15.0.0-canary.bc9ae6c9c.0", + "@material/top-app-bar": "15.0.0-canary.bc9ae6c9c.0", + "@material/touch-target": "15.0.0-canary.bc9ae6c9c.0", + "@material/typography": "15.0.0-canary.bc9ae6c9c.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^16.0.0 || ^17.0.0", + "@angular/cdk": "16.2.2", + "@angular/common": "^16.0.0 || ^17.0.0", + "@angular/core": "^16.0.0 || ^17.0.0", + "@angular/forms": "^16.0.0 || ^17.0.0", + "@angular/platform-browser": "^16.0.0 || ^17.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.3.tgz", + "integrity": "sha512-adWINGgjIMxwbWJhkMwpEfb4FRFMda5X6ahxWQX2E03Nl0kzePI6cvlJqAgp+iBwTkieWeU8BThJk2/rMkS3bw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/animations": "16.2.3", + "@angular/common": "16.2.3", + "@angular/core": "16.2.3" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.3.tgz", + "integrity": "sha512-Y3cYob1VGzT1xSMbuLGVxPlyuhv4zshYEo/yy2626YD63DigqYwGzj+gT0JoU1eNuXw2UWp3R67d9F8SC015Jw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.2.3", + "@angular/compiler": "16.2.3", + "@angular/core": "16.2.3", + "@angular/platform-browser": "16.2.3" + } + }, + "node_modules/@angular/router": { + "version": "16.2.3", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.3.tgz", + "integrity": "sha512-xjF5v6BzXanPB0VoIxeKXg1DO95nKJ9UjTsmB5ZOufDcqQXE81NAnH7iEKOymvU7aacqrgD467vcDtGNWJdfQQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.2.3", + "@angular/core": "16.2.3", + "@angular/platform-browser": "16.2.3", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.9.tgz", + "integrity": "sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.9", + "@babel/helper-compilation-targets": "^7.22.9", + "@babel/helper-module-transforms": "^7.22.9", + "@babel/helpers": "^7.22.6", + "@babel/parser": "^7.22.7", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.8", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.9.tgz", + "integrity": "sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", + "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.11", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", + "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", + "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", + "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-plugin-utils": { "version": "7.22.5", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", @@ -3977,57 +4523,318 @@ "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", "dev": true, - "dependencies": { - "which": "^3.0.0" - }, + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@nrwl/devkit": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-16.5.1.tgz", + "integrity": "sha512-NB+DE/+AFJ7lKH/WBFyatJEhcZGj25F24ncDkwjZ6MzEiSOGOJS0LaV/R+VUsmS5EHTPXYOpn3zHWWAcJhyOmA==", + "dev": true, + "dependencies": { + "@nx/devkit": "16.5.1" + } + }, + "node_modules/@nrwl/tao": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-16.5.1.tgz", + "integrity": "sha512-x+gi/fKdM6uQNIti9exFlm3V5LBP3Y8vOEziO42HdOigyrXa0S0HD2WMpccmp6PclYKhwEDUjKJ39xh5sdh4Ig==", + "dev": true, + "dependencies": { + "nx": "16.5.1" + }, + "bin": { + "tao": "index.js" + } + }, + "node_modules/@nx/devkit": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-16.5.1.tgz", + "integrity": "sha512-T1acZrVVmJw/sJ4PIGidCBYBiBqlg/jT9e8nIGXLSDS20xcLvfo4zBQf8UZLrmHglnwwpDpOWuVJCp2rYA5aDg==", + "dev": true, + "dependencies": { + "@nrwl/devkit": "16.5.1", + "ejs": "^3.1.7", + "ignore": "^5.0.4", + "semver": "7.5.3", + "tmp": "~0.2.1", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "nx": ">= 15 <= 17" + } + }, + "node_modules/@nx/devkit/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nx/devkit/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@nx/devkit/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/@nx/devkit/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@nx/nx-darwin-arm64": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-16.5.1.tgz", + "integrity": "sha512-q98TFI4B/9N9PmKUr1jcbtD4yAFs1HfYd9jUXXTQOlfO9SbDjnrYJgZ4Fp9rMNfrBhgIQ4x1qx0AukZccKmH9Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-darwin-x64": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-16.5.1.tgz", + "integrity": "sha512-j9HmL1l8k7EVJ3eOM5y8COF93gqrydpxCDoz23ZEtsY+JHY77VAiRQsmqBgEx9GGA2dXi9VEdS67B0+1vKariw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-freebsd-x64": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-16.5.1.tgz", + "integrity": "sha512-CXSPT01aVS869tvCCF2tZ7LnCa8l41wJ3mTVtWBkjmRde68E5Up093hklRMyXb3kfiDYlfIKWGwrV4r0eH6x1A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-16.5.1.tgz", + "integrity": "sha512-BhrumqJSZCWFfLFUKl4CAUwR0Y0G2H5EfFVGKivVecEQbb+INAek1aa6c89evg2/OvetQYsJ+51QknskwqvLsA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-16.5.1.tgz", + "integrity": "sha512-x7MsSG0W+X43WVv7JhiSq2eKvH2suNKdlUHEG09Yt0vm3z0bhtym1UCMUg3IUAK7jy9hhLeDaFVFkC6zo+H/XQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-16.5.1.tgz", + "integrity": "sha512-J+/v/mFjOm74I0PNtH5Ka+fDd+/dWbKhpcZ2R1/6b9agzZk+Ff/SrwJcSYFXXWKbPX+uQ4RcJoytT06Zs3s0ow==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-16.5.1.tgz", + "integrity": "sha512-igooWJ5YxQ94Zft7IqgL+Lw0qHaY15Btw4gfK756g/YTYLZEt4tTvR1y6RnK/wdpE3sa68bFTLVBNCGTyiTiDQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-16.5.1.tgz", + "integrity": "sha512-zF/exnPqFYbrLAduGhTmZ7zNEyADid2bzNQiIjJkh8Y6NpDwrQIwVIyvIxqynsjMrIs51kBH+8TUjKjj2Jgf5A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/@npmcli/promise-spawn/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-16.5.1.tgz", + "integrity": "sha512-qtqiLS9Y9TYyAbbpq58kRoOroko4ZXg5oWVqIWFHoxc5bGPweQSJCROEqd1AOl2ZDC6BxfuVHfhDDop1kK05WA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/@npmcli/run-script": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", - "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-16.5.1.tgz", + "integrity": "sha512-kUJBLakK7iyA9WfsGGQBVennA4jwf5XIgm0lu35oMOphtZIluvzItMt0EYBmylEROpmpEIhHq0P6J9FA+WH0Rg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/promise-spawn": "^6.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^3.0.0", - "which": "^3.0.0" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 10" } }, - "node_modules/@npmcli/run-script/node_modules/which": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", - "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "node_modules/@parcel/watcher": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.0.4.tgz", + "integrity": "sha512-cTDi+FUDBIUOBKEtj+nhiJ71AZVlkAsQFuGQTun5tV9mwQBQgZvhCzG+URPQc8myeN32yRVZEfVAPCs1RW+Jvg==", "dev": true, + "hasInstallScript": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/which.js" + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, "node_modules/@pkgjs/parseargs": { @@ -4887,6 +5694,37 @@ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0-rc.46", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", + "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "dev": true, + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=14.15.0" + } + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.6.tgz", + "integrity": "sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@zkochan/js-yaml/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "node_modules/abab": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", @@ -5180,6 +6018,15 @@ "sprintf-js": "~1.0.2" } }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", @@ -5303,6 +6150,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==", + "dev": true + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -5354,6 +6207,40 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/axios": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, "node_modules/babel-loader": { "version": "9.1.3", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.3.tgz", @@ -6644,6 +7531,15 @@ "node": ">= 0.8" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/destroy": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", @@ -6796,6 +7692,21 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -6808,6 +7719,21 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", "dev": true }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/electron-to-chromium": { "version": "1.4.508", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.508.tgz", @@ -6861,6 +7787,15 @@ "node": ">=0.10.0" } }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/engine.io": { "version": "6.5.2", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.2.tgz", @@ -6925,6 +7860,18 @@ "node": ">=10.13.0" } }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/ent": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", @@ -8120,6 +9067,36 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -8206,6 +9183,15 @@ "node": ">=8" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", @@ -8328,6 +9314,12 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, "node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -9798,16 +10790,104 @@ "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", "dev": true, "dependencies": { - "@isaacs/cliui": "^8.0.2" + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jake/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/jake/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/jake/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" }, "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "node": ">=8" } }, "node_modules/jasmine-core": { @@ -10753,586 +11833,913 @@ "node": ">=8" } }, - "node_modules/minipass-collect/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-fetch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", + "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "dev": true, + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", + "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/minipass-fetch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.4.tgz", - "integrity": "sha512-jHAqnA728uUpIaFm7NWsCnqKT6UqZz7GcI/bDpPATuwYyKwJwW0remxSCxUlKiEty+eopHGa3oc8WxgQ1FFJqg==", + "node_modules/needle": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", "dev": true, + "optional": true, "dependencies": { - "minipass": "^7.0.3", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "bin": { + "needle": "bin/needle" }, - "optionalDependencies": { - "encoding": "^0.1.13" + "engines": { + "node": ">= 4.4.x" } }, - "node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" + "optional": true, + "dependencies": { + "ms": "^2.1.1" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "optional": true, "dependencies": { - "minipass": "^3.0.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/minipass-flush/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 0.6" } }, - "node_modules/minipass-flush/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" } }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">= 6.13.0" } }, - "node_modules/minipass-json-stream/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "node_modules/node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", "dev": true, "dependencies": { - "minipass": "^3.0.0" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">=8" + "node": "^12.13 || ^14.13 || >=16" } }, - "node_modules/minipass-pipeline/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/node-gyp-build": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", + "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "dev": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/minipass-pipeline/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", "dev": true }, - "node_modules/minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, "dependencies": { - "minipass": "^3.0.0" + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/minipass-sized/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", "dev": true, "dependencies": { - "yallist": "^4.0.0" + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/minipass-sized/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, "engines": { - "node": ">= 8" + "node": ">=0.10.0" } }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/minizlib/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", "dev": true, "dependencies": { - "minimist": "^1.2.6" + "npm-normalize-package-bin": "^3.0.0" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "node_modules/npm-install-checks": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.2.0.tgz", + "integrity": "sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g==", "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", "dev": true, "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" }, - "bin": { - "multicast-dns": "cli.js" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" + "dependencies": { + "ignore-walk": "^6.0.0" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/needle": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", - "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", "dev": true, - "optional": true, "dependencies": { - "debug": "^3.2.6", - "iconv-lite": "^0.6.3", - "sax": "^1.2.4" - }, - "bin": { - "needle": "bin/needle" + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">= 4.4.x" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/needle/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", "dev": true, - "optional": true, "dependencies": { - "ms": "^2.1.1" + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/needle/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, - "optional": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "path-key": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, "engines": { - "node": ">= 0.6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", "dev": true }, - "node_modules/nice-napi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", - "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "node_modules/nx": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/nx/-/nx-16.5.1.tgz", + "integrity": "sha512-I3hJRE4hG7JWAtncWwDEO3GVeGPpN0TtM8xH5ArZXyDuVeTth/i3TtJzdDzqXO1HHtIoAQN0xeq4n9cLuMil5g==", "dev": true, "hasInstallScript": true, - "optional": true, - "os": [ - "!win32" - ], "dependencies": { - "node-addon-api": "^3.0.0", - "node-gyp-build": "^4.2.2" + "@nrwl/tao": "16.5.1", + "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.0-rc.46", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", + "chalk": "^4.1.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^11.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "lines-and-columns": "~2.0.3", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.5.3", + "string-width": "^4.2.3", + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "16.5.1", + "@nx/nx-darwin-x64": "16.5.1", + "@nx/nx-freebsd-x64": "16.5.1", + "@nx/nx-linux-arm-gnueabihf": "16.5.1", + "@nx/nx-linux-arm64-gnu": "16.5.1", + "@nx/nx-linux-arm64-musl": "16.5.1", + "@nx/nx-linux-x64-gnu": "16.5.1", + "@nx/nx-linux-x64-musl": "16.5.1", + "@nx/nx-win32-arm64-msvc": "16.5.1", + "@nx/nx-win32-x64-msvc": "16.5.1" + }, + "peerDependencies": { + "@swc-node/register": "^1.4.2", + "@swc/core": "^1.2.173" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } } }, - "node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "optional": true - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "node_modules/nx/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">= 6.13.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/node-gyp": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", - "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "node_modules/nx/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/nx/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^11.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/nx/node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, "engines": { - "node": "^12.13 || ^14.13 || >=16" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-gyp-build": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.1.tgz", - "integrity": "sha512-24vnklJmyRS8ViBNI8KbtK/r/DmXQMRiOMXTNz2nrTnAYUwjmEEbnnpB/+kt+yWRv73bPsSPRFddrcIbAxSiMQ==", + "node_modules/nx/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "node_modules/nx/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 8" + "node": ">=7.0.0" } }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "node_modules/nx/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/nopt": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", - "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "node_modules/nx/node_modules/fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "dev": true, "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "node_modules/nx/node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dev": true, "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=14.14" } }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "node_modules/nx/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/npm-bundled": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", - "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "node_modules/nx/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "dependencies": { - "npm-normalize-package-bin": "^3.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/npm-install-checks": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.2.0.tgz", - "integrity": "sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g==", + "node_modules/nx/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "dependencies": { - "semver": "^7.1.1" + "universalify": "^2.0.0" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "node_modules/nx/node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "dev": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "node_modules/nx/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "yallist": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/npm-packlist": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", - "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, "dependencies": { - "ignore-walk": "^6.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "*" } }, - "node_modules/npm-pick-manifest": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", - "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "node_modules/nx/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", "dev": true, "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^10.0.0", - "semver": "^7.3.5" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "node_modules/nx/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "node_modules/nx/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "dependencies": { - "path-key": "^3.0.0" + "rimraf": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.17.0" } }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "node_modules/nx/node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/nx/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/nwsapi": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", - "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==", + "node_modules/nx/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, "node_modules/object-assign": { @@ -12286,6 +13693,12 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, "node_modules/prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -13736,6 +15149,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -13801,6 +15231,22 @@ "node": ">=10" } }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tar/node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -14104,6 +15550,27 @@ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/tuf-js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", @@ -14428,6 +15895,12 @@ "uuid": "dist/bin/uuid" } }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", diff --git a/package.json b/package.json index 82b8f7a..9fc3578 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "start": "ng serve", "build": "ng build", "watch": "ng build --watch --configuration development", - "test": "ng test" + "test": "ng test", + "lint": "ng lint" }, "private": true, "dependencies": { @@ -27,12 +28,18 @@ }, "devDependencies": { "@angular-devkit/build-angular": "^16.2.1", + "@angular-eslint/builder": "16.2.0", + "@angular-eslint/eslint-plugin": "16.2.0", + "@angular-eslint/eslint-plugin-template": "16.2.0", + "@angular-eslint/schematics": "16.2.0", + "@angular-eslint/template-parser": "16.2.0", "@angular/cli": "~16.2.1", "@angular/compiler-cli": "^16.2.0", "@playwright/test": "^1.38.0", "@types/jasmine": "~4.3.0", "@types/node": "^20.6.3", - "@typescript-eslint/eslint-plugin": "^6.7.2", + "@typescript-eslint/eslint-plugin": "^6.4.0", + "@typescript-eslint/parser": "^6.4.0", "eslint": "^8.49.0", "eslint-config-standard-with-typescript": "^39.0.0", "eslint-plugin-import": "^2.28.1", diff --git a/src/app/app.component.spec.ts b/src/app/app.component.spec.ts index d4a3181..a724f70 100644 --- a/src/app/app.component.spec.ts +++ b/src/app/app.component.spec.ts @@ -1,12 +1,12 @@ -import { TestBed } from '@angular/core/testing'; -import { AppComponent } from './app.component'; -import {HomeComponent} from "./home/home.component"; -import {MatDrawerContainer, MatSidenavModule} from "@angular/material/sidenav"; -import {ChartComponent} from "./home/chart-container/chart/chart.component"; -import {BrowserAnimationsModule} from "@angular/platform-browser/animations"; -import {InputComponent} from "./home/input/input.component"; -import {MatFormFieldModule} from "@angular/material/form-field"; -import {MatIconModule} from "@angular/material/icon"; +import { TestBed } from '@angular/core/testing' +import { AppComponent } from './app.component' +import { HomeComponent } from './home/home.component' +import { MatDrawerContainer, MatSidenavModule } from '@angular/material/sidenav' +import { ChartComponent } from './home/chart-container/chart/chart.component' +import { BrowserAnimationsModule } from '@angular/platform-browser/animations' +import { InputComponent } from './home/input/input.component' +import { MatFormFieldModule } from '@angular/material/form-field' +import { MatIconModule } from '@angular/material/icon' describe('AppComponent', () => { beforeEach(() => TestBed.configureTestingModule({ @@ -21,25 +21,25 @@ describe('AppComponent', () => { BrowserAnimationsModule, MatFormFieldModule, MatIconModule - ], - })); + ] + })) it('should create the app', () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app).toBeTruthy(); - }); + const fixture = TestBed.createComponent(AppComponent) + const app = fixture.componentInstance + expect(app).toBeTruthy() + }) - it(`should have as title 'Programmierprojekt'`, () => { - const fixture = TestBed.createComponent(AppComponent); - const app = fixture.componentInstance; - expect(app.title).toEqual('Dave is n Wadenbeißer'); - }); + it('should have as title \'Programmierprojekt\'', () => { + const fixture = TestBed.createComponent(AppComponent) + const app = fixture.componentInstance + expect(app.title).toEqual('Dave is n Wadenbeißer') + }) it('should render title', () => { - const fixture = TestBed.createComponent(AppComponent); - fixture.detectChanges(); - const compiled = fixture.nativeElement as HTMLElement; - expect(compiled.querySelector('.content span')?.textContent).toContain('Programmierprojekt app is running!'); - }); -}); + const fixture = TestBed.createComponent(AppComponent) + fixture.detectChanges() + const compiled = fixture.nativeElement as HTMLElement + expect(compiled.querySelector('.content span')?.textContent).toContain('Programmierprojekt app is running!') + }) +}) diff --git a/src/app/app.component.ts b/src/app/app.component.ts index ac5596c..23be5b5 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -1,4 +1,4 @@ -import { Component } from '@angular/core'; +import { Component } from '@angular/core' @Component({ selector: 'app-root', @@ -6,5 +6,5 @@ import { Component } from '@angular/core'; styleUrls: ['./app.component.css'] }) export class AppComponent { - title = 'Programmierprojekt'; + title = 'Programmierprojekt' } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 46b3010..980c07b 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,30 +1,30 @@ -import { NgModule } from '@angular/core'; -import { BrowserModule } from '@angular/platform-browser'; +import { NgModule } from '@angular/core' +import { BrowserModule } from '@angular/platform-browser' -import { AppComponent } from './app.component'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import {MatButtonModule} from "@angular/material/button"; -import {MatSidenavModule} from "@angular/material/sidenav"; -import {MatIconModule} from "@angular/material/icon"; -import { HomeComponent } from './home/home.component'; -import { InputComponent } from './home/input/input.component'; -import { ChartContainerComponent } from './home/chart-container/chart-container.component'; -import { ChartComponent } from './home/chart-container/chart/chart.component'; -import { LoginComponent } from './login/login.component'; -import { RouterModule, Routes } from '@angular/router' -import {MatInputModule} from "@angular/material/input"; -import {ReactiveFormsModule} from "@angular/forms"; -import {HttpClientModule} from "@angular/common/http"; -import {MatSnackBarModule} from "@angular/material/snack-bar"; -import {MatProgressSpinnerModule} from "@angular/material/progress-spinner"; -import {MatSelectModule} from "@angular/material/select"; -import {MatButtonToggleModule} from "@angular/material/button-toggle"; -import {MatExpansionModule} from "@angular/material/expansion"; -import {MatSlideToggleModule} from "@angular/material/slide-toggle"; +import { AppComponent } from './app.component' +import { BrowserAnimationsModule } from '@angular/platform-browser/animations' +import { MatButtonModule } from '@angular/material/button' +import { MatSidenavModule } from '@angular/material/sidenav' +import { MatIconModule } from '@angular/material/icon' +import { HomeComponent } from './home/home.component' +import { InputComponent } from './home/input/input.component' +import { ChartContainerComponent } from './home/chart-container/chart-container.component' +import { ChartComponent } from './home/chart-container/chart/chart.component' +import { LoginComponent } from './login/login.component' +import { RouterModule, type Routes } from '@angular/router' +import { MatInputModule } from '@angular/material/input' +import { ReactiveFormsModule } from '@angular/forms' +import { HttpClientModule } from '@angular/common/http' +import { MatSnackBarModule } from '@angular/material/snack-bar' +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner' +import { MatSelectModule } from '@angular/material/select' +import { MatButtonToggleModule } from '@angular/material/button-toggle' +import { MatExpansionModule } from '@angular/material/expansion' +import { MatSlideToggleModule } from '@angular/material/slide-toggle' -const routes: Routes = [ { path: 'home', component: HomeComponent }, +const routes: Routes = [{ path: 'home', component: HomeComponent }, { path: '', redirectTo: '/home', pathMatch: 'full' }, - { path: 'login', component: LoginComponent },] + { path: 'login', component: LoginComponent }] @NgModule({ declarations: [ AppComponent, diff --git a/src/app/home/chart-container/chart-container.component.spec.ts b/src/app/home/chart-container/chart-container.component.spec.ts index bb5dea6..2fe69e1 100644 --- a/src/app/home/chart-container/chart-container.component.spec.ts +++ b/src/app/home/chart-container/chart-container.component.spec.ts @@ -1,11 +1,11 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { type ComponentFixture, TestBed } from '@angular/core/testing' -import { ChartContainerComponent } from './chart-container.component'; -import {ChartComponent} from "./chart/chart.component"; +import { ChartContainerComponent } from './chart-container.component' +import { ChartComponent } from './chart/chart.component' describe('ChartContainerComponent', () => { - let component: ChartContainerComponent; - let fixture: ComponentFixture; + let component: ChartContainerComponent + let fixture: ComponentFixture beforeEach(() => { TestBed.configureTestingModule({ @@ -13,13 +13,13 @@ describe('ChartContainerComponent', () => { ChartContainerComponent, ChartComponent ] - }); - fixture = TestBed.createComponent(ChartContainerComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + }) + fixture = TestBed.createComponent(ChartContainerComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) it('should create', () => { - expect(component).toBeTruthy(); - }); -}); + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/home/chart-container/chart-container.component.ts b/src/app/home/chart-container/chart-container.component.ts index 4585505..f9145be 100644 --- a/src/app/home/chart-container/chart-container.component.ts +++ b/src/app/home/chart-container/chart-container.component.ts @@ -1,5 +1,5 @@ -import {Component, Input} from '@angular/core'; -import {ResponseInterface} from "../../interfaces/response-interface"; +import { Component, Input } from '@angular/core' +import { type ResponseInterface } from '../../interfaces/response-interface' @Component({ selector: 'app-chart-container', @@ -7,5 +7,5 @@ import {ResponseInterface} from "../../interfaces/response-interface"; styleUrls: ['./chart-container.component.css'] }) export class ChartContainerComponent { - @Input() apiResponse: ResponseInterface | undefined; + @Input() apiResponse: ResponseInterface | undefined } diff --git a/src/app/home/chart-container/chart/chart.component.spec.ts b/src/app/home/chart-container/chart/chart.component.spec.ts index 8226f97..9575495 100644 --- a/src/app/home/chart-container/chart/chart.component.spec.ts +++ b/src/app/home/chart-container/chart/chart.component.spec.ts @@ -1,26 +1,26 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { type ComponentFixture, TestBed } from '@angular/core/testing' -import { ChartComponent } from './chart.component'; +import { ChartComponent } from './chart.component' describe('ChartComponent', () => { - let component: ChartComponent; - let fixture: ComponentFixture; + let component: ChartComponent + let fixture: ComponentFixture beforeEach(() => { TestBed.configureTestingModule({ declarations: [ - ChartComponent, + ChartComponent ], imports: [ ] - }); - fixture = TestBed.createComponent(ChartComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + }) + fixture = TestBed.createComponent(ChartComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) it('should create', () => { - expect(component).toBeTruthy(); - }); -}); + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/home/chart-container/chart/chart.component.ts b/src/app/home/chart-container/chart/chart.component.ts index 2ff3341..272c093 100644 --- a/src/app/home/chart-container/chart/chart.component.ts +++ b/src/app/home/chart-container/chart/chart.component.ts @@ -1,82 +1,85 @@ -import {AfterViewInit, Component, Input, OnChanges, SimpleChanges} from '@angular/core'; -import {Chart} from "chart.js/auto"; -import {Points, ResponseInterface} from "../../../interfaces/response-interface"; -import {CentroidDatesetInterface, ChartDatasetInterface} from "../../../interfaces/chartDataset-interface"; -import {MockDaten} from "./mock-daten"; +import { type AfterViewInit, Component, Input, type OnChanges, type SimpleChanges } from '@angular/core' +import { Chart } from 'chart.js/auto' +import { type Points, type ResponseInterface } from '../../../interfaces/response-interface' +import { type CentroidDatesetInterface, type ChartDatasetInterface } from '../../../interfaces/chartDataset-interface' +import { MockDaten } from './mock-daten' @Component({ selector: 'app-chart', templateUrl: './chart.component.html', styleUrls: ['./chart.component.css'] }) -export class ChartComponent implements AfterViewInit, OnChanges{ - public chart: any; +export class ChartComponent implements AfterViewInit, OnChanges { + public chart: any chartData: ResponseInterface = MockDaten - datasets: Array = []; - @Input() apiResponse: ResponseInterface | undefined; + datasets: ChartDatasetInterface[] = [] + @Input() apiResponse: ResponseInterface | undefined - ngAfterViewInit() { - this.renderChart(); + ngAfterViewInit (): void { + this.renderChart() } - ngOnChanges(changes: SimpleChanges) { - if (changes['apiResponse'].currentValue != undefined){ - if(this.apiResponse){ - this.datasets = []; - this.chartData = this.apiResponse; + ngOnChanges (changes: SimpleChanges): void { + if (changes['apiResponse'].currentValue !== undefined) { + if (this.apiResponse != null) { + this.datasets = [] + this.chartData = this.apiResponse } this.chart.destroy() this.renderChart() } } - generateDatasets() { - let centroids: Array = []; - let clusterArray: Array = []; + generateDatasets (): void { + const centroids: Points[] = [] + const clusterArray: ChartDatasetInterface[] = [] + // eslint-disable-next-line array-callback-return this.chartData.cluster.map(cluster => { - let dataset: ChartDatasetInterface = { - label: "Cluster " + (cluster.clusterNr + 1), + const dataset: ChartDatasetInterface = { + label: 'Cluster ' + (cluster.clusterNr + 1), data: cluster.points } centroids.push(cluster.centroid) clusterArray.push(dataset) }) const centroidDataset: CentroidDatesetInterface = { - label: "Centroids", + label: 'Centroids', data: centroids, - pointStyle: "rectRot", + pointStyle: 'rectRot', radius: 10 } this.datasets.push(centroidDataset) + // eslint-disable-next-line array-callback-return clusterArray.map(cluster => { - this.datasets.push(cluster); + this.datasets.push(cluster) }) } - renderChart(){ + renderChart (): void { this.generateDatasets() - var image: string; - this.chart = new Chart("Chart", { - type: 'scatter', //this denotes tha type of chart + // eslint-disable-next-line @typescript-eslint/no-unused-vars + let image: string + this.chart = new Chart('Chart', { + type: 'scatter', // this denotes tha type of chart data: { datasets: this.datasets }, options: { - aspectRatio:1, + aspectRatio: 1, animation: { onComplete: function () { - image = this.toBase64Image(); - var a: HTMLAnchorElement = document.getElementById('chartDownload'); - a.href = this.toBase64Image(); - a.download = 'chart.png'; - }, + image = this.toBase64Image() + const a: HTMLAnchorElement = document.getElementById('chartDownload') as HTMLAnchorElement + a.href = this.toBase64Image() + a.download = 'chart.png' + } }, plugins: { title: { display: true, text: this.chartData.name - }, + } }, scales: { y: { @@ -93,6 +96,6 @@ export class ChartComponent implements AfterViewInit, OnChanges{ } } } - }); + }) } } diff --git a/src/app/home/chart-container/chart/mock-daten.ts b/src/app/home/chart-container/chart/mock-daten.ts index 0219e8f..75d2d2f 100644 --- a/src/app/home/chart-container/chart/mock-daten.ts +++ b/src/app/home/chart-container/chart/mock-daten.ts @@ -1,1045 +1,1045 @@ -import {ResponseInterface} from "../../../interfaces/response-interface"; +import { type ResponseInterface } from '../../../interfaces/response-interface' export const MockDaten: ResponseInterface = { - "user_id": 0, - "request_id": 0, - "name": "K-Means Result for: Seed_Data", - "cluster": [ + user_id: 0, + request_id: 0, + name: 'K-Means Result for: Seed_Data', + cluster: [ { - "clusterNr": 0, - "centroid": { - "x": 14.053636363636361, - "y": 14.17 + clusterNr: 0, + centroid: { + x: 14.053636363636361, + y: 14.17 }, - "points": [ + points: [ { - "x": 13.84, - "y": 13.94 + x: 13.84, + y: 13.94 }, { - "x": 14.03, - "y": 14.16 + x: 14.03, + y: 14.16 }, { - "x": 14.7, - "y": 14.21 + x: 14.7, + y: 14.21 }, { - "x": 13.94, - "y": 14.17 + x: 13.94, + y: 14.17 }, { - "x": 13.54, - "y": 13.85 + x: 13.54, + y: 13.85 }, { - "x": 13.5, - "y": 13.85 + x: 13.5, + y: 13.85 }, { - "x": 13.8, - "y": 14.04 + x: 13.8, + y: 14.04 }, { - "x": 14.52, - "y": 14.6 + x: 14.52, + y: 14.6 }, { - "x": 14.34, - "y": 14.37 + x: 14.34, + y: 14.37 }, { - "x": 14.01, - "y": 14.29 + x: 14.01, + y: 14.29 }, { - "x": 14.37, - "y": 14.39 + x: 14.37, + y: 14.39 } ] }, { - "clusterNr": 1, - "centroid": { - "x": 18.969310344827587, - "y": 16.382758620689657 + clusterNr: 1, + centroid: { + x: 18.969310344827587, + y: 16.382758620689657 }, - "points": [ + points: [ { - "x": 19.11, - "y": 16.26 + x: 19.11, + y: 16.26 }, { - "x": 19.57, - "y": 16.74 + x: 19.57, + y: 16.74 }, { - "x": 19.51, - "y": 16.71 + x: 19.51, + y: 16.71 }, { - "x": 18.27, - "y": 16.09 + x: 18.27, + y: 16.09 }, { - "x": 18.88, - "y": 16.26 + x: 18.88, + y: 16.26 }, { - "x": 20.1, - "y": 16.99 + x: 20.1, + y: 16.99 }, { - "x": 18.76, - "y": 16.2 + x: 18.76, + y: 16.2 }, { - "x": 18.81, - "y": 16.29 + x: 18.81, + y: 16.29 }, { - "x": 19.31, - "y": 16.59 + x: 19.31, + y: 16.59 }, { - "x": 18.98, - "y": 16.57 + x: 18.98, + y: 16.57 }, { - "x": 18.17, - "y": 16.26 + x: 18.17, + y: 16.26 }, { - "x": 18.72, - "y": 16.34 + x: 18.72, + y: 16.34 }, { - "x": 17.99, - "y": 15.86 + x: 17.99, + y: 15.86 }, { - "x": 19.18, - "y": 16.63 + x: 19.18, + y: 16.63 }, { - "x": 18.95, - "y": 16.42 + x: 18.95, + y: 16.42 }, { - "x": 18.83, - "y": 16.29 + x: 18.83, + y: 16.29 }, { - "x": 18.85, - "y": 16.17 + x: 18.85, + y: 16.17 }, { - "x": 19.94, - "y": 16.92 + x: 19.94, + y: 16.92 }, { - "x": 18.55, - "y": 16.22 + x: 18.55, + y: 16.22 }, { - "x": 18.45, - "y": 16.12 + x: 18.45, + y: 16.12 }, { - "x": 19.13, - "y": 16.31 + x: 19.13, + y: 16.31 }, { - "x": 19.06, - "y": 16.45 + x: 19.06, + y: 16.45 }, { - "x": 19.15, - "y": 16.45 + x: 19.15, + y: 16.45 }, { - "x": 20.03, - "y": 16.9 + x: 20.03, + y: 16.9 }, { - "x": 18.43, - "y": 15.97 + x: 18.43, + y: 15.97 }, { - "x": 17.98, - "y": 15.85 + x: 17.98, + y: 15.85 }, { - "x": 20.16, - "y": 17.03 + x: 20.16, + y: 17.03 }, { - "x": 18.3, - "y": 15.89 + x: 18.3, + y: 15.89 }, { - "x": 18.94, - "y": 16.32 + x: 18.94, + y: 16.32 } ] }, { - "clusterNr": 2, - "centroid": { - "x": 10.994444444444445, - "y": 12.76222222222222 + clusterNr: 2, + centroid: { + x: 10.994444444444445, + y: 12.76222222222222 }, - "points": [ + points: [ { - "x": 11.27, - "y": 12.97 + x: 11.27, + y: 12.97 }, { - "x": 10.8, - "y": 12.57 + x: 10.8, + y: 12.57 }, { - "x": 10.74, - "y": 12.73 + x: 10.74, + y: 12.73 }, { - "x": 11.41, - "y": 12.95 + x: 11.41, + y: 12.95 }, { - "x": 10.91, - "y": 12.8 + x: 10.91, + y: 12.8 }, { - "x": 10.59, - "y": 12.41 + x: 10.59, + y: 12.41 }, { - "x": 10.82, - "y": 12.83 + x: 10.82, + y: 12.83 }, { - "x": 11.18, - "y": 12.72 + x: 11.18, + y: 12.72 }, { - "x": 11.23, - "y": 12.88 + x: 11.23, + y: 12.88 } ] }, { - "clusterNr": 3, - "centroid": { - "x": 15.907272727272725, - "y": 15.098181818181816 + clusterNr: 3, + centroid: { + x: 15.907272727272725, + y: 15.098181818181816 }, - "points": [ + points: [ { - "x": 16.53, - "y": 15.34 + x: 16.53, + y: 15.34 }, { - "x": 16.41, - "y": 15.25 + x: 16.41, + y: 15.25 }, { - "x": 16.17, - "y": 15.38 + x: 16.17, + y: 15.38 }, { - "x": 15.99, - "y": 14.89 + x: 15.99, + y: 14.89 }, { - "x": 15.38, - "y": 14.9 + x: 15.38, + y: 14.9 }, { - "x": 16.16, - "y": 15.33 + x: 16.16, + y: 15.33 }, { - "x": 15.56, - "y": 14.89 + x: 15.56, + y: 14.89 }, { - "x": 15.38, - "y": 14.66 + x: 15.38, + y: 14.66 }, { - "x": 15.57, - "y": 15.15 + x: 15.57, + y: 15.15 }, { - "x": 15.6, - "y": 15.11 + x: 15.6, + y: 15.11 }, { - "x": 16.23, - "y": 15.18 + x: 16.23, + y: 15.18 } ] }, { - "clusterNr": 4, - "centroid": { - "x": 12.53, - "y": 13.56111111111111 + clusterNr: 4, + centroid: { + x: 12.53, + y: 13.56111111111111 }, - "points": [ + points: [ { - "x": 13.07, - "y": 13.92 + x: 13.07, + y: 13.92 }, { - "x": 13.34, - "y": 13.95 + x: 13.34, + y: 13.95 }, { - "x": 12.22, - "y": 13.32 + x: 12.22, + y: 13.32 }, { - "x": 12.49, - "y": 13.46 + x: 12.49, + y: 13.46 }, { - "x": 12.26, - "y": 13.6 + x: 12.26, + y: 13.6 }, { - "x": 12.13, - "y": 13.73 + x: 12.13, + y: 13.73 }, { - "x": 12.05, - "y": 13.41 + x: 12.05, + y: 13.41 }, { - "x": 12.55, - "y": 13.57 + x: 12.55, + y: 13.57 }, { - "x": 12.44, - "y": 13.59 + x: 12.44, + y: 13.59 }, { - "x": 12.46, - "y": 13.41 + x: 12.46, + y: 13.41 }, { - "x": 12.19, - "y": 13.36 + x: 12.19, + y: 13.36 }, { - "x": 12.89, - "y": 13.77 + x: 12.89, + y: 13.77 }, { - "x": 11.81, - "y": 13.45 + x: 11.81, + y: 13.45 }, { - "x": 12.8, - "y": 13.47 + x: 12.8, + y: 13.47 }, { - "x": 12.79, - "y": 13.53 + x: 12.79, + y: 13.53 }, { - "x": 13.37, - "y": 13.78 + x: 13.37, + y: 13.78 }, { - "x": 12.38, - "y": 13.44 + x: 12.38, + y: 13.44 }, { - "x": 12.3, - "y": 13.34 + x: 12.3, + y: 13.34 } ] }, { - "clusterNr": 5, - "centroid": { - "x": 18.901666666666667, - "y": 16.396666666666665 + clusterNr: 5, + centroid: { + x: 18.901666666666667, + y: 16.396666666666665 }, - "points": [ + points: [ { - "x": 18.94, - "y": 16.49 + x: 18.94, + y: 16.49 }, { - "x": 18.72, - "y": 16.19 + x: 18.72, + y: 16.19 }, { - "x": 18.98, - "y": 16.66 + x: 18.98, + y: 16.66 }, { - "x": 18.59, - "y": 16.05 + x: 18.59, + y: 16.05 }, { - "x": 18.36, - "y": 16.52 + x: 18.36, + y: 16.52 }, { - "x": 19.46, - "y": 16.5 + x: 19.46, + y: 16.5 }, { - "x": 19.38, - "y": 16.72 + x: 19.38, + y: 16.72 }, { - "x": 19.14, - "y": 16.61 + x: 19.14, + y: 16.61 }, { - "x": 18.96, - "y": 16.2 + x: 18.96, + y: 16.2 }, { - "x": 18.89, - "y": 16.23 + x: 18.89, + y: 16.23 }, { - "x": 18.75, - "y": 16.18 + x: 18.75, + y: 16.18 }, { - "x": 18.65, - "y": 16.41 + x: 18.65, + y: 16.41 } ] }, { - "clusterNr": 6, - "centroid": { - "x": 12.102500000000001, - "y": 13.2675 + clusterNr: 6, + centroid: { + x: 12.102500000000001, + y: 13.2675 }, - "points": [ + points: [ { - "x": 11.43, - "y": 13.13 + x: 11.43, + y: 13.13 }, { - "x": 12.1, - "y": 13.15 + x: 12.1, + y: 13.15 }, { - "x": 12.21, - "y": 13.47 + x: 12.21, + y: 13.47 }, { - "x": 12.67, - "y": 13.32 + x: 12.67, + y: 13.32 } ] }, { - "clusterNr": 7, - "centroid": { - "x": 15.5075, - "y": 14.89 + clusterNr: 7, + centroid: { + x: 15.5075, + y: 14.89 }, - "points": [ + points: [ { - "x": 15.26, - "y": 14.85 + x: 15.26, + y: 14.85 }, { - "x": 15.49, - "y": 14.94 + x: 15.49, + y: 14.94 }, { - "x": 15.5, - "y": 14.86 + x: 15.5, + y: 14.86 }, { - "x": 15.78, - "y": 14.91 + x: 15.78, + y: 14.91 } ] }, { - "clusterNr": 8, - "centroid": { - "x": 12.473333333333334, - "y": 13.386666666666665 + clusterNr: 8, + centroid: { + x: 12.473333333333334, + y: 13.386666666666665 }, - "points": [ + points: [ { - "x": 12.72, - "y": 13.57 + x: 12.72, + y: 13.57 }, { - "x": 13.02, - "y": 13.76 + x: 13.02, + y: 13.76 }, { - "x": 12.74, - "y": 13.67 + x: 12.74, + y: 13.67 }, { - "x": 13.16, - "y": 13.55 + x: 13.16, + y: 13.55 }, { - "x": 11.42, - "y": 12.86 + x: 11.42, + y: 12.86 }, { - "x": 11.23, - "y": 12.63 + x: 11.23, + y: 12.63 }, { - "x": 12.36, - "y": 13.19 + x: 12.36, + y: 13.19 }, { - "x": 12.88, - "y": 13.5 + x: 12.88, + y: 13.5 }, { - "x": 12.73, - "y": 13.75 + x: 12.73, + y: 13.75 } ] }, { - "clusterNr": 9, - "centroid": { - "x": 15.590588235294119, - "y": 14.884117647058826 + clusterNr: 9, + centroid: { + x: 15.590588235294119, + y: 14.884117647058826 }, - "points": [ + points: [ { - "x": 15.26, - "y": 14.84 + x: 15.26, + y: 14.84 }, { - "x": 14.88, - "y": 14.57 + x: 14.88, + y: 14.57 }, { - "x": 16.14, - "y": 14.99 + x: 16.14, + y: 14.99 }, { - "x": 16.63, - "y": 15.46 + x: 16.63, + y: 15.46 }, { - "x": 16.44, - "y": 15.25 + x: 16.44, + y: 15.25 }, { - "x": 15.69, - "y": 14.75 + x: 15.69, + y: 14.75 }, { - "x": 15.88, - "y": 14.9 + x: 15.88, + y: 14.9 }, { - "x": 15.01, - "y": 14.76 + x: 15.01, + y: 14.76 }, { - "x": 16.19, - "y": 15.16 + x: 16.19, + y: 15.16 }, { - "x": 15.05, - "y": 14.68 + x: 15.05, + y: 14.68 }, { - "x": 16.12, - "y": 15 + x: 16.12, + y: 15 }, { - "x": 16.2, - "y": 15.27 + x: 16.2, + y: 15.27 }, { - "x": 15.36, - "y": 14.76 + x: 15.36, + y: 14.76 }, { - "x": 14.86, - "y": 14.67 + x: 14.86, + y: 14.67 }, { - "x": 15.03, - "y": 14.77 + x: 15.03, + y: 14.77 }, { - "x": 14.92, - "y": 14.43 + x: 14.92, + y: 14.43 }, { - "x": 15.38, - "y": 14.77 + x: 15.38, + y: 14.77 } ] }, { - "clusterNr": 10, - "centroid": { - "x": 20.696666666666665, - "y": 17.09 + clusterNr: 10, + centroid: { + x: 20.696666666666665, + y: 17.09 }, - "points": [ + points: [ { - "x": 20.71, - "y": 17.23 + x: 20.71, + y: 17.23 }, { - "x": 20.2, - "y": 16.89 + x: 20.2, + y: 16.89 }, { - "x": 21.18, - "y": 17.21 + x: 21.18, + y: 17.21 }, { - "x": 20.88, - "y": 17.05 + x: 20.88, + y: 17.05 }, { - "x": 20.97, - "y": 17.25 + x: 20.97, + y: 17.25 }, { - "x": 20.24, - "y": 16.91 + x: 20.24, + y: 16.91 } ] }, { - "clusterNr": 11, - "centroid": { - "x": 14.106250000000001, - "y": 14.258750000000001 + clusterNr: 11, + centroid: { + x: 14.106250000000001, + y: 14.258750000000001 }, - "points": [ + points: [ { - "x": 14.69, - "y": 14.49 + x: 14.69, + y: 14.49 }, { - "x": 13.89, - "y": 14.02 + x: 13.89, + y: 14.02 }, { - "x": 14.59, - "y": 14.28 + x: 14.59, + y: 14.28 }, { - "x": 13.45, - "y": 14.02 + x: 13.45, + y: 14.02 }, { - "x": 14.09, - "y": 14.41 + x: 14.09, + y: 14.41 }, { - "x": 14.43, - "y": 14.4 + x: 14.43, + y: 14.4 }, { - "x": 14.49, - "y": 14.61 + x: 14.49, + y: 14.61 }, { - "x": 13.22, - "y": 13.84 + x: 13.22, + y: 13.84 } ] }, { - "clusterNr": 12, - "centroid": { - "x": 13.073333333333332, - "y": 13.670000000000002 + clusterNr: 12, + centroid: { + x: 13.073333333333332, + y: 13.670000000000002 }, - "points": [ + points: [ { - "x": 13.32, - "y": 13.94 + x: 13.32, + y: 13.94 }, { - "x": 12.7, - "y": 13.41 + x: 12.7, + y: 13.41 }, { - "x": 13.2, - "y": 13.66 + x: 13.2, + y: 13.66 } ] }, { - "clusterNr": 13, - "centroid": { - "x": 11.593076923076923, - "y": 13.153846153846157 + clusterNr: 13, + centroid: { + x: 11.593076923076923, + y: 13.153846153846157 }, - "points": [ + points: [ { - "x": 11.82, - "y": 13.4 + x: 11.82, + y: 13.4 }, { - "x": 11.18, - "y": 13.04 + x: 11.18, + y: 13.04 }, { - "x": 11.36, - "y": 13.05 + x: 11.36, + y: 13.05 }, { - "x": 11.34, - "y": 12.87 + x: 11.34, + y: 12.87 }, { - "x": 11.75, - "y": 13.52 + x: 11.75, + y: 13.52 }, { - "x": 12.02, - "y": 13.33 + x: 12.02, + y: 13.33 }, { - "x": 11.35, - "y": 13.12 + x: 11.35, + y: 13.12 }, { - "x": 11.24, - "y": 13 + x: 11.24, + y: 13 }, { - "x": 11.56, - "y": 13.31 + x: 11.56, + y: 13.31 }, { - "x": 11.27, - "y": 12.86 + x: 11.27, + y: 12.86 }, { - "x": 11.87, - "y": 13.02 + x: 11.87, + y: 13.02 }, { - "x": 12.11, - "y": 13.27 + x: 12.11, + y: 13.27 }, { - "x": 11.84, - "y": 13.21 + x: 11.84, + y: 13.21 } ] }, { - "clusterNr": 14, - "centroid": { - "x": 12.475714285714286, - "y": 13.507142857142856 + clusterNr: 14, + centroid: { + x: 12.475714285714286, + y: 13.507142857142856 }, - "points": [ + points: [ { - "x": 12.7, - "y": 13.71 + x: 12.7, + y: 13.71 }, { - "x": 12.54, - "y": 13.67 + x: 12.54, + y: 13.67 }, { - "x": 12.15, - "y": 13.45 + x: 12.15, + y: 13.45 }, { - "x": 12.62, - "y": 13.67 + x: 12.62, + y: 13.67 }, { - "x": 12.76, - "y": 13.38 + x: 12.76, + y: 13.38 }, { - "x": 12.37, - "y": 13.47 + x: 12.37, + y: 13.47 }, { - "x": 12.19, - "y": 13.2 + x: 12.19, + y: 13.2 } ] }, { - "clusterNr": 15, - "centroid": { - "x": 12.5325, - "y": 13.5225 + clusterNr: 15, + centroid: { + x: 12.5325, + y: 13.5225 }, - "points": [ + points: [ { - "x": 12.08, - "y": 13.23 + x: 12.08, + y: 13.23 }, { - "x": 13.16, - "y": 13.82 + x: 13.16, + y: 13.82 }, { - "x": 12.11, - "y": 13.47 + x: 12.11, + y: 13.47 }, { - "x": 12.78, - "y": 13.57 + x: 12.78, + y: 13.57 } ] }, { - "clusterNr": 16, - "centroid": { - "x": 17.260769230769235, - "y": 15.723076923076924 + clusterNr: 16, + centroid: { + x: 17.260769230769235, + y: 15.723076923076924 }, - "points": [ + points: [ { - "x": 17.08, - "y": 15.38 + x: 17.08, + y: 15.38 }, { - "x": 17.63, - "y": 15.98 + x: 17.63, + y: 15.98 }, { - "x": 16.84, - "y": 15.67 + x: 16.84, + y: 15.67 }, { - "x": 17.26, - "y": 15.73 + x: 17.26, + y: 15.73 }, { - "x": 16.82, - "y": 15.51 + x: 16.82, + y: 15.51 }, { - "x": 16.77, - "y": 15.62 + x: 16.77, + y: 15.62 }, { - "x": 17.32, - "y": 15.91 + x: 17.32, + y: 15.91 }, { - "x": 17.12, - "y": 15.55 + x: 17.12, + y: 15.55 }, { - "x": 16.87, - "y": 15.65 + x: 16.87, + y: 15.65 }, { - "x": 17.63, - "y": 15.86 + x: 17.63, + y: 15.86 }, { - "x": 18.14, - "y": 16.12 + x: 18.14, + y: 16.12 }, { - "x": 17.55, - "y": 15.66 + x: 17.55, + y: 15.66 }, { - "x": 17.36, - "y": 15.76 + x: 17.36, + y: 15.76 } ] }, { - "clusterNr": 17, - "centroid": { - "x": 11.27818181818182, - "y": 13.048181818181819 + clusterNr: 17, + centroid: { + x: 11.27818181818182, + y: 13.048181818181819 }, - "points": [ + points: [ { - "x": 11.21, - "y": 13.13 + x: 11.21, + y: 13.13 }, { - "x": 10.79, - "y": 12.93 + x: 10.79, + y: 12.93 }, { - "x": 11.83, - "y": 13.23 + x: 11.83, + y: 13.23 }, { - "x": 11.19, - "y": 13.05 + x: 11.19, + y: 13.05 }, { - "x": 11.49, - "y": 13.22 + x: 11.49, + y: 13.22 }, { - "x": 11.4, - "y": 13.08 + x: 11.4, + y: 13.08 }, { - "x": 10.83, - "y": 12.96 + x: 10.83, + y: 12.96 }, { - "x": 11.26, - "y": 13.01 + x: 11.26, + y: 13.01 }, { - "x": 11.48, - "y": 13.05 + x: 11.48, + y: 13.05 }, { - "x": 11.65, - "y": 13.07 + x: 11.65, + y: 13.07 }, { - "x": 10.93, - "y": 12.8 + x: 10.93, + y: 12.8 } ] }, { - "clusterNr": 18, - "centroid": { - "x": 14.135, - "y": 14 + clusterNr: 18, + centroid: { + x: 14.135, + y: 14 }, - "points": [ + points: [ { - "x": 13.99, - "y": 13.83 + x: 13.99, + y: 13.83 }, { - "x": 14.28, - "y": 14.17 + x: 14.28, + y: 14.17 } ] }, { - "clusterNr": 19, - "centroid": { - "x": 11.39, - "y": 13.046000000000001 + clusterNr: 19, + centroid: { + x: 11.39, + y: 13.046000000000001 }, - "points": [ + points: [ { - "x": 12.01, - "y": 13.52 + x: 12.01, + y: 13.52 }, { - "x": 11.14, - "y": 12.79 + x: 11.14, + y: 12.79 }, { - "x": 11.02, - "y": 13 + x: 11.02, + y: 13 }, { - "x": 11.55, - "y": 13.1 + x: 11.55, + y: 13.1 }, { - "x": 11.23, - "y": 12.82 + x: 11.23, + y: 12.82 } ] }, { - "clusterNr": 20, - "centroid": { - "x": 14.368571428571428, - "y": 14.294285714285717 + clusterNr: 20, + centroid: { + x: 14.368571428571428, + y: 14.294285714285717 }, - "points": [ + points: [ { - "x": 14.29, - "y": 14.09 + x: 14.29, + y: 14.09 }, { - "x": 14.38, - "y": 14.21 + x: 14.38, + y: 14.21 }, { - "x": 14.11, - "y": 14.1 + x: 14.11, + y: 14.1 }, { - "x": 13.78, - "y": 14.06 + x: 13.78, + y: 14.06 }, { - "x": 13.74, - "y": 14.05 + x: 13.74, + y: 14.05 }, { - "x": 14.16, - "y": 14.4 + x: 14.16, + y: 14.4 }, { - "x": 14.11, - "y": 14.26 + x: 14.11, + y: 14.26 }, { - "x": 14.11, - "y": 14.18 + x: 14.11, + y: 14.18 }, { - "x": 14.8, - "y": 14.52 + x: 14.8, + y: 14.52 }, { - "x": 15.11, - "y": 14.54 + x: 15.11, + y: 14.54 }, { - "x": 14.99, - "y": 14.56 + x: 14.99, + y: 14.56 }, { - "x": 14.79, - "y": 14.52 + x: 14.79, + y: 14.52 }, { - "x": 14.33, - "y": 14.28 + x: 14.33, + y: 14.28 }, { - "x": 14.46, - "y": 14.35 + x: 14.46, + y: 14.35 } ] } ], - "x_label": "A", - "y_label": "P", - "iterations": 4, - "used_distance_metric": "EUCLIDEAN", - "used_optK_method": "ELBOW", - "clusters_elbow": 21, - "clusters_silhouette": 2 + x_label: 'A', + y_label: 'P', + iterations: 4, + used_distance_metric: 'EUCLIDEAN', + used_optK_method: 'ELBOW', + clusters_elbow: 21, + clusters_silhouette: 2 } diff --git a/src/app/home/home-services/api.service.spec.ts b/src/app/home/home-services/api.service.spec.ts index c0310ae..a88b626 100644 --- a/src/app/home/home-services/api.service.spec.ts +++ b/src/app/home/home-services/api.service.spec.ts @@ -1,16 +1,16 @@ -import { TestBed } from '@angular/core/testing'; +import { TestBed } from '@angular/core/testing' -import { ApiService } from './api.service'; +import { ApiService } from './api.service' describe('ApiService', () => { - let service: ApiService; + let service: ApiService beforeEach(() => { - TestBed.configureTestingModule({}); - service = TestBed.inject(ApiService); - }); + TestBed.configureTestingModule({}) + service = TestBed.inject(ApiService) + }) it('should be created', () => { - expect(service).toBeTruthy(); - }); -}); + expect(service).toBeTruthy() + }) +}) diff --git a/src/app/home/home-services/api.service.ts b/src/app/home/home-services/api.service.ts index 28e5453..fd85854 100644 --- a/src/app/home/home-services/api.service.ts +++ b/src/app/home/home-services/api.service.ts @@ -1,48 +1,46 @@ -import { Injectable } from '@angular/core'; -import {HttpClient, HttpParams} from "@angular/common/http"; -import {Observable} from "rxjs"; +import { Injectable } from '@angular/core' +import { HttpClient, HttpParams } from '@angular/common/http' +import { Observable } from 'rxjs' @Injectable({ providedIn: 'root' }) export class ApiService { - - public postKmeans( - csv: File, - column1?: number, - column2?: number, - kCluster?: number, - distanceMetric?: string, - clusterDetermination?: string, + public postKmeans ( + csv: File, + column1?: number, + column2?: number, + kCluster?: number, + distanceMetric?: string, + clusterDetermination?: string ): Observable { - let Params: HttpParams = new HttpParams() - if (column1) { - Params = Params.set('column1', column1); + if (column1 != null) { + Params = Params.set('column1', column1) } - if (column2) { - Params = Params.set('column2', column2); + if (column2 != null) { + Params = Params.set('column2', column2) } - if (kCluster && kCluster > 0) { - Params = Params.set('kCluster', kCluster); + if ((kCluster != null) && kCluster > 0) { + Params = Params.set('kCluster', kCluster) } - if (distanceMetric) { - Params = Params.set('distanceMetric', distanceMetric); + if (distanceMetric != null) { + Params = Params.set('distanceMetric', distanceMetric) } - if (clusterDetermination) { - Params = Params.set('clusterDetermination', clusterDetermination); + if (clusterDetermination != null) { + Params = Params.set('clusterDetermination', clusterDetermination) } const formData = new FormData() - formData.append( 'file', new Blob([csv], { type: 'text/csv' }), csv.name); + formData.append('file', new Blob([csv], { type: 'text/csv' }), csv.name) return this.http.post( - 'https://beta.axellotl.de/clustering/perform-kmeans-clustering/', - formData, - {params: Params} + 'https://beta.axellotl.de/clustering/perform-kmeans-clustering/', + formData, + { params: Params } ) } - constructor(private http: HttpClient) { } + constructor (private http: HttpClient) { } } diff --git a/src/app/home/home.component.spec.ts b/src/app/home/home.component.spec.ts index e9632c5..edfb3ef 100644 --- a/src/app/home/home.component.spec.ts +++ b/src/app/home/home.component.spec.ts @@ -1,15 +1,15 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { type ComponentFixture, TestBed } from '@angular/core/testing' -import { HomeComponent } from './home.component'; -import {MatSidenavModule} from "@angular/material/sidenav"; -import {BrowserAnimationsModule} from "@angular/platform-browser/animations"; -import {InputComponent} from "./input/input.component"; -import {ChartComponent} from "./chart-container/chart/chart.component"; -import {MatIconModule} from "@angular/material/icon"; +import { HomeComponent } from './home.component' +import { MatSidenavModule } from '@angular/material/sidenav' +import { BrowserAnimationsModule } from '@angular/platform-browser/animations' +import { InputComponent } from './input/input.component' +import { ChartComponent } from './chart-container/chart/chart.component' +import { MatIconModule } from '@angular/material/icon' describe('HomeComponent', () => { - let component: HomeComponent; - let fixture: ComponentFixture; + let component: HomeComponent + let fixture: ComponentFixture beforeEach(() => { TestBed.configureTestingModule({ @@ -23,13 +23,13 @@ describe('HomeComponent', () => { BrowserAnimationsModule, MatIconModule ] - }); - fixture = TestBed.createComponent(HomeComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + }) + fixture = TestBed.createComponent(HomeComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) it('should create', () => { - expect(component).toBeTruthy(); - }); -}); + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index 56740ac..74fdf45 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -1,6 +1,6 @@ -import { Component } from '@angular/core'; -import {Router} from "@angular/router"; -import {ResponseInterface} from "../interfaces/response-interface"; +import { Component } from '@angular/core' +import { Router } from '@angular/router' +import { ResponseInterface } from '../interfaces/response-interface' @Component({ selector: 'app-home', @@ -8,21 +8,21 @@ import {ResponseInterface} from "../interfaces/response-interface"; styleUrls: ['./home.component.css'] }) export class HomeComponent { - apiResponse: ResponseInterface | undefined; - isLoading: boolean = false; + apiResponse: ResponseInterface | undefined + isLoading: boolean = false - constructor(private router: Router) {} + constructor (private router: Router) {} - public handleAPIResponse(response: ResponseInterface) { - this.apiResponse = response; - console.log(this.apiResponse); + public handleAPIResponse (response: ResponseInterface): void { + this.apiResponse = response + console.log(this.apiResponse) } - public handleLoading(status: boolean) { - this.isLoading = status; + public handleLoading (status: boolean): void { + this.isLoading = status } - public routeToLogin(){ - this.router.navigate(['/login']) + public routeToLogin (): void { + void this.router.navigate(['/login']) } } diff --git a/src/app/home/input/input.component.spec.ts b/src/app/home/input/input.component.spec.ts index 9a4f2e1..378ef79 100644 --- a/src/app/home/input/input.component.spec.ts +++ b/src/app/home/input/input.component.spec.ts @@ -1,12 +1,12 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { type ComponentFixture, TestBed } from '@angular/core/testing' -import { InputComponent } from './input.component'; -import {MatFormFieldModule} from "@angular/material/form-field"; -import {ChartComponent} from "../chart-container/chart/chart.component"; +import { InputComponent } from './input.component' +import { MatFormFieldModule } from '@angular/material/form-field' +import { ChartComponent } from '../chart-container/chart/chart.component' describe('InputComponent', () => { - let component: InputComponent; - let fixture: ComponentFixture; + let component: InputComponent + let fixture: ComponentFixture beforeEach(() => { TestBed.configureTestingModule({ @@ -17,13 +17,13 @@ describe('InputComponent', () => { imports: [ MatFormFieldModule ] - }); - fixture = TestBed.createComponent(InputComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + }) + fixture = TestBed.createComponent(InputComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) it('should create', () => { - expect(component).toBeTruthy(); - }); -}); + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/home/input/input.component.ts b/src/app/home/input/input.component.ts index 122aaa9..0ce2779 100644 --- a/src/app/home/input/input.component.ts +++ b/src/app/home/input/input.component.ts @@ -1,8 +1,8 @@ -import {Component, EventEmitter, Output} from '@angular/core'; -import {FormControl, FormGroup} from "@angular/forms"; -import {MatSnackBar} from "@angular/material/snack-bar"; -import {ApiService} from "../home-services/api.service"; -import {ResponseInterface} from "../../interfaces/response-interface"; +import { Component, EventEmitter, Output } from '@angular/core' +import { FormControl, FormGroup } from '@angular/forms' +import { MatSnackBar } from '@angular/material/snack-bar' +import { ApiService } from '../home-services/api.service' +import { ResponseInterface } from '../../interfaces/response-interface' @Component({ selector: 'app-input', @@ -14,68 +14,65 @@ export class InputComponent { clusterName: new FormControl(''), k: new FormControl(''), distanceMetric: new FormControl('EUCLIDEAN'), - clusterDetermination: new FormControl('ELBOW'), - }); + clusterDetermination: new FormControl('ELBOW') + }) + @Output() apiResponse: EventEmitter = new EventEmitter() @Output() isLoading: EventEmitter = new EventEmitter() - constructor( - private snackbar: MatSnackBar, - private apiService: ApiService, - ) { + constructor ( + private snackbar: MatSnackBar, + private apiService: ApiService + ) { } - public file?: File; + public file?: File - submit() { - console.log(this.clusterInputFormGroup.value); + submit (): void { + console.log(this.clusterInputFormGroup.value) - if(this.file && this.clusterInputFormGroup.value.distanceMetric && this.clusterInputFormGroup.value.clusterDetermination) { - this.isLoading.emit(true); + if ((this.file != null) && (this.clusterInputFormGroup.value.distanceMetric != null) && (this.clusterInputFormGroup.value.clusterDetermination != null)) { + this.isLoading.emit(true) this.apiService.postKmeans( - this.file, - undefined, - undefined, - Number(this.clusterInputFormGroup.value.k), - this.clusterInputFormGroup.value.distanceMetric, - this.clusterInputFormGroup.value.clusterDetermination + this.file, + undefined, + undefined, + Number(this.clusterInputFormGroup.value.k), + this.clusterInputFormGroup.value.distanceMetric, + this.clusterInputFormGroup.value.clusterDetermination ).subscribe((response: ResponseInterface) => { - this.apiResponse.emit(response); - this.isLoading.emit(false); + this.apiResponse.emit(response) + this.isLoading.emit(false) }, error => { - this.isLoading.emit(false); - this.snackbar.open('Ein Fehler ist aufgetreten. Meldung: ' + error.error.detail,'Okay'); - console.log(error); + this.isLoading.emit(false) + this.snackbar.open('Ein Fehler ist aufgetreten. Meldung: ' + error.error.detail, 'Okay') + console.log(error) }) } else { - this.snackbar.open('Bitte lade erst eine Datei hoch','Okay', {duration: 3000}); + this.snackbar.open('Bitte lade erst eine Datei hoch', 'Okay', { duration: 3000 }) } } - onDragOver(event: any){ - event.preventDefault(); + onDragOver (event: any): void { + event.preventDefault() } - onDropSuccess(event: any) { - event.preventDefault(); + onDropSuccess (event: any): void { + event.preventDefault() - this.onFileChange(event.dataTransfer.files[0]); // notice the "dataTransfer" used instead of "target" + this.onFileChange(event.dataTransfer.files[0]) // notice the "dataTransfer" used instead of "target" } - onChange(event:any){ - this.onFileChange(event.target.files[0]); + onChange (event: any): void { + this.onFileChange(event.target.files[0]) } - private onFileChange(file: File){ - if(file.type == 'text/csv' || file.type =='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'){ - this.file = file; - this.snackbar.open('Datei '+file.name+' wird hochgeladen','Okay', {duration: 2000}); - - - } - else { - this.snackbar.open('Falsches Dateiformat','Okay', {duration: 3000}); + private onFileChange (file: File): void { + if (file.type === 'text/csv' || file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') { + this.file = file + this.snackbar.open('Datei ' + file.name + ' wird hochgeladen', 'Okay', { duration: 2000 }) + } else { + this.snackbar.open('Falsches Dateiformat', 'Okay', { duration: 3000 }) } - } } diff --git a/src/app/interfaces/chartDataset-interface.ts b/src/app/interfaces/chartDataset-interface.ts index e2a3280..8b0dccf 100644 --- a/src/app/interfaces/chartDataset-interface.ts +++ b/src/app/interfaces/chartDataset-interface.ts @@ -1,11 +1,13 @@ +import { Points } from './response-interface' + export interface ChartDatasetInterface { - "label": string, - "data": Object + 'label': string + 'data': Points[] } export interface CentroidDatesetInterface { - "label": string, - "data": Object, - "pointStyle": string, - "radius": number + 'label': string + 'data': Points[] + 'pointStyle': string + 'radius': number } diff --git a/src/app/interfaces/response-interface.ts b/src/app/interfaces/response-interface.ts index b764a63..6bdf717 100644 --- a/src/app/interfaces/response-interface.ts +++ b/src/app/interfaces/response-interface.ts @@ -1,29 +1,29 @@ export interface ResponseInterface { - "user_id": number, - "request_id": number, - "name": string, - "cluster": Array, - "x_label": string, - "y_label": string, - "iterations": number, - "used_distance_metric": string, - "used_optK_method": string, - "clusters_elbow": number, - "clusters_silhouette": number, + 'user_id': number + 'request_id': number + 'name': string + 'cluster': Cluster[] + 'x_label': string + 'y_label': string + 'iterations': number + 'used_distance_metric': string + 'used_optK_method': string + 'clusters_elbow': number + 'clusters_silhouette': number } interface Cluster { - "clusterNr": number, - "centroid": Centroid, - "points": Array + 'clusterNr': number + 'centroid': Centroid + 'points': Points[] } export interface Points { - "x": number, - "y": number + 'x': number + 'y': number } interface Centroid { - "x": number, - "y": number + 'x': number + 'y': number } diff --git a/src/app/login/login.component.spec.ts b/src/app/login/login.component.spec.ts index 360f9f2..f01e52e 100644 --- a/src/app/login/login.component.spec.ts +++ b/src/app/login/login.component.spec.ts @@ -1,21 +1,21 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import { type ComponentFixture, TestBed } from '@angular/core/testing' -import { LoginComponent } from './login.component'; +import { LoginComponent } from './login.component' describe('LoginComponent', () => { - let component: LoginComponent; - let fixture: ComponentFixture; + let component: LoginComponent + let fixture: ComponentFixture beforeEach(() => { TestBed.configureTestingModule({ declarations: [LoginComponent] - }); - fixture = TestBed.createComponent(LoginComponent); - component = fixture.componentInstance; - fixture.detectChanges(); - }); + }) + fixture = TestBed.createComponent(LoginComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) it('should create', () => { - expect(component).toBeTruthy(); - }); -}); + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/login/login.component.ts b/src/app/login/login.component.ts index 6b639c2..e8d443d 100644 --- a/src/app/login/login.component.ts +++ b/src/app/login/login.component.ts @@ -1,5 +1,5 @@ -import { Component } from '@angular/core'; -import {Router} from "@angular/router"; +import { Component } from '@angular/core' +import { Router } from '@angular/router' @Component({ selector: 'app-login', @@ -7,12 +7,11 @@ import {Router} from "@angular/router"; styleUrls: ['./login.component.css'] }) export class LoginComponent { - - constructor(private router: Router) { + // eslint-disable-next-line + constructor (private router: Router) { } - public navigateToHome(){ - this.router.navigate(['/home']); + public navigateToHome (): void { + void this.router.navigate(['/home']) } - } diff --git a/src/main.ts b/src/main.ts index c58dc05..f7c569f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,7 +1,6 @@ -import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; - -import { AppModule } from './app/app.module'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic' +import { AppModule } from './app/app.module' platformBrowserDynamic().bootstrapModule(AppModule) - .catch(err => console.error(err)); + .catch(err => { console.error(err) }) From 5caa8f995a69772e73889d415bf2e84749f44743 Mon Sep 17 00:00:00 2001 From: cepurwin <113333536+cepurwin@users.noreply.github.com> Date: Wed, 4 Oct 2023 15:35:03 +0200 Subject: [PATCH 19/24] Added basic local kmeans (#44) * Added basic local kmeans * Added empty Chart and fixed daves comments * fixed busy indicator * Start K-Means button changed --- package-lock.json | 78 ++ package.json | 1 + .../chart-container.component.html | 2 +- .../chart-container.component.ts | 2 +- .../chart-container/chart/chart.component.ts | 8 +- .../home/chart-container/chart/mock-daten.ts | 1035 +---------------- .../csv-to-2-d-array.service.spec.ts | 16 + .../home-services/csv-to-2-d-array.service.ts | 11 + .../kmeans-local.service.spec.ts | 16 + .../home-services/kmeans-local.service.ts | 89 ++ src/app/home/home.component.html | 6 +- src/app/home/home.component.ts | 6 +- src/app/home/input/input.component.css | 6 +- src/app/home/input/input.component.html | 7 +- src/app/home/input/input.component.ts | 61 +- 15 files changed, 270 insertions(+), 1074 deletions(-) create mode 100644 src/app/home/home-services/csv-to-2-d-array.service.spec.ts create mode 100644 src/app/home/home-services/csv-to-2-d-array.service.ts create mode 100644 src/app/home/home-services/kmeans-local.service.spec.ts create mode 100644 src/app/home/home-services/kmeans-local.service.ts diff --git a/package-lock.json b/package-lock.json index 96a5020..61d981e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,6 +19,7 @@ "@angular/platform-browser-dynamic": "^16.2.0", "@angular/router": "^16.2.0", "chart.js": "^4.4.0", + "ml-kmeans": "^6.0.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.13.0" @@ -10285,6 +10286,11 @@ "node": ">= 10" } }, + "node_modules/is-any-array": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-any-array/-/is-any-array-2.0.1.tgz", + "integrity": "sha512-UtilS7hLRu++wb/WBAw9bNuP1Eg04Ivn1vERJck8zJthEvXCBEBpGR/33u/xLKWEQf95803oalHrVDptcAvFdQ==" + }, "node_modules/is-array-buffer": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", @@ -12026,6 +12032,78 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/ml-array-max": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/ml-array-max/-/ml-array-max-1.2.4.tgz", + "integrity": "sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==", + "dependencies": { + "is-any-array": "^2.0.0" + } + }, + "node_modules/ml-array-min": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/ml-array-min/-/ml-array-min-1.2.3.tgz", + "integrity": "sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==", + "dependencies": { + "is-any-array": "^2.0.0" + } + }, + "node_modules/ml-array-rescale": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ml-array-rescale/-/ml-array-rescale-1.3.7.tgz", + "integrity": "sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==", + "dependencies": { + "is-any-array": "^2.0.0", + "ml-array-max": "^1.2.4", + "ml-array-min": "^1.2.3" + } + }, + "node_modules/ml-distance-euclidean": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ml-distance-euclidean/-/ml-distance-euclidean-2.0.0.tgz", + "integrity": "sha512-yC9/2o8QF0A3m/0IXqCTXCzz2pNEzvmcE/9HFKOZGnTjatvBbsn4lWYJkxENkA4Ug2fnYl7PXQxnPi21sgMy/Q==" + }, + "node_modules/ml-kmeans": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ml-kmeans/-/ml-kmeans-6.0.0.tgz", + "integrity": "sha512-aziEZqeHxczaDvo1qkfCrC7XNVAPevs6PigAzy7dp9TzeQI7oGan6NfCgADwL/FAlA/wWi+1DkV8da6pXfuuPg==", + "dependencies": { + "ml-distance-euclidean": "^2.0.0", + "ml-matrix": "^6.9.0", + "ml-nearest-vector": "^2.0.1", + "ml-random": "^0.5.0" + } + }, + "node_modules/ml-matrix": { + "version": "6.10.5", + "resolved": "https://registry.npmjs.org/ml-matrix/-/ml-matrix-6.10.5.tgz", + "integrity": "sha512-3RNGo8Ls3JR/f+8t0pNrvoDW6SmLNDBpQN6FzkFvNx7FJ3GL7Ic1kdxlDYavU3pRwxJFgBrRwZ0FwE+JjX+tvQ==", + "dependencies": { + "is-any-array": "^2.0.1", + "ml-array-rescale": "^1.3.7" + } + }, + "node_modules/ml-nearest-vector": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ml-nearest-vector/-/ml-nearest-vector-2.0.1.tgz", + "integrity": "sha512-gMPwNm3eed59ewJYiCK/+wElWBfNoD6JizH965ePiQgCo0pvQL63w4YdZhLs5eUV0iWcq6brVMUBL6iMySHnqg==", + "dependencies": { + "ml-distance-euclidean": "^2.0.0" + } + }, + "node_modules/ml-random": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/ml-random/-/ml-random-0.5.0.tgz", + "integrity": "sha512-zLJBmNb34LOz+vN6BD8l3aYm/VWYWbmAunrLMPs4dHf4gTl8BWlhil72j56HubPg86zrXioIs4qoHq7Topy6tw==", + "dependencies": { + "ml-xsadd": "^2.0.0" + } + }, + "node_modules/ml-xsadd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ml-xsadd/-/ml-xsadd-2.0.0.tgz", + "integrity": "sha512-VoAYUqmPRmzKbbqRejjqceGFp3VF81Qe8XXFGU0UXLxB7Mf4GGvyGq5Qn3k4AiQgDEV6WzobqlPOd+j0+m6IrA==" + }, "node_modules/mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", diff --git a/package.json b/package.json index 9fc3578..5200c26 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "@angular/platform-browser-dynamic": "^16.2.0", "@angular/router": "^16.2.0", "chart.js": "^4.4.0", + "ml-kmeans": "^6.0.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.13.0" diff --git a/src/app/home/chart-container/chart-container.component.html b/src/app/home/chart-container/chart-container.component.html index 79d1413..ef86bd6 100644 --- a/src/app/home/chart-container/chart-container.component.html +++ b/src/app/home/chart-container/chart-container.component.html @@ -1 +1 @@ - + diff --git a/src/app/home/chart-container/chart-container.component.ts b/src/app/home/chart-container/chart-container.component.ts index f9145be..2cb6a95 100644 --- a/src/app/home/chart-container/chart-container.component.ts +++ b/src/app/home/chart-container/chart-container.component.ts @@ -7,5 +7,5 @@ import { type ResponseInterface } from '../../interfaces/response-interface' styleUrls: ['./chart-container.component.css'] }) export class ChartContainerComponent { - @Input() apiResponse: ResponseInterface | undefined + @Input() kmeansResult: ResponseInterface | undefined } diff --git a/src/app/home/chart-container/chart/chart.component.ts b/src/app/home/chart-container/chart/chart.component.ts index 272c093..8fa8228 100644 --- a/src/app/home/chart-container/chart/chart.component.ts +++ b/src/app/home/chart-container/chart/chart.component.ts @@ -13,17 +13,17 @@ export class ChartComponent implements AfterViewInit, OnChanges { public chart: any chartData: ResponseInterface = MockDaten datasets: ChartDatasetInterface[] = [] - @Input() apiResponse: ResponseInterface | undefined + @Input() kmeansResult: ResponseInterface | undefined ngAfterViewInit (): void { this.renderChart() } ngOnChanges (changes: SimpleChanges): void { - if (changes['apiResponse'].currentValue !== undefined) { - if (this.apiResponse != null) { + if (changes['kmeansResult'].currentValue !== undefined) { + if (this.kmeansResult != null) { this.datasets = [] - this.chartData = this.apiResponse + this.chartData = this.kmeansResult } this.chart.destroy() this.renderChart() diff --git a/src/app/home/chart-container/chart/mock-daten.ts b/src/app/home/chart-container/chart/mock-daten.ts index 75d2d2f..b9edb76 100644 --- a/src/app/home/chart-container/chart/mock-daten.ts +++ b/src/app/home/chart-container/chart/mock-daten.ts @@ -3,1040 +3,11 @@ import { type ResponseInterface } from '../../../interfaces/response-interface' export const MockDaten: ResponseInterface = { user_id: 0, request_id: 0, - name: 'K-Means Result for: Seed_Data', + name: 'Kein anzeigbares Clustering', cluster: [ - { - clusterNr: 0, - centroid: { - x: 14.053636363636361, - y: 14.17 - }, - points: [ - { - x: 13.84, - y: 13.94 - }, - { - x: 14.03, - y: 14.16 - }, - { - x: 14.7, - y: 14.21 - }, - { - x: 13.94, - y: 14.17 - }, - { - x: 13.54, - y: 13.85 - }, - { - x: 13.5, - y: 13.85 - }, - { - x: 13.8, - y: 14.04 - }, - { - x: 14.52, - y: 14.6 - }, - { - x: 14.34, - y: 14.37 - }, - { - x: 14.01, - y: 14.29 - }, - { - x: 14.37, - y: 14.39 - } - ] - }, - { - clusterNr: 1, - centroid: { - x: 18.969310344827587, - y: 16.382758620689657 - }, - points: [ - { - x: 19.11, - y: 16.26 - }, - { - x: 19.57, - y: 16.74 - }, - { - x: 19.51, - y: 16.71 - }, - { - x: 18.27, - y: 16.09 - }, - { - x: 18.88, - y: 16.26 - }, - { - x: 20.1, - y: 16.99 - }, - { - x: 18.76, - y: 16.2 - }, - { - x: 18.81, - y: 16.29 - }, - { - x: 19.31, - y: 16.59 - }, - { - x: 18.98, - y: 16.57 - }, - { - x: 18.17, - y: 16.26 - }, - { - x: 18.72, - y: 16.34 - }, - { - x: 17.99, - y: 15.86 - }, - { - x: 19.18, - y: 16.63 - }, - { - x: 18.95, - y: 16.42 - }, - { - x: 18.83, - y: 16.29 - }, - { - x: 18.85, - y: 16.17 - }, - { - x: 19.94, - y: 16.92 - }, - { - x: 18.55, - y: 16.22 - }, - { - x: 18.45, - y: 16.12 - }, - { - x: 19.13, - y: 16.31 - }, - { - x: 19.06, - y: 16.45 - }, - { - x: 19.15, - y: 16.45 - }, - { - x: 20.03, - y: 16.9 - }, - { - x: 18.43, - y: 15.97 - }, - { - x: 17.98, - y: 15.85 - }, - { - x: 20.16, - y: 17.03 - }, - { - x: 18.3, - y: 15.89 - }, - { - x: 18.94, - y: 16.32 - } - ] - }, - { - clusterNr: 2, - centroid: { - x: 10.994444444444445, - y: 12.76222222222222 - }, - points: [ - { - x: 11.27, - y: 12.97 - }, - { - x: 10.8, - y: 12.57 - }, - { - x: 10.74, - y: 12.73 - }, - { - x: 11.41, - y: 12.95 - }, - { - x: 10.91, - y: 12.8 - }, - { - x: 10.59, - y: 12.41 - }, - { - x: 10.82, - y: 12.83 - }, - { - x: 11.18, - y: 12.72 - }, - { - x: 11.23, - y: 12.88 - } - ] - }, - { - clusterNr: 3, - centroid: { - x: 15.907272727272725, - y: 15.098181818181816 - }, - points: [ - { - x: 16.53, - y: 15.34 - }, - { - x: 16.41, - y: 15.25 - }, - { - x: 16.17, - y: 15.38 - }, - { - x: 15.99, - y: 14.89 - }, - { - x: 15.38, - y: 14.9 - }, - { - x: 16.16, - y: 15.33 - }, - { - x: 15.56, - y: 14.89 - }, - { - x: 15.38, - y: 14.66 - }, - { - x: 15.57, - y: 15.15 - }, - { - x: 15.6, - y: 15.11 - }, - { - x: 16.23, - y: 15.18 - } - ] - }, - { - clusterNr: 4, - centroid: { - x: 12.53, - y: 13.56111111111111 - }, - points: [ - { - x: 13.07, - y: 13.92 - }, - { - x: 13.34, - y: 13.95 - }, - { - x: 12.22, - y: 13.32 - }, - { - x: 12.49, - y: 13.46 - }, - { - x: 12.26, - y: 13.6 - }, - { - x: 12.13, - y: 13.73 - }, - { - x: 12.05, - y: 13.41 - }, - { - x: 12.55, - y: 13.57 - }, - { - x: 12.44, - y: 13.59 - }, - { - x: 12.46, - y: 13.41 - }, - { - x: 12.19, - y: 13.36 - }, - { - x: 12.89, - y: 13.77 - }, - { - x: 11.81, - y: 13.45 - }, - { - x: 12.8, - y: 13.47 - }, - { - x: 12.79, - y: 13.53 - }, - { - x: 13.37, - y: 13.78 - }, - { - x: 12.38, - y: 13.44 - }, - { - x: 12.3, - y: 13.34 - } - ] - }, - { - clusterNr: 5, - centroid: { - x: 18.901666666666667, - y: 16.396666666666665 - }, - points: [ - { - x: 18.94, - y: 16.49 - }, - { - x: 18.72, - y: 16.19 - }, - { - x: 18.98, - y: 16.66 - }, - { - x: 18.59, - y: 16.05 - }, - { - x: 18.36, - y: 16.52 - }, - { - x: 19.46, - y: 16.5 - }, - { - x: 19.38, - y: 16.72 - }, - { - x: 19.14, - y: 16.61 - }, - { - x: 18.96, - y: 16.2 - }, - { - x: 18.89, - y: 16.23 - }, - { - x: 18.75, - y: 16.18 - }, - { - x: 18.65, - y: 16.41 - } - ] - }, - { - clusterNr: 6, - centroid: { - x: 12.102500000000001, - y: 13.2675 - }, - points: [ - { - x: 11.43, - y: 13.13 - }, - { - x: 12.1, - y: 13.15 - }, - { - x: 12.21, - y: 13.47 - }, - { - x: 12.67, - y: 13.32 - } - ] - }, - { - clusterNr: 7, - centroid: { - x: 15.5075, - y: 14.89 - }, - points: [ - { - x: 15.26, - y: 14.85 - }, - { - x: 15.49, - y: 14.94 - }, - { - x: 15.5, - y: 14.86 - }, - { - x: 15.78, - y: 14.91 - } - ] - }, - { - clusterNr: 8, - centroid: { - x: 12.473333333333334, - y: 13.386666666666665 - }, - points: [ - { - x: 12.72, - y: 13.57 - }, - { - x: 13.02, - y: 13.76 - }, - { - x: 12.74, - y: 13.67 - }, - { - x: 13.16, - y: 13.55 - }, - { - x: 11.42, - y: 12.86 - }, - { - x: 11.23, - y: 12.63 - }, - { - x: 12.36, - y: 13.19 - }, - { - x: 12.88, - y: 13.5 - }, - { - x: 12.73, - y: 13.75 - } - ] - }, - { - clusterNr: 9, - centroid: { - x: 15.590588235294119, - y: 14.884117647058826 - }, - points: [ - { - x: 15.26, - y: 14.84 - }, - { - x: 14.88, - y: 14.57 - }, - { - x: 16.14, - y: 14.99 - }, - { - x: 16.63, - y: 15.46 - }, - { - x: 16.44, - y: 15.25 - }, - { - x: 15.69, - y: 14.75 - }, - { - x: 15.88, - y: 14.9 - }, - { - x: 15.01, - y: 14.76 - }, - { - x: 16.19, - y: 15.16 - }, - { - x: 15.05, - y: 14.68 - }, - { - x: 16.12, - y: 15 - }, - { - x: 16.2, - y: 15.27 - }, - { - x: 15.36, - y: 14.76 - }, - { - x: 14.86, - y: 14.67 - }, - { - x: 15.03, - y: 14.77 - }, - { - x: 14.92, - y: 14.43 - }, - { - x: 15.38, - y: 14.77 - } - ] - }, - { - clusterNr: 10, - centroid: { - x: 20.696666666666665, - y: 17.09 - }, - points: [ - { - x: 20.71, - y: 17.23 - }, - { - x: 20.2, - y: 16.89 - }, - { - x: 21.18, - y: 17.21 - }, - { - x: 20.88, - y: 17.05 - }, - { - x: 20.97, - y: 17.25 - }, - { - x: 20.24, - y: 16.91 - } - ] - }, - { - clusterNr: 11, - centroid: { - x: 14.106250000000001, - y: 14.258750000000001 - }, - points: [ - { - x: 14.69, - y: 14.49 - }, - { - x: 13.89, - y: 14.02 - }, - { - x: 14.59, - y: 14.28 - }, - { - x: 13.45, - y: 14.02 - }, - { - x: 14.09, - y: 14.41 - }, - { - x: 14.43, - y: 14.4 - }, - { - x: 14.49, - y: 14.61 - }, - { - x: 13.22, - y: 13.84 - } - ] - }, - { - clusterNr: 12, - centroid: { - x: 13.073333333333332, - y: 13.670000000000002 - }, - points: [ - { - x: 13.32, - y: 13.94 - }, - { - x: 12.7, - y: 13.41 - }, - { - x: 13.2, - y: 13.66 - } - ] - }, - { - clusterNr: 13, - centroid: { - x: 11.593076923076923, - y: 13.153846153846157 - }, - points: [ - { - x: 11.82, - y: 13.4 - }, - { - x: 11.18, - y: 13.04 - }, - { - x: 11.36, - y: 13.05 - }, - { - x: 11.34, - y: 12.87 - }, - { - x: 11.75, - y: 13.52 - }, - { - x: 12.02, - y: 13.33 - }, - { - x: 11.35, - y: 13.12 - }, - { - x: 11.24, - y: 13 - }, - { - x: 11.56, - y: 13.31 - }, - { - x: 11.27, - y: 12.86 - }, - { - x: 11.87, - y: 13.02 - }, - { - x: 12.11, - y: 13.27 - }, - { - x: 11.84, - y: 13.21 - } - ] - }, - { - clusterNr: 14, - centroid: { - x: 12.475714285714286, - y: 13.507142857142856 - }, - points: [ - { - x: 12.7, - y: 13.71 - }, - { - x: 12.54, - y: 13.67 - }, - { - x: 12.15, - y: 13.45 - }, - { - x: 12.62, - y: 13.67 - }, - { - x: 12.76, - y: 13.38 - }, - { - x: 12.37, - y: 13.47 - }, - { - x: 12.19, - y: 13.2 - } - ] - }, - { - clusterNr: 15, - centroid: { - x: 12.5325, - y: 13.5225 - }, - points: [ - { - x: 12.08, - y: 13.23 - }, - { - x: 13.16, - y: 13.82 - }, - { - x: 12.11, - y: 13.47 - }, - { - x: 12.78, - y: 13.57 - } - ] - }, - { - clusterNr: 16, - centroid: { - x: 17.260769230769235, - y: 15.723076923076924 - }, - points: [ - { - x: 17.08, - y: 15.38 - }, - { - x: 17.63, - y: 15.98 - }, - { - x: 16.84, - y: 15.67 - }, - { - x: 17.26, - y: 15.73 - }, - { - x: 16.82, - y: 15.51 - }, - { - x: 16.77, - y: 15.62 - }, - { - x: 17.32, - y: 15.91 - }, - { - x: 17.12, - y: 15.55 - }, - { - x: 16.87, - y: 15.65 - }, - { - x: 17.63, - y: 15.86 - }, - { - x: 18.14, - y: 16.12 - }, - { - x: 17.55, - y: 15.66 - }, - { - x: 17.36, - y: 15.76 - } - ] - }, - { - clusterNr: 17, - centroid: { - x: 11.27818181818182, - y: 13.048181818181819 - }, - points: [ - { - x: 11.21, - y: 13.13 - }, - { - x: 10.79, - y: 12.93 - }, - { - x: 11.83, - y: 13.23 - }, - { - x: 11.19, - y: 13.05 - }, - { - x: 11.49, - y: 13.22 - }, - { - x: 11.4, - y: 13.08 - }, - { - x: 10.83, - y: 12.96 - }, - { - x: 11.26, - y: 13.01 - }, - { - x: 11.48, - y: 13.05 - }, - { - x: 11.65, - y: 13.07 - }, - { - x: 10.93, - y: 12.8 - } - ] - }, - { - clusterNr: 18, - centroid: { - x: 14.135, - y: 14 - }, - points: [ - { - x: 13.99, - y: 13.83 - }, - { - x: 14.28, - y: 14.17 - } - ] - }, - { - clusterNr: 19, - centroid: { - x: 11.39, - y: 13.046000000000001 - }, - points: [ - { - x: 12.01, - y: 13.52 - }, - { - x: 11.14, - y: 12.79 - }, - { - x: 11.02, - y: 13 - }, - { - x: 11.55, - y: 13.1 - }, - { - x: 11.23, - y: 12.82 - } - ] - }, - { - clusterNr: 20, - centroid: { - x: 14.368571428571428, - y: 14.294285714285717 - }, - points: [ - { - x: 14.29, - y: 14.09 - }, - { - x: 14.38, - y: 14.21 - }, - { - x: 14.11, - y: 14.1 - }, - { - x: 13.78, - y: 14.06 - }, - { - x: 13.74, - y: 14.05 - }, - { - x: 14.16, - y: 14.4 - }, - { - x: 14.11, - y: 14.26 - }, - { - x: 14.11, - y: 14.18 - }, - { - x: 14.8, - y: 14.52 - }, - { - x: 15.11, - y: 14.54 - }, - { - x: 14.99, - y: 14.56 - }, - { - x: 14.79, - y: 14.52 - }, - { - x: 14.33, - y: 14.28 - }, - { - x: 14.46, - y: 14.35 - } - ] - } ], - x_label: 'A', - y_label: 'P', + x_label: '', + y_label: '', iterations: 4, used_distance_metric: 'EUCLIDEAN', used_optK_method: 'ELBOW', diff --git a/src/app/home/home-services/csv-to-2-d-array.service.spec.ts b/src/app/home/home-services/csv-to-2-d-array.service.spec.ts new file mode 100644 index 0000000..cfd6f80 --- /dev/null +++ b/src/app/home/home-services/csv-to-2-d-array.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing' + +import { CsvTo2DArrayService } from './csv-to-2-d-array.service' + +describe('CsvTo2DArrayService', () => { + let service: CsvTo2DArrayService + + beforeEach(() => { + TestBed.configureTestingModule({}) + service = TestBed.inject(CsvTo2DArrayService) + }) + + it('should be created', () => { + expect(service).toBeTruthy() + }) +}) diff --git a/src/app/home/home-services/csv-to-2-d-array.service.ts b/src/app/home/home-services/csv-to-2-d-array.service.ts new file mode 100644 index 0000000..40ade70 --- /dev/null +++ b/src/app/home/home-services/csv-to-2-d-array.service.ts @@ -0,0 +1,11 @@ +import { Injectable } from '@angular/core' + +@Injectable({ + providedIn: 'root' +}) +export class CsvTo2DArrayService { + csvTo2DArray (csvData: string): string[][] { + const rows = csvData.split(/\r\n|\n|\r/) + return rows.map(row => row.split(',')) + } +} diff --git a/src/app/home/home-services/kmeans-local.service.spec.ts b/src/app/home/home-services/kmeans-local.service.spec.ts new file mode 100644 index 0000000..0f33a1c --- /dev/null +++ b/src/app/home/home-services/kmeans-local.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing' + +import { KmeansLocalService } from './kmeans-local.service' + +describe('KmeansLocalService', () => { + let service: KmeansLocalService + + beforeEach(() => { + TestBed.configureTestingModule({}) + service = TestBed.inject(KmeansLocalService) + }) + + it('should be created', () => { + expect(service).toBeTruthy() + }) +}) diff --git a/src/app/home/home-services/kmeans-local.service.ts b/src/app/home/home-services/kmeans-local.service.ts new file mode 100644 index 0000000..f5b9ea8 --- /dev/null +++ b/src/app/home/home-services/kmeans-local.service.ts @@ -0,0 +1,89 @@ +import { Injectable } from '@angular/core' +import { kmeans as KMeans } from 'ml-kmeans' +import { ResponseInterface } from '../../interfaces/response-interface' +import { CsvTo2DArrayService } from './csv-to-2-d-array.service' + +@Injectable({ + providedIn: 'root' +}) +export class KmeansLocalService { + csvData: string[][] = [] + clusters: any[] = [] + + euclideanDistance (pointA: number[], pointB: number[]): number { + return Math.sqrt(pointA.reduce((sum, value, index) => sum + Math.pow(value - pointB[index], 2), 0)) + } + + manhattanDistance (pointA: number[], pointB: number[]): number { + return pointA.reduce((sum, value, index) => sum + Math.abs(value - pointB[index]), 0) + } + + async performKMeans (csv: File, k: number, distanceMetric: string): Promise { + return await new Promise((resolve, reject) => { + const fileReader = new FileReader() + + fileReader.onload = () => { + const content = fileReader.result as string + this.csvData = this.csvTo2DArrayService.csvTo2DArray(content) + + const dataAsNumbers = this.csvData.slice(1) + .map(row => row.map(value => parseFloat(value))) + .filter(row => row.length === this.csvData[1].length) + + const result = KMeans(dataAsNumbers, k, { + distanceFunction: distanceMetric === 'EUCLIDEAN' ? this.euclideanDistance : this.manhattanDistance + }) + + const jsonResult = this.convertToJSONFormat(result, dataAsNumbers, csv.name, distanceMetric) + + resolve(jsonResult) // Resolviere das Promise mit dem Ergebnis + } + + fileReader.onerror = (error) => { + reject(error) // Falls ein Fehler beim Lesen der Datei auftritt, rejecte das Promise + } + + fileReader.readAsText(csv) + }) + } + + convertToJSONFormat (result: any, data: number[][], fileName: string, distanceMetric: string): ResponseInterface { + if (this.csvData.length === 0 || this.csvData[0].length < 2) { + console.error('Invalid CSV data format') + } + + const xLabel = this.csvData[0][0] + const yLabel = this.csvData[0][1] + + const clusters = result.centroids.map((centroid: number[], index: number) => { + const points = data.filter((_, dataIndex) => result.clusters[dataIndex] === index) + return { + clusterNr: index, + centroid: { + x: centroid[0], + y: centroid[1] + }, + points: points.map(point => ({ + x: point[0], + y: point[1] + })) + } + }) + + return { + user_id: 0, + request_id: 0, + name: `K-Means Ergebnis von: ${fileName}`, + cluster: clusters, + x_label: xLabel, + y_label: yLabel, + iterations: result.iterations, + used_distance_metric: distanceMetric, + used_optK_method: 'deine Mutter', + clusters_elbow: 0, + clusters_silhouette: 0 + } + } + + constructor (private csvTo2DArrayService: CsvTo2DArrayService) { } +} diff --git a/src/app/home/home.component.html b/src/app/home/home.component.html index 195148b..4043d06 100644 --- a/src/app/home/home.component.html +++ b/src/app/home/home.component.html @@ -1,6 +1,6 @@ - +

Historie

- +
- +
diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index 74fdf45..83fe8cd 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -8,14 +8,14 @@ import { ResponseInterface } from '../interfaces/response-interface' styleUrls: ['./home.component.css'] }) export class HomeComponent { - apiResponse: ResponseInterface | undefined + kmeansResult: ResponseInterface | undefined isLoading: boolean = false constructor (private router: Router) {} public handleAPIResponse (response: ResponseInterface): void { - this.apiResponse = response - console.log(this.apiResponse) + this.kmeansResult = response + console.log(this.kmeansResult) } public handleLoading (status: boolean): void { diff --git a/src/app/home/input/input.component.css b/src/app/home/input/input.component.css index b1ca2eb..6acdaf0 100644 --- a/src/app/home/input/input.component.css +++ b/src/app/home/input/input.component.css @@ -20,10 +20,10 @@ .dropzone{ /*width: 100%; */ - height: 200px; + height: 120px; padding: 2rem; text-align: center; - border: dashed 1px gray; + border: dashed 1px #808080FF; position: relative; display: flex; flex-direction: column; @@ -43,7 +43,7 @@ .file-display{ height: 20px; padding: 1rem; - border: dashed 1px gray; + border: dashed 1px #808080FF; position: relative; display: flex; vertical-align: center; diff --git a/src/app/home/input/input.component.html b/src/app/home/input/input.component.html index 6414dd7..620da37 100644 --- a/src/app/home/input/input.component.html +++ b/src/app/home/input/input.component.html @@ -56,14 +56,13 @@

oder

Methode zur Bestimmung von K

- + Ellenbogen (Standard) Silhouette
- Lokal im Browser ausführen - + Lokal im Browser ausführen
@@ -71,6 +70,6 @@

oder

- + diff --git a/src/app/home/input/input.component.ts b/src/app/home/input/input.component.ts index 0ce2779..e61f7c3 100644 --- a/src/app/home/input/input.component.ts +++ b/src/app/home/input/input.component.ts @@ -3,6 +3,7 @@ import { FormControl, FormGroup } from '@angular/forms' import { MatSnackBar } from '@angular/material/snack-bar' import { ApiService } from '../home-services/api.service' import { ResponseInterface } from '../../interfaces/response-interface' +import { KmeansLocalService } from '../home-services/kmeans-local.service' @Component({ selector: 'app-input', @@ -14,42 +15,56 @@ export class InputComponent { clusterName: new FormControl(''), k: new FormControl(''), distanceMetric: new FormControl('EUCLIDEAN'), - clusterDetermination: new FormControl('ELBOW') + clusterDetermination: new FormControl('ELBOW'), + offlineKmeans: new FormControl(false) }) - @Output() apiResponse: EventEmitter = new EventEmitter() + @Output() kmeansResult: EventEmitter = new EventEmitter() @Output() isLoading: EventEmitter = new EventEmitter() constructor ( private snackbar: MatSnackBar, - private apiService: ApiService + private apiService: ApiService, + private localKmeans: KmeansLocalService ) { } public file?: File submit (): void { - console.log(this.clusterInputFormGroup.value) - - if ((this.file != null) && (this.clusterInputFormGroup.value.distanceMetric != null) && (this.clusterInputFormGroup.value.clusterDetermination != null)) { - this.isLoading.emit(true) - this.apiService.postKmeans( - this.file, - undefined, - undefined, - Number(this.clusterInputFormGroup.value.k), - this.clusterInputFormGroup.value.distanceMetric, - this.clusterInputFormGroup.value.clusterDetermination - ).subscribe((response: ResponseInterface) => { - this.apiResponse.emit(response) - this.isLoading.emit(false) - }, error => { - this.isLoading.emit(false) - this.snackbar.open('Ein Fehler ist aufgetreten. Meldung: ' + error.error.detail, 'Okay') - console.log(error) - }) + if (this.clusterInputFormGroup.value.offlineKmeans === true) { + if ((this.file != null) && (this.clusterInputFormGroup.value.distanceMetric != null) && (this.clusterInputFormGroup.value.k != null)) { + this.isLoading.emit(true) + this.localKmeans.performKMeans(this.file, Number(this.clusterInputFormGroup.value.k), this.clusterInputFormGroup.value.distanceMetric) + .then((result) => { + this.kmeansResult.emit(result) + this.isLoading.emit(false) + }).catch((error) => { + console.log(error) + this.isLoading.emit(false) + }) + } } else { - this.snackbar.open('Bitte lade erst eine Datei hoch', 'Okay', { duration: 3000 }) + if ((this.file != null) && (this.clusterInputFormGroup.value.distanceMetric != null) && (this.clusterInputFormGroup.value.clusterDetermination != null)) { + this.isLoading.emit(true) + this.apiService.postKmeans( + this.file, + undefined, + undefined, + Number(this.clusterInputFormGroup.value.k), + this.clusterInputFormGroup.value.distanceMetric, + this.clusterInputFormGroup.value.clusterDetermination + ).subscribe((response: ResponseInterface) => { + this.kmeansResult.emit(response) + this.isLoading.emit(false) + }, error => { + this.isLoading.emit(false) + this.snackbar.open('Ein Fehler ist aufgetreten. Meldung: ' + error.error.detail, 'Okay') + console.log(error) + }) + } else { + this.snackbar.open('Bitte lade erst eine Datei hoch', 'Okay', { duration: 3000 }) + } } } From 5bcea27520c6d7b146df5d30b0d2822db8d1b1d4 Mon Sep 17 00:00:00 2001 From: REDDERD <143699981+REDDERD@users.noreply.github.com> Date: Wed, 4 Oct 2023 18:08:40 +0200 Subject: [PATCH 20/24] Deleted build-beta.yml (#45) Co-authored-by: cepurwin <113333536+cepurwin@users.noreply.github.com> --- .github/workflows/build-beta.yml | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 .github/workflows/build-beta.yml diff --git a/.github/workflows/build-beta.yml b/.github/workflows/build-beta.yml deleted file mode 100644 index 8a9c1ff..0000000 --- a/.github/workflows/build-beta.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: GitHub Actions Demo -run-name: ${{ github.actor }} is testing out GitHub Actions 🚀 -on: [push] -jobs: - Explore-GitHub-Actions: - runs-on: ubuntu-latest - steps: - - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event." - - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!" - - run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}." - - name: Check out repository code - uses: actions/checkout@v3 - - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner." - - run: echo "🖥️ The workflow is now ready to test your code on the runner." - - name: List files in the repository - run: | - ls ${{ github.workspace }} - - run: echo "🍏 This job's status is ${{ job.status }}." \ No newline at end of file From ddbf8afce61e45577b0cb56d267bc44714946f5c Mon Sep 17 00:00:00 2001 From: khuepp <143700333+khuepp@users.noreply.github.com> Date: Wed, 4 Oct 2023 18:48:00 +0200 Subject: [PATCH 21/24] Klaas/clustering (#46) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * front without logic implemented * läuft mit einem Fehler * Deutsch * Added Kmeans Service File and Test * Sync test-deployment with main (#29) * Installed Playwright for E2E-Testing * Installed ESLint * Added Linting as GitHub Action * Removed Linting as GitHub Action * csv inport (#24) * front without logic implemented * läuft mit einem Fehler * Deutsch * Update sync-test-deploy-branch.yaml (#25) * Update sync-test-deploy-branch.yaml * Update sync-test-deploy-branch.yaml * Finalized sync-test-deploy-branch.yaml (#28) Should work now. Was tested in separate repo --------- Co-authored-by: david-2031 <113417732+david-2031@users.noreply.github.com> * Daniel/only https (#30) * Installed Playwright for E2E-Testing * Installed ESLint * Added Linting as GitHub Action * Removed Linting as GitHub Action * csv inport (#24) * front without logic implemented * läuft mit einem Fehler * Deutsch * Update sync-test-deploy-branch.yaml (#25) * Update sync-test-deploy-branch.yaml * Update sync-test-deploy-branch.yaml * Finalized sync-test-deploy-branch.yaml (#28) Should work now. Was tested in separate repo * Ensured only HTTPS is used to access * Fixed Routing Bug (Probably) --------- Co-authored-by: david-2031 <113417732+david-2031@users.noreply.github.com> * Inputfeld Manhattan/Euclidean, Input lokale Berechnung * Sync test-deployment with main (#31) * Chart working with Mock-Data * Removed unused import * Installed Playwright for E2E-Testing * Installed ESLint * Added Linting as GitHub Action * Removed Linting as GitHub Action * csv inport (#24) * front without logic implemented * läuft mit einem Fehler * Deutsch * Chart working with Mock-Data * Removed unused import * Update sync-test-deploy-branch.yaml (#25) * Update sync-test-deploy-branch.yaml * Update sync-test-deploy-branch.yaml * Finalized sync-test-deploy-branch.yaml (#28) Should work now. Was tested in separate repo --------- Co-authored-by: cepurwin Co-authored-by: david-2031 <113417732+david-2031@users.noreply.github.com> * Inputfeld Manhattan/Euclidean; Input lokale Berechnung; Hinweis dass K optional ist * Update cloudbuild.yaml * Update app.yaml * Ensured usage of HTTPS * Optionen für die Methode zur Bestiummung von K eingebaut (Ellenbogen, Silhouette); Berechnungsmethode um Methode "Jaccard" ergänzt Alle Optionen wurden in ein Expansion Panel eingebaut * Daniel/fix merge conflicts1 (#36) * Update input.component.css from main for fixing merge conflict * Update input.component.html from main for fixing merge conflict * Update input.component.ts from main for fixing merge conflict * Sync test-deployment with main (#33) * Chart working with Mock-Data * Removed unused import * Installed Playwright for E2E-Testing * Installed ESLint * Added Linting as GitHub Action * Removed Linting as GitHub Action * csv inport (#24) * front without logic implemented * läuft mit einem Fehler * Deutsch * Chart working with Mock-Data * Removed unused import * Update sync-test-deploy-branch.yaml (#25) * Update sync-test-deploy-branch.yaml * Update sync-test-deploy-branch.yaml * Finalized sync-test-deploy-branch.yaml (#28) Should work now. Was tested in separate repo * Dave/import data format (#32) * edited upload text * display uploaded data * Fixed reloading bug (#35) * Update app.yaml * Update cloudbuild.yaml --------- Co-authored-by: cepurwin Co-authored-by: david-2031 <113417732+david-2031@users.noreply.github.com> * Got linting to working and added GitHub action "lint" (#39) * Added Kmeans Service File and Test * Fixed most linting errors * CSV-File Reading implemented * KMeans and JSON-result implementet * Added Elbow Method * Added Elbow Method * Added Elbow Method * changed check for ellbow method * removed useless console.log --------- Co-authored-by: david-2031 Co-authored-by: REDDERD <143699981+REDDERD@users.noreply.github.com> Co-authored-by: david-2031 <113417732+david-2031@users.noreply.github.com> Co-authored-by: cookie.exe Co-authored-by: cepurwin Co-authored-by: Cornelius Daemberg <108803070+Splashed01@users.noreply.github.com> Co-authored-by: cepurwin <113333536+cepurwin@users.noreply.github.com> --- .../home-services/kmeans-local.service.ts | 32 ++++++++++++++++++- src/app/home/home.component.ts | 1 - src/app/home/input/input.component.ts | 8 +++-- 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/src/app/home/home-services/kmeans-local.service.ts b/src/app/home/home-services/kmeans-local.service.ts index f5b9ea8..f35859a 100644 --- a/src/app/home/home-services/kmeans-local.service.ts +++ b/src/app/home/home-services/kmeans-local.service.ts @@ -18,7 +18,34 @@ export class KmeansLocalService { return pointA.reduce((sum, value, index) => sum + Math.abs(value - pointB[index]), 0) } - async performKMeans (csv: File, k: number, distanceMetric: string): Promise { + elbowMethod (data: number[][], maxClusters: number, distanceMetric: string): number { + const ssd: number[] = [] // Sum of Squared Distances for different cluster numbers + + const distanceFunction = distanceMetric === 'EUCLIDEAN' ? this.euclideanDistance : this.manhattanDistance + + for (let i = 1; i <= maxClusters; i++) { + const result = KMeans(data, i, { distanceFunction }) + let currentSSD = 0 + for (let j = 0; j < data.length; j++) { + const centroid = result.centroids[result.clusters[j]] + currentSSD += distanceFunction(data[j], centroid) ** 2 + } + ssd.push(currentSSD) + } + // Calculate the rate of change of SSD (first derivative) + const ratesOfChange = ssd.slice(1).map((value, index) => ssd[index] - value) + // Calculate the second derivative + const secondDerivative = ratesOfChange.slice(1).map((value, index) => ratesOfChange[index] - value) + // Find the index of the maximum value in the second derivative + const elbowPoint = secondDerivative.indexOf(Math.max(...secondDerivative)) + // Convert SSD values to an array of x and y coordinates + // const coordinates = ssd.map((value, index) => ({ x: index + 1, y: value })) + + // Return the optimal number of clusters + return elbowPoint + 2 // +2 because the index is 0-based and we started from k=1 + } + + async performKMeans (csv: File, k: number, useOptK: boolean, distanceMetric: string): Promise { return await new Promise((resolve, reject) => { const fileReader = new FileReader() @@ -30,6 +57,9 @@ export class KmeansLocalService { .map(row => row.map(value => parseFloat(value))) .filter(row => row.length === this.csvData[1].length) + if (useOptK) { + k = this.elbowMethod(dataAsNumbers, 100, distanceMetric) + } const result = KMeans(dataAsNumbers, k, { distanceFunction: distanceMetric === 'EUCLIDEAN' ? this.euclideanDistance : this.manhattanDistance }) diff --git a/src/app/home/home.component.ts b/src/app/home/home.component.ts index 83fe8cd..7012240 100644 --- a/src/app/home/home.component.ts +++ b/src/app/home/home.component.ts @@ -15,7 +15,6 @@ export class HomeComponent { public handleAPIResponse (response: ResponseInterface): void { this.kmeansResult = response - console.log(this.kmeansResult) } public handleLoading (status: boolean): void { diff --git a/src/app/home/input/input.component.ts b/src/app/home/input/input.component.ts index e61f7c3..588bb20 100644 --- a/src/app/home/input/input.component.ts +++ b/src/app/home/input/input.component.ts @@ -33,9 +33,13 @@ export class InputComponent { submit (): void { if (this.clusterInputFormGroup.value.offlineKmeans === true) { - if ((this.file != null) && (this.clusterInputFormGroup.value.distanceMetric != null) && (this.clusterInputFormGroup.value.k != null)) { + if ((this.file != null) && (this.clusterInputFormGroup.value.distanceMetric != null)) { this.isLoading.emit(true) - this.localKmeans.performKMeans(this.file, Number(this.clusterInputFormGroup.value.k), this.clusterInputFormGroup.value.distanceMetric) + this.localKmeans.performKMeans( + this.file, + Number(this.clusterInputFormGroup.value.k) !== 0 ? Number(this.clusterInputFormGroup.value.k) : 0, + Number(this.clusterInputFormGroup.value.k) === 0, + this.clusterInputFormGroup.value.distanceMetric) .then((result) => { this.kmeansResult.emit(result) this.isLoading.emit(false) From eb8f3fa48fb7e8029916f0b3508b3d377fabc2e7 Mon Sep 17 00:00:00 2001 From: david-2031 <113417732+david-2031@users.noreply.github.com> Date: Thu, 5 Oct 2023 09:39:14 +0200 Subject: [PATCH 22/24] table view (#47) * Added basic local kmeans * converting the data to table view * flattening table not working yet * implementing table * working * home left container aligned to baseline * linting and cleanup * merge conflicts --------- Co-authored-by: cepurwin --- src/app/app.module.ts | 10 ++- .../chart-container.component.html | 13 ++- .../chart/chart.component.html | 13 +-- .../chart-container/table/table.component.css | 3 + .../table/table.component.html | 32 ++++++++ .../table/table.component.spec.ts | 21 +++++ .../chart-container/table/table.component.ts | 82 +++++++++++++++++++ src/app/home/home.component.css | 3 +- src/app/interfaces/response-interface.ts | 2 +- src/app/interfaces/tableDataset-interface.ts | 14 ++++ 10 files changed, 183 insertions(+), 10 deletions(-) create mode 100644 src/app/home/chart-container/table/table.component.css create mode 100644 src/app/home/chart-container/table/table.component.html create mode 100644 src/app/home/chart-container/table/table.component.spec.ts create mode 100644 src/app/home/chart-container/table/table.component.ts create mode 100644 src/app/interfaces/tableDataset-interface.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 980c07b..7855a6f 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -21,6 +21,9 @@ import { MatSelectModule } from '@angular/material/select' import { MatButtonToggleModule } from '@angular/material/button-toggle' import { MatExpansionModule } from '@angular/material/expansion' import { MatSlideToggleModule } from '@angular/material/slide-toggle' +import { TableComponent } from './home/chart-container/table/table.component' +import { MatTabsModule } from '@angular/material/tabs' +import { MatTableModule } from '@angular/material/table' const routes: Routes = [{ path: 'home', component: HomeComponent }, { path: '', redirectTo: '/home', pathMatch: 'full' }, @@ -32,7 +35,8 @@ const routes: Routes = [{ path: 'home', component: HomeComponent }, InputComponent, ChartContainerComponent, ChartComponent, - LoginComponent + LoginComponent, + TableComponent ], imports: [ BrowserModule, @@ -49,7 +53,9 @@ const routes: Routes = [{ path: 'home', component: HomeComponent }, MatSelectModule, MatButtonToggleModule, MatExpansionModule, - MatSlideToggleModule + MatSlideToggleModule, + MatTabsModule, + MatTableModule ], providers: [], bootstrap: [AppComponent] diff --git a/src/app/home/chart-container/chart-container.component.html b/src/app/home/chart-container/chart-container.component.html index ef86bd6..6b8267a 100644 --- a/src/app/home/chart-container/chart-container.component.html +++ b/src/app/home/chart-container/chart-container.component.html @@ -1 +1,12 @@ - +
+ + + + + + + + + + +
diff --git a/src/app/home/chart-container/chart/chart.component.html b/src/app/home/chart-container/chart/chart.component.html index 3f4b9a7..464b244 100644 --- a/src/app/home/chart-container/chart/chart.component.html +++ b/src/app/home/chart-container/chart/chart.component.html @@ -1,6 +1,9 @@ -
- {{ chart }} +
+
+ {{ chart }} +
+ + + +
- - - diff --git a/src/app/home/chart-container/table/table.component.css b/src/app/home/chart-container/table/table.component.css new file mode 100644 index 0000000..1922e7f --- /dev/null +++ b/src/app/home/chart-container/table/table.component.css @@ -0,0 +1,3 @@ +table { + width: 100%; +} diff --git a/src/app/home/chart-container/table/table.component.html b/src/app/home/chart-container/table/table.component.html new file mode 100644 index 0000000..17d0ba6 --- /dev/null +++ b/src/app/home/chart-container/table/table.component.html @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + +
+ Name + + + + {{data.name}} + x {{data.x}} y {{data.y}}
diff --git a/src/app/home/chart-container/table/table.component.spec.ts b/src/app/home/chart-container/table/table.component.spec.ts new file mode 100644 index 0000000..a3f59d9 --- /dev/null +++ b/src/app/home/chart-container/table/table.component.spec.ts @@ -0,0 +1,21 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing' + +import { TableComponent } from './table.component' + +describe('TableComponent', () => { + let component: TableComponent + let fixture: ComponentFixture + + beforeEach(() => { + TestBed.configureTestingModule({ + declarations: [TableComponent] + }) + fixture = TestBed.createComponent(TableComponent) + component = fixture.componentInstance + fixture.detectChanges() + }) + + it('should create', () => { + expect(component).toBeTruthy() + }) +}) diff --git a/src/app/home/chart-container/table/table.component.ts b/src/app/home/chart-container/table/table.component.ts new file mode 100644 index 0000000..4aaa1c7 --- /dev/null +++ b/src/app/home/chart-container/table/table.component.ts @@ -0,0 +1,82 @@ +import { AfterViewInit, Component, Input, OnChanges, SimpleChanges } from '@angular/core' +import { ResponseInterface } from '../../../interfaces/response-interface' +import { MockDaten } from '../chart/mock-daten' +import { FlatTreeControl } from '@angular/cdk/tree' +import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree' +import { FlatTableDataset, TableDatasetInterface } from '../../../interfaces/tableDataset-interface' + +@Component({ + selector: 'app-table', + templateUrl: './table.component.html', + styleUrls: ['./table.component.css'] +}) +export class TableComponent implements AfterViewInit, OnChanges { + @Input() kmeansResult: ResponseInterface | undefined + tableDataRaw: ResponseInterface = MockDaten + tableData: TableDatasetInterface[] = [] + + displayedColumns: string[] = ['name', 'x', 'y'] + + private transformer = (node: TableDatasetInterface, level: number): any => { + return { + expandable: !(node.children == null) && node.children.length > 0, + name: node.name, + x: node.x, + y: node.y, + level + } + } + + treeControl = new FlatTreeControl( + node => node.level, node => node.expandable) + + treeFlattener = new MatTreeFlattener( + this.transformer, node => node.level, + node => node.expandable, node => node.children) + + dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener) + + ngAfterViewInit (): void { + this.fillTableData() + this.dataSource.data = this.tableData + console.log(this.tableData) + } + + ngOnChanges (changes: SimpleChanges): void { + if (changes['kmeansResult'].currentValue !== undefined) { + if (this.kmeansResult != null) { + this.tableDataRaw = this.kmeansResult + this.fillTableData() + this.dataSource.data = this.tableData + console.log(this.tableData) + } else { + this.tableData = [] + this.dataSource.data = this.tableData + } + } + } + + fillTableData (): void { + this.tableData = [] + + this.tableDataRaw.cluster.map(cluster => { + const dataset: TableDatasetInterface = { + name: 'Centroid ' + (cluster.clusterNr + 1), + x: cluster.centroid.x, + y: cluster.centroid.y, + children: [] + } + cluster.points.map(point => { + const pointData: TableDatasetInterface = { + name: 'point', + x: point.x, + y: point.y + } + dataset.children?.push(pointData) + return null + }) + this.tableData.push(dataset) + return null + }) + } +} diff --git a/src/app/home/home.component.css b/src/app/home/home.component.css index c7ca6db..d77688b 100644 --- a/src/app/home/home.component.css +++ b/src/app/home/home.component.css @@ -17,8 +17,9 @@ } .sidenav-item-left { - flex:0 0 50%; + flex: 0 0 50%; margin-right: 50px; + align-self: baseline; } .sidenav-item-right { diff --git a/src/app/interfaces/response-interface.ts b/src/app/interfaces/response-interface.ts index 6bdf717..9e7791f 100644 --- a/src/app/interfaces/response-interface.ts +++ b/src/app/interfaces/response-interface.ts @@ -12,7 +12,7 @@ export interface ResponseInterface { 'clusters_silhouette': number } -interface Cluster { +export interface Cluster { 'clusterNr': number 'centroid': Centroid 'points': Points[] diff --git a/src/app/interfaces/tableDataset-interface.ts b/src/app/interfaces/tableDataset-interface.ts new file mode 100644 index 0000000..bca37e1 --- /dev/null +++ b/src/app/interfaces/tableDataset-interface.ts @@ -0,0 +1,14 @@ +export interface TableDatasetInterface { + name: string + x: number + y: number + children?: TableDatasetInterface[] +} + +export interface FlatTableDataset { + expandable: boolean + name: string + x: number + y: number + level: number +} From f939b3c27843fac6a657dccc45fbbaeae5ce0500 Mon Sep 17 00:00:00 2001 From: REDDERD <143699981+REDDERD@users.noreply.github.com> Date: Thu, 5 Oct 2023 10:30:20 +0200 Subject: [PATCH 23/24] Increase InitialBudget to 4 MB (#48) --- angular.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/angular.json b/angular.json index 07c6667..46b635a 100644 --- a/angular.json +++ b/angular.json @@ -35,8 +35,8 @@ "budgets": [ { "type": "initial", - "maximumWarning": "500kb", - "maximumError": "1mb" + "maximumWarning": "3mb", + "maximumError": "4mb" }, { "type": "anyComponentStyle", From 858cd6d522a93dd24eb7b07de86a9e98b1c41145 Mon Sep 17 00:00:00 2001 From: khuepp <143700333+khuepp@users.noreply.github.com> Date: Mon, 9 Oct 2023 12:20:06 +0200 Subject: [PATCH 24/24] Klaas/clustering (#51) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * front without logic implemented * läuft mit einem Fehler * Deutsch * Added Kmeans Service File and Test * Sync test-deployment with main (#29) * Installed Playwright for E2E-Testing * Installed ESLint * Added Linting as GitHub Action * Removed Linting as GitHub Action * csv inport (#24) * front without logic implemented * läuft mit einem Fehler * Deutsch * Update sync-test-deploy-branch.yaml (#25) * Update sync-test-deploy-branch.yaml * Update sync-test-deploy-branch.yaml * Finalized sync-test-deploy-branch.yaml (#28) Should work now. Was tested in separate repo --------- Co-authored-by: david-2031 <113417732+david-2031@users.noreply.github.com> * Daniel/only https (#30) * Installed Playwright for E2E-Testing * Installed ESLint * Added Linting as GitHub Action * Removed Linting as GitHub Action * csv inport (#24) * front without logic implemented * läuft mit einem Fehler * Deutsch * Update sync-test-deploy-branch.yaml (#25) * Update sync-test-deploy-branch.yaml * Update sync-test-deploy-branch.yaml * Finalized sync-test-deploy-branch.yaml (#28) Should work now. Was tested in separate repo * Ensured only HTTPS is used to access * Fixed Routing Bug (Probably) --------- Co-authored-by: david-2031 <113417732+david-2031@users.noreply.github.com> * Inputfeld Manhattan/Euclidean, Input lokale Berechnung * Sync test-deployment with main (#31) * Chart working with Mock-Data * Removed unused import * Installed Playwright for E2E-Testing * Installed ESLint * Added Linting as GitHub Action * Removed Linting as GitHub Action * csv inport (#24) * front without logic implemented * läuft mit einem Fehler * Deutsch * Chart working with Mock-Data * Removed unused import * Update sync-test-deploy-branch.yaml (#25) * Update sync-test-deploy-branch.yaml * Update sync-test-deploy-branch.yaml * Finalized sync-test-deploy-branch.yaml (#28) Should work now. Was tested in separate repo --------- Co-authored-by: cepurwin Co-authored-by: david-2031 <113417732+david-2031@users.noreply.github.com> * Inputfeld Manhattan/Euclidean; Input lokale Berechnung; Hinweis dass K optional ist * Update cloudbuild.yaml * Update app.yaml * Ensured usage of HTTPS * Optionen für die Methode zur Bestiummung von K eingebaut (Ellenbogen, Silhouette); Berechnungsmethode um Methode "Jaccard" ergänzt Alle Optionen wurden in ein Expansion Panel eingebaut * Daniel/fix merge conflicts1 (#36) * Update input.component.css from main for fixing merge conflict * Update input.component.html from main for fixing merge conflict * Update input.component.ts from main for fixing merge conflict * Sync test-deployment with main (#33) * Chart working with Mock-Data * Removed unused import * Installed Playwright for E2E-Testing * Installed ESLint * Added Linting as GitHub Action * Removed Linting as GitHub Action * csv inport (#24) * front without logic implemented * läuft mit einem Fehler * Deutsch * Chart working with Mock-Data * Removed unused import * Update sync-test-deploy-branch.yaml (#25) * Update sync-test-deploy-branch.yaml * Update sync-test-deploy-branch.yaml * Finalized sync-test-deploy-branch.yaml (#28) Should work now. Was tested in separate repo * Dave/import data format (#32) * edited upload text * display uploaded data * Fixed reloading bug (#35) * Update app.yaml * Update cloudbuild.yaml --------- Co-authored-by: cepurwin Co-authored-by: david-2031 <113417732+david-2031@users.noreply.github.com> * Got linting to working and added GitHub action "lint" (#39) * Added Kmeans Service File and Test * Fixed most linting errors * CSV-File Reading implemented * KMeans and JSON-result implementet * Added Elbow Method * Added Elbow Method * Added Elbow Method * Added automatic detection for different csv delimiters * Added automatic detection for different csv delimiters * Added Excel Support, CSV-Service accepts Files (same format as Excel-Service), KMeans-Service cleaner * Merged CSV and Excel Service; moved decision on which file type is used to Data-Service * Adjusted CSV-Service naming * Added Drop-Down-Field for selecting Columns. Default: first two columns are selected * Give Backend API the selected columns * Clean Up Package.json * Disable Jaccard and Silhoutte when in local mode; Cleaned up package.json * Forgot package-lock.json * removed console logs from table component --------- Co-authored-by: david-2031 Co-authored-by: REDDERD <143699981+REDDERD@users.noreply.github.com> Co-authored-by: david-2031 <113417732+david-2031@users.noreply.github.com> Co-authored-by: cookie.exe Co-authored-by: cepurwin Co-authored-by: Cornelius Daemberg <108803070+Splashed01@users.noreply.github.com> --- package-lock.json | 2240 ++++++++--------- package.json | 1 + .../chart-container/table/table.component.ts | 2 - .../csv-to-2-d-array.service.spec.ts | 16 - .../home-services/csv-to-2-d-array.service.ts | 11 - .../data-to-2d-array.service.spec.ts | 16 + .../home-services/data-to-2d-array.service.ts | 107 + .../home-services/kmeans-local.service.ts | 64 +- src/app/home/input/input.component.css | 8 + src/app/home/input/input.component.html | 23 +- src/app/home/input/input.component.ts | 73 +- 11 files changed, 1236 insertions(+), 1325 deletions(-) delete mode 100644 src/app/home/home-services/csv-to-2-d-array.service.spec.ts delete mode 100644 src/app/home/home-services/csv-to-2-d-array.service.ts create mode 100644 src/app/home/home-services/data-to-2d-array.service.spec.ts create mode 100644 src/app/home/home-services/data-to-2d-array.service.ts diff --git a/package-lock.json b/package-lock.json index 61d981e..c1c0799 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "@angular/router": "^16.2.0", "chart.js": "^4.4.0", "ml-kmeans": "^6.0.0", + "node-xlsx": "^0.23.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.13.0" @@ -75,12 +76,12 @@ } }, "node_modules/@angular-devkit/architect": { - "version": "0.1602.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.1.tgz", - "integrity": "sha512-EhK+4lQOwYE2Zhd5+2Un2+q7wTnXEn2pVIZ11f1x78fYAbf6QyYrBZTegGOj+j3NRMdfJM0v238r+ypMdnDimA==", + "version": "0.1602.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1602.5.tgz", + "integrity": "sha512-lbFA2nrF0A1Rs6AU9yYeSHflsiorqL4tSwL7wMtQWMNawRjORiY7IwETyL0PmnlKsbbPlTGnWBhMfeGyBOowEw==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.2.1", + "@angular-devkit/core": "16.2.5", "rxjs": "7.8.1" }, "engines": { @@ -90,15 +91,15 @@ } }, "node_modules/@angular-devkit/build-angular": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.1.tgz", - "integrity": "sha512-2CkBOk76O8ROys5NUcRBMLdFVPuBfr3oy9omP5nO0aQVA9mWc3TRy/MeqDbr0xcY8LyJBB4B1jEQrkjWaeSDcA==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.2.5.tgz", + "integrity": "sha512-ZHyMhhSZkulJiDyTvONJV2OwbxTdjbrJGfkUhv4k4f4HfV8ADUXlhanGjuqykxWG2CmDIsV09j/5b1lg2fYqww==", "dev": true, "dependencies": { "@ampproject/remapping": "2.2.1", - "@angular-devkit/architect": "0.1602.1", - "@angular-devkit/build-webpack": "0.1602.1", - "@angular-devkit/core": "16.2.1", + "@angular-devkit/architect": "0.1602.5", + "@angular-devkit/build-webpack": "0.1602.5", + "@angular-devkit/core": "16.2.5", "@babel/core": "7.22.9", "@babel/generator": "7.22.9", "@babel/helper-annotate-as-pure": "7.22.5", @@ -110,7 +111,7 @@ "@babel/runtime": "7.22.6", "@babel/template": "7.22.5", "@discoveryjs/json-ext": "0.5.7", - "@ngtools/webpack": "16.2.1", + "@ngtools/webpack": "16.2.5", "@vitejs/plugin-basic-ssl": "1.0.1", "ansi-colors": "4.1.3", "autoprefixer": "10.4.14", @@ -140,7 +141,7 @@ "parse5-html-rewriting-stream": "7.0.0", "picomatch": "2.3.1", "piscina": "4.0.0", - "postcss": "8.4.27", + "postcss": "8.4.31", "postcss-loader": "7.3.3", "resolve-url-loader": "5.0.0", "rxjs": "7.8.1", @@ -218,12 +219,12 @@ "dev": true }, "node_modules/@angular-devkit/build-webpack": { - "version": "0.1602.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.1.tgz", - "integrity": "sha512-gY7G+1xsOkPvO4/Ose1RnbflrTQkbQh6xQPeCa95I4GFFpk8De3d2cGNM9KuD8LCDc1GAGip8nRuVrCwQGZ5sw==", + "version": "0.1602.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1602.5.tgz", + "integrity": "sha512-cpdhZdi1I3/gu3wcwQyIstrbE0kpoa5vvHu9MFzQ9a/DZV0aAev2d1e9rgOwSRUTCB83LV8+eBY99jqmF54U/g==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1602.1", + "@angular-devkit/architect": "0.1602.5", "rxjs": "7.8.1" }, "engines": { @@ -237,9 +238,9 @@ } }, "node_modules/@angular-devkit/core": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.1.tgz", - "integrity": "sha512-/QnIIvu9kW4UoJ2IWF8pxwHk+/O2ARi5bYV9jCgMxTs/3VuOHrWaDtxAvxd1gqj+vYvwLtdbBYNT/Hs/nCJeLQ==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.2.5.tgz", + "integrity": "sha512-d7xzdvv3aZiNgMtFERR3TxUAdKjzWiWUN94jjBeovITP32yFDz02DzXwUGMFIA3/YhZ/sAEEOKVF3pBXLJ6P4g==", "dev": true, "dependencies": { "ajv": "8.12.0", @@ -264,12 +265,12 @@ } }, "node_modules/@angular-devkit/schematics": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.1.tgz", - "integrity": "sha512-rXXO5zSI/iN6JtU3oU+vKfOB1N8n1iCH9aLudtJfO5zT9r29FIvV4YMmHO0iu78i4IhQAeJdr42cvrGPp8Y41A==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.2.5.tgz", + "integrity": "sha512-Du2qaN4SVrtPe2jQuo0VVZgFCUwouyv7tTwyJXv32Kvfw9s3IQD/yYSh0H+XTEbplUV9Fc8b9zWaVhVY1yvrSw==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.2.1", + "@angular-devkit/core": "16.2.5", "jsonc-parser": "3.2.0", "magic-string": "0.30.1", "ora": "5.4.1", @@ -333,291 +334,6 @@ "typescript": "*" } }, - "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@angular-eslint/eslint-plugin-template/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@angular-eslint/eslint-plugin-template/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular-eslint/eslint-plugin-template/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@angular-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@angular-eslint/eslint-plugin/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular-eslint/eslint-plugin/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@angular-eslint/schematics": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/@angular-eslint/schematics/-/schematics-16.2.0.tgz", @@ -636,18 +352,6 @@ "@angular/cli": ">= 16.0.0 < 17.0.0" } }, - "node_modules/@angular-eslint/schematics/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, "node_modules/@angular-eslint/template-parser": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/@angular-eslint/template-parser/-/template-parser-16.2.0.tgz", @@ -662,22 +366,6 @@ "typescript": "*" } }, - "node_modules/@angular-eslint/template-parser/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/@angular-eslint/utils": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/@angular-eslint/utils/-/utils-16.2.0.tgz", @@ -692,139 +380,10 @@ "typescript": "*" } }, - "node_modules/@angular-eslint/utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@angular-eslint/utils/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@angular-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@angular-eslint/utils/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@angular-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@angular-eslint/utils/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@angular-eslint/utils/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/@angular/animations": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.3.tgz", - "integrity": "sha512-MEjCWjN7RcHNFHkDYB3ZvEQqt94EzwevVXfld6rcOZNwJxcOVyi7+nQQ1YhWLPSW81HF76bpwD3RWWhZpKdXQQ==", + "version": "16.2.8", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.2.8.tgz", + "integrity": "sha512-tjJID1eZORcC9N1f0JIcOzirv6D1q2q7y2S6h51WncJC5G9vOUpIOoOE3gmg0TH0FS41wJe/WfiQku3BuoMA9w==", "dependencies": { "tslib": "^2.3.0" }, @@ -832,13 +391,13 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.2.3" + "@angular/core": "16.2.8" } }, "node_modules/@angular/cdk": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.2.tgz", - "integrity": "sha512-luUmeIFuEX4N3EOLhg1DM2hgsR+Is1Qd0a5xflbo30hZFnufppyzjaOvljNYUFtNTD9BaQRXaZDFA2cyTgfzZw==", + "version": "16.2.7", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.2.7.tgz", + "integrity": "sha512-LLbCu0pHHsZWGjSpQW0qRoKYRCm09TuFH2vzsViyaQF7umDKlk52QcDFB/nMioyiWPgqXkyHyGMFG1vFBNSIeg==", "dependencies": { "tslib": "^2.3.0" }, @@ -851,28 +410,16 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, - "node_modules/@angular/cdk/node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "optional": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/@angular/cli": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.1.tgz", - "integrity": "sha512-nuCc0VOGjuUFQo1Pu9CyFQ4VTy7OuwTiwxOG9qbut4FSGz2CO9NeqoamPUuy6rpKVu5JxVe+L6Y4OFaNKv2n3Q==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.2.5.tgz", + "integrity": "sha512-7+OG2KKUq+Wi9pl8JJKzH5BICOInMvyRma8/anDiXMTdhuO8cyhPu3xCl8znc6qV9RcUax0HvJmRq11kv/aJTA==", "dev": true, "dependencies": { - "@angular-devkit/architect": "0.1602.1", - "@angular-devkit/core": "16.2.1", - "@angular-devkit/schematics": "16.2.1", - "@schematics/angular": "16.2.1", + "@angular-devkit/architect": "0.1602.5", + "@angular-devkit/core": "16.2.5", + "@angular-devkit/schematics": "16.2.5", + "@schematics/angular": "16.2.5", "@yarnpkg/lockfile": "1.1.0", "ansi-colors": "4.1.3", "ini": "4.1.1", @@ -898,9 +445,9 @@ } }, "node_modules/@angular/common": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.3.tgz", - "integrity": "sha512-hOC2yqISBRAzltuVJQ3CEJxHRp9mWggysp0or5HydbcmvB6WIroECL7U0u36VA95zC9SXnymHA13OwiFPpmahA==", + "version": "16.2.8", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.2.8.tgz", + "integrity": "sha512-0LZSBHnk9c6XPcrQx9D8i0DKi807IuiuOtK4kMa64aj1pySY3TK+uort5hqpmhgdqiCbBHZjgpRpU83LoTTl3w==", "dependencies": { "tslib": "^2.3.0" }, @@ -908,14 +455,14 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.2.3", + "@angular/core": "16.2.8", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/compiler": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.3.tgz", - "integrity": "sha512-bFc7YRHNdBJZD2HiORBQun2p40emvEt8D4JwXnW1JIStAWKJOXLyEjx045wNddqH7NpUq8AE2F1i82hIDNQZ1g==", + "version": "16.2.8", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.2.8.tgz", + "integrity": "sha512-xWdMAeBkYh8ESk9iBSYnp2qfbGPNReggtNJuUL9I7AFGkzkvEWndyQ+oTXzCM5gjj4nWB5A/AAYYDU54sDac2Q==", "dependencies": { "tslib": "^2.3.0" }, @@ -923,7 +470,7 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/core": "16.2.3" + "@angular/core": "16.2.8" }, "peerDependenciesMeta": { "@angular/core": { @@ -932,9 +479,9 @@ } }, "node_modules/@angular/compiler-cli": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.3.tgz", - "integrity": "sha512-4p1tDeeONiq/zceC0T6unXDuqyWiAe7v2Ag7+ewwM9V8BF+YOEpEI/41lxzmbK2U1YUvG3jWfZyw3ertQlMp0Q==", + "version": "16.2.8", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.2.8.tgz", + "integrity": "sha512-kKcfr8vbdB+MYDgyeZdxeoVbOpoGFmxOj4IEVnOQ2SPYexcnLEK38qect6LpHGIEG5bOQrkQqWmNnmHAEH4L1g==", "dev": true, "dependencies": { "@babel/core": "7.22.5", @@ -955,7 +502,7 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/compiler": "16.2.3", + "@angular/compiler": "16.2.8", "typescript": ">=4.9.3 <5.2" } }, @@ -999,9 +546,9 @@ } }, "node_modules/@angular/core": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.3.tgz", - "integrity": "sha512-YCzm7Rd2l0Ti0dZ1Mw3OfoQqlLolDN6jBEPy9Ah1s/KB+jKwNK9An3g8A9H6/jQIFwHCtxRad3LYH5ftknNMBQ==", + "version": "16.2.8", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.2.8.tgz", + "integrity": "sha512-v3kwZsjf7mKBGMky+UfxV3iwA1BFy1c3gmjyHSPSll9TPr2jkfwstoB2Cc+wmS2S9ezHFAMX++XXRymKVRQzQg==", "dependencies": { "tslib": "^2.3.0" }, @@ -1014,9 +561,9 @@ } }, "node_modules/@angular/forms": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.3.tgz", - "integrity": "sha512-d2ELs3PU4o1Yb89w4X3trD3CFWrDUsuFKs1hyNSYPWqCmcQ+tAfr9mizYPTVPSvee/RPRBqDEa0YTzfVpOvX4Q==", + "version": "16.2.8", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.2.8.tgz", + "integrity": "sha512-EKv9hdajLnFjz6lH5O8rWtFPqUWws7w+CCoFZw+z+9D6onM26w4Fw0Ng7PMP3g9zGGC4YyqEl729mBsgxAO+7A==", "dependencies": { "tslib": "^2.3.0" }, @@ -1024,16 +571,16 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.2.3", - "@angular/core": "16.2.3", - "@angular/platform-browser": "16.2.3", + "@angular/common": "16.2.8", + "@angular/core": "16.2.8", + "@angular/platform-browser": "16.2.8", "rxjs": "^6.5.3 || ^7.4.0" } }, "node_modules/@angular/material": { - "version": "16.2.2", - "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.2.2.tgz", - "integrity": "sha512-0SaBPZsZ1jxq5yJeey+V2k7nq1Izw63fjxkyLx7rCcdowwwoBnG/dZsY97/5Qs2cZX0J+Z0iNpMYVJZd72GsvQ==", + "version": "16.2.7", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.2.7.tgz", + "integrity": "sha512-f5J/YdbrgaoeRhqDVNhauY/nHMSbF4zTph5gYtkGu49MQHpf6vAxfW9m8E2Rs/RPmhb44e3671Z8nONbvP6yGg==", "dependencies": { "@material/animation": "15.0.0-canary.bc9ae6c9c.0", "@material/auto-init": "15.0.0-canary.bc9ae6c9c.0", @@ -1086,7 +633,7 @@ }, "peerDependencies": { "@angular/animations": "^16.0.0 || ^17.0.0", - "@angular/cdk": "16.2.2", + "@angular/cdk": "16.2.7", "@angular/common": "^16.0.0 || ^17.0.0", "@angular/core": "^16.0.0 || ^17.0.0", "@angular/forms": "^16.0.0 || ^17.0.0", @@ -1095,9 +642,9 @@ } }, "node_modules/@angular/platform-browser": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.3.tgz", - "integrity": "sha512-adWINGgjIMxwbWJhkMwpEfb4FRFMda5X6ahxWQX2E03Nl0kzePI6cvlJqAgp+iBwTkieWeU8BThJk2/rMkS3bw==", + "version": "16.2.8", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.2.8.tgz", + "integrity": "sha512-y0rt8HmnTjvZrqt+bKU5CnmaI7xQiRWIaLWpYXGgqcqqMDgMYwSm2lV3H6K6S1v0ut+Q+zIWj2rGjr8Apox34Q==", "dependencies": { "tslib": "^2.3.0" }, @@ -1105,9 +652,9 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/animations": "16.2.3", - "@angular/common": "16.2.3", - "@angular/core": "16.2.3" + "@angular/animations": "16.2.8", + "@angular/common": "16.2.8", + "@angular/core": "16.2.8" }, "peerDependenciesMeta": { "@angular/animations": { @@ -1116,9 +663,9 @@ } }, "node_modules/@angular/platform-browser-dynamic": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.3.tgz", - "integrity": "sha512-Y3cYob1VGzT1xSMbuLGVxPlyuhv4zshYEo/yy2626YD63DigqYwGzj+gT0JoU1eNuXw2UWp3R67d9F8SC015Jw==", + "version": "16.2.8", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.2.8.tgz", + "integrity": "sha512-METr1TuMP2fHOXN0wVlW4CpQEIvy5fLSsPprDPuL+C0KeaCLuTST9Ek+yL7IVGu+VIpFZuqMC376z8n6ENo97g==", "dependencies": { "tslib": "^2.3.0" }, @@ -1126,16 +673,16 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.2.3", - "@angular/compiler": "16.2.3", - "@angular/core": "16.2.3", - "@angular/platform-browser": "16.2.3" + "@angular/common": "16.2.8", + "@angular/compiler": "16.2.8", + "@angular/core": "16.2.8", + "@angular/platform-browser": "16.2.8" } }, "node_modules/@angular/router": { - "version": "16.2.3", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.3.tgz", - "integrity": "sha512-xjF5v6BzXanPB0VoIxeKXg1DO95nKJ9UjTsmB5ZOufDcqQXE81NAnH7iEKOymvU7aacqrgD467vcDtGNWJdfQQ==", + "version": "16.2.8", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.2.8.tgz", + "integrity": "sha512-mWpapabWtk8Qtyb2BalXtvud9m6BCiKg8moJNb8dEAGjDzMTWqWOr4zkFHoIFX+gj2JKKDa6btPWVD6J5K6Ojg==", "dependencies": { "tslib": "^2.3.0" }, @@ -1143,9 +690,9 @@ "node": "^16.14.0 || >=18.10.0" }, "peerDependencies": { - "@angular/common": "16.2.3", - "@angular/core": "16.2.3", - "@angular/platform-browser": "16.2.3", + "@angular/common": "16.2.8", + "@angular/core": "16.2.8", + "@angular/platform-browser": "16.2.8", "rxjs": "^6.5.3 || ^7.4.0" } }, @@ -1169,9 +716,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", - "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.20.tgz", + "integrity": "sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==", "dev": true, "engines": { "node": ">=6.9.0" @@ -1244,25 +791,25 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", - "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, "dependencies": { - "@babel/types": "^7.22.10" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", - "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", + "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -1281,15 +828,15 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.11.tgz", - "integrity": "sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", + "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", @@ -1313,9 +860,9 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", - "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", @@ -1355,22 +902,36 @@ } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name/node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1389,40 +950,40 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", - "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", + "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1453,14 +1014,14 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", - "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.9" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1470,13 +1031,13 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.9", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", - "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { @@ -1532,58 +1093,86 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", + "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", - "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.10" + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.11.tgz", - "integrity": "sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==", + "version": "7.23.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.1.tgz", + "integrity": "sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.0", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.13.tgz", - "integrity": "sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, @@ -1592,9 +1181,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.14", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.14.tgz", - "integrity": "sha512-1KucTHgOvaw/LzCVrEOAyXkr9rQlp0A1HiHRYnSUE9dmb8PvPW7o5sscg+5169r54n3vGlbx6GevTE/Iw/P3AQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -1604,9 +1193,9 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", + "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1619,14 +1208,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", + "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" + "@babel/plugin-transform-optional-chaining": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -1934,9 +1523,9 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.11.tgz", - "integrity": "sha512-0pAlmeRJn6wU84zzZsEOx1JV1Jf8fqO9ok7wofIJwUnplYo247dcd24P+cMJht7ts9xkzdtB0EPHmOb7F+KzXw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.15.tgz", + "integrity": "sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.22.5", @@ -1984,9 +1573,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", - "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", + "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -2032,18 +1621,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", + "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-environment-visitor": "^7.22.5", "@babel/helper-function-name": "^7.22.5", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -2071,9 +1660,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", - "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", + "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -2165,9 +1754,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", + "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -2259,12 +1848,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", + "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -2275,12 +1864,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.11.tgz", - "integrity": "sha512-o2+bg7GDS60cJMgz9jWqRUsWkMzLCxp+jFDeDUT5sjRlAxcJWZ2ylNdI7QQ2+CH5hWu7OnN+Cv3htt7AkSf96g==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", + "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -2292,15 +1881,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.11.tgz", - "integrity": "sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", + "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.9", + "@babel/helper-module-transforms": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -2389,16 +1978,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.11.tgz", - "integrity": "sha512-nX8cPFa6+UmbepISvlf5jhQyaC7ASs/7UxHmMkuJ/k5xSHvDPPaibMo+v3TXwU/Pjqhep/nFNpd3zn4YR59pnw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", + "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.10", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" + "@babel/plugin-transform-parameters": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -2440,9 +2029,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.12", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.12.tgz", - "integrity": "sha512-7XXCVqZtyFWqjDsYDY4T45w4mlx1rf7aOgkc/Ww76xkgBiOlmjPkx36PBLHa1k1rwWvVgYMPsbuVnIamx2ZQJw==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", + "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -2457,9 +2046,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", + "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -2871,19 +2460,19 @@ } }, "node_modules/@babel/traverse": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.11.tgz", - "integrity": "sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.0.tgz", + "integrity": "sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.11", - "@babel/types": "^7.22.11", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2892,12 +2481,12 @@ } }, "node_modules/@babel/traverse/node_modules/@babel/generator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.10.tgz", - "integrity": "sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", "dev": true, "dependencies": { - "@babel/types": "^7.22.10", + "@babel/types": "^7.23.0", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -2907,13 +2496,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.11.tgz", - "integrity": "sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -3306,9 +2895,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.8.1.tgz", - "integrity": "sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -3360,9 +2949,9 @@ "dev": true }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3405,9 +2994,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.49.0.tgz", - "integrity": "sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -4389,9 +3978,9 @@ } }, "node_modules/@ngtools/webpack": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.1.tgz", - "integrity": "sha512-fT7uwrw3Yfi7mqVHD+kTw0zDq6jZ1CaRp6pQ5b3n+qFL+a3c34Lr/kFVVWZNktfooxO9lYWRsJdTRtid25he9w==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.2.5.tgz", + "integrity": "sha512-wq1dbbOUwrY/zkpZltcgmyEFANbJon79E5s4ueT3IT4NyiYh1uJeWa2vmB0kof7VP5Xhm/jutkJk336z67oLPg==", "dev": true, "engines": { "node": "^16.14.0 || >=18.10.0", @@ -4642,18 +4231,6 @@ "node": ">=10" } }, - "node_modules/@nx/devkit/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, "node_modules/@nx/devkit/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -4849,12 +4426,12 @@ } }, "node_modules/@playwright/test": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.38.0.tgz", - "integrity": "sha512-xis/RXXsLxwThKnlIXouxmIvvT3zvQj1JE39GsNieMUrMpb3/GySHDh2j8itCG22qKVD4MYLBp7xB73cUW/UUw==", + "version": "1.38.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.38.1.tgz", + "integrity": "sha512-NqRp8XMwj3AK+zKLbZShl0r/9wKgzqI/527bkptKXomtuo+dOjU9NdMASQ8DNC9z9zLOMbG53T4eihYr3XR+BQ==", "dev": true, "dependencies": { - "playwright": "1.38.0" + "playwright": "1.38.1" }, "bin": { "playwright": "cli.js" @@ -4864,13 +4441,13 @@ } }, "node_modules/@schematics/angular": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.1.tgz", - "integrity": "sha512-e3ckgvSv+OA+4xUBpOqVOvNM8FqY/yXaWqs/Ob0uQ/zPL1iVa/MCAoB25KqYQPnq21hEwE4zqIIQFKasKBIqMA==", + "version": "16.2.5", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.2.5.tgz", + "integrity": "sha512-huYEiU5KK2/upy9LJUdecIB4Jwh4LQMQz5cz6EMr8uhrCTykEKXlBpGJVHZyDK1K5/riymSr9G86BdN2PcY1Cw==", "dev": true, "dependencies": { - "@angular-devkit/core": "16.2.1", - "@angular-devkit/schematics": "16.2.1", + "@angular-devkit/core": "16.2.5", + "@angular-devkit/schematics": "16.2.5", "jsonc-parser": "3.2.0" }, "engines": { @@ -4989,9 +4566,9 @@ } }, "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.3", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.3.tgz", + "integrity": "sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==", "dev": true, "dependencies": { "@types/connect": "*", @@ -4999,27 +4576,27 @@ } }, "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.11.tgz", + "integrity": "sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.36", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.36.tgz", + "integrity": "sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.1.tgz", + "integrity": "sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw==", "dev": true, "dependencies": { "@types/express-serve-static-core": "*", @@ -5033,18 +4610,18 @@ "dev": true }, "node_modules/@types/cors": { - "version": "2.8.13", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", - "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "version": "2.8.14", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.14.tgz", + "integrity": "sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/eslint": { - "version": "8.44.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.2.tgz", - "integrity": "sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==", + "version": "8.44.3", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.3.tgz", + "integrity": "sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==", "dev": true, "dependencies": { "@types/estree": "*", @@ -5052,9 +4629,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "version": "3.7.5", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.5.tgz", + "integrity": "sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -5062,15 +4639,15 @@ } }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", + "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", "dev": true }, "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "version": "4.17.18", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz", + "integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==", "dev": true, "dependencies": { "@types/body-parser": "*", @@ -5080,9 +4657,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.36", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.36.tgz", - "integrity": "sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==", + "version": "4.17.37", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.37.tgz", + "integrity": "sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==", "dev": true, "dependencies": { "@types/node": "*", @@ -5092,30 +4669,30 @@ } }, "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.2.tgz", + "integrity": "sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==", "dev": true }, "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "version": "1.17.12", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.12.tgz", + "integrity": "sha512-kQtujO08dVtQ2wXAuSFfk9ASy3sug4+ogFR8Kd8UgP8PEuc1/G/8yjYRmp//PcDNJEUKOza/MrQu15bouEUCiw==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/jasmine": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.5.tgz", - "integrity": "sha512-9YHUdvuNDDRJYXZwHqSsO72Ok0vmqoJbNn73ttyITQp/VA60SarnZ+MPLD37rJAhVoKp+9BWOvJP5tHIRfZylQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.6.tgz", + "integrity": "sha512-3N0FpQTeiWjm+Oo1WUYWguUS7E6JLceiGTriFrG8k5PU7zRLJCzLcWURU3wjMbZGS//a2/LgjsnO3QxIlwxt9g==", "dev": true }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", "dev": true }, "node_modules/@types/json5": { @@ -5125,15 +4702,15 @@ "dev": true }, "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.3.tgz", + "integrity": "sha512-Ys+/St+2VF4+xuY6+kDIXGxbNRO0mesVg0bbxEfB97Od1Vjpjx9KD1qxs64Gcb3CWPirk9Xe+PT4YiiHQ9T+eg==", "dev": true }, "node_modules/@types/node": { - "version": "20.6.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.6.3.tgz", - "integrity": "sha512-HksnYH4Ljr4VQgEy2lTStbCKv/P590tmPe5HqOnv9Gprffgv5WXAY+Y5Gqniu0GGqeTCUdBnzC3QSrzPkBkAMA==", + "version": "20.8.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.3.tgz", + "integrity": "sha512-jxiZQFpb+NlH5kjW49vXxvxTjeeqlbsnTAdBTKpzEdPs9itay7MscYXz3Fo9VYFEsfQ6LJFitHad3faerLAjCw==", "dev": true }, "node_modules/@types/qs": { @@ -5143,9 +4720,9 @@ "dev": true }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.5.tgz", + "integrity": "sha512-xrO9OoVPqFuYyR/loIHjnbvvyRZREYKLjxV4+dY6v3FQR3stQ9ZxIGkaclF7YhI9hfjpuTbu14hZEy94qKLtOA==", "dev": true }, "node_modules/@types/retry": { @@ -5155,15 +4732,15 @@ "dev": true }, "node_modules/@types/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", "dev": true }, "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.2.tgz", + "integrity": "sha512-aAG6yRf6r0wQ29bkS+x97BIs64ZLxeE/ARwyS6wrldMm3C1MdKwCcnnEwMC1slI8wuxJOpiUH9MioC0A0i+GJw==", "dev": true, "dependencies": { "@types/mime": "^1", @@ -5171,18 +4748,18 @@ } }, "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-asaEIoc6J+DbBKXtO7p2shWUpKacZOoMBEGBgPG91P8xhO53ohzHWGCs4ScZo5pQMf5ukQzVT9fhX1WzpHihig==", "dev": true, "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.3.tgz", + "integrity": "sha512-yVRvFsEMrv7s0lGhzrggJjNOSmZCdgCjw9xWrPr/kNNLp6FaDfMC1KaYl3TSJ0c58bECwNBMoQrZJ8hA8E1eFg==", "dev": true, "dependencies": { "@types/http-errors": "*", @@ -5191,34 +4768,34 @@ } }, "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "version": "0.3.34", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.34.tgz", + "integrity": "sha512-R+n7qBFnm/6jinlteC9DBL5dGiDGjWAvjo4viUanpnc/dG1y7uDoacXPIQ/PQEg1fI912SMHIa014ZjRpvDw4g==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.6.tgz", + "integrity": "sha512-8B5EO9jLVCy+B58PLHvLDuOD8DRVMgQzq8d55SjLCOn9kqGyqOvy27exVaTio1q1nX5zLu8/6N0n2ThSxOM6tg==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.2.tgz", - "integrity": "sha512-ooaHxlmSgZTM6CHYAFRlifqh1OAr3PAQEwi7lhYhaegbnXrnh7CDcHmc3+ihhbQC7H0i4JF0psI5ehzkF6Yl6Q==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.4.tgz", + "integrity": "sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.2", - "@typescript-eslint/type-utils": "6.7.2", - "@typescript-eslint/utils": "6.7.2", - "@typescript-eslint/visitor-keys": "6.7.2", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/type-utils": "6.7.4", + "@typescript-eslint/utils": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -5243,16 +4820,68 @@ } } }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.4.tgz", + "integrity": "sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "6.7.4", + "@typescript-eslint/utils": "6.7.4", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.4.tgz", + "integrity": "sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/typescript-estree": "6.7.4", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, "node_modules/@typescript-eslint/parser": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.2.tgz", - "integrity": "sha512-KA3E4ox0ws+SPyxQf9iSI25R6b4Ne78ORhNHeVKrPQnoYsb9UhieoiRoJgrzgEeKGOXhcY1i8YtOeCHHTDa6Fw==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.4.tgz", + "integrity": "sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.7.2", - "@typescript-eslint/types": "6.7.2", - "@typescript-eslint/typescript-estree": "6.7.2", - "@typescript-eslint/visitor-keys": "6.7.2", + "@typescript-eslint/scope-manager": "6.7.4", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/typescript-estree": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4" }, "engines": { @@ -5272,13 +4901,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.2.tgz", - "integrity": "sha512-bgi6plgyZjEqapr7u2mhxGR6E8WCzKNUFWNh6fkpVe9+yzRZeYtDTbsIBzKbcxI+r1qVWt6VIoMSNZ4r2A+6Yw==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.4.tgz", + "integrity": "sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.2", - "@typescript-eslint/visitor-keys": "6.7.2" + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -5289,25 +4918,65 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.2.tgz", - "integrity": "sha512-36F4fOYIROYRl0qj95dYKx6kybddLtsbmPIYNK0OBeXv2j9L5nZ17j9jmfy+bIDHKQgn2EZX+cofsqi8NPATBQ==", + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.7.2", - "@typescript-eslint/utils": "6.7.2", + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "tsutils": "^3.21.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependenciesMeta": { "typescript": { @@ -5315,10 +4984,27 @@ } } }, + "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/@typescript-eslint/types": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.2.tgz", - "integrity": "sha512-flJYwMYgnUNDAN9/GAI3l8+wTmvTYdv64fcH8aoJK76Y+1FCZ08RtI5zDerM/FYT5DMkAc+19E4aLmd5KqdFyg==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.4.tgz", + "integrity": "sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -5329,13 +5015,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.2.tgz", - "integrity": "sha512-kiJKVMLkoSciGyFU0TOY0fRxnp9qq1AzVOHNeN1+B9erKFCJ4Z8WdjAkKQPP+b1pWStGFqezMLltxO+308dJTQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.4.tgz", + "integrity": "sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.2", - "@typescript-eslint/visitor-keys": "6.7.2", + "@typescript-eslint/types": "6.7.4", + "@typescript-eslint/visitor-keys": "6.7.4", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -5355,67 +5041,135 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/utils": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.2.tgz", - "integrity": "sha512-ZCcBJug/TS6fXRTsoTkgnsvyWSiXwMNiPzBUani7hDidBdj1779qwM1FIAmpH4lvlOZNF3EScsxxuGifjpLSWQ==", + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.2", - "@typescript-eslint/types": "6.7.2", - "@typescript-eslint/typescript-estree": "6.7.2", - "semver": "^7.5.4" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.2.tgz", - "integrity": "sha512-uVw9VIMFBUTz8rIeaUT3fFe8xIUx8r4ywAdlQv1ifH+6acn/XF8Y6rwJ7XNmkNMDrTW+7+vxFFPIF40nJCVsMQ==", + "version": "6.7.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.4.tgz", + "integrity": "sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.7.2", + "@typescript-eslint/types": "6.7.4", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -6299,13 +6053,13 @@ } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", - "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.4.tgz", + "integrity": "sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg==", "dev": true, "dependencies": { "@babel/helper-define-polyfill-provider": "^0.4.2", - "core-js-compat": "^3.31.0" + "core-js-compat": "^3.32.2" }, "peerDependencies": { "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" @@ -6479,9 +6233,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.21.10", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", - "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, "funding": [ { @@ -6498,10 +6252,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001517", - "electron-to-chromium": "^1.4.477", + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.11" + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -6591,19 +6345,19 @@ } }, "node_modules/cacache/node_modules/glob": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", - "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -6637,9 +6391,9 @@ } }, "node_modules/cacache/node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -6677,9 +6431,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001525", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001525.tgz", - "integrity": "sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==", + "version": "1.0.30001546", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001546.tgz", + "integrity": "sha512-zvtSJwuQFpewSyRrI3AsftF6rM0X80mZkChIt1spBGEvRglCrjTniXvinc8JKRoqTwXAgvqTImaN9igfSMtUBw==", "dev": true, "funding": [ { @@ -6794,9 +6548,9 @@ } }, "node_modules/cli-spinners": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", - "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true, "engines": { "node": ">=6" @@ -6815,17 +6569,14 @@ } }, "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", + "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" } }, "node_modules/clone": { @@ -7106,13 +6857,44 @@ "node": ">=10.13.0" } }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/core-js-compat": { - "version": "3.32.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.1.tgz", - "integrity": "sha512-GSvKDv4wE0bPnQtjklV101juQ85g6H3rm5PDP20mqlS5j0kXF3pP97YvAu5hl+uFHqMictp3b2VxOHljWMAtuA==", + "version": "3.33.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", + "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==", "dev": true, "dependencies": { - "browserslist": "^4.21.10" + "browserslist": "^4.22.1" }, "funding": { "type": "opencollective", @@ -7139,9 +6921,9 @@ } }, "node_modules/cosmiconfig": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.3.tgz", - "integrity": "sha512-/VY+0IvFoE47hwgKHu8feeBFIb1Z1mcJFiLrNwaJpLoLa9qwLVquMGMr2OUwQmhpJDtsSQSasg/TMv1imec9xA==", + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", "dev": true, "dependencies": { "import-fresh": "^3.3.0", @@ -7281,21 +7063,6 @@ "node": ">= 8" } }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/css-loader": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", @@ -7736,9 +7503,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.508", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.508.tgz", - "integrity": "sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==", + "version": "1.4.544", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.544.tgz", + "integrity": "sha512-54z7squS1FyFRSUqq/knOFSptjjogLZXbKcYk3B0qkE1KZzvqASwRZnY2KzZQJqIYLVD38XZeoiMRflYSwyO4w==", "dev": true }, "node_modules/emoji-regex": { @@ -7798,9 +7565,9 @@ } }, "node_modules/engine.io": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.2.tgz", - "integrity": "sha512-IXsMcGpw/xRfjra46sVZVHiSWo/nJ/3g1337q9KNXtS6YRzbW5yIzTCb9DjhrBe7r3GZQR0I4+nq+4ODk5g/cA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.3.tgz", + "integrity": "sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==", "dev": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -7982,9 +7749,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", "dev": true }, "node_modules/es-set-tostringtag": { @@ -8132,15 +7899,15 @@ } }, "node_modules/eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.49.0.tgz", - "integrity": "sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==", + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.49.0", + "@eslint/js": "8.51.0", "@humanwhocodes/config-array": "^0.11.11", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", @@ -8215,9 +7982,9 @@ } }, "node_modules/eslint-config-standard-with-typescript": { - "version": "39.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-39.0.0.tgz", - "integrity": "sha512-CiV2LS4NUeeRmDTDf1ocUMpMxitSyW0g+Y/N7ecElwGj188GahbcQgqfBNyVsIXQxHlZVBlOjkbg3oUI0R3KBg==", + "version": "39.1.1", + "resolved": "https://registry.npmjs.org/eslint-config-standard-with-typescript/-/eslint-config-standard-with-typescript-39.1.1.tgz", + "integrity": "sha512-t6B5Ep8E4I18uuoYeYxINyqcXb2UbC0SOOTxRtBSt2JUs+EzeXbfe2oaiPs71AIdnoWhXDO2fYOHz8df3kV84A==", "dev": true, "dependencies": { "@typescript-eslint/parser": "^6.4.0", @@ -8414,25 +8181,19 @@ } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { @@ -8530,22 +8291,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, "node_modules/eslint/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -8575,9 +8320,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.22.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.22.0.tgz", - "integrity": "sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -8685,18 +8430,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -8986,6 +8719,18 @@ "node": ">=4" } }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -9194,12 +8939,12 @@ } }, "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", "dev": true, "dependencies": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, @@ -9208,15 +8953,15 @@ } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "dev": true, "funding": [ { @@ -9322,17 +9067,17 @@ "dev": true }, "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", "dev": true, "dependencies": { "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=6 <7 || >=8" + "node": ">=14.14" } }, "node_modules/fs-minipass": { @@ -9348,18 +9093,18 @@ } }, "node_modules/fs-minipass/node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", "dev": true }, "node_modules/fs.realpath": { @@ -9505,9 +9250,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.0.tgz", - "integrity": "sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==", + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", + "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -9579,19 +9324,20 @@ } }, "node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { + "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", "merge2": "^1.4.1", - "slash": "^4.0.0" + "slash": "^3.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -9640,13 +9386,10 @@ "dev": true }, "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, "engines": { "node": ">= 0.4.0" } @@ -9776,6 +9519,12 @@ "wbuf": "^1.1.0" } }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, "node_modules/hpack.js/node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", @@ -10653,9 +10402,9 @@ } }, "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "node_modules/isbinaryfile": { @@ -10791,9 +10540,9 @@ } }, "node_modules/jackspeak": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", - "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" @@ -10941,9 +10690,9 @@ } }, "node_modules/jiti": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.3.tgz", - "integrity": "sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.20.0.tgz", + "integrity": "sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==", "dev": true, "bin": { "jiti": "bin/jiti.js" @@ -11014,6 +10763,12 @@ } } }, + "node_modules/jsdom/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -11069,10 +10824,13 @@ "dev": true }, "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -11133,6 +10891,18 @@ "which": "^1.2.1" } }, + "node_modules/karma-chrome-launcher/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, "node_modules/karma-coverage": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", @@ -11185,17 +10955,6 @@ "source-map-support": "^0.5.5" } }, - "node_modules/karma/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, "node_modules/karma/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -11205,18 +10964,6 @@ "node": ">=0.10.0" } }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, "node_modules/karma/node_modules/yargs": { "version": "16.2.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", @@ -11245,9 +10992,9 @@ } }, "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, "dependencies": { "json-buffer": "3.0.1" @@ -11272,13 +11019,13 @@ } }, "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", "dev": true, "dependencies": { "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "shell-quote": "^1.8.1" } }, "node_modules/less": { @@ -11405,10 +11152,13 @@ } }, "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } }, "node_modules/loader-runner": { "version": "4.3.0", @@ -11863,9 +11613,9 @@ } }, "node_modules/minipass-fetch/node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -12284,27 +12034,26 @@ "node-gyp-build-test": "build-test.js" } }, - "node_modules/node-gyp/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/node-xlsx": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/node-xlsx/-/node-xlsx-0.23.0.tgz", + "integrity": "sha512-r3KaSZSsSrK92rbPXnX/vDdxURmPPik0rjJ3A+Pybzpjyrk4G6WyGfj8JIz5dMMEpCmWVpmO4qoVPBxnpLv/8Q==", "dependencies": { - "isexe": "^2.0.0" + "xlsx": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz" }, "bin": { - "node-which": "bin/node-which" + "node-xlsx": "lib/bin/cli.js" }, "engines": { - "node": ">= 8" + "node": ">=10.0.0" } }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, "node_modules/nopt": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", @@ -12366,9 +12115,9 @@ } }, "node_modules/npm-install-checks": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.2.0.tgz", - "integrity": "sha512-744wat5wAAHsxa4590mWO0tJ8PKxR8ORZsH9wGpQc3nWTzozMAgBN/XyqYw7mg3yqLM8dLwEnwSfKMmXAjF69g==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", + "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, "dependencies": { "semver": "^7.1.1" @@ -12598,29 +12347,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/nx/node_modules/cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nx/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, "node_modules/nx/node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -12655,20 +12381,6 @@ "node": ">=8" } }, - "node_modules/nx/node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/nx/node_modules/glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -12707,27 +12419,6 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/nx/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/nx/node_modules/lines-and-columns": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", - "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/nx/node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -12779,18 +12470,6 @@ "node": ">=8" } }, - "node_modules/nx/node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, "node_modules/nx/node_modules/tsconfig-paths": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", @@ -12805,15 +12484,6 @@ "node": ">=6" } }, - "node_modules/nx/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/nx/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -13248,6 +12918,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse-json/node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, "node_modules/parse-node-version": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", @@ -13258,10 +12934,16 @@ } }, "node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "dev": true + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "devOptional": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } }, "node_modules/parse5-html-rewriting-stream": { "version": "7.0.0", @@ -13277,18 +12959,6 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/parse5-html-rewriting-stream/node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/parse5-sax-parser": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", @@ -13301,18 +12971,6 @@ "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "node_modules/parse5-sax-parser/node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -13522,13 +13180,25 @@ "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, + "node_modules/pkg-dir/node_modules/yocto-queue": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", + "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/playwright": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.38.0.tgz", - "integrity": "sha512-fJGw+HO0YY+fU/F1N57DMO+TmXHTrmr905J05zwAQE9xkuwP/QLDk63rVhmyxh03dYnEhnRbsdbH9B0UVVRB3A==", + "version": "1.38.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.38.1.tgz", + "integrity": "sha512-oRMSJmZrOu1FP5iu3UrCx8JEFRIMxLDM0c/3o4bpzU5Tz97BypefWf7TuTNPWeCe279TPal5RtPPZ+9lW/Qkow==", "dev": true, "dependencies": { - "playwright-core": "1.38.0" + "playwright-core": "1.38.1" }, "bin": { "playwright": "cli.js" @@ -13541,9 +13211,9 @@ } }, "node_modules/playwright-core": { - "version": "1.38.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.38.0.tgz", - "integrity": "sha512-f8z1y8J9zvmHoEhKgspmCvOExF2XdcxMW8jNRuX4vkQFrzV4MlZ55iwb5QeyiFQgOFCUolXiRHgpjSEnqvO48g==", + "version": "1.38.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.38.1.tgz", + "integrity": "sha512-tQqNFUKa3OfMf4b2jQ7aGLB8o9bS3bOY0yMEtldtC2+spf8QXG9zvXLTXUeRsoNuxEYMgLYR+NXfAa1rjKRcrg==", "dev": true, "bin": { "playwright-core": "cli.js" @@ -13567,9 +13237,9 @@ } }, "node_modules/postcss": { - "version": "8.4.27", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.27.tgz", - "integrity": "sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, "funding": [ { @@ -13929,19 +13599,19 @@ } }, "node_modules/read-package-json/node_modules/glob": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", - "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -14013,9 +13683,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -14252,9 +13922,9 @@ } }, "node_modules/rollup": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", - "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -14325,12 +13995,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-array-concat/node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -14431,9 +14095,9 @@ } }, "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", + "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==", "dev": true, "optional": true }, @@ -14786,15 +14450,12 @@ } }, "node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/smart-buffer": { @@ -15004,9 +14665,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", "dev": true }, "node_modules/spdy": { @@ -15058,9 +14719,9 @@ } }, "node_modules/ssri/node_modules/minipass": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.3.tgz", - "integrity": "sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", "dev": true, "engines": { "node": ">=16 || 14 >=14.17" @@ -15089,6 +14750,38 @@ "node": ">=8.0" } }, + "node_modules/streamroller/node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/streamroller/node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/streamroller/node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -15293,9 +14986,9 @@ } }, "node_modules/tar": { - "version": "6.1.15", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", - "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", "dev": true, "dependencies": { "chownr": "^2.0.0", @@ -15501,15 +15194,15 @@ "dev": true }, "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "dependencies": { - "os-tmpdir": "~1.0.2" + "rimraf": "^3.0.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=8.17.0" } }, "node_modules/to-fast-properties": { @@ -15785,9 +15478,9 @@ } }, "node_modules/ua-parser-js": { - "version": "0.7.35", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", - "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", + "version": "0.7.36", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.36.tgz", + "integrity": "sha512-CPPLoCts2p7D8VbybttE3P2ylv0OBZEAy7a12DsulIEcAiMtWJy+PBgMXgWDI80D5UwqE8oQPHYnk13tm38M2Q==", "dev": true, "funding": [ { @@ -15797,6 +15490,10 @@ { "type": "paypal", "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" } ], "engines": { @@ -15883,12 +15580,12 @@ } }, "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, "engines": { - "node": ">= 4.0.0" + "node": ">= 10.0.0" } }, "node_modules/unpipe": { @@ -15901,9 +15598,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -16294,9 +15991,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "engines": { "node": ">=10.0.0" @@ -16382,6 +16079,28 @@ "ajv": "^6.9.1" } }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/webpack/node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -16459,15 +16178,18 @@ } }, "node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, "node_modules/which-boxed-primitive": { @@ -16648,6 +16370,18 @@ } } }, + "node_modules/xlsx": { + "version": "0.19.3", + "resolved": "https://cdn.sheetjs.com/xlsx-0.19.3/xlsx-0.19.3.tgz", + "integrity": "sha512-8IfgFctB7fkvqkTGF2MnrDrC6vzE28Wcc1aSbdDQ+4/WFtzfS73YuapbuaPZwGqpR2e0EeDMIrFOJubQVLWFNA==", + "license": "Apache-2.0", + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -16702,22 +16436,36 @@ "node": ">=12" } }, + "node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "engines": { - "node": ">=12.20" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/zone.js": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.1.tgz", - "integrity": "sha512-+bIeDAFEBYuXRuU3qGQvzdPap+N1zjM4KkBAiiQuVVCrHrhjDuY6VkUhNa5+U27+9w0q3fbKiMCbpJ0XzMmSWA==", + "version": "0.13.3", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.3.tgz", + "integrity": "sha512-MKPbmZie6fASC/ps4dkmIhaT5eonHkEt6eAy80K42tAm0G2W+AahLJjbfi6X9NPdciOE9GRFTTM8u2IiF6O3ww==", "dependencies": { "tslib": "^2.3.0" } diff --git a/package.json b/package.json index 5200c26..aad159f 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@angular/router": "^16.2.0", "chart.js": "^4.4.0", "ml-kmeans": "^6.0.0", + "node-xlsx": "^0.23.0", "rxjs": "~7.8.0", "tslib": "^2.3.0", "zone.js": "~0.13.0" diff --git a/src/app/home/chart-container/table/table.component.ts b/src/app/home/chart-container/table/table.component.ts index 4aaa1c7..c4de26b 100644 --- a/src/app/home/chart-container/table/table.component.ts +++ b/src/app/home/chart-container/table/table.component.ts @@ -39,7 +39,6 @@ export class TableComponent implements AfterViewInit, OnChanges { ngAfterViewInit (): void { this.fillTableData() this.dataSource.data = this.tableData - console.log(this.tableData) } ngOnChanges (changes: SimpleChanges): void { @@ -48,7 +47,6 @@ export class TableComponent implements AfterViewInit, OnChanges { this.tableDataRaw = this.kmeansResult this.fillTableData() this.dataSource.data = this.tableData - console.log(this.tableData) } else { this.tableData = [] this.dataSource.data = this.tableData diff --git a/src/app/home/home-services/csv-to-2-d-array.service.spec.ts b/src/app/home/home-services/csv-to-2-d-array.service.spec.ts deleted file mode 100644 index cfd6f80..0000000 --- a/src/app/home/home-services/csv-to-2-d-array.service.spec.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { TestBed } from '@angular/core/testing' - -import { CsvTo2DArrayService } from './csv-to-2-d-array.service' - -describe('CsvTo2DArrayService', () => { - let service: CsvTo2DArrayService - - beforeEach(() => { - TestBed.configureTestingModule({}) - service = TestBed.inject(CsvTo2DArrayService) - }) - - it('should be created', () => { - expect(service).toBeTruthy() - }) -}) diff --git a/src/app/home/home-services/csv-to-2-d-array.service.ts b/src/app/home/home-services/csv-to-2-d-array.service.ts deleted file mode 100644 index 40ade70..0000000 --- a/src/app/home/home-services/csv-to-2-d-array.service.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Injectable } from '@angular/core' - -@Injectable({ - providedIn: 'root' -}) -export class CsvTo2DArrayService { - csvTo2DArray (csvData: string): string[][] { - const rows = csvData.split(/\r\n|\n|\r/) - return rows.map(row => row.split(',')) - } -} diff --git a/src/app/home/home-services/data-to-2d-array.service.spec.ts b/src/app/home/home-services/data-to-2d-array.service.spec.ts new file mode 100644 index 0000000..9e17ed2 --- /dev/null +++ b/src/app/home/home-services/data-to-2d-array.service.spec.ts @@ -0,0 +1,16 @@ +import { TestBed } from '@angular/core/testing' + +import { DataTo2dArrayService } from './data-to-2d-array.service' + +describe('DataTo2DArrayService', () => { + let service: DataTo2dArrayService + + beforeEach(() => { + TestBed.configureTestingModule({}) + service = TestBed.inject(DataTo2dArrayService) + }) + + it('should be created', () => { + expect(service).toBeTruthy() + }) +}) diff --git a/src/app/home/home-services/data-to-2d-array.service.ts b/src/app/home/home-services/data-to-2d-array.service.ts new file mode 100644 index 0000000..331d2ff --- /dev/null +++ b/src/app/home/home-services/data-to-2d-array.service.ts @@ -0,0 +1,107 @@ +import { Injectable } from '@angular/core' +import * as xlsx from 'node-xlsx' + +@Injectable({ + providedIn: 'root' +}) + +export class DataTo2dArrayService { + async dataTo2DArray (file: File): Promise { + const fileExtension = file.name.split('.').pop()?.toLowerCase() + + if (fileExtension === 'csv') { + return await this.csvTo2DArray(file) + } else if (fileExtension === 'xlsx') { + return await this.excelTo2DArray(file) + } else { + throw new Error('Unsupported file format') + } + } + + private async excelTo2DArray (file: File): Promise { + return await new Promise((resolve, reject) => { + const fileReader = new FileReader() + + fileReader.onload = (event) => { + try { + const buffer = event.target?.result as ArrayBuffer + const data = xlsx.parse(buffer) // Dies gibt ein Array von Arbeitsblättern zurück + + if (data !== null && data !== undefined && data.length > 0 && data[0]?.data !== null && data[0]?.data !== undefined) { + resolve(data[0].data as string[][]) + } else { + reject(new Error('No data found in the Excel file.')) + } + } catch (error) { + reject(new Error('Failed to parse the Excel file.')) + } + } + + fileReader.onerror = () => { + reject(new Error('Failed to read the file.')) + } + + fileReader.readAsArrayBuffer(file) + }) + } + + private async csvTo2DArray (file: File): Promise { + return await new Promise((resolve, reject) => { + const fileReader = new FileReader() + + fileReader.onload = () => { + try { + const content = fileReader.result as string + const delimiter = this.detectDelimiter(content) + const rows = content.split(/\r\n|\n|\r/) + const data = rows.map(row => row.split(delimiter)) + resolve(data) + } catch (error) { + reject(new Error('Failed to process the CSV file.')) + } + } + + fileReader.onerror = () => { + reject(new Error('Failed to read the CSV file.')) + } + + fileReader.readAsText(file) + }) + } + + private detectDelimiter (csvData: string): string { + // List of potential delimiters + const potentialDelimiters = [',', ';', '\t', '|'] + // Split the content into lines and take the first 10 lines + const lines = csvData.split(/\r\n|\n|\r/).slice(0, 10) + + let bestDelimiter = '' + let bestDelimiterCount = 0 + + for (const delimiter of potentialDelimiters) { + let currentDelimiterCount = 0 + const counts = [] + + // Count how often the current delimiter appears in each line + for (const line of lines) { + const count = (line.match(new RegExp(delimiter, 'g')) ?? []).length + counts.push(count) + currentDelimiterCount += count + } + + // Check if the delimiter appears the same number of times in each line + const uniqueCounts = new Set(counts) + if (uniqueCounts.size === 1 && currentDelimiterCount > bestDelimiterCount) { + bestDelimiter = delimiter + bestDelimiterCount = currentDelimiterCount + } + } + + // If no suitable delimiter is found, throw an error + if (bestDelimiter === '') { + console.error('Unable to detect a suitable delimiter for the CSV data.') + } + + return bestDelimiter + } +} diff --git a/src/app/home/home-services/kmeans-local.service.ts b/src/app/home/home-services/kmeans-local.service.ts index f35859a..a30be5d 100644 --- a/src/app/home/home-services/kmeans-local.service.ts +++ b/src/app/home/home-services/kmeans-local.service.ts @@ -1,24 +1,24 @@ import { Injectable } from '@angular/core' import { kmeans as KMeans } from 'ml-kmeans' import { ResponseInterface } from '../../interfaces/response-interface' -import { CsvTo2DArrayService } from './csv-to-2-d-array.service' +import { DataTo2dArrayService } from './data-to-2d-array.service' @Injectable({ providedIn: 'root' }) export class KmeansLocalService { - csvData: string[][] = [] + data: string[][] = [] clusters: any[] = [] - euclideanDistance (pointA: number[], pointB: number[]): number { + private euclideanDistance (pointA: number[], pointB: number[]): number { return Math.sqrt(pointA.reduce((sum, value, index) => sum + Math.pow(value - pointB[index], 2), 0)) } - manhattanDistance (pointA: number[], pointB: number[]): number { + private manhattanDistance (pointA: number[], pointB: number[]): number { return pointA.reduce((sum, value, index) => sum + Math.abs(value - pointB[index]), 0) } - elbowMethod (data: number[][], maxClusters: number, distanceMetric: string): number { + private elbowMethod (data: number[][], maxClusters: number, distanceMetric: string): number { const ssd: number[] = [] // Sum of Squared Distances for different cluster numbers const distanceFunction = distanceMetric === 'EUCLIDEAN' ? this.euclideanDistance : this.manhattanDistance @@ -45,45 +45,31 @@ export class KmeansLocalService { return elbowPoint + 2 // +2 because the index is 0-based and we started from k=1 } - async performKMeans (csv: File, k: number, useOptK: boolean, distanceMetric: string): Promise { - return await new Promise((resolve, reject) => { - const fileReader = new FileReader() - - fileReader.onload = () => { - const content = fileReader.result as string - this.csvData = this.csvTo2DArrayService.csvTo2DArray(content) - - const dataAsNumbers = this.csvData.slice(1) - .map(row => row.map(value => parseFloat(value))) - .filter(row => row.length === this.csvData[1].length) - - if (useOptK) { - k = this.elbowMethod(dataAsNumbers, 100, distanceMetric) - } - const result = KMeans(dataAsNumbers, k, { - distanceFunction: distanceMetric === 'EUCLIDEAN' ? this.euclideanDistance : this.manhattanDistance - }) - - const jsonResult = this.convertToJSONFormat(result, dataAsNumbers, csv.name, distanceMetric) - - resolve(jsonResult) // Resolviere das Promise mit dem Ergebnis - } - - fileReader.onerror = (error) => { - reject(error) // Falls ein Fehler beim Lesen der Datei auftritt, rejecte das Promise - } + async performKMeans (file: File, k: number, useOptK: boolean, distanceMetric: string, selectedIndices: number[]): Promise { + this.data = await this.dataTo2DArrayService.dataTo2DArray(file) + this.data = this.data.map(row => { return selectedIndices.map(index => row[index]) }) + this.data = this.data.filter(row => row.some(value => value !== undefined && value !== '')) + const dataAsNumbers = this.data.slice(1) + .map(row => row.map(value => parseFloat(value))) + .filter(row => row.length === this.data[1].length) + if (useOptK) { + k = this.elbowMethod(dataAsNumbers, 100, distanceMetric) + } - fileReader.readAsText(csv) + const result = KMeans(dataAsNumbers, k, { + distanceFunction: distanceMetric === 'EUCLIDEAN' ? this.euclideanDistance : this.manhattanDistance }) + + return this.convertToJSONFormat(result, dataAsNumbers, file.name, distanceMetric) } - convertToJSONFormat (result: any, data: number[][], fileName: string, distanceMetric: string): ResponseInterface { - if (this.csvData.length === 0 || this.csvData[0].length < 2) { + private convertToJSONFormat (result: any, data: number[][], fileName: string, distanceMetric: string): ResponseInterface { + if (this.data.length === 0 || this.data[0].length < 2) { console.error('Invalid CSV data format') } - const xLabel = this.csvData[0][0] - const yLabel = this.csvData[0][1] + const xLabel = this.data[0][0] + const yLabel = this.data[0][1] const clusters = result.centroids.map((centroid: number[], index: number) => { const points = data.filter((_, dataIndex) => result.clusters[dataIndex] === index) @@ -115,5 +101,7 @@ export class KmeansLocalService { } } - constructor (private csvTo2DArrayService: CsvTo2DArrayService) { } + constructor ( + private dataTo2DArrayService: DataTo2dArrayService + ) {} } diff --git a/src/app/home/input/input.component.css b/src/app/home/input/input.component.css index 6acdaf0..57fd426 100644 --- a/src/app/home/input/input.component.css +++ b/src/app/home/input/input.component.css @@ -59,3 +59,11 @@ grid-template-columns: 35% 65%; grid-gap: 20px; } + +.fixed-width-field { + width: 250px; +} + +mat-form-field.has-error { + margin-bottom: -15px; +} diff --git a/src/app/home/input/input.component.html b/src/app/home/input/input.component.html index 620da37..9ce819f 100644 --- a/src/app/home/input/input.component.html +++ b/src/app/home/input/input.component.html @@ -34,9 +34,21 @@

oder

+
Spaltenauswahl
+ + Spalten + + {{column}} + + + Bitte genau 2 Spalten auswählen. + + +
Anzahl der Cluster (optional)
- + k definieren (optional) k= @@ -49,7 +61,7 @@

oder

Euklidisch (Standard) Manhattan - Jaccard + Jaccard
@@ -58,18 +70,17 @@

oder

Ellenbogen (Standard) - Silhouette + Silhouette
- Lokal im Browser ausführen -
+ Lokal im Browser ausführen
- + diff --git a/src/app/home/input/input.component.ts b/src/app/home/input/input.component.ts index 588bb20..004fc1f 100644 --- a/src/app/home/input/input.component.ts +++ b/src/app/home/input/input.component.ts @@ -1,9 +1,10 @@ import { Component, EventEmitter, Output } from '@angular/core' -import { FormControl, FormGroup } from '@angular/forms' +import { FormControl, FormGroup, ValidatorFn, AbstractControl } from '@angular/forms' import { MatSnackBar } from '@angular/material/snack-bar' import { ApiService } from '../home-services/api.service' import { ResponseInterface } from '../../interfaces/response-interface' import { KmeansLocalService } from '../home-services/kmeans-local.service' +import { DataTo2dArrayService } from '../home-services/data-to-2d-array.service' @Component({ selector: 'app-input', @@ -16,7 +17,8 @@ export class InputComponent { k: new FormControl(''), distanceMetric: new FormControl('EUCLIDEAN'), clusterDetermination: new FormControl('ELBOW'), - offlineKmeans: new FormControl(false) + offlineKmeans: new FormControl(false), + selectedColumns: new FormControl([], [this.twoColumnsSelectedValidator()]) }) @Output() kmeansResult: EventEmitter = new EventEmitter() @@ -25,11 +27,13 @@ export class InputComponent { constructor ( private snackbar: MatSnackBar, private apiService: ApiService, - private localKmeans: KmeansLocalService + private localKmeans: KmeansLocalService, + private dataTo2DArrayService: DataTo2dArrayService ) { } public file?: File + public columnNames: string[] = [] submit (): void { if (this.clusterInputFormGroup.value.offlineKmeans === true) { @@ -39,7 +43,8 @@ export class InputComponent { this.file, Number(this.clusterInputFormGroup.value.k) !== 0 ? Number(this.clusterInputFormGroup.value.k) : 0, Number(this.clusterInputFormGroup.value.k) === 0, - this.clusterInputFormGroup.value.distanceMetric) + this.clusterInputFormGroup.value.distanceMetric, + this.selectedColumnsIndices) .then((result) => { this.kmeansResult.emit(result) this.isLoading.emit(false) @@ -53,8 +58,8 @@ export class InputComponent { this.isLoading.emit(true) this.apiService.postKmeans( this.file, - undefined, - undefined, + this.selectedColumnsIndices[0], + this.selectedColumnsIndices[1], Number(this.clusterInputFormGroup.value.k), this.clusterInputFormGroup.value.distanceMetric, this.clusterInputFormGroup.value.clusterDetermination @@ -90,8 +95,64 @@ export class InputComponent { if (file.type === 'text/csv' || file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet') { this.file = file this.snackbar.open('Datei ' + file.name + ' wird hochgeladen', 'Okay', { duration: 2000 }) + + this.dataTo2DArrayService.dataTo2DArray(file).then(data => { + // Spaltennamen (Header) extrahieren + if (data !== null && data !== undefined && data.length > 0) { + this.columnNames = data[0] + } + this.clusterInputFormGroup.get('selectedColumns')?.setValue([]) + }).catch(error => { + this.snackbar.open('Fehler beim Lesen der Datei', 'Okay', { duration: 3000 }) + console.error(error) + }) } else { this.snackbar.open('Falsches Dateiformat', 'Okay', { duration: 3000 }) } } + + twoColumnsSelectedValidator (): ValidatorFn { + return (control: AbstractControl): Record | null => { + const selected = control.value + if (selected !== null && selected !== undefined && selected.length === 2) { + return null // Kein Fehler + } else { + return { twoColumnsRequired: true } // Fehler + } + } + } + + get selectedColumnsValue (): string[] { + const value = this.clusterInputFormGroup.get('selectedColumns')?.value + if (value === null || value === undefined || value.length === 0) { + if (Array.isArray(this.columnNames) && this.columnNames.length > 1) { + return [this.columnNames[0], this.columnNames[1]] + } + return [] + } + return value.map((val: number) => val.toString()) + } + + set selectedColumnsValue (value: number[] | null) { + this.clusterInputFormGroup.get('selectedColumns')?.setValue(value) + } + + get selectedColumnsIndices (): number[] { + return this.selectedColumnsValue.map(name => this.columnNames.indexOf(name)) + } + + onOfflineChange (): void { + const isOffline = this.clusterInputFormGroup.value.offlineKmeans + const distanceMetricControl = this.clusterInputFormGroup.get('distanceMetric') + const kDeterminationMethodControl = this.clusterInputFormGroup.get('clusterDetermination') + + if (isOffline === true) { + if (distanceMetricControl?.value === 'JACCARDS') { + distanceMetricControl.setValue('EUCLIDEAN') + } + if (kDeterminationMethodControl?.value === 'SILHOUETTE') { + kDeterminationMethodControl.setValue('ELBOW') + } + } + } }