diff --git a/charts/nebulous-exponential-smoothing-predictor/templates/deployment.yaml b/charts/nebulous-exponential-smoothing-predictor/templates/deployment.yaml index f25c88a..7279333 100644 --- a/charts/nebulous-exponential-smoothing-predictor/templates/deployment.yaml +++ b/charts/nebulous-exponential-smoothing-predictor/templates/deployment.yaml @@ -33,18 +33,20 @@ spec: {{- toYaml .Values.securityContext | nindent 12 }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" imagePullPolicy: {{ .Values.image.pullPolicy }} - ports: - - name: http - containerPort: 8080 - protocol: TCP +# ports: +# - name: http +# containerPort: 8080 +# protocol: TCP livenessProbe: - httpGet: - path: / - port: http + exec: + command: + - ls + - /home readinessProbe: - httpGet: - path: / - port: http + exec: + command: + - ls + - /home resources: {{- toYaml .Values.resources | nindent 12 }} {{- with .Values.nodeSelector }} diff --git a/exponential-smoothing-predictor/Dockerfile b/exponential-smoothing-predictor/Dockerfile new file mode 100644 index 0000000..15c980b --- /dev/null +++ b/exponential-smoothing-predictor/Dockerfile @@ -0,0 +1,72 @@ +# Copyright (c) 2023 Institute of Communication and Computer Systems +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +FROM python:3.11 as source +#RUN pip install --no-cache --upgrade pip + +RUN mkdir /src +COPY ./src/ /src/ + +WORKDIR /src +RUN pip install --no-cache-dir -r requirements.txt && python3 setup.py sdist + +FROM ubuntu:noble +RUN mkdir -p /home/r_predictions + +#RUN apt-get update +ENV TZ=Europe/Athens +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +ARG DEBIAN_FRONTEND=noninteractive +RUN apt-get update && apt-get install --no-install-recommends -y \ +libcurl4-openssl-dev=8.5.0-2ubuntu1 \ +build-essential=12.10ubuntu1 \ +r-base-core=4.3.2-1build1 \ +r-base-dev=4.3.2-1build1 \ +r-cran-digest=0.6.34-1 \ +r-cran-boot=1.3-28.1-1 \ +r-cran-class=7.3-22-2 \ +r-cran-cluster=2.1.6-1 \ +r-cran-codetools=0.2-19-1 \ +r-cran-foreign=0.8.86-1 \ +r-cran-kernsmooth=2.23-22-1 \ +r-cran-lattice=0.22-5-1 \ +r-cran-littler=0.3.19-1 \ +r-cran-mass=7.3-60-2 \ +r-cran-matrix=1.6-4-1 \ +r-cran-mgcv=1.9-1-1 \ +r-cran-nlme=3.1.164-1 \ +r-cran-nnet=7.3-19-2 \ +r-cran-pkgkitten=0.2.3-1 \ +r-cran-rcpp=1.0.11-1 \ +r-cran-rpart=4.1.23-1 \ +r-cran-spatial=7.3-17-1 \ +r-cran-survival=3.5-7-1 \ +r-doc-html=4.3.2-1build1 \ +r-recommended=4.3.2-1build1 \ +python3=3.11.4-5ubuntu1 \ +python3-pip=23.3+dfsg-1 \ +python3.11-venv=3.11.7-2 \ +&& rm -rf /var/lib/apt/lists/* + + +COPY ./src/r_predictors/r_commands.R /home/r_predictions/ +RUN Rscript /home/r_predictions/r_commands.R #install prerequisite libraries + +COPY --from=source ./src/dist/esm_forecaster-0.1.0.tar.gz /home/r_predictions/ +COPY ./src/requirements.txt /home/r_predictions/ +COPY ./src/prepare_python_dependencies.sh /home/r_predictions/ +RUN bash -x /home/r_predictions/prepare_python_dependencies.sh + +COPY ./src/r_predictors/forecasting_real_workload.R /home/r_predictions/ + +#below two commented lines only serve for experiments with predictive functionality +#COPY ./default_application.csv /home/r_predictions +#RUN Rscript forecasting_real_workload.R default_application.csv MinimumCores 1638878119 + +WORKDIR /home/r_predictions/esm_forecaster-0.1.0 + +CMD ["/bin/sh","-c",". /home/forecasting_env/bin/activate && python3 -u /home/r_predictions/esm_forecaster-0.1.0/runtime/Predictor.py /home/r_predictions/esm_forecaster-0.1.0/r_predictors/prediction_configuration.properties 2>&1 > $LOG_FILE "] + diff --git a/exponential-smoothing-predictor/src/prepare_python_dependencies.sh b/exponential-smoothing-predictor/src/prepare_python_dependencies.sh new file mode 100644 index 0000000..a9d6707 --- /dev/null +++ b/exponential-smoothing-predictor/src/prepare_python_dependencies.sh @@ -0,0 +1,10 @@ +EXPONENTIAL_SMOOTHING_VERSION="0.1.0" +python3 -m venv /home/forecasting_env +. /home/forecasting_env/bin/activate +pip3 install --no-cache-dir -r /home/r_predictions/requirements.txt +cd /home/r_predictions + +# Install the module itself (provided that the tar.gz file of the module has already been copied inside the container) + +pip install esm_forecaster-$EXPONENTIAL_SMOOTHING_VERSION.tar.gz +tar -xzvf esm_forecaster-$EXPONENTIAL_SMOOTHING_VERSION.tar.gz diff --git a/exponential-smoothing-predictor/src/r_predictors/__init__.py b/exponential-smoothing-predictor/src/r_predictors/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/exponential-smoothing-predictor/src/r_predictors/default_application.csv b/exponential-smoothing-predictor/src/r_predictors/default_application.csv new file mode 100644 index 0000000..bbe6883 --- /dev/null +++ b/exponential-smoothing-predictor/src/r_predictors/default_application.csv @@ -0,0 +1,5264 @@ +Timestamp,ems_time,ram_usage +1704941490,1704941490,21.738065172231003 +1704941505,1704941505,49.7895854570365 +1704941510,1704941510,73.30356435916656 +1704941515,1704941515,51.754947780790516 +1704941520,1704941520,56.49119220083298 +1704941525,1704941525,97.55628508958235 +1704941530,1704941530,32.77511854620676 +1704941535,1704941535,69.34340995927363 +1704941540,1704941540,79.57499175965599 +1704941545,1704941545,55.60242270673606 +1704941705,1704941705,87.81355775878694 +1704941755,1704941755,83.90961986785199 +1704941760,1704941760,25.926277510798666 +1704941765,1704941765,19.841175959479017 +1704941770,1704941770,57.21858283575029 +1704941775,1704941775,48.69571950481616 +1704941780,1704941780,73.32688926197669 +1704941785,1704941785,92.0148794639422 +1704941790,1704941790,0.9309239941213909 +1704941800,1704941800,12.69369772365685 +1704941850,1704941850,87.32963427787908 +1704941855,1704941855,72.03867769020256 +1704941860,1704941860,2.810052288981746 +1704941865,1704941865,86.98771716113042 +1704941870,1704941870,0.6617361628833418 +1704941875,1704941875,47.08285272460022 +1704941880,1704941880,61.89982803542474 +1704941885,1704941885,11.982982413600919 +1704941895,1704941895,50.85401912222294 +1704941945,1704941945,54.73404883943706 +1704941950,1704941950,99.15941866846481 +1704941955,1704941955,36.079490185751816 +1704941960,1704941960,32.820419433231066 +1704941965,1704941965,21.740348638308326 +1704941970,1704941970,75.8139234358795 +1704941975,1704941975,28.118441797051 +1704941980,1704941980,88.8873399869204 +1704941990,1704941990,46.45687870221582 +1704942035,1704942035,36.13222782871528 +1704942040,1704942040,94.0441097698611 +1704942045,1704942045,82.67058098850042 +1704942050,1704942050,93.46327485084133 +1704942055,1704942055,48.161502036071646 +1704942060,1704942060,69.80216313117275 +1704942065,1704942065,16.233779444504016 +1704942070,1704942070,23.961780964574476 +1704942080,1704942080,28.522800770820954 +1704942125,1704942125,71.83558291730844 +1704942130,1704942130,36.29112584818481 +1704942135,1704942135,87.44702390052423 +1704942140,1704942140,1.0656981927685716 +1704942145,1704942145,46.4038055607912 +1704942150,1704942150,2.787870622133226 +1704942155,1704942155,5.964727504915912 +1704942160,1704942160,55.92078867568874 +1704942170,1704942170,27.087241860599466 +1704942215,1704942215,86.3439452376623 +1704942220,1704942220,56.35835639226159 +1704942225,1704942225,55.15661263312583 +1704942230,1704942230,43.578372276088274 +1704942235,1704942235,99.12158034783681 +1704942240,1704942240,25.723768462402607 +1704942245,1704942245,32.55540755372147 +1704942250,1704942250,44.205032750757624 +1704942260,1704942260,97.75083284916482 +1704942305,1704942305,4.855503370086933 +1704942310,1704942310,52.270822839287014 +1704942315,1704942315,41.34377721014189 +1704942320,1704942320,20.558801469054643 +1704942325,1704942325,56.50796646777982 +1704942330,1704942330,74.52615690101668 +1704942335,1704942335,10.613516963388726 +1704942340,1704942340,9.858225507203123 +1704942365,1704942365,20.018060162884034 +1704942410,1704942410,39.42540521083774 +1704942415,1704942415,74.86495580054046 +1704942420,1704942420,94.23915401582398 +1704942425,1704942425,46.438396791424466 +1704942430,1704942430,38.18395727462973 +1704942435,1704942435,99.20036595505137 +1704942440,1704942440,14.055967160286798 +1704942445,1704942445,1.7143095815396747 +1704942460,1704942460,16.721626444086958 +1704942495,1704942495,17.38587153726473 +1704942500,1704942500,33.99912172541833 +1704942505,1704942505,1.9200160774277997 +1704942510,1704942510,11.514732930813276 +1704942515,1704942515,78.88586128246374 +1704942520,1704942520,96.5179203872335 +1704942535,1704942535,0.7968952308508137 +1704942540,1704942540,61.7636161562408 +1704942545,1704942545,36.88093505130161 +1704942580,1704942580,90.78272830869713 +1704942585,1704942585,69.52653805305563 +1704942590,1704942590,49.007574873503344 +1704942595,1704942595,78.8663531181893 +1704942600,1704942600,46.38930820414314 +1704942605,1704942605,78.35183531308981 +1704942625,1704942625,76.53101919925805 +1704942630,1704942630,39.06201936840347 +1704942635,1704942635,27.793648571593586 +1704942670,1704942670,7.459828475040897 +1704942675,1704942675,21.644917781972918 +1704942680,1704942680,45.96000356421812 +1704942685,1704942685,9.148151468024867 +1704942690,1704942690,35.59039338731323 +1704942695,1704942695,36.08598491942144 +1704942705,1704942705,80.86873784935423 +1704942710,1704942710,60.34849663519356 +1704942715,1704942715,50.95271633578493 +1704942750,1704942750,4.671266235854777 +1704942755,1704942755,40.950812924794086 +1704942760,1704942760,92.93811979793729 +1704942765,1704942765,12.64453791865552 +1704942770,1704942770,74.7840320623358 +1704942775,1704942775,73.94402109189915 +1704942790,1704942790,81.95140893353901 +1704942795,1704942795,23.27859503813737 +1704942800,1704942800,9.658124827583492 +1704942835,1704942835,45.16075612208655 +1704942840,1704942840,25.873349641286392 +1704942845,1704942845,6.843194675761122 +1704942850,1704942850,79.67708709414082 +1704942855,1704942855,46.267481674683395 +1704942860,1704942860,36.540840122256036 +1704942880,1704942880,11.126600602319392 +1704942885,1704942885,12.315454193562003 +1704942890,1704942890,20.950885145785847 +1704942950,1704942950,49.932259291361866 +1704942955,1704942955,18.91785584339737 +1704942960,1704942960,19.186046384276967 +1704942965,1704942965,86.52347116276486 +1704942970,1704942970,62.30401525349583 +1704942975,1704942975,90.13377490247566 +1704943000,1704943000,63.7183386405915 +1704943005,1704943005,31.803387372158532 +1704943010,1704943010,95.42391928851035 +1704943060,1704943060,43.19149630908468 +1704943065,1704943065,84.60762238448638 +1704943070,1704943070,5.507360520524484 +1704943075,1704943075,85.38511956634066 +1704943080,1704943080,76.7168771566326 +1704943085,1704943085,63.81412606202542 +1704943090,1704943090,21.292165900370996 +1704943095,1704943095,83.55924918322405 +1704943100,1704943100,87.94540540267431 +1704943145,1704943145,15.683540472275725 +1704943150,1704943150,30.76268536427136 +1704943155,1704943155,75.36494856740148 +1704943160,1704943160,45.674025406946285 +1704943165,1704943165,2.0903620632538478 +1704943170,1704943170,42.168242119929744 +1704943175,1704943175,10.718058513691108 +1704943180,1704943180,14.603757374911385 +1704943190,1704943190,14.3739564453222 +1704943255,1704943255,26.722123424704737 +1704943260,1704943260,2.709798069677971 +1704943265,1704943265,75.4071051079951 +1704943270,1704943270,87.87004761863365 +1704943275,1704943275,51.985993444791575 +1704943280,1704943280,88.64577584070604 +1704943285,1704943285,19.18860274852068 +1704943290,1704943290,68.93264448284938 +1704943300,1704943300,69.29578572963652 +1704943370,1704943370,19.684630503078292 +1704943375,1704943375,30.54786843472117 +1704943380,1704943380,26.153996692384997 +1704943385,1704943385,60.58552838162537 +1704943390,1704943390,8.923129488007554 +1704943395,1704943395,69.83019183976413 +1704943400,1704943400,83.32205035671959 +1704943405,1704943405,75.44669740701298 +1704943410,1704943410,14.57905737628753 +1704943460,1704943460,98.05988494193198 +1704943465,1704943465,54.23488054863764 +1704943470,1704943470,12.325399664276082 +1704943475,1704943475,48.137980058781636 +1704943520,1704943520,47.77291087008384 +1704943525,1704943525,55.04552321467455 +1704943530,1704943530,30.37208891403208 +1704943535,1704943535,0.5180061525870805 +1704943540,1704943540,21.999279583884245 +1704943575,1704943575,76.03724889601429 +1704943580,1704943580,20.514227523837448 +1704943585,1704943585,79.81797043492432 +1704943590,1704943590,50.72049242990918 +1704943625,1704943625,56.32126218394183 +1704943630,1704943630,90.45300440520867 +1704943635,1704943635,24.337104274556154 +1704943640,1704943640,27.49252035126878 +1704943645,1704943645,85.3443940400806 +1704943670,1704943670,59.98973146961707 +1704943675,1704943675,55.79569590044427 +1704943680,1704943680,16.77600418902897 +1704943685,1704943685,66.49128122598896 +1704943710,1704943710,20.180455897705542 +1704943715,1704943715,18.606254626643516 +1704943720,1704943720,28.93021649739158 +1704943725,1704943725,62.55699699367193 +1704943730,1704943730,17.317504630970692 +1704943755,1704943755,59.864052281042156 +1704943760,1704943760,14.220945359772886 +1704943765,1704943765,70.60284773835012 +1704943770,1704943770,46.23898017428565 +1704943795,1704943795,89.86479213125801 +1704943800,1704943800,47.397797610300486 +1704943805,1704943805,82.36849491757826 +1704943810,1704943810,81.66127972980028 +1704943815,1704943815,32.86266628354036 +1704943840,1704943840,8.296006964762338 +1704943845,1704943845,12.423452530389312 +1704943850,1704943850,49.24404694477236 +1704943855,1704943855,87.77904652945374 +1704943905,1704943905,79.22525083236391 +1704943910,1704943910,32.36470403310203 +1704943915,1704943915,4.408071301692662 +1704943920,1704943920,80.61407102120998 +1704943925,1704943925,50.51207301384222 +1704943950,1704943950,41.179558378942204 +1704943955,1704943955,52.097571061657014 +1704943960,1704943960,98.00180579102317 +1704943965,1704943965,5.352220365772209 +1704943985,1704943985,90.113642333705 +1704943990,1704943990,35.5542587012569 +1704943995,1704943995,96.80729918476463 +1704944000,1704944000,25.78680082677338 +1704944005,1704944005,54.95021332238198 +1704944010,1704944010,77.01363641312004 +1704944015,1704944015,63.232304173045314 +1704944020,1704944020,20.203475965953444 +1704944025,1704944025,32.22758570459179 +1704944045,1704944045,88.83920397816605 +1704944050,1704944050,79.68280097763892 +1704944085,1704944085,96.85254797512393 +1704944090,1704944090,46.57020115625393 +1704944095,1704944095,32.98854246515912 +1704944100,1704944100,36.88707954958209 +1704944105,1704944105,41.371052421151624 +1704944110,1704944110,21.237227665777645 +1704944115,1704944115,91.95786142496655 +1704944130,1704944130,51.993108988836354 +1704944135,1704944135,70.51743033946718 +1704944200,1704944200,51.18842710830508 +1704944205,1704944205,28.65589022066719 +1704944210,1704944210,20.35568203268996 +1704944215,1704944215,30.352629092728066 +1704944220,1704944220,13.218277518599697 +1704944225,1704944225,52.391027288628656 +1704944230,1704944230,25.626717674644162 +1704944250,1704944250,68.29519452502227 +1704944255,1704944255,50.01939466197112 +1704944280,1704944280,53.18170593798426 +1704944285,1704944285,33.7503754610678 +1704944290,1704944290,8.894430221663551 +1704944295,1704944295,94.3903552398947 +1704944300,1704944300,90.9460610079379 +1704944305,1704944305,4.888431148027683 +1704944325,1704944325,61.986613395201275 +1704944330,1704944330,64.88869822391335 +1704944335,1704944335,98.13683706421311 +1704944370,1704944370,99.42592503490523 +1704944375,1704944375,29.44089097275383 +1704944380,1704944380,54.71152693788767 +1704944385,1704944385,37.36318789996177 +1704944390,1704944390,3.3557544212219126 +1704944395,1704944395,72.88029979085334 +1704944415,1704944415,45.802056289224026 +1704944420,1704944420,96.89474154323727 +1704944425,1704944425,46.94324774509172 +1704944475,1704944475,61.27964893688844 +1704944480,1704944480,44.36863499177958 +1704944485,1704944485,90.57862115490781 +1704944490,1704944490,60.280451349679744 +1704944495,1704944495,74.78075298804386 +1704944500,1704944500,19.040368151800223 +1704944520,1704944520,54.40378783012802 +1704944525,1704944525,13.07500585491267 +1704944530,1704944530,17.56692694280155 +1704944565,1704944565,35.597112474794926 +1704944570,1704944570,25.34616218599566 +1704944575,1704944575,28.97074837614021 +1704944580,1704944580,68.5420249748801 +1704944585,1704944585,17.68694430095087 +1704944590,1704944590,81.11437304116642 +1704944630,1704944630,98.42206136462416 +1704944635,1704944635,97.26465311930157 +1704944640,1704944640,65.68812880633853 +1704944695,1704944695,43.40610069211602 +1704944700,1704944700,3.5920883544233284 +1704944705,1704944705,66.75360772692643 +1704944710,1704944710,20.07006112988575 +1704944715,1704944715,16.627984851796352 +1704944720,1704944720,68.52835279136369 +1704944760,1704944760,74.85865212271912 +1704944765,1704944765,32.13619332859102 +1704944770,1704944770,71.85288476824941 +1704944815,1704944815,72.0970369839225 +1704944820,1704944820,18.524618388710067 +1704944825,1704944825,89.16032370582498 +1704944830,1704944830,94.29944777897362 +1704944835,1704944835,69.2099343401129 +1704944840,1704944840,47.1932770157663 +1704944860,1704944860,56.70154010719429 +1704944865,1704944865,87.04821883785922 +1704944870,1704944870,76.96884710313427 +1704944930,1704944930,17.575472671890736 +1704944935,1704944935,37.32598173710362 +1704944940,1704944940,69.34107143693068 +1704944945,1704944945,24.684263488212466 +1704944950,1704944950,5.79249741791018 +1704944955,1704944955,68.72789485968767 +1704945000,1704945000,41.74638206805543 +1704945005,1704945005,63.4196383262554 +1704945010,1704945010,9.305576557993389 +1704945065,1704945065,9.165166398618274 +1704945070,1704945070,99.25883184331731 +1704945075,1704945075,0.9847764374607437 +1704945080,1704945080,74.04901923796398 +1704945085,1704945085,7.950835114626975 +1704945090,1704945090,88.22144156584808 +1704945105,1704945105,79.38271248446051 +1704945110,1704945110,74.36781888708526 +1704945115,1704945115,79.2284672286509 +1704945175,1704945175,62.746208113647604 +1704945180,1704945180,59.36243598431301 +1704945185,1704945185,80.27969840959811 +1704945190,1704945190,57.80129210880971 +1704945195,1704945195,26.80846783142131 +1704945200,1704945200,28.54356029992562 +1704945230,1704945230,75.82764592183331 +1704945235,1704945235,26.320481987094936 +1704945240,1704945240,19.591030896101113 +1704945285,1704945285,25.556610825277858 +1704945290,1704945290,71.94584329108231 +1704945295,1704945295,7.856252149033038 +1704945300,1704945300,50.46540415344987 +1704945305,1704945305,48.62354527401099 +1704945310,1704945310,66.30075290185302 +1704945350,1704945350,73.6459120525247 +1704945355,1704945355,16.461051413717765 +1704945360,1704945360,95.63829020351055 +1704945415,1704945415,22.821192710452433 +1704945420,1704945420,29.87174069660412 +1704945425,1704945425,55.709797090358535 +1704945430,1704945430,13.517520584190946 +1704945435,1704945435,96.32602254215044 +1704945440,1704945440,26.901528517772388 +1704945460,1704945460,85.60284761571842 +1704945465,1704945465,70.08869754042713 +1704945470,1704945470,72.60019913176498 +1704945520,1704945520,37.16382829494881 +1704945525,1704945525,84.74106189150986 +1704945530,1704945530,17.54263705465534 +1704945535,1704945535,30.290632000476347 +1704945540,1704945540,73.40454167431331 +1704945545,1704945545,60.87882981523833 +1704945585,1704945585,41.6016802000316 +1704945590,1704945590,55.76670531505519 +1704945595,1704945595,5.9643384668265575 +1704945650,1704945650,89.18879779370137 +1704945655,1704945655,72.26564280140614 +1704945660,1704945660,23.744687536049735 +1704945665,1704945665,66.28304808165394 +1704945670,1704945670,53.63199013892353 +1704945675,1704945675,33.60100383207269 +1704945720,1704945720,30.925337650447194 +1704945725,1704945725,56.28426297773861 +1704945730,1704945730,27.816731288142215 +1704945790,1704945790,86.50604904525004 +1704945795,1704945795,53.30814110657881 +1704945800,1704945800,13.48237807873236 +1704945805,1704945805,84.69054520064331 +1704945810,1704945810,61.84551554667381 +1704945815,1704945815,44.734858480119236 +1704945860,1704945860,99.44307009357084 +1704945865,1704945865,53.230124263996224 +1704945870,1704945870,89.15364829866803 +1704945925,1704945925,84.58857396503639 +1704945930,1704945930,56.29119264971082 +1704945935,1704945935,46.603386251503586 +1704945940,1704945940,76.46650264564047 +1704945945,1704945945,78.78825998797805 +1704945950,1704945950,57.07157479326334 +1704945990,1704945990,52.4961492280059 +1704945995,1704945995,99.70095927894457 +1704946000,1704946000,31.30460045844876 +1704946060,1704946060,58.002396551959215 +1704946065,1704946065,7.699401479384949 +1704946070,1704946070,88.68217603568426 +1704946075,1704946075,8.584321855765808 +1704946080,1704946080,70.61535907124656 +1704946085,1704946085,60.48544693526353 +1704946115,1704946115,63.20411269044451 +1704946120,1704946120,29.582710706309957 +1704946125,1704946125,36.09279321946705 +1704946155,1704946155,61.9313168191007 +1704946160,1704946160,81.37564441412913 +1704946165,1704946165,19.181170561651417 +1704946170,1704946170,27.770364439827645 +1704946175,1704946175,81.8568118500828 +1704946180,1704946180,20.74647967413409 +1704946200,1704946200,64.31437328161365 +1704946205,1704946205,3.470563536330018 +1704946210,1704946210,88.62774606083468 +1704946240,1704946240,72.4197436354578 +1704946245,1704946245,48.13327421252196 +1704946250,1704946250,16.006727078227044 +1704946255,1704946255,75.32288018208261 +1704946260,1704946260,71.42074144317718 +1704946265,1704946265,15.579815178776524 +1704946290,1704946290,4.390630813537144 +1704946295,1704946295,19.082603427999423 +1704946300,1704946300,34.1065196601412 +1704946330,1704946330,29.82245912188034 +1704946335,1704946335,62.47487566508594 +1704946340,1704946340,50.84318533330404 +1704946345,1704946345,91.63969691771536 +1704946350,1704946350,73.31893304058796 +1704946355,1704946355,56.60759291548313 +1704946375,1704946375,41.87828557046211 +1704946380,1704946380,1.548894677944701 +1704946385,1704946385,79.2769787857616 +1704946420,1704946420,53.192211901591065 +1704946425,1704946425,82.88929488618531 +1704946430,1704946430,57.85574255085343 +1704946435,1704946435,6.402023385677447 +1704946440,1704946440,87.40518669559223 +1704946445,1704946445,45.00752137952125 +1704946475,1704946475,67.55561464179351 +1704946480,1704946480,73.85844712852366 +1704946485,1704946485,46.73926818744859 +1704946490,1704946490,79.66037486682431 +1704946495,1704946495,75.62384198978394 +1704946510,1704946510,33.51272629817529 +1704946515,1704946515,3.798181882878493 +1704946520,1704946520,83.96650784062837 +1704946560,1704946560,99.50436194111546 +1704946565,1704946565,28.66451099171111 +1704946570,1704946570,36.14859897109516 +1704946575,1704946575,82.82462218598516 +1704946580,1704946580,3.303851437366545 +1704946585,1704946585,63.91603204969193 +1704946605,1704946605,67.0806789643452 +1704946610,1704946610,78.93020178230033 +1704946615,1704946615,64.46280488058444 +1704946650,1704946650,19.66547485733897 +1704946655,1704946655,70.1836780700256 +1704946660,1704946660,89.7234474262994 +1704946665,1704946665,42.16275219228757 +1704946670,1704946670,8.482498754739698 +1704946675,1704946675,71.45075203440386 +1704946695,1704946695,13.528736067247237 +1704946700,1704946700,27.311832334819776 +1704946705,1704946705,42.92638532333958 +1704946740,1704946740,4.681590297901462 +1704946745,1704946745,3.914282845976702 +1704946750,1704946750,81.22570435748578 +1704946755,1704946755,47.45045653601042 +1704946760,1704946760,99.98155188453556 +1704946765,1704946765,62.29016700205005 +1704946780,1704946780,30.833427222997724 +1704946785,1704946785,59.179222573588554 +1704946790,1704946790,11.337572783622118 +1704946825,1704946825,4.025861170021249 +1704946830,1704946830,74.1141209708643 +1704946835,1704946835,55.78691954634933 +1704946840,1704946840,74.11312528108327 +1704946845,1704946845,54.38240060760846 +1704946850,1704946850,72.12244657664057 +1704946870,1704946870,83.25273293544561 +1704946875,1704946875,69.90984559684046 +1704946880,1704946880,12.11473397234406 +1704946930,1704946930,93.14374160001854 +1704946935,1704946935,63.52547199337171 +1704946940,1704946940,70.392866248091 +1704946945,1704946945,47.648006818265365 +1704946950,1704946950,9.22902609807269 +1704946955,1704946955,75.12709996382905 +1704946975,1704946975,17.57578025123546 +1704946980,1704946980,28.49448425166341 +1704946985,1704946985,43.14681955659244 +1704947040,1704947040,52.857391015276576 +1704947045,1704947045,40.78574049858227 +1704947050,1704947050,31.491968700859154 +1704947055,1704947055,66.61900395262647 +1704947060,1704947060,61.73631502877556 +1704947065,1704947065,42.28296888986257 +1704947080,1704947080,63.23678495683694 +1704947085,1704947085,0.9989868819539005 +1704947090,1704947090,48.13050345069125 +1704947175,1704947175,26.662953395018953 +1704947180,1704947180,3.0245310044357265 +1704947185,1704947185,35.639646108666334 +1704947190,1704947190,6.292470375978043 +1704947195,1704947195,20.181646918081974 +1704947200,1704947200,13.42985767398992 +1704947220,1704947220,10.51592475620109 +1704947225,1704947225,37.86534481830378 +1704947230,1704947230,62.853917847973904 +1704947280,1704947280,95.66947765137708 +1704947285,1704947285,11.7999712129508 +1704947290,1704947290,18.08515529697299 +1704947295,1704947295,59.89393716382501 +1704947300,1704947300,34.27713657761677 +1704947305,1704947305,16.18321657172147 +1704947350,1704947350,51.36083713867764 +1704947355,1704947355,68.08676682106307 +1704947360,1704947360,64.2098193516749 +1704947415,1704947415,83.26337758981957 +1704947420,1704947420,2.4075538786465733 +1704947425,1704947425,68.347708599858 +1704947430,1704947430,60.92564508405803 +1704947435,1704947435,10.6787465812044 +1704947440,1704947440,68.57489765583102 +1704947475,1704947475,58.12166586857015 +1704947480,1704947480,86.64650333697816 +1704947485,1704947485,72.52073261335212 +1704947540,1704947540,86.45867825482043 +1704947545,1704947545,29.18810475249909 +1704947550,1704947550,37.55787334395704 +1704947555,1704947555,35.703177405402165 +1704947560,1704947560,17.72222930349969 +1704947565,1704947565,62.770670636751106 +1704947610,1704947610,28.968563818437055 +1704947615,1704947615,35.860003668897214 +1704947620,1704947620,51.68410539641728 +1704947675,1704947675,98.64279238727588 +1704947680,1704947680,69.44516386726298 +1704947685,1704947685,33.048441965425745 +1704947690,1704947690,87.81668168771247 +1704947695,1704947695,29.36667803697247 +1704947700,1704947700,17.80750471204845 +1704947735,1704947735,75.8060537888655 +1704947740,1704947740,72.7809588097978 +1704947745,1704947745,6.550971360624636 +1704947780,1704947780,11.936498961411136 +1704947785,1704947785,12.618493323047254 +1704947790,1704947790,65.117434803304 +1704947795,1704947795,4.533029746342154 +1704947800,1704947800,14.391057764359083 +1704947805,1704947805,43.9670796795818 +1704947850,1704947850,64.8332117150339 +1704947855,1704947855,43.529872889656865 +1704947860,1704947860,88.02708306581685 +1704947905,1704947905,52.60506440728091 +1704947910,1704947910,83.0720162299934 +1704947915,1704947915,82.59895171411736 +1704947920,1704947920,2.99080461161908 +1704947925,1704947925,23.505877020597055 +1704947930,1704947930,29.452505800113048 +1704947945,1704947945,3.7334062858524253 +1704947950,1704947950,96.561757619003 +1704947955,1704947955,7.84705371480573 +1704948010,1704948010,40.9374506284456 +1704948015,1704948015,73.9089425022388 +1704948020,1704948020,15.633910539764418 +1704948025,1704948025,92.23646267116172 +1704948030,1704948030,10.528237818532826 +1704948035,1704948035,84.71133253395664 +1704948075,1704948075,38.79855190176933 +1704948080,1704948080,62.174582508043294 +1704948085,1704948085,38.74627947599756 +1704948140,1704948140,3.7220330178498795 +1704948145,1704948145,37.370805103189085 +1704948150,1704948150,43.050416886620354 +1704948155,1704948155,79.79685074434794 +1704948160,1704948160,68.5058202932669 +1704948165,1704948165,14.729372566099318 +1704948205,1704948205,92.39890043205786 +1704948210,1704948210,17.8403186353265 +1704948215,1704948215,74.69860833613868 +1704948270,1704948270,43.92580418196281 +1704948275,1704948275,82.92434359368622 +1704948280,1704948280,74.29816402746772 +1704948285,1704948285,14.493955851079065 +1704948290,1704948290,35.63232287731014 +1704948295,1704948295,74.77471141926532 +1704948335,1704948335,25.0202796150107 +1704948340,1704948340,44.615617565703246 +1704948345,1704948345,29.997038777383402 +1704948400,1704948400,94.55461149468884 +1704948405,1704948405,4.729715700483661 +1704948410,1704948410,39.28307849899196 +1704948415,1704948415,19.300249545698676 +1704948420,1704948420,48.106805100429085 +1704948425,1704948425,70.85917334278065 +1704948465,1704948465,45.25502940937592 +1704948470,1704948470,22.343257431623964 +1704948475,1704948475,69.09651932830187 +1704948530,1704948530,83.109704078394 +1704948535,1704948535,0.31735200223005355 +1704948540,1704948540,94.46168097687966 +1704948545,1704948545,44.23303585848781 +1704948550,1704948550,30.82825562718269 +1704948555,1704948555,27.15272291368873 +1704948595,1704948595,37.389532153453196 +1704948600,1704948600,28.192851643886797 +1704948605,1704948605,35.277196783789 +1704948665,1704948665,12.773747439442495 +1704948670,1704948670,84.67515325445416 +1704948675,1704948675,58.62537956046175 +1704948680,1704948680,92.42838377285803 +1704948685,1704948685,38.65770247850725 +1704948690,1704948690,39.68280912771953 +1704948725,1704948725,45.44520476353809 +1704948730,1704948730,21.72374748248287 +1704948735,1704948735,93.83275527492623 +1704948815,1704948815,57.82302688746904 +1704948820,1704948820,4.096628050640838 +1704948825,1704948825,12.24421878607782 +1704948830,1704948830,99.50263999326556 +1704948835,1704948835,4.675357000333269 +1704948840,1704948840,47.138720521680334 +1704948850,1704948850,77.5673708810429 +1704948855,1704948855,37.1943786766313 +1704948860,1704948860,55.945691660290755 +1704948890,1704948890,87.1092972008195 +1704948895,1704948895,86.63683511563691 +1704948900,1704948900,65.20974715072137 +1704948905,1704948905,96.15687749730448 +1704948910,1704948910,45.40965324692541 +1704948915,1704948915,15.302715273996103 +1704948935,1704948935,0.8905514272011694 +1704948940,1704948940,7.486949370317031 +1704948945,1704948945,19.916910936199972 +1704948975,1704948975,47.51183173194987 +1704948980,1704948980,69.86327037410783 +1704948985,1704948985,23.333473406685666 +1704948990,1704948990,48.06024236743597 +1704948995,1704948995,62.12434928457401 +1704949000,1704949000,9.570881130247066 +1704949020,1704949020,80.24814979038948 +1704949025,1704949025,74.66216706963252 +1704949030,1704949030,79.72849520619734 +1704949060,1704949060,10.60437099475654 +1704949065,1704949065,20.5359524807889 +1704949070,1704949070,74.98975002011686 +1704949075,1704949075,90.28776236531102 +1704949080,1704949080,94.70837569246304 +1704949085,1704949085,21.20542136156114 +1704949100,1704949100,20.551791548679553 +1704949105,1704949105,85.72856703710627 +1704949110,1704949110,62.02658464159029 +1704949165,1704949165,74.45275413195944 +1704949170,1704949170,76.47807726341146 +1704949175,1704949175,55.69498022615858 +1704949180,1704949180,37.39641086774076 +1704949185,1704949185,8.840639177129495 +1704949190,1704949190,81.19565281022768 +1704949215,1704949215,10.890307417352574 +1704949220,1704949220,68.95422992297918 +1704949225,1704949225,90.00055035271657 +1704949255,1704949255,50.66919436415631 +1704949260,1704949260,94.19080545453161 +1704949265,1704949265,60.7836120648196 +1704949270,1704949270,79.42185499838955 +1704949275,1704949275,18.088998126246658 +1704949280,1704949280,22.6885138330274 +1704949295,1704949295,42.503461406977515 +1704949300,1704949300,38.103712568334316 +1704949305,1704949305,60.23431658846988 +1704949340,1704949340,4.827366991908876 +1704949345,1704949345,34.15039155930175 +1704949350,1704949350,35.51696544531533 +1704949355,1704949355,50.76808559713682 +1704949360,1704949360,48.924319851116714 +1704949365,1704949365,78.24242218890421 +1704949385,1704949385,7.73434346542915 +1704949390,1704949390,32.38188861400493 +1704949395,1704949395,78.51762428433165 +1704949455,1704949455,1.653312609308455 +1704949460,1704949460,55.88809577583164 +1704949465,1704949465,39.29743946529268 +1704949470,1704949470,27.832195385707227 +1704949475,1704949475,37.39034441021286 +1704949480,1704949480,12.970974826425985 +1704949500,1704949500,73.53334821697692 +1704949505,1704949505,86.65575085472396 +1704949510,1704949510,26.20684154849229 +1704949540,1704949540,93.54101443991546 +1704949545,1704949545,98.01211180261642 +1704949550,1704949550,13.785153435673402 +1704949555,1704949555,92.15521755996922 +1704949560,1704949560,33.735180922668754 +1704949565,1704949565,2.500979618205168 +1704949585,1704949585,59.04201625975523 +1704949590,1704949590,49.5116028559865 +1704949595,1704949595,87.15616185464494 +1704949650,1704949650,12.684050963055471 +1704949655,1704949655,76.32957161101544 +1704949660,1704949660,87.27810731210043 +1704949665,1704949665,2.3564882998004744 +1704949670,1704949670,35.626323654317716 +1704949675,1704949675,38.74249387605919 +1704949690,1704949690,96.19846091604022 +1704949695,1704949695,8.719829592521899 +1704949700,1704949700,22.122735525426474 +1704949755,1704949755,70.72094094931562 +1704949760,1704949760,37.689263051564005 +1704949765,1704949765,84.15184802810185 +1704949770,1704949770,12.106929790950428 +1704949775,1704949775,79.12331617905866 +1704949780,1704949780,32.464078781061254 +1704949825,1704949825,86.40686761960825 +1704949830,1704949830,64.31918655473245 +1704949835,1704949835,77.62524541432252 +1704949870,1704949870,40.100116919456894 +1704949875,1704949875,14.953010516364884 +1704949880,1704949880,3.114384283893601 +1704949885,1704949885,80.3469276860924 +1704949890,1704949890,29.605131211913083 +1704949895,1704949895,59.57701461322497 +1704949920,1704949920,71.49122645346907 +1704949925,1704949925,82.87096818224452 +1704949930,1704949930,0.14990868431883353 +1704950000,1704950000,61.62377392764704 +1704950005,1704950005,59.598118419564486 +1704950010,1704950010,28.59546953053924 +1704950015,1704950015,24.505769868119497 +1704950020,1704950020,33.23299281016181 +1704950025,1704950025,33.48430370546595 +1704950040,1704950040,77.14060922761696 +1704950045,1704950045,27.005925271844756 +1704950050,1704950050,68.09001144860761 +1704950105,1704950105,20.548372684540794 +1704950110,1704950110,87.01943737433764 +1704950115,1704950115,57.340484058546956 +1704950120,1704950120,43.50219117442862 +1704950125,1704950125,34.37795512931237 +1704950130,1704950130,43.542970295939696 +1704950175,1704950175,18.14256738902451 +1704950180,1704950180,59.68529639510749 +1704950185,1704950185,10.601497062690113 +1704950235,1704950235,73.68196446385376 +1704950240,1704950240,43.29823020556465 +1704950245,1704950245,6.921770498256052 +1704950250,1704950250,40.12467341972857 +1704950255,1704950255,98.93123535019326 +1704950260,1704950260,69.91719211248471 +1704950280,1704950280,48.3779001430151 +1704950285,1704950285,41.65859059124762 +1704950290,1704950290,56.11705778343726 +1704950365,1704950365,4.260393309305366 +1704950370,1704950370,99.06188588465686 +1704950375,1704950375,5.620425846851374 +1704950380,1704950380,39.74298086932207 +1704950385,1704950385,59.647331163903026 +1704950390,1704950390,14.406498729723117 +1704950415,1704950415,26.63051822549438 +1704950420,1704950420,53.1484866321435 +1704950425,1704950425,28.957735329281032 +1704950500,1704950500,55.167654139819 +1704950505,1704950505,87.87568224966356 +1704950510,1704950510,34.20592732719284 +1704950515,1704950515,40.22639507765161 +1704950520,1704950520,44.89264401361005 +1704950525,1704950525,6.055605336743907 +1704950545,1704950545,54.600108743635076 +1704950550,1704950550,34.50000406390886 +1704950555,1704950555,77.38073016362151 +1704950630,1704950630,10.603033269700068 +1704950635,1704950635,45.0262897314868 +1704950640,1704950640,26.31055164083581 +1704950645,1704950645,24.777946552799257 +1704950650,1704950650,24.597576173131475 +1704950655,1704950655,84.60237194514127 +1704950675,1704950675,67.43550704929116 +1704950680,1704950680,28.25518529230321 +1704950685,1704950685,8.158525548418261 +1704950760,1704950760,68.89301910599593 +1704950765,1704950765,59.320666127122756 +1704950770,1704950770,8.017631605922048 +1704950775,1704950775,80.12112698306944 +1704950780,1704950780,15.874360076216753 +1704950785,1704950785,81.29873592667451 +1704950805,1704950805,6.722611995845085 +1704950810,1704950810,23.71669666391546 +1704950815,1704950815,90.35038769409752 +1704950860,1704950860,58.698779581926885 +1704950865,1704950865,88.73387714030143 +1704950870,1704950870,44.95319147860917 +1704950875,1704950875,83.29543671864879 +1704950880,1704950880,20.964117309310183 +1704950885,1704950885,31.877654289359736 +1704950915,1704950915,27.511497564370124 +1704950920,1704950920,27.953461336548845 +1704950925,1704950925,27.977207874045973 +1704950960,1704950960,43.076597087052114 +1704950965,1704950965,77.08532636513415 +1704950970,1704950970,79.68256997085318 +1704950975,1704950975,65.45429115458633 +1704950980,1704950980,31.873013494823354 +1704950985,1704950985,20.12120745101963 +1704951005,1704951005,62.03091556585824 +1704951010,1704951010,23.4304173663591 +1704951015,1704951015,24.50497323678689 +1704951025,1704951025,34.48718268350221 +1704951030,1704951030,71.97374171387962 +1704951035,1704951035,2.6903692501371257 +1704951040,1704951040,52.50307487600077 +1704951045,1704951045,41.864406976431255 +1704951050,1704951050,59.18168070631336 +1704951065,1704951065,52.03658184033313 +1704951070,1704951070,35.21187063484994 +1704951075,1704951075,31.306316273813973 +1704951110,1704951110,17.909202421430503 +1704951115,1704951115,84.45834062849882 +1704951120,1704951120,49.295565126192706 +1704951125,1704951125,97.26510531133621 +1704951130,1704951130,45.68859374337391 +1704951135,1704951135,68.48279806874386 +1704951150,1704951150,51.03779845682589 +1704951155,1704951155,69.5189244343306 +1704951160,1704951160,16.867955158070924 +1704951215,1704951215,71.8783181953397 +1704951220,1704951220,12.782146892980128 +1704951225,1704951225,45.956069237908096 +1704951230,1704951230,89.56999130262604 +1704951235,1704951235,47.50593609533623 +1704951240,1704951240,90.94423502593078 +1704951260,1704951260,69.33031115965001 +1704951265,1704951265,33.589104674253164 +1704951270,1704951270,35.07122609008163 +1704951305,1704951305,25.29735062232408 +1704951310,1704951310,30.977077221630054 +1704951315,1704951315,70.78728538599647 +1704951320,1704951320,74.46038835119559 +1704951325,1704951325,35.44396610051799 +1704951330,1704951330,59.97491718299861 +1704951350,1704951350,71.23449202183336 +1704951355,1704951355,42.183370583537084 +1704951360,1704951360,4.344019961198153 +1704951390,1704951390,43.67255357049433 +1704951395,1704951395,84.29359670177912 +1704951400,1704951400,42.334650737488886 +1704951405,1704951405,59.680249111147475 +1704951410,1704951410,88.93689012240056 +1704951415,1704951415,68.85247939935893 +1704951430,1704951430,42.729572536936665 +1704951435,1704951435,71.39676231647205 +1704951440,1704951440,29.413352779655987 +1704951495,1704951495,39.09851391840553 +1704951500,1704951500,63.703806583022725 +1704951505,1704951505,63.03634115176764 +1704951510,1704951510,57.27987837498786 +1704951515,1704951515,24.35140617746758 +1704951520,1704951520,79.57698965827169 +1704951540,1704951540,4.615207878696525 +1704951545,1704951545,33.2867263536177 +1704951550,1704951550,32.711751941479896 +1704951605,1704951605,45.846876073921194 +1704951610,1704951610,16.447597852525465 +1704951615,1704951615,39.9758314609935 +1704951620,1704951620,44.30503155755869 +1704951625,1704951625,22.47373958141522 +1704951630,1704951630,27.569077512922235 +1704951650,1704951650,88.81797840853707 +1704951655,1704951655,17.004793730505973 +1704951660,1704951660,50.93694332990937 +1704951735,1704951735,20.42940566452599 +1704951740,1704951740,79.94064654035188 +1704951745,1704951745,46.38919841498394 +1704951750,1704951750,88.89571039510477 +1704951755,1704951755,64.47393831536715 +1704951760,1704951760,17.762411552631384 +1704951780,1704951780,31.038975486324404 +1704951785,1704951785,55.511881237919134 +1704951790,1704951790,77.16816980586962 +1704951840,1704951840,9.658532212512128 +1704951845,1704951845,23.72985404336585 +1704951850,1704951850,82.1263580609365 +1704951855,1704951855,76.67913558484484 +1704951860,1704951860,57.25881591540541 +1704951865,1704951865,42.842628614148836 +1704951910,1704951910,42.35281907281036 +1704951915,1704951915,61.484009345901626 +1704951920,1704951920,10.356484361377284 +1704951970,1704951970,28.091097005692433 +1704951975,1704951975,23.768638069874136 +1704951980,1704951980,98.17660119701308 +1704951985,1704951985,79.92157704645264 +1704951990,1704951990,4.803750825361808 +1704951995,1704951995,69.32576914423811 +1704952040,1704952040,99.45288563266735 +1704952045,1704952045,56.6804139998646 +1704952050,1704952050,81.79200685450824 +1704952105,1704952105,72.86739975905292 +1704952110,1704952110,92.83396174438 +1704952115,1704952115,57.3016237947094 +1704952120,1704952120,15.66649103858283 +1704952125,1704952125,36.6392311909145 +1704952130,1704952130,65.42239438053666 +1704952170,1704952170,0.1118523316583575 +1704952175,1704952175,9.569926030269238 +1704952180,1704952180,93.7701702928332 +1704952215,1704952215,70.69737538134862 +1704952220,1704952220,13.777465583188464 +1704952225,1704952225,90.28117306344433 +1704952230,1704952230,52.19338321987112 +1704952235,1704952235,67.84585111414334 +1704952240,1704952240,78.24131948997129 +1704952265,1704952265,52.40580271985037 +1704952270,1704952270,52.05519040007044 +1704952275,1704952275,46.32394135364197 +1704952310,1704952310,26.00522920827992 +1704952315,1704952315,81.15251791063717 +1704952320,1704952320,6.063889240065423 +1704952325,1704952325,11.017904839389715 +1704952330,1704952330,70.23818576455932 +1704952335,1704952335,24.660146151492924 +1704952350,1704952350,95.98912671319115 +1704952355,1704952355,59.130674718976515 +1704952360,1704952360,32.004273771767046 +1704952395,1704952395,34.46957018059669 +1704952400,1704952400,74.23861453652492 +1704952405,1704952405,57.31249581661293 +1704952410,1704952410,65.73066843522528 +1704952415,1704952415,5.3680682703109 +1704952420,1704952420,19.213608140180792 +1704952440,1704952440,12.050404774999935 +1704952445,1704952445,18.656059389240752 +1704952450,1704952450,48.23936555728115 +1704952505,1704952505,84.18461686216105 +1704952510,1704952510,44.38251445867768 +1704952515,1704952515,55.31609854627463 +1704952520,1704952520,80.41235980480592 +1704952525,1704952525,71.9374765742904 +1704952530,1704952530,23.376517479442594 +1704952565,1704952565,58.35935205922679 +1704952570,1704952570,67.91483469036307 +1704952575,1704952575,43.18614769446994 +1704952635,1704952635,67.43534713737218 +1704952640,1704952640,5.863491751381322 +1704952645,1704952645,42.27705206657419 +1704952650,1704952650,46.001147108574116 +1704952655,1704952655,51.149823477542775 +1704952660,1704952660,68.00595563846868 +1704952700,1704952700,49.31596867095382 +1704952705,1704952705,64.84030236403217 +1704952710,1704952710,80.0407900498821 +1704952765,1704952765,73.77500866800099 +1704952770,1704952770,92.40931857384835 +1704952775,1704952775,97.91598757109121 +1704952780,1704952780,88.0622424652047 +1704952785,1704952785,31.10758588353312 +1704952790,1704952790,84.66109355549206 +1704952810,1704952810,66.74076911138735 +1704952815,1704952815,20.93799119897657 +1704952820,1704952820,7.822246306342917 +1704952880,1704952880,95.22307342824043 +1704952885,1704952885,74.22470628619048 +1704952890,1704952890,20.17938705251573 +1704952895,1704952895,5.761302978107952 +1704952900,1704952900,99.45288716925165 +1704952905,1704952905,48.542836800249034 +1704952925,1704952925,66.19227720989413 +1704952930,1704952930,44.66997534633565 +1704952935,1704952935,80.186642402388 +1704952970,1704952970,69.54573316035783 +1704952975,1704952975,68.27081253174052 +1704952980,1704952980,28.346406055290206 +1704952985,1704952985,57.136164800338044 +1704952990,1704952990,50.17146513021541 +1704952995,1704952995,47.478508356127605 +1704953015,1704953015,80.77305179174746 +1704953020,1704953020,56.58380780992084 +1704953025,1704953025,83.07476556510723 +1704953055,1704953055,72.46093233186535 +1704953060,1704953060,42.12766345307711 +1704953065,1704953065,89.35839868216082 +1704953070,1704953070,64.74654697218327 +1704953075,1704953075,30.052604659579252 +1704953080,1704953080,51.99763018399022 +1704953100,1704953100,66.44097165676838 +1704953105,1704953105,51.60064421504852 +1704953110,1704953110,79.75844564577854 +1704953140,1704953140,6.209098336488916 +1704953145,1704953145,30.831873180289136 +1704953150,1704953150,44.7292457274071 +1704953155,1704953155,21.700556299780505 +1704953160,1704953160,12.298308136226288 +1704953165,1704953165,2.814565230556443 +1704953205,1704953205,18.268416503866934 +1704953210,1704953210,28.684942862292683 +1704953215,1704953215,71.35172533410096 +1704953245,1704953245,36.895903550730445 +1704953250,1704953250,51.53951211059666 +1704953255,1704953255,94.61197382045374 +1704953260,1704953260,0.44478172027869745 +1704953265,1704953265,73.05270943515374 +1704953270,1704953270,39.26542024275107 +1704953290,1704953290,86.88999895482382 +1704953295,1704953295,32.203766502843365 +1704953300,1704953300,71.21643622361216 +1704953350,1704953350,76.71045231741982 +1704953355,1704953355,57.1197158708071 +1704953360,1704953360,42.976138925339654 +1704953365,1704953365,88.35323948609897 +1704953370,1704953370,43.21088336708908 +1704953375,1704953375,50.94046658298226 +1704953420,1704953420,61.72006919963674 +1704953425,1704953425,47.28523790516254 +1704953430,1704953430,75.67624399434519 +1704953495,1704953495,1.2622755923036189 +1704953500,1704953500,92.4034758422916 +1704953505,1704953505,45.94270618185302 +1704953510,1704953510,27.227572365088825 +1704953515,1704953515,52.396456562912434 +1704953520,1704953520,40.35573044456095 +1704953540,1704953540,87.53852679711042 +1704953545,1704953545,99.81631168725255 +1704953550,1704953550,38.38854882309642 +1704953610,1704953610,21.81242857719147 +1704953615,1704953615,14.640932850583654 +1704953620,1704953620,16.7103839209938 +1704953625,1704953625,94.09043735393567 +1704953630,1704953630,37.673487082740884 +1704953635,1704953635,41.59139176971801 +1704953685,1704953685,63.44294119535476 +1704953690,1704953690,4.02568724303719 +1704953695,1704953695,59.10605527050059 +1704953775,1704953775,55.91793953469866 +1704953780,1704953780,94.63828808783859 +1704953785,1704953785,7.668241212764304 +1704953790,1704953790,5.843077860387746 +1704953795,1704953795,26.42223444254802 +1704953800,1704953800,82.25297582884745 +1704953820,1704953820,82.33475000920136 +1704953825,1704953825,2.5206000676219253 +1704953830,1704953830,10.248709969064896 +1704953920,1704953920,33.76972811436243 +1704953925,1704953925,31.86703479025774 +1704953930,1704953930,48.162772654637685 +1704953935,1704953935,56.70972497570057 +1704953940,1704953940,9.313938789064002 +1704953945,1704953945,12.23389811750879 +1704953985,1704953985,30.927153089852276 +1704953990,1704953990,90.64686687951392 +1704953995,1704953995,41.42525014302921 +1704954035,1704954035,87.91214585121246 +1704954040,1704954040,69.131664820681 +1704954045,1704954045,81.77252422536401 +1704954050,1704954050,33.12707327559213 +1704954055,1704954055,39.646825275418884 +1704954060,1704954060,93.23437384318142 +1704954080,1704954080,66.31196908345301 +1704954085,1704954085,38.94612702202357 +1704954090,1704954090,1.129516626693594 +1704954170,1704954170,75.25934198937276 +1704954175,1704954175,30.055367561306646 +1704954180,1704954180,66.11366712056412 +1704954185,1704954185,79.71651721010717 +1704954190,1704954190,11.615229887663803 +1704954195,1704954195,0.2287260979685679 +1704954210,1704954210,84.77711065036603 +1704954215,1704954215,61.4591637394267 +1704954220,1704954220,56.56391894245348 +1704954270,1704954270,75.54924074560269 +1704954275,1704954275,5.36545793844645 +1704954280,1704954280,88.6980993569211 +1704954285,1704954285,15.927435452105431 +1704954290,1704954290,28.33981721097574 +1704954295,1704954295,33.28973446765313 +1704954335,1704954335,20.32018151778453 +1704954340,1704954340,90.75500609986314 +1704954345,1704954345,31.793218022202964 +1704954400,1704954400,79.65266584074075 +1704954405,1704954405,46.10225400352014 +1704954410,1704954410,55.491295986474654 +1704954415,1704954415,43.92972457988815 +1704954420,1704954420,30.23055875384616 +1704954425,1704954425,67.61843652109759 +1704954465,1704954465,79.69647146381419 +1704954470,1704954470,12.799634645971036 +1704954475,1704954475,2.4855564012975284 +1704954535,1704954535,53.572002572223795 +1704954540,1704954540,36.17348508621827 +1704954545,1704954545,96.47566447117599 +1704954550,1704954550,99.63519666707452 +1704954555,1704954555,57.98425169753537 +1704954560,1704954560,48.832006935884955 +1704954570,1704954570,49.83570803647134 +1704954575,1704954575,50.761150535950684 +1704954580,1704954580,39.03504972647268 +1704954655,1704954655,45.076290119745245 +1704954660,1704954660,22.272828599146123 +1704954665,1704954665,1.9263829604955984 +1704954670,1704954670,5.546426230121493 +1704954675,1704954675,39.336303846719304 +1704954680,1704954680,83.22620134329357 +1704954720,1704954720,54.001874910176504 +1704954725,1704954725,65.6446540615036 +1704954730,1704954730,15.63218368821696 +1704954805,1704954805,1.6252647809637422 +1704954810,1704954810,48.210080899259 +1704954815,1704954815,75.30268313480045 +1704954820,1704954820,65.08476227750587 +1704954825,1704954825,7.043596524524142 +1704954830,1704954830,63.920242720405305 +1704954870,1704954870,98.82201541932452 +1704954875,1704954875,90.30045777053765 +1704954880,1704954880,46.3217171666247 +1704954925,1704954925,14.920973679334782 +1704954930,1704954930,1.4360699258085474 +1704954935,1704954935,71.72716192937216 +1704954940,1704954940,91.53896909068544 +1704954945,1704954945,55.274254864587924 +1704954950,1704954950,67.19558946312056 +1704954990,1704954990,19.32873905543807 +1704954995,1704954995,99.05400499170665 +1704955000,1704955000,74.61237165653036 +1704955055,1704955055,78.02006768762108 +1704955060,1704955060,56.39631329830068 +1704955065,1704955065,30.05635247874816 +1704955070,1704955070,42.92027645575206 +1704955075,1704955075,11.499388830325152 +1704955080,1704955080,52.341668044503095 +1704955100,1704955100,62.80788277261142 +1704955105,1704955105,3.835784658938002 +1704955110,1704955110,52.373225020290924 +1704955165,1704955165,16.684091187970406 +1704955170,1704955170,13.077262688124557 +1704955175,1704955175,50.99419460891874 +1704955180,1704955180,15.667180894760712 +1704955185,1704955185,7.578392085062768 +1704955190,1704955190,38.632315121553376 +1704955230,1704955230,28.290074133399557 +1704955235,1704955235,8.07704016243298 +1704955240,1704955240,7.968640917089043 +1704955295,1704955295,61.11479619627441 +1704955300,1704955300,55.995505039073755 +1704955305,1704955305,19.961237418641574 +1704955310,1704955310,58.67154440177258 +1704955315,1704955315,86.93182085799045 +1704955320,1704955320,66.9862014217034 +1704955340,1704955340,25.48057891919726 +1704955345,1704955345,4.982628384339027 +1704955350,1704955350,61.78240509090918 +1704955405,1704955405,37.23844630649982 +1704955410,1704955410,9.718320245457068 +1704955415,1704955415,34.550792021116536 +1704955420,1704955420,97.11402613784051 +1704955425,1704955425,88.37250041066494 +1704955430,1704955430,79.90681545998287 +1704955465,1704955465,24.716499590891218 +1704955470,1704955470,51.123178827406065 +1704955475,1704955475,12.038158934009424 +1704955535,1704955535,49.837022967643854 +1704955540,1704955540,5.0084179420842645 +1704955545,1704955545,13.185677128361938 +1704955550,1704955550,77.70944409181148 +1704955555,1704955555,17.352210815866155 +1704955560,1704955560,28.320735134278372 +1704955600,1704955600,41.850789139916145 +1704955605,1704955605,35.59618353705842 +1704955610,1704955610,18.77719305524196 +1704955640,1704955640,52.02469118017375 +1704955645,1704955645,13.25927500046069 +1704955650,1704955650,20.95917305135887 +1704955655,1704955655,18.53667570336526 +1704955660,1704955660,93.51912282992167 +1704955665,1704955665,14.939015640521792 +1704955685,1704955685,65.31258529388174 +1704955690,1704955690,54.91566563319419 +1704955695,1704955695,44.79274448656035 +1704955775,1704955775,98.31312229547548 +1704955780,1704955780,50.17339165668086 +1704955785,1704955785,85.15467218560798 +1704955790,1704955790,2.639122658390858 +1704955795,1704955795,28.03807477791721 +1704955800,1704955800,70.62308079939264 +1704955815,1704955815,57.06015490146018 +1704955820,1704955820,72.36377601105846 +1704955825,1704955825,87.69755446557583 +1704955875,1704955875,55.108210764056174 +1704955880,1704955880,8.90208452040926 +1704955885,1704955885,50.593017445965806 +1704955890,1704955890,98.08854722894726 +1704955895,1704955895,79.83581273663862 +1704955900,1704955900,91.154101269055 +1704955940,1704955940,88.65136772818161 +1704955945,1704955945,1.3952560493232347 +1704955950,1704955950,49.18217360821817 +1704956010,1704956010,60.86691353068977 +1704956015,1704956015,60.52525574987544 +1704956020,1704956020,63.70560942650301 +1704956025,1704956025,17.9703425281849 +1704956030,1704956030,92.8380412062714 +1704956035,1704956035,63.10771079815537 +1704956075,1704956075,52.173176017410384 +1704956080,1704956080,3.2850856053304955 +1704956085,1704956085,29.050002620335626 +1704956140,1704956140,65.73738345638013 +1704956145,1704956145,87.92777457790729 +1704956150,1704956150,32.15537095589184 +1704956155,1704956155,49.294973223165975 +1704956160,1704956160,9.16412018330891 +1704956165,1704956165,78.18020462411783 +1704956185,1704956185,69.06095021021227 +1704956190,1704956190,9.785619638459654 +1704956195,1704956195,55.62361434898485 +1704956250,1704956250,52.56937405295018 +1704956255,1704956255,52.74069370425663 +1704956260,1704956260,88.32983902290849 +1704956265,1704956265,40.89963956075452 +1704956270,1704956270,43.37275345525357 +1704956275,1704956275,62.86277051024993 +1704956310,1704956310,12.03771092833874 +1704956315,1704956315,51.4688034178954 +1704956320,1704956320,24.924208547273217 +1704956375,1704956375,17.31546331244581 +1704956380,1704956380,99.51249465287447 +1704956385,1704956385,53.25146686178297 +1704956390,1704956390,24.292562897108894 +1704956395,1704956395,85.41103148492647 +1704956400,1704956400,30.34503211619769 +1704956445,1704956445,81.8628318721132 +1704956450,1704956450,53.309502026978485 +1704956455,1704956455,89.91851815763874 +1704956510,1704956510,59.526569555679586 +1704956515,1704956515,6.35000880177401 +1704956520,1704956520,7.549635614984029 +1704956525,1704956525,27.320906683993794 +1704956530,1704956530,57.803888926195114 +1704956535,1704956535,21.365709020837187 +1704956550,1704956550,98.3812245489785 +1704956555,1704956555,13.347240212467115 +1704956560,1704956560,63.96067995848972 +1704956615,1704956615,37.10688658715316 +1704956620,1704956620,14.06675093428371 +1704956625,1704956625,46.85357350841962 +1704956630,1704956630,53.322543703530755 +1704956635,1704956635,48.235040305606766 +1704956640,1704956640,85.1112250669971 +1704956680,1704956680,32.92028703699267 +1704956685,1704956685,89.81759596940036 +1704956690,1704956690,19.434128977016897 +1704956735,1704956735,13.240867810827117 +1704956740,1704956740,14.476054334477428 +1704956745,1704956745,3.6571112227072433 +1704956750,1704956750,97.91138542151693 +1704956755,1704956755,19.19879187945831 +1704956760,1704956760,73.52199325441725 +1704956800,1704956800,43.72793035360615 +1704956805,1704956805,57.588497981247464 +1704956810,1704956810,52.253610684564755 +1704956865,1704956865,67.90329908898296 +1704956870,1704956870,52.031124473918354 +1704956875,1704956875,0.8410796688477884 +1704956880,1704956880,18.70149280603508 +1704956885,1704956885,34.5961038080616 +1704956890,1704956890,63.11130484009612 +1704956910,1704956910,27.628805622921437 +1704956915,1704956915,38.1264841718177 +1704956920,1704956920,4.745963112606977 +1704956975,1704956975,49.37992049051398 +1704956980,1704956980,49.38664709888414 +1704956985,1704956985,84.84317561485209 +1704956990,1704956990,80.60608463242046 +1704956995,1704956995,18.92465676538442 +1704957000,1704957000,83.65590593169716 +1704957005,1704957005,45.44011051766781 +1704957015,1704957015,45.448817562704654 +1704957100,1704957100,3.1451516558252623 +1704957105,1704957105,28.626161176359055 +1704957110,1704957110,14.871199296143068 +1704957115,1704957115,67.74535993209625 +1704957120,1704957120,30.221725982473192 +1704957125,1704957125,79.67091218135829 +1704957130,1704957130,86.09546520055784 +1704957135,1704957135,81.22043376610775 +1704957140,1704957140,4.738776162086033 +1704957210,1704957210,30.533130382777575 +1704957215,1704957215,69.77079124269268 +1704957220,1704957220,12.849769864811368 +1704957225,1704957225,59.992169939181885 +1704957230,1704957230,39.47289283371471 +1704957235,1704957235,17.023210235872142 +1704957240,1704957240,32.587671644796536 +1704957245,1704957245,7.0339694518986695 +1704957250,1704957250,0.662143760575451 +1704957345,1704957345,58.43584893640941 +1704957350,1704957350,94.53467273897773 +1704957355,1704957355,51.17092128695677 +1704957360,1704957360,24.315487177126915 +1704957365,1704957365,41.038147130561384 +1704957370,1704957370,46.363037308023856 +1704957375,1704957375,29.851946999364454 +1704957380,1704957380,54.77042789835067 +1704957385,1704957385,99.28462179860628 +1704957445,1704957445,82.47155455785607 +1704957450,1704957450,17.497483184330996 +1704957455,1704957455,99.64890025444264 +1704957460,1704957460,93.90761449503793 +1704957465,1704957465,90.66706344167869 +1704957470,1704957470,8.28884723604222 +1704957475,1704957475,87.93157763831391 +1704957480,1704957480,27.034996096913943 +1704957485,1704957485,0.86396617946356 +1704957565,1704957565,5.636232453685652 +1704957570,1704957570,68.14324243025231 +1704957575,1704957575,25.969364896358904 +1704957580,1704957580,34.1235150116413 +1704957585,1704957585,85.03142210413834 +1704957590,1704957590,31.009319629133316 +1704957595,1704957595,79.66223980982264 +1704957600,1704957600,39.46661443182943 +1704957605,1704957605,24.22253127641081 +1704957690,1704957690,5.611450528117167 +1704957695,1704957695,24.096923522454837 +1704957700,1704957700,88.39395271965546 +1704957705,1704957705,70.63483703667718 +1704957710,1704957710,31.145415565855895 +1704957715,1704957715,13.83097209170404 +1704957720,1704957720,61.2579993776959 +1704957725,1704957725,96.66645407410417 +1704957730,1704957730,97.76540867382496 +1704957810,1704957810,21.106894820453658 +1704957815,1704957815,42.61519053061822 +1704957820,1704957820,28.727170174720975 +1704957825,1704957825,7.51278968684489 +1704957830,1704957830,27.95762484488895 +1704957835,1704957835,4.229285446934017 +1704957840,1704957840,20.400862334052672 +1704957845,1704957845,59.03204274733961 +1704957850,1704957850,27.278540853420765 +1704957870,1704957870,79.69969602858365 +1704957875,1704957875,13.345760069018564 +1704957880,1704957880,68.63698064913379 +1704957885,1704957885,24.910408740280754 +1704957890,1704957890,11.073658617062831 +1704957895,1704957895,79.8424075702637 +1704957900,1704957900,51.90750184026043 +1704957905,1704957905,98.41337192671106 +1704957910,1704957910,46.77683780001611 +1704957960,1704957960,54.48787547312981 +1704957965,1704957965,92.25787866965511 +1704957970,1704957970,25.701996037081887 +1704957975,1704957975,57.21004879177121 +1704957980,1704957980,92.69685550647961 +1704957985,1704957985,32.2402332238231 +1704957995,1704957995,47.24578332253198 +1704958000,1704958000,10.373430032428699 +1704958005,1704958005,68.13995199108051 +1704958055,1704958055,15.76949127559335 +1704958060,1704958060,93.203843733198 +1704958065,1704958065,48.591412611870545 +1704958070,1704958070,11.031497328203521 +1704958075,1704958075,0.20247442173235708 +1704958080,1704958080,38.62887801982192 +1704958095,1704958095,57.75042583537113 +1704958100,1704958100,17.344624122640685 +1704958105,1704958105,48.13972444757053 +1704958150,1704958150,42.45309980098539 +1704958155,1704958155,7.594597611626397 +1704958160,1704958160,24.63621415501477 +1704958165,1704958165,23.62540314171313 +1704958170,1704958170,64.41971712895558 +1704958175,1704958175,25.768138009756015 +1704958210,1704958210,29.44160032045723 +1704958215,1704958215,34.23115551793304 +1704958220,1704958220,41.71855564869341 +1704958265,1704958265,51.2903374530692 +1704958270,1704958270,42.01964677137359 +1704958275,1704958275,38.19424880886868 +1704958280,1704958280,21.999356772342406 +1704958285,1704958285,49.63835190457932 +1704958290,1704958290,8.355519663264822 +1704958305,1704958305,95.36474512972009 +1704958310,1704958310,7.2444408531111115 +1704958315,1704958315,6.006181894433659 +1704958360,1704958360,79.6854209583019 +1704958365,1704958365,96.54633347149803 +1704958370,1704958370,62.524725959929484 +1704958375,1704958375,36.051276944728805 +1704958380,1704958380,43.40413981252953 +1704958385,1704958385,8.55699940602721 +1704958425,1704958425,84.08455202676393 +1704958430,1704958430,51.480181654523705 +1704958435,1704958435,48.91030676865278 +1704958480,1704958480,74.95847562385745 +1704958485,1704958485,81.2794954448268 +1704958490,1704958490,63.971401927075675 +1704958495,1704958495,52.95487996010966 +1704958500,1704958500,75.8400075949827 +1704958505,1704958505,78.55472835551528 +1704958540,1704958540,43.353730474240514 +1704958545,1704958545,16.15605540498063 +1704958550,1704958550,93.01295901540014 +1704958600,1704958600,72.53586031847287 +1704958605,1704958605,68.14620943371085 +1704958610,1704958610,36.181597131002455 +1704958615,1704958615,44.23127555527759 +1704958620,1704958620,0.09258954353521531 +1704958625,1704958625,49.323574443526695 +1704958660,1704958660,31.006971434882622 +1704958665,1704958665,85.53297839822433 +1704958670,1704958670,5.163768454066164 +1704958715,1704958715,80.56004589093662 +1704958720,1704958720,43.26949028032527 +1704958725,1704958725,16.454292275661587 +1704958730,1704958730,9.950026542405944 +1704958735,1704958735,10.449663216505567 +1704958740,1704958740,71.1020742920027 +1704958775,1704958775,69.22484397541618 +1704958780,1704958780,56.182434231095726 +1704958785,1704958785,99.02734076584261 +1704958845,1704958845,56.27417346867072 +1704958850,1704958850,8.11305930141354 +1704958855,1704958855,35.33489518038559 +1704958860,1704958860,37.33590790425719 +1704958865,1704958865,36.30427286669588 +1704958870,1704958870,15.7345509266133 +1704958885,1704958885,96.72019016114251 +1704958890,1704958890,37.720548183283356 +1704958895,1704958895,13.036426982224613 +1704958930,1704958930,30.389176692065888 +1704958935,1704958935,61.2214894745152 +1704958940,1704958940,40.52515196888301 +1704958945,1704958945,89.45468873480591 +1704958950,1704958950,1.7802278273323036 +1704958955,1704958955,75.24047178708055 +1704958975,1704958975,80.07785284488652 +1704958980,1704958980,16.36715719427514 +1704958985,1704958985,13.927915206841812 +1704959020,1704959020,77.97092746657817 +1704959025,1704959025,88.62244649458447 +1704959030,1704959030,41.47786383960258 +1704959035,1704959035,86.59767205852617 +1704959040,1704959040,45.789291539044676 +1704959045,1704959045,48.908144383654204 +1704959060,1704959060,74.67108561935333 +1704959065,1704959065,47.44525520925441 +1704959070,1704959070,41.976480936782124 +1704959100,1704959100,81.47359176672362 +1704959105,1704959105,57.45171733837559 +1704959110,1704959110,91.27528593449105 +1704959115,1704959115,26.471607786340602 +1704959120,1704959120,33.51200093016718 +1704959125,1704959125,73.83173642914859 +1704959130,1704959130,41.73476480328614 +1704959135,1704959135,52.12019627855389 +1704959140,1704959140,28.285322860737573 +1704959200,1704959200,19.174241757517652 +1704959205,1704959205,42.552261281734424 +1704959210,1704959210,29.39277122093301 +1704959215,1704959215,8.108144953643459 +1704959220,1704959220,71.28031795085347 +1704959225,1704959225,40.804733704742716 +1704959230,1704959230,22.30935359626627 +1704959235,1704959235,90.01513592771443 +1704959240,1704959240,6.397442529295294 +1704959300,1704959300,83.05472859031804 +1704959305,1704959305,79.09526436702038 +1704959310,1704959310,43.361986275639296 +1704959315,1704959315,79.36947228066933 +1704959320,1704959320,61.77486116691989 +1704959325,1704959325,43.19010263380893 +1704959330,1704959330,28.62745462703519 +1704959335,1704959335,46.5248661615212 +1704959340,1704959340,41.54396048565299 +1704959420,1704959420,69.00633250960465 +1704959425,1704959425,52.78581581940437 +1704959430,1704959430,93.04463087877897 +1704959435,1704959435,78.84401986317916 +1704959440,1704959440,9.642809084091686 +1704959445,1704959445,23.412975805502445 +1704959450,1704959450,85.12021056398676 +1704959455,1704959455,76.44974855872265 +1704959460,1704959460,1.823601362958105 +1704959520,1704959520,72.20896364064662 +1704959525,1704959525,69.18790408369377 +1704959530,1704959530,63.43897701061954 +1704959535,1704959535,92.95504282247752 +1704959540,1704959540,34.87788001158526 +1704959545,1704959545,6.089672501093146 +1704959550,1704959550,83.30505915654318 +1704959555,1704959555,11.61047387586911 +1704959560,1704959560,49.34692325356248 +1704959620,1704959620,46.77677583631248 +1704959625,1704959625,25.783154874206392 +1704959630,1704959630,78.24552338996148 +1704959635,1704959635,23.630578616047526 +1704959640,1704959640,58.11524323704512 +1704959645,1704959645,50.50001433014051 +1704959650,1704959650,4.803618856523084 +1704959655,1704959655,81.82045144384477 +1704959660,1704959660,37.39735703709024 +1704959720,1704959720,89.9255900879711 +1704959725,1704959725,97.2431296471178 +1704959730,1704959730,69.22169772648958 +1704959735,1704959735,50.23077982812059 +1704959740,1704959740,46.03515845239797 +1704959745,1704959745,69.15627467346745 +1704959750,1704959750,87.51504698557349 +1704959755,1704959755,45.5459088615774 +1704959760,1704959760,44.43121486961107 +1704959815,1704959815,3.783991335748449 +1704959820,1704959820,68.66653416433374 +1704959825,1704959825,65.31188037329306 +1704959830,1704959830,86.90932824720932 +1704959835,1704959835,99.6305907680628 +1704959840,1704959840,31.394074854141973 +1704959845,1704959845,84.50564414176223 +1704959850,1704959850,36.10270036199218 +1704959855,1704959855,76.58182239992259 +1704959935,1704959935,74.50705182681513 +1704959940,1704959940,0.6317383384723652 +1704959945,1704959945,58.87308992616768 +1704959950,1704959950,21.628703710336218 +1704959955,1704959955,1.8594030529573646 +1704959960,1704959960,13.754836529480063 +1704959965,1704959965,92.52397655904767 +1704959970,1704959970,93.68834695826257 +1704959975,1704959975,22.757840200049774 +1704960040,1704960040,21.397904758681186 +1704960045,1704960045,7.001692210983923 +1704960050,1704960050,81.8078280613109 +1704960055,1704960055,56.099319232819475 +1704960060,1704960060,5.0462034648881655 +1704960065,1704960065,70.36077311742989 +1704960070,1704960070,10.861485842054774 +1704960075,1704960075,74.54153028197463 +1704960080,1704960080,52.3846994222926 +1704960130,1704960130,79.81550845411941 +1704960135,1704960135,95.99584267015202 +1704960140,1704960140,21.722988278676702 +1704960145,1704960145,37.79739853943504 +1704960150,1704960150,81.55466317997852 +1704960155,1704960155,13.99388527754506 +1704960160,1704960160,3.933642213663391 +1704960165,1704960165,97.62155371460078 +1704960170,1704960170,7.594837376192009 +1704960220,1704960220,44.736058444409935 +1704960225,1704960225,15.154276730820882 +1704960230,1704960230,25.679594568250728 +1704960235,1704960235,98.70034887057173 +1704960240,1704960240,63.86646787645483 +1704960245,1704960245,70.29086988964552 +1704960250,1704960250,88.59120016751461 +1704960255,1704960255,99.97785052903993 +1704960260,1704960260,20.231073854384718 +1704960340,1704960340,23.340242271848567 +1704960345,1704960345,66.38082264229374 +1704960350,1704960350,42.529728127135 +1704960355,1704960355,7.419602908964073 +1704960360,1704960360,41.433219357781795 +1704960365,1704960365,80.69374026472192 +1704960370,1704960370,92.31761500486104 +1704960375,1704960375,88.11784625578835 +1704960380,1704960380,28.82244281992995 +1704960440,1704960440,16.25484404149389 +1704960445,1704960445,19.363829572492463 +1704960450,1704960450,17.903777247458375 +1704960455,1704960455,30.682980584493148 +1704960460,1704960460,95.61631692074883 +1704960465,1704960465,72.24301595347839 +1704960470,1704960470,40.02040344027773 +1704960475,1704960475,65.57016361681265 +1704960480,1704960480,42.07167094937441 +1704960485,1704960485,52.08063274326291 +1704960490,1704960490,92.86640541671767 +1704960555,1704960555,76.86930190936847 +1704960560,1704960560,36.60427363029759 +1704960565,1704960565,51.8000146388262 +1704960570,1704960570,84.02830082797809 +1704960575,1704960575,11.709763510226034 +1704960630,1704960630,87.59085017015032 +1704960635,1704960635,41.84841761085768 +1704960640,1704960640,4.098733243362506 +1704960645,1704960645,67.90939816938442 +1704960675,1704960675,2.207889833488852 +1704960680,1704960680,51.774204530894664 +1704960685,1704960685,49.47614303633517 +1704960690,1704960690,19.096908093073385 +1704960695,1704960695,75.36066083811248 +1704960750,1704960750,61.55316079818398 +1704960755,1704960755,78.83767438237861 +1704960760,1704960760,61.86314396669806 +1704960765,1704960765,19.499503535777873 +1704960825,1704960825,1.6474074254767657 +1704960830,1704960830,41.76230400183063 +1704960835,1704960835,37.844956493399295 +1704960840,1704960840,34.49526013962523 +1704960845,1704960845,94.74703143938186 +1704960895,1704960895,97.82307442702523 +1704960900,1704960900,60.80611075428789 +1704960905,1704960905,95.8247753768056 +1704960910,1704960910,98.77677588994224 +1704960940,1704960940,9.013500208406134 +1704960945,1704960945,43.60879108958255 +1704960950,1704960950,34.1153614663367 +1704960955,1704960955,57.4713956279558 +1704960960,1704960960,9.069345057911926 +1704961015,1704961015,88.55376338674591 +1704961020,1704961020,12.291726519726264 +1704961025,1704961025,28.044449050710774 +1704961030,1704961030,31.1131593207831 +1704961060,1704961060,82.97336284780525 +1704961065,1704961065,82.44973873548184 +1704961070,1704961070,87.7505969070563 +1704961075,1704961075,7.6093163937966946 +1704961080,1704961080,13.153777489963936 +1704961115,1704961115,79.80665300120754 +1704961120,1704961120,94.9055213889957 +1704961125,1704961125,86.82298286137745 +1704961130,1704961130,18.232947651236188 +1704961160,1704961160,11.845756865687884 +1704961165,1704961165,44.44918494088023 +1704961170,1704961170,97.76926258409767 +1704961175,1704961175,15.326711394326098 +1704961180,1704961180,39.05614712328776 +1704961230,1704961230,38.890049016426545 +1704961235,1704961235,35.69853561612951 +1704961240,1704961240,44.12516959197579 +1704961245,1704961245,46.70777432279547 +1704961295,1704961295,10.71370370325122 +1704961300,1704961300,39.46371954535485 +1704961305,1704961305,94.98718590957571 +1704961310,1704961310,18.37172291665047 +1704961315,1704961315,56.166511709062185 +1704961360,1704961360,20.183453802660743 +1704961365,1704961365,22.81027740800521 +1704961370,1704961370,66.41622921457511 +1704961375,1704961375,20.013641794706594 +1704961400,1704961400,67.61491940614967 +1704961405,1704961405,87.21950533711599 +1704961410,1704961410,13.377319318762748 +1704961415,1704961415,9.355899248300325 +1704961420,1704961420,4.729902164209854 +1704961465,1704961465,94.78001335051489 +1704961470,1704961470,7.231113882083362 +1704961475,1704961475,74.32216310072977 +1704961480,1704961480,41.54830302051579 +1704961535,1704961535,43.816850493561596 +1704961540,1704961540,70.41843352604388 +1704961545,1704961545,13.858704912930808 +1704961550,1704961550,50.773359266418815 +1704961555,1704961555,71.10270196321818 +1704961600,1704961600,46.914789844330016 +1704961605,1704961605,73.22302544113202 +1704961610,1704961610,44.52176320928152 +1704961615,1704961615,97.78993816525507 +1704961645,1704961645,32.67711229682686 +1704961650,1704961650,44.6359432474039 +1704961655,1704961655,11.189752644095208 +1704961660,1704961660,5.486850670288734 +1704961665,1704961665,85.32290579374273 +1704961715,1704961715,24.042317215103072 +1704961720,1704961720,84.90013022742853 +1704961725,1704961725,28.80231403856549 +1704961730,1704961730,84.69010514439275 +1704961780,1704961780,67.18136076822299 +1704961785,1704961785,10.905233255380175 +1704961790,1704961790,88.59412109851421 +1704961795,1704961795,97.43126230957452 +1704961800,1704961800,91.89874328821132 +1704961845,1704961845,19.175729251099938 +1704961850,1704961850,22.873056330756192 +1704961855,1704961855,7.29863054872486 +1704961860,1704961860,43.42443855688373 +1704961910,1704961910,46.41851963982213 +1704961915,1704961915,8.513335103909359 +1704961920,1704961920,29.86550359303404 +1704961925,1704961925,96.42149517367426 +1704961930,1704961930,47.5527740807582 +1704961955,1704961955,38.24777121071704 +1704961960,1704961960,96.47817757645298 +1704961965,1704961965,51.064736862367056 +1704961970,1704961970,82.2482313411699 +1704962020,1704962020,41.072264973334406 +1704962025,1704962025,68.70683459075696 +1704962030,1704962030,87.02589755430469 +1704962035,1704962035,42.397348323508645 +1704962040,1704962040,89.40940552517498 +1704962075,1704962075,45.10128280248772 +1704962080,1704962080,26.58081735793152 +1704962085,1704962085,39.544734306018384 +1704962090,1704962090,13.24490542466682 +1704962145,1704962145,46.64546672918305 +1704962150,1704962150,38.365741738097405 +1704962155,1704962155,70.60076553195606 +1704962160,1704962160,62.57454810467866 +1704962165,1704962165,76.5435049577549 +1704962190,1704962190,45.88191856656834 +1704962195,1704962195,0.10483957917043485 +1704962200,1704962200,8.638977434233365 +1704962205,1704962205,12.869045954539848 +1704962245,1704962245,57.01754515441726 +1704962250,1704962250,82.39947198060526 +1704962255,1704962255,58.186824536485936 +1704962260,1704962260,30.284288855849383 +1704962265,1704962265,2.412311098996056 +1704962310,1704962310,78.4103269490791 +1704962315,1704962315,91.93556100168914 +1704962320,1704962320,80.58883754467 +1704962325,1704962325,4.914990671107999 +1704962380,1704962380,7.456225109230486 +1704962385,1704962385,73.64014173831546 +1704962390,1704962390,1.5993702724585557 +1704962395,1704962395,22.869605436685614 +1704962400,1704962400,69.61180070621603 +1704962450,1704962450,5.260601931064568 +1704962455,1704962455,32.84645140459402 +1704962460,1704962460,57.36552309310154 +1704962465,1704962465,16.290688790757212 +1704962515,1704962515,40.84791171267133 +1704962520,1704962520,83.39034752391616 +1704962525,1704962525,85.71516127093128 +1704962530,1704962530,2.066604671174066 +1704962535,1704962535,5.771345815801765 +1704962575,1704962575,30.659396375442803 +1704962580,1704962580,58.37778219880314 +1704962585,1704962585,53.78916665768865 +1704962590,1704962590,43.30204929111255 +1704962665,1704962665,68.35509803913395 +1704962670,1704962670,18.64905150803021 +1704962675,1704962675,68.99079347869481 +1704962680,1704962680,92.23762960132306 +1704962685,1704962685,23.286260517208767 +1704962730,1704962730,32.76475518346297 +1704962735,1704962735,84.08178107102448 +1704962740,1704962740,51.872221980505316 +1704962745,1704962745,62.45384513358972 +1704962800,1704962800,86.92672764054453 +1704962805,1704962805,24.30608639284334 +1704962810,1704962810,25.063953921707515 +1704962815,1704962815,99.3547739658338 +1704962820,1704962820,20.11281850616754 +1704962880,1704962880,46.942872251216784 +1704962885,1704962885,53.845628659596265 +1704962890,1704962890,72.49945815156826 +1704962895,1704962895,69.62556262925534 +1704962940,1704962940,9.813774066460834 +1704962945,1704962945,9.838604170769639 +1704962950,1704962950,51.09101471896914 +1704962955,1704962955,14.115010998934086 +1704962960,1704962960,12.262345375057304 +1704963005,1704963005,5.977793421928856 +1704963010,1704963010,58.54061542889597 +1704963015,1704963015,63.49220594850782 +1704963020,1704963020,55.69567030417725 +1704963045,1704963045,25.53066761723842 +1704963050,1704963050,33.542549398503795 +1704963055,1704963055,89.46698354421527 +1704963060,1704963060,53.42232627772779 +1704963065,1704963065,58.834764654224436 +1704963115,1704963115,93.7948929764662 +1704963120,1704963120,97.67881435125454 +1704963125,1704963125,57.674308140701584 +1704963130,1704963130,96.42748720324752 +1704963180,1704963180,44.75364465238064 +1704963185,1704963185,8.92222580817087 +1704963190,1704963190,75.53927920094551 +1704963195,1704963195,98.65015630640667 +1704963200,1704963200,65.10186503198575 +1704963245,1704963245,89.8520612392 +1704963250,1704963250,86.17388505207822 +1704963255,1704963255,78.42409864296872 +1704963260,1704963260,30.516156507254433 +1704963310,1704963310,26.803468329184955 +1704963315,1704963315,24.96994481516358 +1704963320,1704963320,92.80689810916273 +1704963325,1704963325,80.25330381338655 +1704963330,1704963330,42.39548677392636 +1704963400,1704963400,22.16924751218512 +1704963405,1704963405,72.3013152258513 +1704963410,1704963410,73.91412097991004 +1704963415,1704963415,2.189354851282277 +1704963465,1704963465,30.44107963396704 +1704963470,1704963470,97.1103998184077 +1704963475,1704963475,96.66778719904002 +1704963480,1704963480,22.912372132052074 +1704963485,1704963485,10.20442746292689 +1704963555,1704963555,59.49781590260186 +1704963560,1704963560,61.20315078897105 +1704963565,1704963565,72.05512891404707 +1704963570,1704963570,68.45428183997902 +1704963620,1704963620,73.44346936294374 +1704963625,1704963625,94.25384188970713 +1704963630,1704963630,96.25296734975008 +1704963635,1704963635,51.789994730513676 +1704963640,1704963640,97.63695190574195 +1704963680,1704963680,42.225106865954196 +1704963685,1704963685,22.708152281242487 +1704963690,1704963690,92.16699026157058 +1704963695,1704963695,8.087999691864178 +1704963745,1704963745,20.972625484493257 +1704963750,1704963750,1.9406052925952544 +1704963755,1704963755,60.22586855615933 +1704963760,1704963760,80.97058358381675 +1704963765,1704963765,51.910923414454224 +1704963815,1704963815,38.13869281550439 +1704963820,1704963820,83.989008551633 +1704963825,1704963825,69.18450851930554 +1704963830,1704963830,59.17528771493288 +1704963875,1704963875,5.562914475542369 +1704963880,1704963880,4.910646045830602 +1704963885,1704963885,19.22772889007235 +1704963890,1704963890,91.2782951623862 +1704963895,1704963895,41.114576619462895 +1704963945,1704963945,90.83903144132336 +1704963950,1704963950,51.85115563712658 +1704963955,1704963955,36.350351304383366 +1704963960,1704963960,21.45758357487204 +1704964025,1704964025,36.33311371569611 +1704964030,1704964030,87.3073724491419 +1704964035,1704964035,40.175152002053046 +1704964040,1704964040,38.9320668198923 +1704964045,1704964045,10.775517135112711 +1704964050,1704964050,85.32349715467944 +1704964055,1704964055,77.52272798959694 +1704964070,1704964070,24.753509594202015 +1704964075,1704964075,20.55966611661979 +1704964145,1704964145,20.256893199874394 +1704964150,1704964150,36.36964340785379 +1704964155,1704964155,41.75565167675364 +1704964160,1704964160,32.00759667804702 +1704964165,1704964165,17.47096686497198 +1704964170,1704964170,68.69154200572483 +1704964175,1704964175,11.122342768371428 +1704964220,1704964220,61.75011907323725 +1704964225,1704964225,69.81808187276062 +1704964280,1704964280,93.96586400343611 +1704964285,1704964285,33.83946944788594 +1704964290,1704964290,10.498310653864962 +1704964295,1704964295,30.30441237085848 +1704964300,1704964300,26.904219460364676 +1704964305,1704964305,69.33059575210942 +1704964310,1704964310,32.847521200530984 +1704964325,1704964325,8.806001431942956 +1704964330,1704964330,69.80005921836396 +1704964365,1704964365,99.89226374276453 +1704964370,1704964370,34.465045564437105 +1704964375,1704964375,10.602131366161494 +1704964380,1704964380,60.45685602140279 +1704964385,1704964385,39.91683930589114 +1704964390,1704964390,86.97415716329127 +1704964395,1704964395,32.961157788010574 +1704964435,1704964435,5.606555634800559 +1704964440,1704964440,64.00235527064596 +1704964510,1704964510,16.72138720941405 +1704964515,1704964515,48.80701467448459 +1704964520,1704964520,63.65684274930364 +1704964525,1704964525,63.015319473739616 +1704964530,1704964530,38.58428382637887 +1704964535,1704964535,0.5625442232459199 +1704964540,1704964540,64.83678825806415 +1704964555,1704964555,5.5014191214786345 +1704964560,1704964560,94.10846584471845 +1704964625,1704964625,83.54329983192449 +1704964630,1704964630,87.8702965003197 +1704964635,1704964635,64.79734503481987 +1704964640,1704964640,98.52940261395699 +1704964645,1704964645,78.47053111012 +1704964650,1704964650,29.724097275420615 +1704964655,1704964655,45.14723573321453 +1704964695,1704964695,26.612749392261414 +1704964700,1704964700,43.141886690646544 +1704964755,1704964755,58.31571541446774 +1704964760,1704964760,35.67848743791683 +1704964765,1704964765,67.35036248211141 +1704964770,1704964770,92.97067467847931 +1704964775,1704964775,36.75936189985972 +1704964780,1704964780,83.24515009410266 +1704964785,1704964785,47.83519270878814 +1704964800,1704964800,38.79058638001086 +1704964805,1704964805,92.01209668806698 +1704964865,1704964865,6.417872463736707 +1704964870,1704964870,80.4918407441795 +1704964875,1704964875,95.55784139602291 +1704964880,1704964880,60.209690131393636 +1704964885,1704964885,41.09830238572781 +1704964890,1704964890,67.403885748167 +1704964895,1704964895,2.6430486687209154 +1704964930,1704964930,1.215643476613415 +1704964935,1704964935,21.63626570624616 +1704964995,1704964995,58.861291294271524 +1704965000,1704965000,3.6067443767457408 +1704965005,1704965005,52.71935799944786 +1704965010,1704965010,86.67409449611623 +1704965015,1704965015,48.290421262125925 +1704965020,1704965020,21.366503978809646 +1704965025,1704965025,55.00694635722569 +1704965040,1704965040,20.743359745567634 +1704965045,1704965045,87.04299157429234 +1704965105,1704965105,72.26049012051173 +1704965110,1704965110,45.487867346575996 +1704965115,1704965115,88.38696332966212 +1704965120,1704965120,46.185863868796 +1704965125,1704965125,95.93107963709741 +1704965130,1704965130,98.6899040281518 +1704965135,1704965135,29.738282904451562 +1704965170,1704965170,5.156806370606959 +1704965175,1704965175,27.820768543805407 +1704965230,1704965230,87.94285167149089 +1704965235,1704965235,35.874494776470264 +1704965240,1704965240,49.97186250252897 +1704965245,1704965245,31.849908703400143 +1704965250,1704965250,32.24621614991152 +1704965255,1704965255,84.27513105470685 +1704965260,1704965260,14.492579460678146 +1704965280,1704965280,54.39874152435705 +1704965285,1704965285,6.614227461432332 +1704965345,1704965345,2.34590076874579 +1704965350,1704965350,92.24940930569309 +1704965355,1704965355,97.34692406271463 +1704965360,1704965360,38.1170110129418 +1704965365,1704965365,59.46505439333989 +1704965370,1704965370,16.171103755349858 +1704965375,1704965375,40.81629590222412 +1704965405,1704965405,19.54048589505968 +1704965410,1704965410,43.17692971373934 +1704965470,1704965470,53.027809751521445 +1704965475,1704965475,32.08645156955482 +1704965480,1704965480,7.3852653497703535 +1704965485,1704965485,86.82272461112879 +1704965490,1704965490,89.64004159752832 +1704965495,1704965495,85.63294011252175 +1704965500,1704965500,88.61398309022269 +1704965510,1704965510,67.8026955026476 +1704965515,1704965515,96.59837451221003 +1704965575,1704965575,42.92246405918944 +1704965580,1704965580,17.06619072623967 +1704965585,1704965585,99.86169334492038 +1704965590,1704965590,59.83526097723556 +1704965595,1704965595,80.29552074794819 +1704965600,1704965600,87.7797701413989 +1704965605,1704965605,4.769333280058996 +1704965615,1704965615,61.059688120126886 +1704965620,1704965620,61.35689500872101 +1704965660,1704965660,58.27633645172128 +1704965665,1704965665,29.20952796993246 +1704965670,1704965670,38.269728065871945 +1704965675,1704965675,50.84468672112359 +1704965680,1704965680,36.19983070276338 +1704965685,1704965685,90.08340634137815 +1704965690,1704965690,66.50297355809732 +1704965705,1704965705,85.98993657331387 +1704965710,1704965710,68.39146779985883 +1704965750,1704965750,41.20200265070798 +1704965755,1704965755,63.33011748249857 +1704965760,1704965760,98.61371187836697 +1704965765,1704965765,84.4005792831073 +1704965770,1704965770,92.89857027853134 +1704965775,1704965775,82.50969139396638 +1704965780,1704965780,60.23321108072693 +1704965795,1704965795,47.472025474302995 +1704965800,1704965800,28.901059818606644 +1704965835,1704965835,47.03334320471737 +1704965840,1704965840,37.56866262298575 +1704965845,1704965845,90.14225898303194 +1704965850,1704965850,4.444414300225286 +1704965855,1704965855,52.89380449877255 +1704965860,1704965860,76.014148204873 +1704965865,1704965865,38.145626949483294 +1704965880,1704965880,50.25971859633558 +1704965885,1704965885,11.550868620245158 +1704965950,1704965950,69.36518582818924 +1704965955,1704965955,58.18292507272429 +1704965960,1704965960,9.058480324475793 +1704965965,1704965965,96.90632786035754 +1704965970,1704965970,6.994400461357742 +1704965975,1704965975,58.23821338111337 +1704965980,1704965980,60.731074166981024 +1704965990,1704965990,61.98087714240915 +1704965995,1704965995,58.82103711850445 +1704966030,1704966030,26.383233481658984 +1704966035,1704966035,52.57609684446783 +1704966040,1704966040,27.553458517430617 +1704966045,1704966045,96.61756942914947 +1704966050,1704966050,51.320493287295974 +1704966055,1704966055,60.51345000230811 +1704966060,1704966060,75.1886336940714 +1704966075,1704966075,85.2597070634049 +1704966080,1704966080,57.282354268266886 +1704966115,1704966115,91.4832039035943 +1704966120,1704966120,14.701939656895824 +1704966125,1704966125,78.73603629027718 +1704966130,1704966130,91.95639785700962 +1704966135,1704966135,34.56005673694559 +1704966140,1704966140,98.54726624509313 +1704966145,1704966145,10.26756511230743 +1704966165,1704966165,92.01576448880473 +1704966170,1704966170,23.846164490820463 +1704966225,1704966225,90.89744809596974 +1704966230,1704966230,81.9169211902689 +1704966235,1704966235,1.789441503587319 +1704966240,1704966240,29.182436830731497 +1704966245,1704966245,9.858087080463019 +1704966250,1704966250,36.85400004084028 +1704966255,1704966255,74.11552300346777 +1704966270,1704966270,90.37560846560709 +1704966275,1704966275,33.07345312546883 +1704966335,1704966335,32.6633654178482 +1704966340,1704966340,35.24478727156916 +1704966345,1704966345,51.14161921144385 +1704966350,1704966350,92.08841221632639 +1704966355,1704966355,65.97411481797984 +1704966360,1704966360,27.91532436871379 +1704966365,1704966365,16.25083491940298 +1704966380,1704966380,40.165283138861305 +1704966385,1704966385,31.483468959544247 +1704966465,1704966465,51.33615056540963 +1704966470,1704966470,92.91747108232038 +1704966475,1704966475,18.565193957052063 +1704966480,1704966480,95.14997505077402 +1704966485,1704966485,54.3153408393001 +1704966490,1704966490,57.98924022528396 +1704966495,1704966495,11.949803087676546 +1704966510,1704966510,12.125284228245592 +1704966515,1704966515,97.62493030055388 +1704966545,1704966545,89.88234035253501 +1704966550,1704966550,28.793989336327243 +1704966555,1704966555,54.732484397590184 +1704966560,1704966560,6.386407751193913 +1704966565,1704966565,26.19345109879082 +1704966570,1704966570,88.17492076782013 +1704966575,1704966575,52.241409564149556 +1704966610,1704966610,14.541845213639991 +1704966615,1704966615,1.7612262730560047 +1704966675,1704966675,71.47428169899624 +1704966680,1704966680,70.30653831081392 +1704966685,1704966685,18.34760727849445 +1704966690,1704966690,77.6767917690222 +1704966695,1704966695,51.07930940322637 +1704966700,1704966700,60.146544106115094 +1704966705,1704966705,69.23842466688515 +1704966735,1704966735,24.345187036913117 +1704966740,1704966740,81.16014376701234 +1704966795,1704966795,52.530705243602824 +1704966800,1704966800,43.492150629646765 +1704966805,1704966805,55.40425980117259 +1704966810,1704966810,49.549249846669156 +1704966815,1704966815,58.36411628676406 +1704966820,1704966820,99.47544777504007 +1704966825,1704966825,69.92658158554111 +1704966865,1704966865,21.41165833754457 +1704966870,1704966870,48.57161445414964 +1704966925,1704966925,71.9762522427484 +1704966930,1704966930,57.67560145230196 +1704966935,1704966935,82.91235861142836 +1704966940,1704966940,70.98380585678179 +1704966945,1704966945,78.27986872778982 +1704966950,1704966950,69.29313834815737 +1704966955,1704966955,55.894060696370495 +1704966995,1704966995,86.98374919853536 +1704967000,1704967000,17.391995277933326 +1704967055,1704967055,39.31076245913145 +1704967060,1704967060,10.206355231843677 +1704967065,1704967065,30.367826541097376 +1704967070,1704967070,48.74942342600404 +1704967075,1704967075,6.348996619125158 +1704967080,1704967080,17.647878149065132 +1704967085,1704967085,77.05293415419463 +1704967115,1704967115,43.087282534281776 +1704967120,1704967120,10.264839027205053 +1704967155,1704967155,39.344071501793266 +1704967160,1704967160,81.06099173861585 +1704967165,1704967165,33.56849002828901 +1704967170,1704967170,61.693740581052516 +1704967175,1704967175,54.950985477487414 +1704967180,1704967180,47.01413479895978 +1704967185,1704967185,15.37901970873139 +1704967205,1704967205,36.328227600199185 +1704967210,1704967210,83.54195184657053 +1704967245,1704967245,62.770182328334286 +1704967250,1704967250,15.538557450848234 +1704967255,1704967255,11.52170226128597 +1704967260,1704967260,33.00587346343923 +1704967265,1704967265,58.86461943687857 +1704967270,1704967270,50.518464497726825 +1704967275,1704967275,45.58274638093515 +1704967290,1704967290,61.35098148778454 +1704967295,1704967295,6.184070050497104 +1704967335,1704967335,95.47938826762915 +1704967340,1704967340,45.68334843035572 +1704967345,1704967345,57.51628812740128 +1704967350,1704967350,32.100609821440315 +1704967355,1704967355,31.95416539461452 +1704967360,1704967360,31.359642347796914 +1704967365,1704967365,28.230233470016763 +1704967375,1704967375,91.2874114856834 +1704967380,1704967380,30.776959513479596 +1704967440,1704967440,26.91275483452886 +1704967445,1704967445,27.12674965726403 +1704967450,1704967450,13.500113685993231 +1704967455,1704967455,2.2927680093275393 +1704967460,1704967460,31.325736717146814 +1704967465,1704967465,22.361228074092498 +1704967470,1704967470,16.510892137624644 +1704967490,1704967490,21.92873838392535 +1704967495,1704967495,38.130701236752586 +1704967500,1704967500,90.61760499651386 +1704967505,1704967505,80.88995607233753 +1704967510,1704967510,72.02329594351788 +1704967515,1704967515,99.64639608187898 +1704967545,1704967545,89.577862108529 +1704967550,1704967550,36.14321614243528 +1704967555,1704967555,57.689569209753955 +1704967590,1704967590,77.0922826258474 +1704967595,1704967595,10.058558241450633 +1704967600,1704967600,59.345536500668715 +1704967605,1704967605,20.96837418498395 +1704967610,1704967610,73.1550291567936 +1704967615,1704967615,81.50774219128844 +1704967635,1704967635,9.606404864744334 +1704967640,1704967640,68.6268525623697 +1704967645,1704967645,19.299434703833075 +1704967675,1704967675,44.57810221770689 +1704967680,1704967680,47.26702492696795 +1704967685,1704967685,94.30924711527015 +1704967690,1704967690,16.13853717175492 +1704967695,1704967695,40.86834121400981 +1704967700,1704967700,50.502008267586774 +1704967715,1704967715,71.3386393725206 +1704967720,1704967720,35.0136022394663 +1704967725,1704967725,86.63285804579233 +1704967760,1704967760,94.36124807994165 +1704967765,1704967765,70.00106575982429 +1704967770,1704967770,97.02442180803308 +1704967775,1704967775,54.42081371811972 +1704967780,1704967780,20.540987153498836 +1704967785,1704967785,84.41902803506063 +1704967805,1704967805,27.435053690964995 +1704967810,1704967810,26.44764100178636 +1704967815,1704967815,27.740025251463084 +1704967870,1704967870,5.886757916532215 +1704967875,1704967875,5.137182643903426 +1704967880,1704967880,80.32801373907485 +1704967885,1704967885,13.126643636940095 +1704967890,1704967890,84.43971193868443 +1704967895,1704967895,66.37707635823496 +1704967915,1704967915,66.08703681276141 +1704967920,1704967920,72.20294702411796 +1704967925,1704967925,81.67904508733545 +1704967955,1704967955,93.22504085660351 +1704967960,1704967960,36.536450451669275 +1704967965,1704967965,59.89579621528497 +1704967970,1704967970,50.95876732638174 +1704967975,1704967975,36.85446475312162 +1704967980,1704967980,45.007272267624245 +1704968000,1704968000,2.491008254830407 +1704968005,1704968005,11.884873968222076 +1704968010,1704968010,46.12336621834373 +1704968045,1704968045,87.88225948977359 +1704968050,1704968050,76.57992841708244 +1704968055,1704968055,63.55205725406068 +1704968060,1704968060,37.1259017186687 +1704968065,1704968065,80.1404756896343 +1704968070,1704968070,29.210126344369126 +1704968110,1704968110,61.38515617659807 +1704968115,1704968115,64.04870185253995 +1704968120,1704968120,10.757073096113846 +1704968170,1704968170,98.92373423890056 +1704968175,1704968175,0.052056613299733545 +1704968180,1704968180,75.12300277266958 +1704968185,1704968185,1.2444196287525355 +1704968190,1704968190,77.4449549450979 +1704968195,1704968195,74.92982897288549 +1704968215,1704968215,33.866062216155115 +1704968220,1704968220,70.14481466000385 +1704968225,1704968225,32.49757641381077 +1704968280,1704968280,91.67147201457946 +1704968285,1704968285,34.6940948966582 +1704968290,1704968290,49.90980595107843 +1704968295,1704968295,88.9797836561339 +1704968300,1704968300,55.11413126579523 +1704968305,1704968305,54.69665943649329 +1704968345,1704968345,7.282563768424177 +1704968350,1704968350,22.495500333336782 +1704968355,1704968355,61.47691941212887 +1704968415,1704968415,74.6385749199595 +1704968420,1704968420,35.41542392864844 +1704968425,1704968425,25.62134006142439 +1704968430,1704968430,55.88431360455919 +1704968435,1704968435,22.380995852298756 +1704968440,1704968440,31.94997131808176 +1704968475,1704968475,6.4492213106377205 +1704968480,1704968480,47.756094983258926 +1704968485,1704968485,81.73779048421623 +1704968540,1704968540,70.80935354004119 +1704968545,1704968545,71.24873741522724 +1704968550,1704968550,57.212487677744264 +1704968555,1704968555,4.213216510100882 +1704968560,1704968560,38.28770387577806 +1704968565,1704968565,63.45518289260138 +1704968605,1704968605,73.95077049347547 +1704968610,1704968610,97.98620551078969 +1704968615,1704968615,12.755225424985706 +1704968665,1704968665,48.692988732511644 +1704968670,1704968670,94.9741475826632 +1704968675,1704968675,42.67720121608721 +1704968680,1704968680,23.0383483900778 +1704968685,1704968685,98.87046096596033 +1704968690,1704968690,61.475149922510944 +1704968705,1704968705,4.885908217117219 +1704968710,1704968710,15.634043568967659 +1704968715,1704968715,7.803135595551558 +1704968765,1704968765,83.04067808886687 +1704968770,1704968770,29.739834604275817 +1704968775,1704968775,36.09135808760235 +1704968780,1704968780,37.238147742891044 +1704968785,1704968785,90.24964614336754 +1704968790,1704968790,26.89059837143033 +1704968815,1704968815,92.21690620447234 +1704968820,1704968820,13.925832606020695 +1704968825,1704968825,59.93377709015398 +1704968860,1704968860,27.06123514222921 +1704968865,1704968865,81.67697264819338 +1704968870,1704968870,72.70368614755829 +1704968875,1704968875,75.50346164868573 +1704968880,1704968880,90.65643533614637 +1704968885,1704968885,91.89400975375173 +1704968905,1704968905,75.65587116003894 +1704968910,1704968910,72.99831609445118 +1704968915,1704968915,84.52566244132596 +1704968945,1704968945,94.26801616319628 +1704968950,1704968950,40.42282544368909 +1704968955,1704968955,96.21116538368524 +1704968960,1704968960,77.43390287414161 +1704968965,1704968965,99.90564142617269 +1704968970,1704968970,58.89000132581863 +1704968985,1704968985,33.4862077090145 +1704968990,1704968990,77.21758950739867 +1704968995,1704968995,81.28693623294225 +1704969030,1704969030,43.31257887002391 +1704969035,1704969035,14.781885725472554 +1704969040,1704969040,15.455412142653557 +1704969045,1704969045,94.98767020384864 +1704969050,1704969050,53.73694579746111 +1704969055,1704969055,51.10263010001168 +1704969070,1704969070,62.0229795153182 +1704969075,1704969075,8.69188651995273 +1704969080,1704969080,41.13693317670658 +1704969135,1704969135,27.989515211739423 +1704969140,1704969140,29.477913580774263 +1704969145,1704969145,8.288587709676754 +1704969150,1704969150,31.463126577791844 +1704969155,1704969155,63.85469971211079 +1704969160,1704969160,33.695926955249774 +1704969180,1704969180,63.471029932681844 +1704969185,1704969185,57.585009075661574 +1704969190,1704969190,43.60639548931775 +1704969225,1704969225,16.55476275267406 +1704969230,1704969230,73.33826036323399 +1704969235,1704969235,14.754672362983289 +1704969240,1704969240,42.105289366242495 +1704969245,1704969245,40.53260633417381 +1704969250,1704969250,6.686027480832724 +1704969265,1704969265,30.095791344052202 +1704969270,1704969270,66.09319055074813 +1704969275,1704969275,69.87955474862518 +1704969310,1704969310,53.1151797718553 +1704969315,1704969315,45.47131775558341 +1704969320,1704969320,34.022887996447835 +1704969325,1704969325,24.3032908702428 +1704969330,1704969330,78.24959192170559 +1704969335,1704969335,23.200374859614136 +1704969350,1704969350,85.80770201076757 +1704969355,1704969355,98.21408034938194 +1704969360,1704969360,81.73189125123098 +1704969415,1704969415,94.3343725311608 +1704969420,1704969420,54.803890654645734 +1704969425,1704969425,70.66542534329841 +1704969430,1704969430,24.152757453464503 +1704969435,1704969435,52.96981586279311 +1704969440,1704969440,75.1874232647631 +1704969465,1704969465,25.57043234153069 +1704969470,1704969470,33.076633051421844 +1704969475,1704969475,73.88514248282844 +1704969530,1704969530,99.93534091312642 +1704969535,1704969535,99.84619580463571 +1704969540,1704969540,41.1176908613259 +1704969545,1704969545,10.579942611974836 +1704969550,1704969550,32.88788805728542 +1704969555,1704969555,16.50718889544419 +1704969595,1704969595,4.256152639907851 +1704969600,1704969600,65.6983246049214 +1704969605,1704969605,86.98151450913434 +1704969655,1704969655,87.81429788747437 +1704969660,1704969660,40.7616746526659 +1704969665,1704969665,81.67275368445588 +1704969670,1704969670,66.8632846947182 +1704969675,1704969675,68.4841201394011 +1704969680,1704969680,53.17271063271875 +1704969695,1704969695,34.38801184657909 +1704969700,1704969700,50.67409735392433 +1704969705,1704969705,73.84221697833996 +1704969740,1704969740,86.49961733788285 +1704969745,1704969745,49.707807289056795 +1704969750,1704969750,88.78168000193102 +1704969755,1704969755,20.71202003011536 +1704969760,1704969760,71.53916400792343 +1704969765,1704969765,85.68556491462516 +1704969785,1704969785,39.74543474002894 +1704969790,1704969790,91.358993870628 +1704969795,1704969795,40.664857809194075 +1704969835,1704969835,63.939212040007966 +1704969840,1704969840,67.6000912245454 +1704969845,1704969845,22.483215912860523 +1704969850,1704969850,15.719100407582264 +1704969855,1704969855,46.487053304505 +1704969860,1704969860,0.48336688720758136 +1704969875,1704969875,1.5216140684790602 +1704969880,1704969880,7.124713084359014 +1704969885,1704969885,43.288350468807835 +1704969925,1704969925,87.33267594073814 +1704969930,1704969930,94.35920607555441 +1704969935,1704969935,4.702756456053258 +1704969940,1704969940,37.84143241307575 +1704969945,1704969945,42.38612763437737 +1704969950,1704969950,58.9702030622499 +1704969965,1704969965,19.143204659116975 +1704969970,1704969970,64.36008216681958 +1704969975,1704969975,93.7225915830699 +1704970035,1704970035,57.1308977265638 +1704970040,1704970040,16.366565720612837 +1704970045,1704970045,26.365397442277015 +1704970050,1704970050,37.74262055791455 +1704970055,1704970055,87.0135200381577 +1704970060,1704970060,90.31285453682943 +1704970080,1704970080,62.31265211080432 +1704970085,1704970085,33.32462380976649 +1704970090,1704970090,8.067065537523188 +1704970125,1704970125,89.44797395108635 +1704970130,1704970130,76.29184163852915 +1704970135,1704970135,39.78983256890226 +1704970140,1704970140,7.550324071982384 +1704970145,1704970145,4.098050776019891 +1704970150,1704970150,71.35685449577245 +1704970195,1704970195,1.5625467599455822 +1704970200,1704970200,3.076482393492719 +1704970205,1704970205,84.41597282340358 +1704970270,1704970270,81.82362115773134 +1704970275,1704970275,34.13796539433083 +1704970280,1704970280,7.060707649982245 +1704970285,1704970285,91.77846257246564 +1704970290,1704970290,16.32777997745255 +1704970295,1704970295,46.08939850975708 +1704970335,1704970335,86.42285873335676 +1704970340,1704970340,74.48824423225837 +1704970345,1704970345,15.32324059254112 +1704970405,1704970405,38.83483059937395 +1704970410,1704970410,55.855927607903496 +1704970415,1704970415,70.60289298902882 +1704970420,1704970420,35.06209642792737 +1704970425,1704970425,9.151352913735145 +1704970430,1704970430,63.219787489323934 +1704970455,1704970455,38.08927482795007 +1704970460,1704970460,15.190953463954571 +1704970465,1704970465,1.3679648804283406 +1704970535,1704970535,49.406314825222985 +1704970540,1704970540,98.47006144874531 +1704970545,1704970545,62.22938888027115 +1704970550,1704970550,20.188912920022283 +1704970555,1704970555,81.77561027689862 +1704970560,1704970560,26.864762666740937 +1704970580,1704970580,58.6001990432151 +1704970585,1704970585,90.74289846963428 +1704970590,1704970590,77.71025376319562 +1704970630,1704970630,80.62401701846066 +1704970635,1704970635,33.24782353721538 +1704970640,1704970640,24.712658718305246 +1704970645,1704970645,92.27161106927059 +1704970650,1704970650,64.58390401684527 +1704970655,1704970655,56.58821351281621 +1704970675,1704970675,60.96862863983876 +1704970680,1704970680,16.85072191888809 +1704970685,1704970685,33.346628585230995 +1704970725,1704970725,33.24978036956507 +1704970730,1704970730,88.80477071150311 +1704970735,1704970735,98.62352384902616 +1704970740,1704970740,13.799301261112607 +1704970745,1704970745,51.798997151731086 +1704970750,1704970750,20.457064857843264 +1704970770,1704970770,76.85947690891281 +1704970775,1704970775,32.073559135077666 +1704970780,1704970780,89.56488705449708 +1704970815,1704970815,13.246310919627701 +1704970820,1704970820,30.98053648270107 +1704970825,1704970825,96.29971549119968 +1704970830,1704970830,50.21209104690455 +1704970835,1704970835,81.42452624046138 +1704970840,1704970840,68.93130696476314 +1704970855,1704970855,41.87797179532896 +1704970860,1704970860,5.854232051426155 +1704970865,1704970865,83.78413387396351 +1704970955,1704970955,44.65694207711151 +1704970960,1704970960,30.976059884491914 +1704970965,1704970965,27.0756127860726 +1704970970,1704970970,41.434016648305416 +1704971000,1704971000,77.93068261484215 +1704971005,1704971005,67.36056132117628 +1704971010,1704971010,55.975586703544 +1704971040,1704971040,74.21118951484452 +1704971045,1704971045,35.3645503747891 +1704971050,1704971050,3.842980437382437 +1704971055,1704971055,80.43670313558512 +1704971060,1704971060,80.35044846365724 +1704971065,1704971065,13.142349373821238 +1704971110,1704971110,42.04270721065151 +1704971115,1704971115,4.045075143854849 +1704971120,1704971120,75.03547223269335 +1704971170,1704971170,14.001045789405332 +1704971175,1704971175,76.70880530268501 +1704971180,1704971180,52.92944191450416 +1704971185,1704971185,98.35196202030512 +1704971190,1704971190,7.551333458404342 +1704971195,1704971195,83.82164849119857 +1704971235,1704971235,34.46760433881989 +1704971240,1704971240,41.04568900899083 +1704971245,1704971245,47.01855725384447 +1704971300,1704971300,97.76629177823769 +1704971305,1704971305,76.62771049489774 +1704971310,1704971310,98.31775252885672 +1704971315,1704971315,68.08828227903105 +1704971320,1704971320,33.645411856423635 +1704971325,1704971325,85.6624167994825 +1704971365,1704971365,3.0023706371198333 +1704971370,1704971370,24.69206104329974 +1704971375,1704971375,47.7700496153869 +1704971415,1704971415,87.62480088749662 +1704971420,1704971420,33.11583826557059 +1704971425,1704971425,68.45088785760555 +1704971430,1704971430,32.450719643981905 +1704971435,1704971435,85.38136567657114 +1704971440,1704971440,66.06201244685884 +1704971485,1704971485,66.03435832701582 +1704971490,1704971490,2.03587010630899 +1704971495,1704971495,91.06210831754844 +1704971550,1704971550,65.43720747399934 +1704971555,1704971555,36.49440764827104 +1704971560,1704971560,57.944695708007075 +1704971565,1704971565,28.15061202852698 +1704971570,1704971570,37.36234855418804 +1704971575,1704971575,64.79284835286542 +1704971595,1704971595,17.678155401282 +1704971600,1704971600,23.76810212729683 +1704971605,1704971605,40.102403004225415 +1704971675,1704971675,76.70565499937229 +1704971680,1704971680,57.92209076300418 +1704971685,1704971685,42.924824378701906 +1704971690,1704971690,56.18706639045246 +1704971695,1704971695,3.0767616379963725 +1704971700,1704971700,3.563794303047596 +1704971720,1704971720,64.99949722430483 +1704971725,1704971725,76.62108676060227 +1704971730,1704971730,92.0152324182398 +1704971785,1704971785,32.099920459503295 +1704971790,1704971790,2.5572176621081466 +1704971795,1704971795,9.389965111923038 +1704971800,1704971800,51.44726348597995 +1704971805,1704971805,29.859611323078774 +1704971810,1704971810,69.58305051485235 +1704971850,1704971850,83.73642224456279 +1704971855,1704971855,82.21931037306851 +1704971860,1704971860,33.34649953864927 +1704971915,1704971915,16.25378461283247 +1704971920,1704971920,45.44916940199021 +1704971925,1704971925,34.05912947855509 +1704971930,1704971930,88.05355146053344 +1704971935,1704971935,6.931030627576584 +1704971940,1704971940,68.64846500064021 +1704971980,1704971980,6.862389575292493 +1704971985,1704971985,0.2759988779738376 +1704971990,1704971990,33.398530379085244 +1704972065,1704972065,99.46664223366221 +1704972070,1704972070,51.25517979968321 +1704972075,1704972075,8.078777866609455 +1704972080,1704972080,9.412626643740262 +1704972085,1704972085,58.98593318185986 +1704972090,1704972090,48.40905217186805 +1704972100,1704972100,15.97818110845537 +1704972105,1704972105,46.96522631486606 +1704972110,1704972110,31.35728907673362 +1704972170,1704972170,32.938111629409825 +1704972175,1704972175,72.31763887302564 +1704972180,1704972180,5.079204983415453 +1704972185,1704972185,85.5448998321104 +1704972190,1704972190,44.53067682129662 +1704972195,1704972195,81.9188376945289 +1704972240,1704972240,89.3474572749018 +1704972245,1704972245,75.8860592282082 +1704972250,1704972250,36.715194883108246 +1704972300,1704972300,16.72705390025142 +1704972305,1704972305,69.49382919409388 +1704972310,1704972310,14.486526945964274 +1704972315,1704972315,33.0783277984245 +1704972320,1704972320,34.49494982018552 +1704972325,1704972325,7.047280156490188 +1704972355,1704972355,13.071628809624192 +1704972360,1704972360,96.4254833234569 +1704972365,1704972365,8.905050076094945 +1704972425,1704972425,33.60436229177216 +1704972430,1704972430,65.42094537674973 +1704972435,1704972435,26.891921438849288 +1704972440,1704972440,67.92319428013667 +1704972445,1704972445,61.35934518497172 +1704972450,1704972450,85.49711355321095 +1704972465,1704972465,23.919671604332027 +1704972470,1704972470,93.21123961124135 +1704972475,1704972475,60.197989997754306 +1704972530,1704972530,93.9120624735339 +1704972535,1704972535,52.262077178160006 +1704972540,1704972540,3.621913898949769 +1704972545,1704972545,32.28782519789899 +1704972550,1704972550,95.99014226693892 +1704972555,1704972555,61.846168212300036 +1704972595,1704972595,88.18357272986553 +1704972600,1704972600,16.249388708111233 +1704972605,1704972605,67.05973392530107 +1704972660,1704972660,61.38103374077319 +1704972665,1704972665,67.66369117894484 +1704972670,1704972670,44.72094623976537 +1704972675,1704972675,84.14445621551324 +1704972680,1704972680,85.58540287561654 +1704972685,1704972685,2.119505998917115 +1704972720,1704972720,91.18104906126463 +1704972725,1704972725,28.466369309566687 +1704972730,1704972730,53.9392560528067 +1704972785,1704972785,56.87646014654365 +1704972790,1704972790,84.01923003481625 +1704972795,1704972795,76.59413512400984 +1704972800,1704972800,87.40238709809243 +1704972805,1704972805,89.05091525437258 +1704972810,1704972810,71.26756693841307 +1704972845,1704972845,48.40614612989672 +1704972850,1704972850,81.83254282117855 +1704972855,1704972855,33.98801487003092 +1704972905,1704972905,61.08959212210635 +1704972910,1704972910,15.724573361659056 +1704972915,1704972915,7.473104904954342 +1704972920,1704972920,11.649086751779292 +1704972925,1704972925,11.042723487356032 +1704972930,1704972930,55.10623242134146 +1704972955,1704972955,32.54102024133464 +1704972960,1704972960,18.460135429125334 +1704972965,1704972965,64.78467030447976 +1704973035,1704973035,49.410503057066315 +1704973040,1704973040,51.04206690664637 +1704973045,1704973045,72.20696952363393 +1704973050,1704973050,44.92516419077366 +1704973055,1704973055,83.15469882850107 +1704973060,1704973060,32.48619564190416 +1704973075,1704973075,66.89567302944968 +1704973080,1704973080,77.96988912081169 +1704973085,1704973085,56.78816982404646 +1704973155,1704973155,7.724966627414709 +1704973160,1704973160,4.367782382446195 +1704973165,1704973165,58.3609232746208 +1704973170,1704973170,99.08911980531673 +1704973175,1704973175,7.112518078783681 +1704973180,1704973180,94.89526579555863 +1704973195,1704973195,48.175838072215036 +1704973200,1704973200,34.81505291954613 +1704973205,1704973205,88.3116985964584 +1704973260,1704973260,80.68454750603028 +1704973265,1704973265,98.09499340719766 +1704973270,1704973270,24.576407243615115 +1704973275,1704973275,6.720602838774214 +1704973280,1704973280,87.34796832079647 +1704973285,1704973285,45.26181520794591 +1704973330,1704973330,9.288818920417953 +1704973335,1704973335,2.9050895614868066 +1704973340,1704973340,18.39818996580376 +1704973395,1704973395,57.534013058028066 +1704973400,1704973400,53.62989705704586 +1704973405,1704973405,80.0654729478518 +1704973410,1704973410,49.689746287133694 +1704973415,1704973415,17.164196020094757 +1704973420,1704973420,67.0859288481336 +1704973435,1704973435,23.78417446731509 +1704973440,1704973440,11.515012405844738 +1704973445,1704973445,91.92973667641546 +1704973500,1704973500,87.00980636266863 +1704973505,1704973505,53.108958527833906 +1704973510,1704973510,4.778727798003912 +1704973515,1704973515,28.769546171079174 +1704973520,1704973520,18.84181094191798 +1704973525,1704973525,76.2612552069222 +1704973565,1704973565,58.13085484957226 +1704973570,1704973570,28.94625997188639 +1704973575,1704973575,10.399085240339112 +1704973635,1704973635,72.4886443932215 +1704973640,1704973640,68.58676895916429 +1704973645,1704973645,19.815166462004374 +1704973650,1704973650,65.26975870974066 +1704973655,1704973655,89.66093539512508 +1704973660,1704973660,10.227451247245279 +1704973685,1704973685,84.25743375402615 +1704973690,1704973690,52.91622751498056 +1704973695,1704973695,50.94312384602344 +1704973775,1704973775,58.65094217093547 +1704973780,1704973780,17.248625189697677 +1704973785,1704973785,58.284323893488875 +1704973790,1704973790,36.466132446453415 +1704973795,1704973795,2.0527826174298824 +1704973800,1704973800,63.2381461927761 +1704973820,1704973820,69.08431709693629 +1704973825,1704973825,32.72128801303554 +1704973830,1704973830,14.556969293376588 +1704973895,1704973895,87.36185933585296 +1704973900,1704973900,4.544477408773718 +1704973905,1704973905,5.069451322499841 +1704973910,1704973910,84.41371183971657 +1704973915,1704973915,42.452159562835426 +1704973920,1704973920,50.30286749525339 +1704973960,1704973960,86.97170197119542 +1704973965,1704973965,78.55725265411148 +1704973970,1704973970,26.416828866266894 +1704974035,1704974035,54.9619383005194 +1704974040,1704974040,45.18207800680122 +1704974045,1704974045,38.90459989806152 +1704974050,1704974050,89.44255495730606 +1704974055,1704974055,2.0705927941227498 +1704974060,1704974060,36.488989665288116 +1704974095,1704974095,35.013430636810526 +1704974100,1704974100,78.25718672219901 +1704974105,1704974105,12.67647600341667 +1704974145,1704974145,85.34965775204132 +1704974150,1704974150,86.99477549197123 +1704974155,1704974155,45.858310663818834 +1704974160,1704974160,37.74482001916921 +1704974165,1704974165,5.972205252426943 +1704974170,1704974170,75.36228107289939 +1704974205,1704974205,0.28241276669265236 +1704974210,1704974210,19.503892270949752 +1704974215,1704974215,56.40162093576285 +1704974270,1704974270,95.90323075753768 +1704974275,1704974275,7.285173373306608 +1704974280,1704974280,97.9902340027234 +1704974285,1704974285,66.91749395768845 +1704974290,1704974290,58.42158931907875 +1704974295,1704974295,74.7787474357748 +1704974315,1704974315,67.23563434576309 +1704974320,1704974320,33.700351370177714 +1704974325,1704974325,24.519645396717017 +1704974385,1704974385,18.46084215569338 +1704974390,1704974390,99.6420077964022 +1704974395,1704974395,66.38580805497772 +1704974400,1704974400,95.30066460748814 +1704974405,1704974405,33.89922937651403 +1704974410,1704974410,62.44228934515221 +1704974460,1704974460,77.023315045867 +1704974465,1704974465,74.52594028213107 +1704974470,1704974470,23.534061583082398 +1704974475,1704974475,62.03018460768256 +1704974480,1704974480,10.11248026058883 +1704974485,1704974485,23.74931390777878 +1704974490,1704974490,19.22653300857 +1704974495,1704974495,73.93513680502771 +1704974500,1704974500,55.799142286894025 +1704974505,1704974505,79.77355896908102 +1704974510,1704974510,25.22383934247099 +1704974515,1704974515,37.601573074354214 +1704974520,1704974520,42.75971169309331 +1704974525,1704974525,23.44730158681607 +1704974530,1704974530,6.014551703710458 +1704974535,1704974535,90.06883710580857 +1704974540,1704974540,48.501146730748665 +1704974545,1704974545,50.355463711960184 +1704974550,1704974550,42.9444393107399 +1704974555,1704974555,6.425128211346776 +1704974560,1704974560,86.47587135596443 +1704974565,1704974565,21.804636410205912 +1704974570,1704974570,32.63897888680185 +1704974575,1704974575,99.96838665037772 +1704974580,1704974580,4.83359679278329 +1704974585,1704974585,48.23796756281802 +1704974590,1704974590,15.798864262077982 +1704974595,1704974595,89.29012781366525 +1704974600,1704974600,69.29789700265545 +1704974605,1704974605,3.310651039626067 +1704974610,1704974610,63.8552697124785 +1704974615,1704974615,31.199544126952095 +1704974620,1704974620,44.57723545793425 +1704974625,1704974625,1.8596864612866693 +1704974630,1704974630,68.47108767069423 +1704974635,1704974635,5.029684559818359 +1704974640,1704974640,33.823961775551325 +1704974645,1704974645,9.445066039097071 +1704974650,1704974650,31.43549993358281 +1704974655,1704974655,32.13791377444899 +1704974660,1704974660,75.51727364064747 +1704974665,1704974665,80.2766057918516 +1704974670,1704974670,19.686421405438924 +1704974675,1704974675,97.56674406322568 +1704974680,1704974680,65.91095914642608 +1704974685,1704974685,68.39784561404853 +1704974690,1704974690,28.75534504663364 +1704974695,1704974695,29.673360892029855 +1704974700,1704974700,15.83126376831554 +1704974705,1704974705,94.7824523812187 +1704974710,1704974710,65.52300050980966 +1704974715,1704974715,13.892013894089029 +1704974720,1704974720,82.51280901678729 +1704974725,1704974725,54.84410296587801 +1704974730,1704974730,31.573552946130658 +1704974735,1704974735,63.603266502987225 +1704974740,1704974740,15.9047240257292 +1704974745,1704974745,64.21987649087775 +1704974750,1704974750,89.60283523153144 +1704974755,1704974755,15.509590116434957 +1704974760,1704974760,46.53005358428807 +1704974765,1704974765,36.950599426300315 +1704974770,1704974770,68.5291666012332 +1704974775,1704974775,69.24694506166871 +1704974780,1704974780,1.7473351867851816 +1704974785,1704974785,34.43430691095538 +1704974790,1704974790,54.29317494154117 +1704974795,1704974795,57.12273367853672 +1704974800,1704974800,9.645186967541164 +1704974805,1704974805,96.70195442325678 +1704974810,1704974810,54.70816231086892 +1704974815,1704974815,3.322349849385653 +1704974820,1704974820,5.456133086405879 +1704974825,1704974825,71.03112563577237 +1704974830,1704974830,86.04505239704936 +1704974835,1704974835,20.354521149809056 +1704974840,1704974840,3.3617031569055267 +1704974845,1704974845,60.83779157619295 +1704974850,1704974850,92.0159575937932 +1704974855,1704974855,66.21627834708546 +1704974860,1704974860,13.357882298835689 +1704974865,1704974865,59.34585108431399 +1704974870,1704974870,51.3928946996264 +1704974875,1704974875,73.798073722912 +1704974880,1704974880,54.100286955695 +1704974885,1704974885,72.88873637728518 +1704974890,1704974890,34.5644981264742 +1704974895,1704974895,90.82414696048548 +1704974900,1704974900,50.86255673889647 +1704974905,1704974905,28.796927231889857 +1704974910,1704974910,83.64651745496145 +1704974915,1704974915,1.7082629081672351 +1704974920,1704974920,72.21952995672865 +1704974925,1704974925,35.85478231198675 +1704974930,1704974930,89.24770644048905 +1704974935,1704974935,82.27378920163943 +1704974940,1704974940,21.43549592898647 +1704974945,1704974945,29.645571756472087 +1704974950,1704974950,47.537096186618136 +1704974955,1704974955,25.749328717069375 +1704974960,1704974960,21.8400380173703 +1704974965,1704974965,19.60295660000144 +1704974970,1704974970,46.531373458644254 +1704974975,1704974975,87.46145246975493 +1704974980,1704974980,43.129338471649845 +1704974985,1704974985,36.692826070481 +1704974990,1704974990,55.427210122832406 +1704974995,1704974995,3.663873145855079 +1704975000,1704975000,83.03580463375833 +1704975005,1704975005,38.62403837003116 +1704975010,1704975010,81.0639699641573 +1704975015,1704975015,29.269687394406862 +1704975020,1704975020,29.74340438455919 +1704975025,1704975025,43.74742827606695 +1704975030,1704975030,56.597400826709375 +1704975035,1704975035,92.75286618537744 +1704975040,1704975040,56.07921480457419 +1704975045,1704975045,18.18739024593806 +1704975050,1704975050,99.02389086004445 +1704975055,1704975055,56.49325887493467 +1704975060,1704975060,80.52802260403811 +1704975065,1704975065,59.7661587836409 +1704975070,1704975070,91.07159162596477 +1704975075,1704975075,57.37645307309314 +1704975080,1704975080,98.403971717124 +1704975085,1704975085,30.591836462714273 +1704975090,1704975090,28.849305730234242 +1704975095,1704975095,30.72201922499055 +1704975100,1704975100,9.83981880829814 +1704975105,1704975105,5.887024990140266 +1704975110,1704975110,95.39482963063068 +1704975115,1704975115,61.06172523239899 +1704975120,1704975120,36.25318690654478 +1704975125,1704975125,48.364133237749776 +1704975130,1704975130,74.74450673720715 +1704975135,1704975135,25.784793641265445 +1704975140,1704975140,89.31738517459846 +1704975145,1704975145,72.92478406845177 +1704975150,1704975150,0.152928705352795 +1704975155,1704975155,40.521745886624785 +1704975160,1704975160,18.76895943819298 +1704975165,1704975165,85.34467955193111 +1704975170,1704975170,28.588349316344697 +1704975175,1704975175,68.44018502535307 +1704975180,1704975180,25.704981097167533 +1704975185,1704975185,35.21320304484308 +1704975190,1704975190,55.747535362038015 +1704975195,1704975195,24.267636051072138 +1704975200,1704975200,41.63373312629939 +1704975205,1704975205,84.84639733920773 +1704975210,1704975210,68.2525486717792 +1704975215,1704975215,20.947650042405076 +1704975220,1704975220,21.209199298184377 +1704975225,1704975225,63.26647328036763 +1704975230,1704975230,56.00090431413768 +1704975235,1704975235,85.20763554523003 +1704975240,1704975240,45.044349667111604 +1704975245,1704975245,20.87050715059744 +1704975250,1704975250,4.436566602722847 +1704975255,1704975255,34.475301671819395 +1704975260,1704975260,3.213407121277345 +1704975265,1704975265,32.671815812758844 +1704975270,1704975270,53.299639208226914 +1704975275,1704975275,51.157464701862786 +1704975280,1704975280,15.366760389267275 +1704975285,1704975285,94.34661426611149 +1704975290,1704975290,22.66038646962216 +1704975295,1704975295,90.8998978992336 +1704975300,1704975300,80.02962927117386 +1704975305,1704975305,81.38292572526986 +1704975310,1704975310,44.30391215070163 +1704975315,1704975315,13.942249800553252 +1704975320,1704975320,54.94271462874608 +1704975325,1704975325,62.1900853104815 +1704975330,1704975330,0.8949457520237125 +1704975335,1704975335,78.48519123930872 +1704975340,1704975340,58.22533273082643 +1704975345,1704975345,34.40310857400976 +1704975350,1704975350,99.4411118647511 +1704975355,1704975355,75.4061573512075 +1704975360,1704975360,50.62272057155703 +1704975365,1704975365,99.2048535296657 +1704975370,1704975370,11.788889847278373 +1704975375,1704975375,53.45016599673349 +1704975380,1704975380,89.18542174801752 +1704975385,1704975385,54.20938683025892 +1704975390,1704975390,66.14907033378374 +1704975395,1704975395,73.09191351196506 +1704975400,1704975400,80.14781590920155 +1704975405,1704975405,58.6390361614712 +1704975410,1704975410,32.70071311640987 +1704975415,1704975415,39.1939117535625 +1704975420,1704975420,23.484347730060552 +1704975425,1704975425,84.7721766926363 +1704975430,1704975430,36.151906026863834 +1704975435,1704975435,41.9980083928246 +1704975440,1704975440,64.67631823887959 +1704975445,1704975445,33.30242318769935 +1704975450,1704975450,59.27392709882208 +1704975455,1704975455,5.842734341332568 +1704975460,1704975460,79.47173782690857 +1704975465,1704975465,12.452973118675292 +1704975470,1704975470,77.31403795276528 +1704975475,1704975475,4.884850785234818 +1704975480,1704975480,12.626252242634205 +1704975485,1704975485,47.03916447460911 +1704975490,1704975490,75.93865845368444 +1704975495,1704975495,68.44019249644062 +1704975500,1704975500,50.44467854604798 +1704975505,1704975505,63.072395993422504 +1704975510,1704975510,50.74822442494196 +1704975515,1704975515,7.379617770410585 +1704975520,1704975520,33.45642776507752 +1704975525,1704975525,39.14384542419772 +1704975530,1704975530,79.75051368782272 +1704975535,1704975535,43.67539429103603 +1704975540,1704975540,95.85222056746692 +1704975545,1704975545,58.3983400976979 +1704975550,1704975550,30.965941618593952 +1704975555,1704975555,13.633654507428938 +1704975560,1704975560,14.619732198062607 +1704975565,1704975565,52.35259107459087 +1704975570,1704975570,37.580804611870846 +1704975575,1704975575,85.73958163993206 +1704975580,1704975580,26.154902237866974 +1704975585,1704975585,56.47050545714033 +1704975590,1704975590,44.000090323326035 +1704975595,1704975595,53.60334204458652 +1704975600,1704975600,16.767339709067464 +1704975605,1704975605,76.17290957940388 +1704975610,1704975610,39.86929670926669 +1704975615,1704975615,92.04027586612736 +1704975620,1704975620,88.7995695396954 +1704975625,1704975625,90.14006860992279 +1704975630,1704975630,17.523075732265212 +1704975635,1704975635,75.41762726466061 +1704975640,1704975640,84.88517814618574 +1704975645,1704975645,55.019155180386804 +1704975650,1704975650,69.095135357148 +1704975655,1704975655,83.75491307672782 +1704975660,1704975660,78.92695627550026 +1704975665,1704975665,46.63836262809109 +1704975670,1704975670,90.73128014320149 +1704975675,1704975675,69.35089396561493 +1704975680,1704975680,65.28216158782308 +1704975685,1704975685,54.190894304381864 +1704975690,1704975690,82.34389402990865 +1704975695,1704975695,68.22691200482444 +1704975700,1704975700,64.63197225808909 +1704975705,1704975705,61.0532738104951 +1704975710,1704975710,38.00319605246697 +1704975715,1704975715,22.856818000937917 +1704975720,1704975720,58.73763387927225 +1704975725,1704975725,4.165394041947412 +1704975730,1704975730,85.39275826136303 +1704975735,1704975735,77.50159835125785 +1704975740,1704975740,2.2842583970374086 +1704975745,1704975745,79.36576551942886 +1704975750,1704975750,33.26666091160636 +1704975755,1704975755,15.280372821398803 +1704975760,1704975760,46.92981904682515 +1704975765,1704975765,7.487259300011761 +1704975770,1704975770,43.827530107082794 +1704975775,1704975775,51.39392064667714 +1704975780,1704975780,36.55612913414249 +1704975785,1704975785,21.494055802422864 +1704975790,1704975790,67.37004009318174 +1704975795,1704975795,52.274437849414625 +1704975800,1704975800,79.3661026436419 +1704975805,1704975805,65.75822490142981 +1704975810,1704975810,75.44510929845497 +1704975815,1704975815,36.15670547980906 +1704975820,1704975820,50.17516973601801 +1704975825,1704975825,35.36623744478109 +1704975830,1704975830,55.31155394148078 +1704975835,1704975835,52.930889838948005 +1704975840,1704975840,93.4445275184342 +1704975845,1704975845,20.925423882125905 +1704975850,1704975850,40.39837582268473 +1704975855,1704975855,86.28600575190931 +1704975860,1704975860,34.05231935151202 +1704975865,1704975865,0.4632259735505295 +1704975870,1704975870,65.93925066291602 +1704975875,1704975875,32.97265395012271 +1704975880,1704975880,96.00653616974357 +1704975885,1704975885,62.7272664933307 +1704975890,1704975890,62.28898879402465 +1704975895,1704975895,43.291525262278405 +1704975900,1704975900,91.82696747867377 +1704975905,1704975905,42.54845460405383 +1704975910,1704975910,21.498374347929882 +1704975915,1704975915,47.336946841751136 +1704975920,1704975920,80.16911706244788 +1704975925,1704975925,72.28879277201337 +1704975930,1704975930,11.319771067709327 +1704975935,1704975935,86.77411434355142 +1704975940,1704975940,97.09267951717493 +1704975945,1704975945,10.760807570720809 +1704975950,1704975950,81.48249741805964 +1704975955,1704975955,3.4009005207919163 +1704975960,1704975960,72.64857563766206 +1704975965,1704975965,15.843113003387677 +1704975970,1704975970,83.0523958261814 +1704975975,1704975975,6.892859392955608 +1704975980,1704975980,35.037434137073745 +1704975985,1704975985,91.96409666313363 +1704975990,1704975990,49.28716734701203 +1704975995,1704975995,64.77189967600805 +1704976000,1704976000,98.62470815951873 +1704976005,1704976005,92.86208755462442 +1704976010,1704976010,69.80588003271126 +1704976015,1704976015,87.95564158830209 +1704976020,1704976020,63.772852971392766 +1704976025,1704976025,9.571069171119595 +1704976030,1704976030,84.82118042267597 +1704976035,1704976035,70.89314038089721 +1704976040,1704976040,97.89325651221829 +1704976045,1704976045,76.72894038253759 +1704976050,1704976050,1.9539555052200508 +1704976055,1704976055,48.640089674027074 +1704976060,1704976060,68.4448760402513 +1704976065,1704976065,32.84848431663878 +1704976070,1704976070,46.473093038273696 +1704976075,1704976075,39.42279846187306 +1704976080,1704976080,79.90872952566606 +1704976085,1704976085,26.377980953208468 +1704976090,1704976090,1.0563781315502396 +1704976095,1704976095,70.00922122173024 +1704976100,1704976100,63.66100091891731 +1704976105,1704976105,58.28493038378144 +1704976110,1704976110,97.00813354589886 +1704976115,1704976115,24.479236487223787 +1704976120,1704976120,64.23454670787918 +1704976125,1704976125,66.55036749787486 +1704976130,1704976130,84.682811571383 +1704976135,1704976135,81.41738826924087 +1704976140,1704976140,98.08590311069975 +1704976145,1704976145,74.92301627010261 +1704976150,1704976150,37.20630839659277 +1704976155,1704976155,22.521681340710153 +1704976160,1704976160,39.18751101414212 +1704976165,1704976165,99.09040488666133 +1704976170,1704976170,74.29580896378614 +1704976175,1704976175,97.60369800103355 +1704976180,1704976180,94.26085985463621 +1704976185,1704976185,11.689961819031803 +1704976190,1704976190,29.833912019901497 +1704976195,1704976195,72.5179663054358 +1704976200,1704976200,40.458773105364465 +1704976205,1704976205,48.27365700877087 +1704976210,1704976210,88.34420508201366 +1704976215,1704976215,77.96794919227632 +1704976220,1704976220,66.5626627292959 +1704976225,1704976225,26.42947289262816 +1704976230,1704976230,12.70366581990363 +1704976235,1704976235,84.62096092836978 +1704976240,1704976240,72.23669873564211 +1704976245,1704976245,49.994479669988536 +1704976250,1704976250,70.9499858949436 +1704976255,1704976255,54.5413452012893 +1704976260,1704976260,87.26406160728143 +1704976265,1704976265,55.98595858122505 +1704976270,1704976270,39.02502872121632 +1704976275,1704976275,41.933323168051494 +1704976280,1704976280,75.96847078363021 +1704976285,1704976285,9.57906577083123 +1704976290,1704976290,61.7766663300362 +1704976295,1704976295,43.40949887025437 +1704976300,1704976300,70.87653052314053 +1704976305,1704976305,91.79518865622641 +1704976310,1704976310,9.73573077724147 +1704976315,1704976315,52.00484451226666 +1704976320,1704976320,60.13915046694538 +1704976325,1704976325,39.1527663244907 +1704976330,1704976330,4.7487369756403774 +1704976335,1704976335,93.81511786157219 +1704976340,1704976340,51.91539265982996 +1704976345,1704976345,32.00260640222488 +1704976350,1704976350,49.53978977579552 +1704976355,1704976355,6.151786367315326 +1704976360,1704976360,7.957926809980442 +1704976365,1704976365,27.919281681386554 +1704976370,1704976370,1.133643072311652 +1704976375,1704976375,60.37008682243945 +1704976380,1704976380,40.55919295228454 +1704976385,1704976385,28.762995840301542 +1704976390,1704976390,26.951097595217487 +1704976395,1704976395,24.4532646817487 +1704976400,1704976400,25.4762963471303 +1704976405,1704976405,53.51517408199143 +1704976410,1704976410,61.859828142478925 +1704976415,1704976415,81.35559244685346 +1704976420,1704976420,54.45565665355575 +1704976425,1704976425,23.686370402097257 +1704976430,1704976430,30.945036599896582 +1704976435,1704976435,35.61235057191207 +1704976440,1704976440,51.420193029445336 +1704976445,1704976445,43.58317280581085 +1704976450,1704976450,69.80241502933686 +1704976455,1704976455,90.58466315853512 +1704976460,1704976460,67.22434332588786 +1704976465,1704976465,71.03463067873663 +1704976470,1704976470,49.20104740841542 +1704976475,1704976475,27.721776484385984 +1704976480,1704976480,30.795448452030826 +1704976485,1704976485,94.25914430425628 +1704976490,1704976490,14.34573344472625 +1704976495,1704976495,28.88602154937827 +1704976500,1704976500,57.636568123117506 +1704976505,1704976505,88.43337854534919 +1704976510,1704976510,56.6098290899566 +1704976515,1704976515,22.075301835974347 +1704976520,1704976520,32.27422455889223 +1704976525,1704976525,3.1191189122356966 +1704976530,1704976530,65.67799750879455 +1704976535,1704976535,21.505491227017547 +1704976540,1704976540,80.57790794972148 +1704976545,1704976545,12.866671485393677 +1704976550,1704976550,98.95283952907154 +1704976555,1704976555,94.68846999340533 +1704976560,1704976560,11.766424528154262 +1704976565,1704976565,69.77318321898474 +1704976570,1704976570,9.100733942058959 +1704976575,1704976575,71.63073708581678 +1704976580,1704976580,68.92726009612909 +1704976585,1704976585,70.12501545648409 +1704976590,1704976590,35.67873961652195 +1704976595,1704976595,51.090678167794366 +1704976600,1704976600,92.21907142689444 +1704976605,1704976605,95.57845093296385 +1704976610,1704976610,79.57691598098158 +1704976615,1704976615,38.865817532059985 +1704976620,1704976620,79.9834854315619 +1704976625,1704976625,65.90432103308585 +1704976630,1704976630,64.45643178384711 +1704976635,1704976635,36.918744880798926 +1704976640,1704976640,30.037666778048354 +1704976645,1704976645,89.57763932804139 +1704976650,1704976650,76.6200989280593 +1704976655,1704976655,73.76452463486825 +1704976660,1704976660,71.4356419911574 +1704976665,1704976665,68.27334351229896 +1704976670,1704976670,15.353604373113273 +1704976675,1704976675,86.6884895180784 +1704976680,1704976680,10.856143527191886 +1704976685,1704976685,26.641178172604107 +1704976690,1704976690,46.64867139369666 +1704976695,1704976695,36.4655865835104 +1704976700,1704976700,65.72948873010267 +1704976705,1704976705,35.83078907723771 +1704976710,1704976710,75.55505691515414 +1704976715,1704976715,47.86814695186924 +1704976720,1704976720,77.5909228967512 +1704976725,1704976725,83.73528804064925 +1704976730,1704976730,36.69493759977471 +1704976735,1704976735,83.615940073066 +1704976740,1704976740,89.37110177490376 +1704976745,1704976745,31.17237411090614 +1704976750,1704976750,95.1524598551728 +1704976755,1704976755,36.374318218190126 +1704976760,1704976760,89.28940847136322 +1704976765,1704976765,88.17800234893517 +1704976770,1704976770,41.98010755647948 +1704976775,1704976775,76.83775093859525 +1704976780,1704976780,66.16002484619099 +1704976785,1704976785,71.54630418935332 +1704976790,1704976790,39.60340311144086 +1704976795,1704976795,49.677332302123745 +1704976800,1704976800,51.807775376658974 +1704976805,1704976805,97.07821904316758 +1704976810,1704976810,41.05825290198436 +1704976815,1704976815,34.226851424488345 +1704976820,1704976820,74.03512862496922 +1704976825,1704976825,40.66801140999282 +1704976830,1704976830,18.794394063664555 +1704976835,1704976835,18.040414614273203 +1704976840,1704976840,59.33710737051274 +1704976845,1704976845,2.3589694654751137 +1704976850,1704976850,55.57169795742627 +1704976855,1704976855,32.30586875264542 +1704976860,1704976860,37.176773147245775 +1704976865,1704976865,32.68079741543012 +1704976870,1704976870,75.34590233795178 +1704976875,1704976875,65.37389412565236 +1704976880,1704976880,89.25524221417493 +1704976885,1704976885,84.44368782705189 +1704976890,1704976890,18.13040851708144 +1704976895,1704976895,9.042309879346444 +1704976900,1704976900,32.130817903852424 +1704976905,1704976905,14.637396255071089 +1704976910,1704976910,11.19177974270148 +1704976915,1704976915,59.835811219182 +1704976920,1704976920,37.0358086841448 +1704976925,1704976925,64.74719347453059 +1704976930,1704976930,38.621395910638945 +1704976935,1704976935,44.54295101416983 +1704976940,1704976940,76.28522898899173 +1704976945,1704976945,80.71857935919427 +1704976950,1704976950,13.455771467672806 +1704976955,1704976955,70.43222577437926 +1704976960,1704976960,80.0711125146648 +1704976965,1704976965,51.205286133322694 +1704976970,1704976970,83.42653172441756 +1704976975,1704976975,89.44709216172086 +1704976980,1704976980,87.58812134414777 +1704976985,1704976985,31.79092132705389 +1704976990,1704976990,18.64343850904716 +1704976995,1704976995,38.99602301929942 +1704977000,1704977000,9.087944305266548 +1704977005,1704977005,72.12078797683525 +1704977010,1704977010,82.62918836498345 +1704977015,1704977015,13.334569379474392 +1704977020,1704977020,10.603752570732105 +1704977025,1704977025,97.25262756720208 +1704977030,1704977030,35.082285457358296 +1704977035,1704977035,39.74991160075368 +1704977040,1704977040,8.665550622861351 +1704977045,1704977045,19.785499718768897 +1704977050,1704977050,95.53661285156532 +1704977055,1704977055,89.20571611609009 +1704977060,1704977060,63.28124628855926 +1704977065,1704977065,75.87558307185215 +1704977070,1704977070,14.71262459576378 +1704977075,1704977075,42.87222086334368 +1704977080,1704977080,20.000817007644546 +1704977085,1704977085,17.689681204156248 +1704977090,1704977090,63.52034715651271 +1704977095,1704977095,33.38568589015214 +1704977100,1704977100,5.792432008866388 +1704977105,1704977105,91.29360359735387 +1704977110,1704977110,35.43829686458032 +1704977115,1704977115,57.81458662872389 +1704977120,1704977120,10.750607624289332 +1704977125,1704977125,25.029854356463698 +1704977130,1704977130,79.30937738630587 +1704977135,1704977135,14.11598259203396 +1704977140,1704977140,43.08080810833799 +1704977145,1704977145,0.630755032214747 +1704977150,1704977150,24.3619893687837 +1704977155,1704977155,23.348546143197304 +1704977160,1704977160,84.41946782979858 +1704977165,1704977165,63.29267406799124 +1704977170,1704977170,77.03080089214673 +1704977175,1704977175,59.457109487776506 +1704977180,1704977180,6.5695175667799255 +1704977185,1704977185,5.802617233072183 +1704977190,1704977190,25.042125769174472 +1704977195,1704977195,7.882343044494499 +1704977200,1704977200,56.77277825692503 +1704977205,1704977205,52.03907377963911 +1704977210,1704977210,7.979087496665038 +1704977215,1704977215,56.46909531208409 +1704977220,1704977220,9.302474875738632 +1704977225,1704977225,72.58618310604322 +1704977230,1704977230,90.03127742387328 +1704977235,1704977235,92.108887622923 +1704977240,1704977240,95.69305604135356 +1704977245,1704977245,97.28794507684756 +1704977250,1704977250,3.475123018329773 +1704977255,1704977255,17.425814321778375 +1704977260,1704977260,81.46861627362578 +1704977265,1704977265,47.66641584167996 +1704977270,1704977270,11.155180088760808 +1704977275,1704977275,81.76664935489045 +1704977280,1704977280,39.14417072886957 +1704977285,1704977285,51.67794757594222 +1704977290,1704977290,52.71993415339041 +1704977295,1704977295,31.815646603063097 +1704977300,1704977300,71.76241980086587 +1704977305,1704977305,18.023149558939433 +1704977310,1704977310,30.125294601007578 +1704977315,1704977315,85.17042283345427 +1704977320,1704977320,34.71927749451843 +1704977325,1704977325,50.92398143738727 +1704977330,1704977330,21.475911643053912 +1704977335,1704977335,68.33469395016793 +1704977340,1704977340,8.674568165653962 +1704977345,1704977345,31.48805120889049 +1704977350,1704977350,54.10627287776335 +1704977355,1704977355,25.221318335708155 +1704977360,1704977360,42.25040939502922 +1704977365,1704977365,58.65675654114754 +1704977370,1704977370,26.91880961666069 +1704977375,1704977375,15.08121736840613 +1704977380,1704977380,50.31613042242375 +1704977385,1704977385,33.766904372234016 +1704977390,1704977390,22.463680427602394 +1704977395,1704977395,28.70430414796442 +1704977400,1704977400,33.66754997959007 +1704977405,1704977405,61.2782998435583 +1704977410,1704977410,72.0858389434848 +1704977415,1704977415,4.462507348401279 +1704977420,1704977420,2.709569345492524 +1704977425,1704977425,68.6255673646975 +1704977430,1704977430,39.356844695410345 +1704977435,1704977435,57.60808018127464 +1704977440,1704977440,77.77202388126649 +1704977445,1704977445,95.03501316674163 +1704977450,1704977450,16.14045623353232 +1704977455,1704977455,34.539698936792604 +1704977460,1704977460,97.47279745838745 +1704977465,1704977465,55.0768228780099 +1704977470,1704977470,14.402709420894977 +1705026383,1705026383,23.162423331320102 +1705026388,1705026388,58.95347368201003 +1705026393,1705026393,32.7814868036595 +1705026398,1705026398,43.00673879926317 +1705026403,1705026403,99.51458634939124 +1705026408,1705026408,30.350550332889583 +1705026413,1705026413,28.284615334265105 +1705026428,1705026428,83.39228011942028 +1705026433,1705026433,81.93386893499414 +1705026518,1705026518,91.34929847092252 +1705026523,1705026523,91.05009993849339 +1705026528,1705026528,63.095171530173644 +1705026533,1705026533,6.233768037645371 +1705026538,1705026538,78.17796382435012 +1705026543,1705026543,55.85813008779811 +1705026548,1705026548,68.32085174735218 +1705026558,1705026558,79.56238383995967 +1705026563,1705026563,28.68459856883978 +1705026643,1705026643,43.42364548082378 +1705026648,1705026648,21.533764401969957 +1705026653,1705026653,33.11868922767057 +1705026658,1705026658,60.59578083434649 +1705026663,1705026663,81.10629421359114 +1705026668,1705026668,0.9656784645966643 +1705026673,1705026673,1.6943362013981167 +1705026688,1705026688,81.97603779740884 +1705026693,1705026693,92.60382964008535 +1705026773,1705026773,65.29774510791916 +1705026778,1705026778,61.33131644921364 +1705026783,1705026783,94.96123088997373 +1705026788,1705026788,70.70074597910634 +1705026793,1705026793,36.57888324720353 +1705026798,1705026798,60.10110730216882 +1705026803,1705026803,55.907810646324265 +1705026838,1705026838,6.851247225395629 +1705026843,1705026843,52.99394684157035 +1705026923,1705026923,87.46185306029946 +1705026928,1705026928,92.04459768029226 +1705026933,1705026933,3.6746475140839174 +1705026938,1705026938,42.015286788833514 +1705026943,1705026943,9.351219521022058 +1705026948,1705026948,47.186442735559375 +1705026953,1705026953,48.16642608080005 +1705026963,1705026963,35.3938950614573 +1705026968,1705026968,34.717787960279786 +1705027048,1705027048,65.9989813588294 +1705027053,1705027053,60.47280199890487 +1705027058,1705027058,56.72249872055756 +1705027063,1705027063,66.16227649650773 +1705027068,1705027068,11.798950685298603 +1705027073,1705027073,52.386113286037705 +1705027078,1705027078,80.53864606953339 +1705027118,1705027118,44.5198786118769 +1705027123,1705027123,20.559550705561758 +1705027203,1705027203,13.868139264464485 +1705027208,1705027208,98.75695854372053 +1705027213,1705027213,50.4273819944932 +1705027218,1705027218,5.457223645240095 +1705027223,1705027223,75.76212675431704 +1705027228,1705027228,63.905114659061034 +1705027233,1705027233,47.881567052762506 +1705027263,1705027263,54.046462344075316 +1705027268,1705027268,84.32346031534016 +1705027373,1705027373,6.090769171650412 +1705027378,1705027378,20.931737817764194 +1705027383,1705027383,33.421432269910134 +1705027388,1705027388,46.42223059501608 +1705027393,1705027393,0.15400378497330003 +1705027398,1705027398,32.46129271900926 +1705027403,1705027403,2.1108116633711593 +1705027428,1705027428,77.76019582393732 +1705027433,1705027433,4.45154735393597 +1705027488,1705027488,80.26846067047417 +1705027493,1705027493,51.711337426013806 +1705027498,1705027498,43.4260422567217 +1705027503,1705027503,52.17216075480494 +1705027508,1705027508,65.48356528025971 +1705027513,1705027513,73.70255480360865 +1705027518,1705027518,33.346523950631415 +1705027528,1705027528,59.33722219272026 +1705027533,1705027533,11.14066401711894 +1705027573,1705027573,67.85126567988755 +1705027578,1705027578,88.06270048038283 +1705027583,1705027583,17.57285257941095 +1705027588,1705027588,38.39127892893788 +1705027593,1705027593,73.2375718093209 +1705027598,1705027598,68.17367568292802 +1705027603,1705027603,20.997438937974145 +1705027618,1705027618,22.48359608430126 +1705027623,1705027623,54.170921334895574 +1705027673,1705027673,30.14264251556843 +1705027678,1705027678,42.162225577924204 +1705027683,1705027683,69.888064788226 +1705027688,1705027688,75.80366346195052 +1705027693,1705027693,26.922761162447006 +1705027698,1705027698,54.204569702721 +1705027703,1705027703,76.30201695378108 +1705027723,1705027723,76.17186342580841 +1705027728,1705027728,7.757783508426208 +1705027803,1705027803,59.52262371496909 +1705027808,1705027808,99.56565429249596 +1705027813,1705027813,6.662100630710654 +1705027818,1705027818,22.241804335544046 +1705027823,1705027823,15.342151266794868 +1705027828,1705027828,44.61173352679958 +1705027833,1705027833,62.23611727867586 +1705027853,1705027853,99.91747340639957 +1705027858,1705027858,21.92805893512386 +1705027908,1705027908,51.76839454175845 +1705027913,1705027913,60.094910774083964 +1705027918,1705027918,94.53897149327538 +1705027923,1705027923,7.629294899424332 +1705027928,1705027928,97.61825694567008 +1705027933,1705027933,72.34156032537472 +1705027938,1705027938,95.69320150710767 +1705027953,1705027953,30.124212782070902 +1705027958,1705027958,63.7178280654782 +1705028008,1705028008,14.507785847020216 +1705028013,1705028013,66.78376125409086 +1705028018,1705028018,33.44840703593863 +1705028023,1705028023,24.856015581113276 +1705028028,1705028028,49.792959177952646 +1705028033,1705028033,92.18358592427926 +1705028038,1705028038,63.66485911916867 +1705028078,1705028078,97.21183157726672 +1705028083,1705028083,15.522160092558357 +1705028143,1705028143,70.76549796984682 +1705028148,1705028148,10.234107436283379 +1705028153,1705028153,99.97217624055331 +1705028158,1705028158,89.86489590493923 +1705028163,1705028163,51.43991230740747 +1705028168,1705028168,92.87782913409872 +1705028173,1705028173,78.85695430877887 +1705028208,1705028208,7.670381541026472 +1705028213,1705028213,91.74740864113713 +1705028258,1705028258,90.4002031373864 +1705028263,1705028263,1.1021205832971837 +1705028268,1705028268,84.50412329705179 +1705028273,1705028273,34.89674600676275 +1705028278,1705028278,36.240407123317084 +1705028283,1705028283,66.2201740328077 +1705028288,1705028288,26.21223896237117 +1705028318,1705028318,31.182967483006397 +1705028323,1705028323,33.6437749451973 +1705028378,1705028378,67.45170499176665 +1705028383,1705028383,50.04051019407933 +1705028388,1705028388,43.60946805822734 +1705028393,1705028393,54.069032419788186 +1705028398,1705028398,54.5164381833444 +1705028403,1705028403,70.64449423894192 +1705028408,1705028408,40.01270960565297 +1705028443,1705028443,70.58931791766673 +1705028448,1705028448,52.67314751610886 +1705028533,1705028533,99.60397844874505 +1705028538,1705028538,2.1269860087611447 +1705028543,1705028543,15.276492792240337 +1705028548,1705028548,82.61225769357436 +1705028553,1705028553,86.66331977008662 +1705028558,1705028558,35.27528049408769 +1705028563,1705028563,93.04695239087216 +1705028578,1705028578,12.00531694165825 +1705028583,1705028583,2.2740349463805654 +1705028683,1705028683,7.99246138400499 +1705028688,1705028688,6.828857475281957 +1705028693,1705028693,22.85351084353383 +1705028698,1705028698,6.04213044404055 +1705028703,1705028703,53.084323220085736 +1705028708,1705028708,20.709220402944094 +1705028713,1705028713,74.15281703505596 +1705028748,1705028748,36.0672887722989 +1705028753,1705028753,44.03371216791743 +1705028808,1705028808,19.589638415915456 +1705028813,1705028813,47.74519765781754 +1705028818,1705028818,68.8896502656444 +1705028823,1705028823,83.99542664748888 +1705028828,1705028828,52.36625738816707 +1705028833,1705028833,25.231037330851656 +1705028838,1705028838,5.07172252093151 +1705028853,1705028853,75.10392189506942 +1705028858,1705028858,59.315160967842814 +1705028893,1705028893,58.35104326800161 +1705028898,1705028898,16.853023954877923 +1705028903,1705028903,10.879499351521604 +1705028908,1705028908,20.395846781899717 +1705028913,1705028913,39.3051178338763 +1705028918,1705028918,23.233907806585396 +1705028923,1705028923,61.8372594803557 +1705028943,1705028943,72.2984085961724 +1705028948,1705028948,18.77869742152639 +1705028988,1705028988,42.75645445096947 +1705028993,1705028993,87.80526658276892 +1705028998,1705028998,5.461585170783556 +1705029003,1705029003,78.45816411744374 +1705029008,1705029008,21.195559887029237 +1705029013,1705029013,68.206026035677 +1705029018,1705029018,4.571449894585178 +1705029028,1705029028,70.50300893660841 +1705029033,1705029033,38.63759066686714 +1705029088,1705029088,0.45729970909713646 +1705029093,1705029093,8.200544441276758 +1705029098,1705029098,51.28347314349798 +1705029103,1705029103,25.625320970547882 +1705029108,1705029108,92.71548305069874 +1705029113,1705029113,15.154313782860463 +1705029118,1705029118,89.82445376351448 +1705029138,1705029138,62.998174781325936 +1705029143,1705029143,18.34139482894348 +1705029223,1705029223,91.78306661397822 +1705029228,1705029228,75.40045647265953 +1705029233,1705029233,42.84312853177826 +1705029238,1705029238,27.292437976626694 +1705029243,1705029243,43.3036483949939 +1705029248,1705029248,52.859909995889765 +1705029253,1705029253,39.14014878654329 +1705029268,1705029268,45.25271002653074 +1705029273,1705029273,31.22819391423407 +1705029353,1705029353,8.036602378061053 +1705029358,1705029358,30.034565056330674 +1705029363,1705029363,99.7215111790221 +1705029368,1705029368,99.89399350976524 +1705029373,1705029373,27.73915889024484 +1705029378,1705029378,10.838351814036729 +1705029383,1705029383,14.254081767083138 +1705029403,1705029403,37.2486154896706 +1705029408,1705029408,93.6445552315211 +1705029468,1705029468,87.5021661098469 +1705029473,1705029473,16.70958345602798 +1705029478,1705029478,95.4923169880042 +1705029483,1705029483,68.18397200244785 +1705029488,1705029488,89.98101403870132 +1705029493,1705029493,57.41596711806297 +1705029498,1705029498,29.376851501998857 +1705029533,1705029533,41.36143293967292 +1705029538,1705029538,90.80674404108018 +1705029618,1705029618,27.08042121163128 +1705029623,1705029623,6.999084321310411 +1705029628,1705029628,61.01604248258703 +1705029633,1705029633,5.9037376253626705 +1705029638,1705029638,79.96573779239246 +1705029643,1705029643,35.3667642734242 +1705029648,1705029648,49.10763766736373 +1705029663,1705029663,30.764431197237197 +1705029668,1705029668,61.492930652406606 +1705029778,1705029778,47.10070195430958 +1705029783,1705029783,88.75663649341793 +1705029788,1705029788,63.401005630164335 +1705029793,1705029793,16.605247115770418 +1705029798,1705029798,41.40243423240759 +1705029803,1705029803,74.12156211252872 +1705029808,1705029808,81.86813761422444 +1705029843,1705029843,65.03233844270568 +1705029848,1705029848,90.16989573596545 +1705029933,1705029933,33.8212079993535 +1705029938,1705029938,24.077826571708872 +1705029943,1705029943,61.17105680175807 +1705029948,1705029948,4.188014818023578 +1705029953,1705029953,28.7134349011283 +1705029958,1705029958,21.777793492052044 +1705029963,1705029963,28.606521016081253 +1705029983,1705029983,88.34913502365133 +1705029988,1705029988,17.24001458543516 +1705030068,1705030068,91.34988344770272 +1705030073,1705030073,52.88289917117983 +1705030078,1705030078,12.481988828085278 +1705030083,1705030083,56.208887529323384 +1705030088,1705030088,46.48413445305965 +1705030093,1705030093,12.947902863301897 +1705030098,1705030098,46.186203889761316 +1705030138,1705030138,8.579794666646567 +1705030143,1705030143,40.24235410972887 +1705030228,1705030228,20.0114158234039 +1705030233,1705030233,8.084308210973257 +1705030238,1705030238,22.39104998599386 +1705030243,1705030243,4.140223106844809 +1705030248,1705030248,52.812292535261626 +1705030253,1705030253,79.99735159982434 +1705030258,1705030258,93.99205953807332 +1705030273,1705030273,91.97028030295837 +1705030278,1705030278,9.233179173665441 +1705030358,1705030358,1.8119497681334251 +1705030363,1705030363,82.75819771409817 +1705030368,1705030368,68.42175040879272 +1705030373,1705030373,95.70510033754837 +1705030378,1705030378,2.8042524816555336 +1705030383,1705030383,1.757666831112159 +1705030388,1705030388,13.465255203877158 +1705030423,1705030423,86.50177111632316 +1705030428,1705030428,90.15321996054195 +1705030488,1705030488,22.375087673310524 +1705030493,1705030493,24.846416243066095 +1705030498,1705030498,15.771508541426648 +1705030503,1705030503,25.815128610579364 +1705030508,1705030508,73.47970371777123 +1705030513,1705030513,60.828022625427046 +1705030518,1705030518,21.573370107917743 +1705030548,1705030548,82.82527432911753 +1705030553,1705030553,84.4515708986013 +1705030653,1705030653,86.40110149186555 +1705030658,1705030658,64.63345347440053 +1705030663,1705030663,50.94645625128064 +1705030668,1705030668,48.34359321654082 +1705030673,1705030673,79.4548220266161 +1705030678,1705030678,96.15166725624475 +1705030683,1705030683,88.09883275638269 +1705030693,1705030693,29.324620073138185 +1705030698,1705030698,33.01063388167961 +1705030758,1705030758,28.153800648907 +1705030763,1705030763,63.36353747050346 +1705030768,1705030768,49.23701107351247 +1705030773,1705030773,98.89480544920778 +1705030778,1705030778,37.19001807368817 +1705030783,1705030783,63.019737157116964 +1705030788,1705030788,28.253776910316976 +1705030828,1705030828,28.59659183328206 +1705030833,1705030833,54.12284304198474 +1705030893,1705030893,39.195719903786305 +1705030898,1705030898,20.11985382136807 +1705030903,1705030903,77.050266387636 +1705030908,1705030908,58.17877838376783 +1705030913,1705030913,14.306474252088385 +1705030918,1705030918,19.774305698151107 +1705030923,1705030923,43.970567791790415 +1705030938,1705030938,7.680521032476484 +1705030943,1705030943,86.89104896461302 +1705031028,1705031028,55.450967076418614 +1705031033,1705031033,55.49834901321734 +1705031038,1705031038,32.14061939124703 +1705031043,1705031043,71.75909693207743 +1705031048,1705031048,94.91722067513057 +1705031053,1705031053,56.37166881456438 +1705031058,1705031058,75.47846119928293 +1705031073,1705031073,51.13466213720586 +1705031078,1705031078,41.918436085660105 +1705031128,1705031128,30.83729103163956 +1705031133,1705031133,62.39916682161636 +1705031138,1705031138,19.31251849397154 +1705031143,1705031143,13.181415084921689 +1705031148,1705031148,33.091193044673936 +1705031153,1705031153,81.06442192342112 +1705031158,1705031158,7.80602069343721 +1705031193,1705031193,39.46642561547189 +1705031198,1705031198,66.32392536627717 +1705031258,1705031258,38.24172466474312 +1705031263,1705031263,99.85657315098764 +1705031268,1705031268,5.032673484420136 +1705031273,1705031273,40.39221462176579 +1705031278,1705031278,87.95192264528269 +1705031283,1705031283,96.14627169458029 +1705031288,1705031288,17.370589448106564 +1705031303,1705031303,6.532005084919024 +1705031308,1705031308,50.4797644376388 +1705031328,1705031328,52.82704549849899 +1705031333,1705031333,34.761948353366826 +1705031338,1705031338,83.76694225757552 +1705031343,1705031343,52.16126224938187 +1705031348,1705031348,39.695367040749886 +1705031353,1705031353,87.8860229482295 +1705031373,1705031373,79.45312238531285 +1705031378,1705031378,70.17462682064833 +1705031383,1705031383,2.047104508525277 +1705031458,1705031458,37.69075426164812 +1705031463,1705031463,77.15915281618973 +1705031468,1705031468,68.94748900931798 +1705031473,1705031473,32.111598613714165 +1705031478,1705031478,26.60729736505073 +1705031483,1705031483,61.45903896656837 +1705031503,1705031503,11.793133074786343 +1705031508,1705031508,36.60364049128677 +1705031513,1705031513,87.33940917448983 +1705031583,1705031583,25.104103538437794 +1705031588,1705031588,79.47902691872744 +1705031593,1705031593,73.88625524122455 +1705031598,1705031598,88.19099271480503 +1705031603,1705031603,18.074992399596734 +1705031608,1705031608,48.44895723543866 +1705031653,1705031653,29.797650029314504 +1705031658,1705031658,98.98458485329542 +1705031663,1705031663,30.299557743582216 +1705031718,1705031718,77.71583161139735 +1705031723,1705031723,94.9501247367712 +1705031728,1705031728,63.238546699420425 +1705031733,1705031733,52.80998434258664 +1705031738,1705031738,38.47658416694368 +1705031743,1705031743,85.13190103630615 +1705031778,1705031778,78.48413009562691 +1705031783,1705031783,57.395944025145916 +1705031788,1705031788,73.08988163675893 +1705031868,1705031868,4.402179527107286 +1705031873,1705031873,81.6381720968991 +1705031878,1705031878,13.02315879507454 +1705031883,1705031883,32.607286233359986 +1705031888,1705031888,57.340958429221715 +1705031893,1705031893,48.70326116750995 +1705031933,1705031933,9.721035029973446 +1705031938,1705031938,9.443678956774626 +1705031943,1705031943,81.15608951764858 +1705032018,1705032018,56.79593388391492 +1705032023,1705032023,69.3331803745738 +1705032028,1705032028,57.58889449254714 +1705032033,1705032033,39.04354906360265 +1705032038,1705032038,33.19699165614147 +1705032043,1705032043,62.65627449733642 +1705032078,1705032078,84.57449610853669 +1705032083,1705032083,95.32933128101713 +1705032088,1705032088,53.471523577309235 +1705032118,1705032118,61.787019526572266 +1705032123,1705032123,44.259420342246095 +1705032128,1705032128,4.0960076593506205 +1705032133,1705032133,24.93247457836374 +1705032138,1705032138,59.32583566819112 +1705032143,1705032143,36.192750356880865 +1705032163,1705032163,33.38595398729103 +1705032168,1705032168,51.95936519009013 +1705032173,1705032173,44.13536828169947 +1705032248,1705032248,51.571239890949336 +1705032253,1705032253,62.53813713475439 +1705032258,1705032258,93.9756670415426 +1705032263,1705032263,25.139130989078396 +1705032268,1705032268,90.73775385225709 +1705032273,1705032273,27.461366205941573 +1705032288,1705032288,94.497683230094 +1705032293,1705032293,27.322697058006394 +1705032298,1705032298,19.11500690310938 +1705032373,1705032373,5.017959859506238 +1705032378,1705032378,17.301304921568807 +1705032383,1705032383,11.141645129896693 +1705032388,1705032388,58.408757905039124 +1705032393,1705032393,66.18743633598349 +1705032398,1705032398,27.73047185114993 +1705032418,1705032418,35.92006809694407 +1705032423,1705032423,95.23264546367079 +1705032428,1705032428,31.024230216396752 +1705032513,1705032513,47.705035524631676 +1705032518,1705032518,96.27711386240317 +1705032523,1705032523,68.64479544931972 +1705032528,1705032528,16.27045910912912 +1705032533,1705032533,26.95381661119811 +1705032538,1705032538,65.50627742325781 +1705032583,1705032583,10.609388260146579 +1705032588,1705032588,38.50372587454922 +1705032593,1705032593,5.2592585439676265 +1705032673,1705032673,84.49847271498093 +1705032678,1705032678,30.680002019855802 +1705032683,1705032683,95.86978240236097 +1705032688,1705032688,70.30811267963682 +1705032693,1705032693,61.5900268028994 +1705032698,1705032698,51.93874626420259 +1705032773,1705032773,40.532022003204695 +1705032778,1705032778,86.66314341100468 +1705032783,1705032783,9.158207313318123 +1705032838,1705032838,45.12921055433981 +1705032843,1705032843,14.782476804136424 +1705032848,1705032848,9.406085464114987 +1705032853,1705032853,84.55868855893418 +1705032858,1705032858,78.16324181898536 +1705032863,1705032863,39.78924672768045 +1705032893,1705032893,67.22508782556957 +1705032898,1705032898,14.603654235594899 +1705032903,1705032903,89.01499868229918 +1705032958,1705032958,18.16427813767406 +1705032963,1705032963,20.8151883325043 +1705032968,1705032968,5.1588977921878225 +1705032973,1705032973,50.300909231083516 +1705032978,1705032978,2.9098640407859033 +1705032983,1705032983,65.37402253809587 +1705033028,1705033028,21.579621913337533 +1705033033,1705033033,92.35354120201006 +1705033038,1705033038,64.65621164970692 +1705033093,1705033093,45.649402492612055 +1705033098,1705033098,26.07259718834142 +1705033103,1705033103,84.70338764168064 +1705033108,1705033108,13.186893079265305 +1705033113,1705033113,88.156495437847 +1705033118,1705033118,53.361154969559536 +1705033138,1705033138,42.5739296101595 +1705033143,1705033143,64.61539014605154 +1705033148,1705033148,80.22658561639754 +1705033193,1705033193,40.28972042542656 +1705033198,1705033198,81.19647742650332 +1705033203,1705033203,25.538334648294047 +1705033208,1705033208,49.78069182220794 +1705033213,1705033213,73.13021699996105 +1705033218,1705033218,38.49879519687853 +1705033248,1705033248,55.94810121843543 +1705033253,1705033253,46.61291614418537 +1705033258,1705033258,34.4834865217024 +1705033318,1705033318,54.77460303419717 +1705033323,1705033323,99.8696495457101 +1705033328,1705033328,88.72007729502218 +1705033333,1705033333,44.52645558938121 +1705033338,1705033338,10.05356250365198 +1705033343,1705033343,8.49008507997404 +1705033368,1705033368,4.5488127576065125 +1705033373,1705033373,36.10687011356237 +1705033378,1705033378,5.1814822077026035 +1705033458,1705033458,42.46358851967125 +1705033463,1705033463,56.886105108950424 +1705033468,1705033468,79.52922296112567 +1705033473,1705033473,77.97141073961907 +1705033478,1705033478,2.6463329807650315 +1705033483,1705033483,51.735483764503456 +1705033528,1705033528,70.24938155818916 +1705033533,1705033533,47.1250558503848 +1705033538,1705033538,77.44065039025345 +1705033618,1705033618,33.853450488597545 +1705033623,1705033623,87.91282990074504 +1705033628,1705033628,19.641905661037086 +1705033633,1705033633,64.60067719153474 +1705033638,1705033638,45.65724882968534 +1705033643,1705033643,96.38686641178728 +1705033663,1705033663,27.77069528355276 +1705033668,1705033668,93.69820208872815 +1705033673,1705033673,34.0052211181875 +1705033753,1705033753,11.058391140840662 +1705033758,1705033758,19.47828828743092 +1705033763,1705033763,49.30104517852146 +1705033768,1705033768,2.142834320446807 +1705033773,1705033773,51.10387982106433 +1705033778,1705033778,60.93372541360429 +1705033818,1705033818,50.651344654674844 +1705033823,1705033823,70.76248846635856 +1705033828,1705033828,44.52186422506899 +1705033903,1705033903,59.32665604725374 +1705033908,1705033908,43.81684088221648 +1705033913,1705033913,87.69687142484449 +1705033918,1705033918,22.231050186339672 +1705033923,1705033923,72.18369339191551 +1705033928,1705033928,27.255589656260536 +1705033963,1705033963,32.648047090437004 +1705033968,1705033968,36.281988719742884 +1705033973,1705033973,50.32598564923304 +1705034048,1705034048,76.14443227877275 +1705034053,1705034053,90.78863763536366 +1705034058,1705034058,85.27912771544378 +1705034063,1705034063,88.25185651044036 +1705034068,1705034068,22.726859883097305 +1705034073,1705034073,68.2434516541602 +1705034088,1705034088,72.93272162542608 +1705034093,1705034093,61.31732308674071 +1705034098,1705034098,25.303617666138166 +1705034153,1705034153,19.778760105775984 +1705034158,1705034158,36.90547361455696 +1705034163,1705034163,26.08687224236842 +1705034168,1705034168,71.89046175244586 +1705034173,1705034173,9.898113556546729 +1705034178,1705034178,97.12989923398641 +1705034228,1705034228,28.13705114246916 +1705034233,1705034233,92.00121544609705 +1705034238,1705034238,75.09558357685742 +1705034293,1705034293,75.58677388167135 +1705034298,1705034298,81.99038334084987 +1705034303,1705034303,0.7456963932114036 +1705034308,1705034308,56.876435078880746 +1705034313,1705034313,72.34476338060519 +1705034318,1705034318,60.12723410092949 +1705034358,1705034358,99.7145593469462 +1705034363,1705034363,55.21938074058193 +1705034368,1705034368,29.856042587193986 +1705034423,1705034423,52.52452019295678 +1705034428,1705034428,52.46923082128237 +1705034433,1705034433,61.44711347806724 +1705034438,1705034438,98.72853389859112 +1705034443,1705034443,97.16956196158851 +1705034448,1705034448,25.23744057888837 +1705034488,1705034488,60.58496846305306 +1705034493,1705034493,69.76318992383005 +1705034498,1705034498,3.527136658232388 +1705034588,1705034588,36.696856678898456 +1705034593,1705034593,7.494702240243689 +1705034598,1705034598,37.484977465584194 +1705034603,1705034603,44.99118467706688 +1705034608,1705034608,90.13150986074896 +1705034613,1705034613,59.046219392156594 +1705034663,1705034663,64.87428811111975 +1705034668,1705034668,28.061630028772868 +1705034673,1705034673,52.6246209155263 +1705034728,1705034728,94.88980691845575 +1705034733,1705034733,56.879215537014495 +1705034738,1705034738,25.043527758767446 +1705034743,1705034743,55.1271217892641 +1705034748,1705034748,24.625345275191112 +1705034753,1705034753,28.215593901417613 +1705034798,1705034798,64.7260407835183 +1705034803,1705034803,28.885844340133517 +1705034808,1705034808,89.96678079887789 +1705034848,1705034848,25.68545517339401 +1705034853,1705034853,15.969040485394848 +1705034858,1705034858,0.05271294937191362 +1705034863,1705034863,10.701589623406814 +1705034868,1705034868,84.66191568893363 +1705034873,1705034873,89.57503153734275 +1705034923,1705034923,58.52281421879001 +1705034928,1705034928,12.758270468407506 +1705034933,1705034933,81.64799644989901 +1705035018,1705035018,46.073062125368835 +1705035023,1705035023,62.14170172251631 +1705035028,1705035028,64.46646079635097 +1705035033,1705035033,93.59025008718086 +1705035038,1705035038,37.913991445687934 +1705035043,1705035043,55.98709143845417 +1705035063,1705035063,88.6557911005502 +1705035068,1705035068,78.41463702851989 +1705035073,1705035073,60.73036379764199 +1705035163,1705035163,19.614328620839206 +1705035168,1705035168,19.801238826465983 +1705035173,1705035173,5.155953290194182 +1705035178,1705035178,74.11454688337288 +1705035183,1705035183,51.59472982203861 +1705035188,1705035188,75.21118273311272 +1705035213,1705035213,62.7816177380229 +1705035218,1705035218,73.67432467321946 +1705035223,1705035223,39.77943381823851 +1705035298,1705035298,97.51464344337872 +1705035303,1705035303,24.088573741585652 +1705035308,1705035308,97.70196339378509 +1705035313,1705035313,41.73614297885976 +1705035318,1705035318,73.52336199356722 +1705035323,1705035323,30.528243922255083 +1705035353,1705035353,30.634767269927288 +1705035358,1705035358,41.002919891218944 +1705035363,1705035363,96.27325072542784 +1705035443,1705035443,67.60059462037121 +1705035448,1705035448,79.56448250050899 +1705035453,1705035453,83.02299875139069 +1705035458,1705035458,12.440473579307687 +1705035463,1705035463,64.75949447942156 +1705035468,1705035468,82.22603193140772 +1705035518,1705035518,35.2011416896994 +1705035523,1705035523,85.93315038771323 +1705035528,1705035528,0.5461417651919986 +1705035583,1705035583,15.355877498389802 +1705035588,1705035588,87.01899051445548 +1705035593,1705035593,51.50735460090075 +1705035598,1705035598,37.50481529144582 +1705035603,1705035603,0.7702136679058946 +1705035608,1705035608,86.44100775228186 +1705035613,1705035613,2.25040031287691 +1705035618,1705035618,88.3596346520212 +1705035623,1705035623,51.4100048617561 +1705035738,1705035738,39.081666803611334 +1705035743,1705035743,22.63096339816815 +1705035748,1705035748,41.691548828883576 +1705035753,1705035753,38.84680380275532 +1705035758,1705035758,52.12323721447384 +1705035763,1705035763,19.526386096454917 +1705035768,1705035768,79.97688219858455 +1705035773,1705035773,72.10053014842556 +1705035778,1705035778,98.33806469828133 +1705035883,1705035883,7.086267629465226 +1705035888,1705035888,90.47300075914421 +1705035893,1705035893,45.167637188194966 +1705035898,1705035898,94.20569997414943 +1705035903,1705035903,28.055140303833227 +1705035908,1705035908,18.196242049435174 +1705035913,1705035913,47.31563518284347 +1705035918,1705035918,20.634381928098133 +1705035923,1705035923,95.3354189279488 +1705036053,1705036053,83.34199779885235 +1705036058,1705036058,76.67456790743343 +1705036063,1705036063,77.36327994506746 +1705036068,1705036068,98.6479816133995 +1705036073,1705036073,90.46799836200734 +1705036078,1705036078,26.361392840121045 +1705036083,1705036083,15.62279568054834 +1705036088,1705036088,94.60545461647267 +1705036093,1705036093,24.139405408848646 +1705036243,1705036243,17.534797888154042 +1705036248,1705036248,83.09280173319642 +1705036253,1705036253,80.03621446770647 +1705036258,1705036258,55.7928016962727 +1705036263,1705036263,5.198862417661088 +1705036268,1705036268,71.5872350354736 +1705036273,1705036273,36.081406499033456 +1705036278,1705036278,19.35058226899622 +1705036283,1705036283,40.47042881843906 +1705036423,1705036423,42.806041991211494 +1705036428,1705036428,41.57714292627984 +1705036433,1705036433,36.39876924980254 +1705036438,1705036438,44.89561149943733 +1705036443,1705036443,33.72250085900369 +1705036448,1705036448,72.70657773450672 +1705036453,1705036453,49.65376438695955 +1705036458,1705036458,66.40711164824612 +1705036463,1705036463,27.045488601327683 +1705036568,1705036568,90.15810811347762 +1705036573,1705036573,6.560311592096224 +1705036578,1705036578,72.82464117450252 +1705036583,1705036583,14.537162644826706 +1705036588,1705036588,33.84408987509377 +1705036593,1705036593,33.05917752117357 +1705036598,1705036598,59.70624419300983 +1705036603,1705036603,76.3900744060789 +1705036608,1705036608,5.948326799408276 +1705036728,1705036728,98.18706472008172 +1705036733,1705036733,57.00003935013756 +1705036738,1705036738,72.25206322728653 +1705036743,1705036743,4.8701651229737575 +1705036748,1705036748,93.70690036443507 +1705036753,1705036753,44.98790622694471 +1705036758,1705036758,96.15212847347027 +1705036763,1705036763,90.94022606369579 +1705036768,1705036768,46.24735640049884 +1705036863,1705036863,41.58555699719946 +1705036868,1705036868,6.621087776769374 +1705036873,1705036873,94.92017853155802 +1705036878,1705036878,35.44175801860838 +1705036883,1705036883,66.2430078542057 +1705036888,1705036888,70.49793466444953 +1705036893,1705036893,67.79827949309414 +1705036898,1705036898,70.14366981703184 +1705036903,1705036903,5.309565444466702 +1705037018,1705037018,26.03853159476114 +1705037023,1705037023,7.870471023541514 +1705037028,1705037028,35.062036676794925 +1705037033,1705037033,67.89389820321674 +1705037038,1705037038,94.01016546502801 +1705037043,1705037043,38.91839750624364 +1705037048,1705037048,27.14369058287317 +1705037053,1705037053,7.462928111310385 +1705037058,1705037058,74.08761606701272 +1705037193,1705037193,34.957452199651904 +1705037198,1705037198,92.48226256782695 +1705037203,1705037203,21.33832738542145 +1705037208,1705037208,38.74670463303846 +1705037213,1705037213,9.073671767354806 +1705037218,1705037218,55.76492029257706 +1705037223,1705037223,80.05466122197517 +1705037228,1705037228,22.338858599222323 +1705037233,1705037233,6.231367954444178 +1705037318,1705037318,79.3200235030747 +1705037323,1705037323,6.887032300642759 +1705037328,1705037328,83.10216490591252 +1705037333,1705037333,76.01754014271312 +1705037338,1705037338,76.9603487213842 +1705037343,1705037343,31.326955305250838 +1705037348,1705037348,77.22764748360342 +1705037353,1705037353,71.28586092054663 +1705037358,1705037358,94.41480267315349 +1705037448,1705037448,99.28003602246108 +1705037453,1705037453,23.22817446534443 +1705037458,1705037458,1.9075937592487935 +1705037463,1705037463,63.80180637719717 +1705037468,1705037468,60.81888777815744 +1705037473,1705037473,26.64321659109692 +1705037478,1705037478,4.134411663338811 +1705037483,1705037483,92.06332393170709 +1705037488,1705037488,47.04667525534033 +1705037618,1705037618,58.269333628972454 +1705037623,1705037623,80.29240680599199 +1705037628,1705037628,63.0464746486067 +1705037633,1705037633,32.23729993603867 +1705037638,1705037638,21.594165410309905 +1705037643,1705037643,24.06160667472641 +1705037648,1705037648,71.68251014293642 +1705037653,1705037653,86.88973011829552 +1705037658,1705037658,46.957444652691635 +1705037793,1705037793,24.209643111615154 +1705037798,1705037798,8.682348926543304 +1705037803,1705037803,52.57073371718882 +1705037808,1705037808,48.148708412671446 +1705037813,1705037813,77.73987936410599 +1705037818,1705037818,75.61277195153883 +1705037823,1705037823,61.43046670601316 +1705037828,1705037828,41.19392765681731 +1705037833,1705037833,91.17778692634899 +1705037988,1705037988,80.57870417006583 +1705037993,1705037993,33.919670478656315 +1705037998,1705037998,39.52916640170986 +1705038003,1705038003,42.28531932253973 +1705038008,1705038008,71.66111002622668 +1705038013,1705038013,69.84441194756168 +1705038018,1705038018,6.29176985341009 +1705038023,1705038023,47.01887530501185 +1705038028,1705038028,81.50099105981712 +1705038128,1705038128,16.598128523249823 +1705038133,1705038133,27.848307354944968 +1705038138,1705038138,77.9160860075253 +1705038143,1705038143,69.37194882282219 +1705038148,1705038148,97.73444529684062 +1705038153,1705038153,75.3272670416541 +1705038158,1705038158,64.21002747135829 +1705038163,1705038163,46.73647885151395 +1705038168,1705038168,55.11519609151184 +1705038233,1705038233,77.96571963890652 +1705038238,1705038238,19.239383430250268 +1705038243,1705038243,10.821553198715616 +1705038248,1705038248,12.108647327758948 +1705038253,1705038253,69.80080081093651 +1705038258,1705038258,26.10333068179059 +1705038263,1705038263,93.34478934574774 +1705038268,1705038268,37.056629577825106 +1705038273,1705038273,82.60413923460295 +1705038468,1705038468,85.60814016341382 +1705038473,1705038473,68.89196061061327 +1705038478,1705038478,52.059039367369685 +1705038483,1705038483,68.57823182463277 +1705038488,1705038488,97.35735792803867 +1705038493,1705038493,43.21451510223589 +1705038498,1705038498,20.277550516531416 +1705038503,1705038503,88.00116735607796 +1705038508,1705038508,63.383324402696196 +1705038628,1705038628,42.94930126005034 +1705038633,1705038633,34.64857344610185 +1705038638,1705038638,10.154609978937568 +1705038643,1705038643,16.316840835394895 +1705038648,1705038648,77.24693099082829 +1705038653,1705038653,41.34257428647694 +1705038658,1705038658,57.771856132859156 +1705038663,1705038663,0.19996163761626384 +1705038668,1705038668,24.425038420856804 +1705038793,1705038793,65.8833846240967 +1705038798,1705038798,6.5953570372028985 +1705038803,1705038803,99.04788619325907 +1705038808,1705038808,10.88486576081964 +1705038813,1705038813,78.88672285487132 +1705038818,1705038818,83.89863344949728 +1705038823,1705038823,64.23052241583322 +1705038828,1705038828,30.336717621555344 +1705038833,1705038833,99.46351361464222 +1705038968,1705038968,25.74525957012289 +1705038973,1705038973,24.369196594846887 +1705038978,1705038978,89.43382406677516 +1705038983,1705038983,39.41323302851539 +1705038988,1705038988,55.69259958640571 +1705038993,1705038993,92.37794731427182 +1705038998,1705038998,44.32751060687379 +1705039003,1705039003,43.37564869238657 +1705039008,1705039008,57.300934985103325 +1705039118,1705039118,70.56770256575842 +1705039123,1705039123,90.50214243906923 +1705039128,1705039128,54.38261945741974 +1705039133,1705039133,70.39051639959554 +1705039138,1705039138,67.99291674517029 +1705039143,1705039143,11.20240301262333 +1705039148,1705039148,36.65985105026559 +1705039153,1705039153,72.8949147671412 +1705039158,1705039158,77.97514624561818 +1705039273,1705039273,78.90467159320227 +1705039278,1705039278,69.45393757845935 +1705039283,1705039283,72.25278850148104 +1705039288,1705039288,72.13833278108936 +1705039293,1705039293,8.447940582263092 +1705039298,1705039298,12.44038075427486 +1705039303,1705039303,8.379371694959447 +1705039308,1705039308,47.949272258136396 +1705039313,1705039313,57.94397593537366 +1705039403,1705039403,92.84879313142599 +1705039408,1705039408,39.16851224100132 +1705039413,1705039413,22.08762242763066 +1705039418,1705039418,99.13983515019804 +1705039423,1705039423,0.6240451076778397 +1705039428,1705039428,96.6930886577789 +1705039433,1705039433,75.407823678174 +1705039438,1705039438,53.83594153796856 +1705039443,1705039443,32.185190985239984 +1705039513,1705039513,34.14978979535614 +1705039518,1705039518,40.786839704235476 +1705039523,1705039523,17.796436271533512 +1705039528,1705039528,85.24975148515081 +1705039533,1705039533,49.44809303938676 +1705039538,1705039538,37.59868937487114 +1705039543,1705039543,91.54278042756752 +1705039548,1705039548,3.935557155015046 +1705039553,1705039553,8.983634830060637 +1705039643,1705039643,18.027498702596123 +1705039648,1705039648,9.97659741611957 +1705039653,1705039653,0.32880395067671486 +1705039658,1705039658,77.59025602338284 +1705039663,1705039663,91.22459913200404 +1705039668,1705039668,70.37136838003227 +1705039673,1705039673,22.527606140344712 +1705039678,1705039678,37.488159187034285 +1705039683,1705039683,83.25110940392729 +1705039773,1705039773,94.57701829933121 +1705039778,1705039778,43.127911481125004 +1705039783,1705039783,24.617597561286797 +1705039788,1705039788,87.9147007859506 +1705039793,1705039793,57.3141528311232 +1705039798,1705039798,60.201736028933 +1705039803,1705039803,81.53801353044908 +1705039808,1705039808,87.92576818678903 +1705039813,1705039813,26.587846410169213 +1705039933,1705039933,33.59144323994582 +1705039938,1705039938,51.738308577429805 +1705039943,1705039943,24.161859769321993 +1705039948,1705039948,98.71879562487085 +1705039953,1705039953,46.367011333651966 +1705039958,1705039958,83.19756776880182 +1705039963,1705039963,84.07674943107499 +1705039968,1705039968,48.95324090401941 +1705039973,1705039973,20.886718752228127 +1705040098,1705040098,25.437699868751494 +1705040103,1705040103,46.09851949086982 +1705040108,1705040108,21.408819543725865 +1705040113,1705040113,52.706090533200964 +1705040118,1705040118,88.22912463482754 +1705040123,1705040123,20.47219123893368 +1705040128,1705040128,99.88188924523033 +1705040133,1705040133,62.463278547463254 +1705040138,1705040138,42.59392859306421 +1705040263,1705040263,43.58822342187775 +1705040268,1705040268,12.831997062658962 +1705040273,1705040273,71.56876533319382 +1705040278,1705040278,12.467483910363153 +1705040283,1705040283,13.15947359797034 +1705040288,1705040288,19.56071128674781 +1705040293,1705040293,29.12403052956709 +1705040298,1705040298,24.482790078702276 +1705040303,1705040303,37.60518282521673 +1705040383,1705040383,54.427638863337435 +1705040388,1705040388,69.81990865728719 +1705040393,1705040393,41.96754579457834 +1705040398,1705040398,49.94090669960421 +1705040403,1705040403,44.18609250422123 +1705040408,1705040408,73.67456831136107 +1705040413,1705040413,87.40186607382331 +1705040418,1705040418,60.88629065256257 +1705040423,1705040423,3.3249244688049795 +1705040573,1705040573,70.43143245280153 +1705040578,1705040578,44.177122646232924 +1705040583,1705040583,30.15262175063782 +1705040588,1705040588,42.567660211188176 +1705040593,1705040593,59.43696422741769 +1705040598,1705040598,42.8234607207704 +1705040603,1705040603,7.084901511296682 +1705040608,1705040608,90.42904792748682 +1705040613,1705040613,67.9344271914131 +1705040758,1705040758,55.582802252790984 +1705040763,1705040763,89.54897920111306 +1705040768,1705040768,54.88366313190991 +1705040773,1705040773,8.118337799034903 +1705040778,1705040778,29.545534497365377 +1705040783,1705040783,69.5327783726842 +1705040788,1705040788,87.16206800162018 +1705040793,1705040793,12.95285498518578 +1705040798,1705040798,21.06081368792292 +1705040978,1705040978,38.72913002301851 +1705040983,1705040983,64.60044846982775 +1705040988,1705040988,15.229508149329273 +1705040993,1705040993,10.253744083777894 +1705040998,1705040998,46.565736395823485 +1705041003,1705041003,38.60424878027394 +1705041008,1705041008,94.24341196053234 +1705041013,1705041013,35.70737049071953 +1705041018,1705041018,2.617567292576428 +1705041133,1705041133,16.973080707729725 +1705041138,1705041138,60.51018739208518 +1705041143,1705041143,7.060071278459179 +1705041148,1705041148,94.94580894084594 +1705041153,1705041153,21.011232259442856 +1705041158,1705041158,11.788444134248122 +1705041163,1705041163,22.116193514822147 +1705041168,1705041168,13.712016989227616 +1705041173,1705041173,8.314095072246408 +1705041243,1705041243,46.82010313468419 +1705041248,1705041248,99.29216835076653 +1705041253,1705041253,26.56124515809186 +1705041258,1705041258,74.03335470736525 +1705041263,1705041263,98.74505869941265 +1705041268,1705041268,58.52965852316836 +1705041273,1705041273,98.47125116125005 +1705041278,1705041278,57.88533315967867 +1705041283,1705041283,0.8406811754575028 +1705041378,1705041378,85.59111564486763 +1705041383,1705041383,37.326197474732005 +1705041388,1705041388,48.939595022172014 +1705041393,1705041393,15.082737801932911 +1705041398,1705041398,74.47014452845353 +1705041403,1705041403,54.29782611473608 +1705041408,1705041408,23.396817821021298 +1705041413,1705041413,73.02401123883615 +1705041418,1705041418,5.704330685661352 +1705041458,1705041458,37.50566408397923 +1705041463,1705041463,9.574019545292122 +1705041468,1705041468,76.93504301416554 +1705041473,1705041473,65.24847845505502 +1705041478,1705041478,37.355818183676284 +1705041483,1705041483,57.71766439334941 +1705041488,1705041488,64.66982081176637 +1705041493,1705041493,53.81841086339186 +1705041498,1705041498,89.9086178514773 +1705041578,1705041578,92.2368310245343 +1705041583,1705041583,79.51134338989785 +1705041588,1705041588,14.677926417581144 +1705041593,1705041593,16.671297460364332 +1705041598,1705041598,8.291904275515327 +1705041603,1705041603,85.04690431165443 +1705041608,1705041608,58.33560817480223 +1705041613,1705041613,68.33866891304613 +1705041618,1705041618,52.15365873885521 +1705041718,1705041718,61.645478891141494 +1705041723,1705041723,40.71621843537871 +1705041728,1705041728,24.001238813298542 +1705041733,1705041733,55.44065163538377 +1705041738,1705041738,80.4747566427465 +1705041743,1705041743,48.480852895601515 +1705041748,1705041748,82.31296038576554 +1705041753,1705041753,89.94195417983143 +1705041758,1705041758,28.619790379604026 +1705041828,1705041828,5.843726591902665 +1705041833,1705041833,68.6669336074032 +1705041838,1705041838,18.782887630656187 +1705041843,1705041843,6.672523965234712 +1705041848,1705041848,24.14247490696476 +1705041853,1705041853,55.15337078610909 +1705041858,1705041858,23.44697397199934 +1705041863,1705041863,70.98373684297906 +1705041868,1705041868,2.0394649169252044 +1705041953,1705041953,94.33184715074617 +1705041958,1705041958,33.28062389671739 +1705041963,1705041963,60.04060597112251 +1705041968,1705041968,99.14446333039773 +1705041973,1705041973,92.85197715475252 +1705041978,1705041978,93.41303987121992 +1705041983,1705041983,55.73378129901767 +1705041988,1705041988,95.56598974733896 +1705041993,1705041993,37.47280680495366 +1705042053,1705042053,67.1013912621842 +1705042058,1705042058,95.06496505110023 +1705042063,1705042063,17.88252125855314 +1705042068,1705042068,15.205326044899492 +1705042073,1705042073,93.70684516919212 +1705042078,1705042078,75.20056715044578 +1705042083,1705042083,75.90063009827335 +1705042088,1705042088,63.62562971513629 +1705042093,1705042093,1.6672763082828945 +1705042173,1705042173,62.48070200050934 +1705042178,1705042178,4.173004701328498 +1705042183,1705042183,0.6981141694076598 +1705042188,1705042188,85.19814632233951 +1705042193,1705042193,92.96565355014424 +1705042198,1705042198,13.698028317710143 +1705042203,1705042203,73.9836634181733 +1705042208,1705042208,25.89125132547334 +1705042213,1705042213,90.82802904414953 +1705042268,1705042268,18.123113638198973 +1705042273,1705042273,36.679668245964905 +1705042278,1705042278,19.835274953198468 +1705042283,1705042283,48.731546493864144 +1705042358,1705042358,54.70201620382162 +1705042363,1705042363,79.34968025441663 +1705042368,1705042368,46.4567236720285 +1705042373,1705042373,35.270244059844515 +1705042378,1705042378,49.17544538444446 +1705042433,1705042433,52.2758087920445 +1705042438,1705042438,24.799601229391964 +1705042443,1705042443,39.682196852908056 +1705042448,1705042448,37.54194254341866 +1705042508,1705042508,1.4099561627867851 +1705042513,1705042513,63.65919080360381 +1705042518,1705042518,18.43348467791166 +1705042523,1705042523,37.401260753425106 +1705042528,1705042528,25.930209601410414 +1705042598,1705042598,89.31515183546686 +1705042603,1705042603,32.65340218935376 +1705042608,1705042608,39.01708189552112 +1705042613,1705042613,72.99524247912755 +1705042673,1705042673,2.9638994438261346 +1705042678,1705042678,9.508436729478586 +1705042683,1705042683,18.222404219646627 +1705042688,1705042688,34.875544528872425 +1705042693,1705042693,51.928935448535086 +1705042763,1705042763,58.916659637638936 +1705042768,1705042768,44.00730240345302 +1705042773,1705042773,74.16052151848157 +1705042778,1705042778,8.006632149358417 +1705042818,1705042818,86.08550242672159 +1705042823,1705042823,14.937979453880478 +1705042828,1705042828,51.58798765756184 +1705042833,1705042833,27.560622853514825 +1705042838,1705042838,61.89404815527184 +1705042883,1705042883,39.49614452859721 +1705042888,1705042888,16.222782650107735 +1705042893,1705042893,56.84228418249666 +1705042898,1705042898,31.7315328495525 +1705042943,1705042943,23.945817140939806 +1705042948,1705042948,10.904533795784843 +1705042953,1705042953,21.2181165898074 +1705042958,1705042958,48.0670027517384 +1705042963,1705042963,79.64502948479407 +1705043013,1705043013,20.51501360304513 +1705043018,1705043018,61.96923557100051 +1705043023,1705043023,40.72860195586488 +1705043028,1705043028,18.41193646155961 +1705043083,1705043083,71.14313555378803 +1705043088,1705043088,50.05578295040184 +1705043093,1705043093,68.42586784869484 +1705043098,1705043098,97.93065403051064 +1705043103,1705043103,96.96596277076685 +1705043158,1705043158,40.38734043650941 +1705043163,1705043163,63.82224832864707 +1705043168,1705043168,21.07908759576266 +1705043173,1705043173,19.013905268520258 +1705043233,1705043233,59.29237164217685 +1705043238,1705043238,47.97236493701526 +1705043243,1705043243,77.12692320929425 +1705043248,1705043248,83.66776797744579 +1705043253,1705043253,16.18926146102069 +1705043328,1705043328,21.655607843241718 +1705043333,1705043333,19.629928883927473 +1705043338,1705043338,90.89573149570846 +1705043343,1705043343,57.04324843465268 +1705043413,1705043413,1.2149707662898135 +1705043418,1705043418,20.8656416486088 +1705043423,1705043423,27.783457817827607 +1705043428,1705043428,87.09670877119622 +1705043433,1705043433,74.60677379456789 +1705043513,1705043513,40.38787358392016 +1705043518,1705043518,88.61759358413491 +1705043523,1705043523,32.08774310732087 +1705043528,1705043528,17.51362785083882 +1705043588,1705043588,5.795178945143753 +1705043593,1705043593,78.74987674167689 +1705043598,1705043598,61.71552547893218 +1705043603,1705043603,34.50960917614005 +1705043608,1705043608,77.8697718550507 +1705043688,1705043688,25.225040185217505 +1705043693,1705043693,97.79278881584553 +1705043698,1705043698,38.50792984644659 +1705043703,1705043703,48.494789541835225 +1705043788,1705043788,95.96753077020573 +1705043793,1705043793,95.98234401477266 +1705043798,1705043798,34.0665905136853 +1705043803,1705043803,52.494496692436634 +1705043808,1705043808,33.06182446710947 +1705043823,1705043823,31.749222873912096 +1705043828,1705043828,38.8543218756608 +1705043833,1705043833,97.55834578117054 +1705043838,1705043838,13.436747678099126 +1705043903,1705043903,5.851427059765979 +1705043908,1705043908,74.47725355823124 +1705043913,1705043913,66.77871305305989 +1705043918,1705043918,81.21846070838315 +1705043923,1705043923,18.893887177106894 +1705043978,1705043978,52.17027426901607 +1705043983,1705043983,47.08291277283352 +1705043988,1705043988,50.85810384944629 +1705043993,1705043993,15.288970759782305 +1705044088,1705044088,79.21682590202697 +1705044093,1705044093,11.654057839774168 +1705044098,1705044098,50.78287559724587 +1705044103,1705044103,93.69458176096605 +1705044108,1705044108,40.524106020637305 +1705044163,1705044163,11.396355690496506 +1705044168,1705044168,50.71046672934083 +1705044173,1705044173,4.424824033638708 +1705044178,1705044178,28.005812987824076 +1705044243,1705044243,7.795702953765349 +1705044248,1705044248,50.27606896631277 +1705044253,1705044253,92.16757442318682 +1705044258,1705044258,40.06551543554726 +1705044263,1705044263,81.41190540859999 +1705044308,1705044308,58.82120792163992 +1705044313,1705044313,23.400640530582617 +1705044318,1705044318,91.28987749851687 +1705044323,1705044323,94.65653351524838 +1705044378,1705044378,49.58899824390307 +1705044383,1705044383,77.96323449915361 +1705044388,1705044388,57.759827250810126 +1705044393,1705044393,82.41730470561728 +1705044398,1705044398,45.88402614205348 +1705044448,1705044448,41.481813805335236 +1705044453,1705044453,4.435289123749852 +1705044458,1705044458,1.8991227178799308 +1705044463,1705044463,0.13674368602735187 +1705044518,1705044518,62.68640174812569 +1705044523,1705044523,71.96276346952274 +1705044528,1705044528,77.01241805718644 +1705044533,1705044533,80.49473127590579 +1705044538,1705044538,92.68947792925778 +1705044593,1705044593,52.33636143063578 +1705044598,1705044598,62.286329976020724 +1705044603,1705044603,47.69124432963131 +1705044608,1705044608,14.076388239469573 +1705044683,1705044683,98.85861136796396 +1705044688,1705044688,58.3900016680302 +1705044693,1705044693,92.72108864726269 +1705044698,1705044698,78.86672798830749 +1705044703,1705044703,19.20591042813734 +1705044758,1705044758,16.51954478183023 +1705044763,1705044763,42.83445424841705 +1705044768,1705044768,33.278799891220714 +1705044773,1705044773,3.0287511669265577 +1705044833,1705044833,71.52648987470573 +1705044838,1705044838,19.789851454698116 +1705044843,1705044843,14.84324538116949 +1705044848,1705044848,36.162622929657005 +1705044853,1705044853,26.645189742998898 +1705044883,1705044883,52.32165592092165 +1705044888,1705044888,94.5320940853532 +1705044893,1705044893,57.131365257204166 +1705044898,1705044898,93.72058518183127 +1705044973,1705044973,71.31431832748859 +1705044978,1705044978,55.02829615551653 +1705044983,1705044983,58.7031942127637 +1705044988,1705044988,17.13689184772823 +1705044993,1705044993,27.2658859807161 +1705045058,1705045058,89.67050202134762 +1705045063,1705045063,64.62118006329595 +1705045068,1705045068,58.298704170007085 +1705045073,1705045073,35.26181458222849 +1705045128,1705045128,68.5479594354656 +1705045133,1705045133,91.43211885421861 +1705045138,1705045138,18.791094896566808 +1705045143,1705045143,77.16204393622836 +1705045148,1705045148,20.526658762048967 +1705045198,1705045198,16.509558670376055 +1705045203,1705045203,29.812414764275818 +1705045208,1705045208,7.979022706801442 +1705045213,1705045213,71.24907693611735 +1705045293,1705045293,2.160881412485649 +1705045298,1705045298,81.06640662610342 +1705045303,1705045303,28.243995985384828 +1705045308,1705045308,36.34405551459352 +1705045313,1705045313,97.5854755402301 +1705045348,1705045348,57.768878289223146 +1705045353,1705045353,73.70663415163384 +1705045358,1705045358,82.26861127487106 +1705045363,1705045363,93.90316689189271 +1705045368,1705045368,52.85843878185702 +1705045408,1705045408,53.03060167290895 +1705045413,1705045413,52.70192550434033 +1705045418,1705045418,84.61200803593535 +1705045423,1705045423,58.282739724649744 +1705045493,1705045493,52.23511908744517 +1705045498,1705045498,28.877908266084074 +1705045503,1705045503,20.079329452260698 +1705045508,1705045508,83.93381933221059 +1705045513,1705045513,82.78449877534601 +1705045563,1705045563,1.232344410410957 +1705045568,1705045568,7.956774876341699 +1705045573,1705045573,72.83334814782795 +1705045578,1705045578,16.077470386916303 +1705045633,1705045633,15.97687359686375 +1705045638,1705045638,8.172586235762491 +1705045643,1705045643,20.80825587164542 +1705045648,1705045648,32.941138920224 +1705045653,1705045653,56.3112443685841 +1705045708,1705045708,86.05359950311605 +1705045713,1705045713,0.06059019622305373 +1705045718,1705045718,98.39383487666483 +1705045723,1705045723,80.63381418323829 +1705045783,1705045783,83.83932739744678 +1705045788,1705045788,93.08575734983454 +1705045793,1705045793,61.32790531317176 +1705045798,1705045798,16.676700279397426 +1705045803,1705045803,8.71210498393058 +1705045858,1705045858,70.8819066437109 +1705045863,1705045863,94.53587114447717 +1705045868,1705045868,18.628454809209416 +1705045873,1705045873,97.84834708647098 +1705045933,1705045933,70.6879753557951 +1705045938,1705045938,78.88359255210038 +1705045943,1705045943,73.87840143014557 +1705045948,1705045948,61.26798790039093 +1705045953,1705045953,97.92816804644798 +1705046003,1705046003,93.49728714029489 +1705046008,1705046008,87.89669058684835 +1705046013,1705046013,60.00762578123775 +1705046018,1705046018,64.5074356095096 +1705046093,1705046093,20.055151807094074 +1705046098,1705046098,25.905674838141866 +1705046103,1705046103,66.65571464058509 +1705046108,1705046108,95.94318362906839 +1705046113,1705046113,90.6699114300511 +1705046153,1705046153,97.89581859866766 +1705046158,1705046158,25.331500364410875 +1705046163,1705046163,71.1587935825704 +1705046168,1705046168,72.0510321672465 +1705046238,1705046238,59.616719357657054 +1705046243,1705046243,43.82466002652548 +1705046248,1705046248,76.91973569691012 +1705046253,1705046253,25.373689841585158 +1705046258,1705046258,95.44028162266075 +1705046303,1705046303,55.501256013083335 +1705046308,1705046308,16.731170363511428 +1705046313,1705046313,5.2254847479373705 +1705046318,1705046318,72.4836690574935 +1705046378,1705046378,95.21774557669468 +1705046383,1705046383,90.51901996622108 +1705046388,1705046388,59.7936254685156 +1705046393,1705046393,48.321349581591754 +1705046398,1705046398,18.19834737161171 +1705046453,1705046453,7.6827641626157295 +1705046458,1705046458,13.9135227724691 +1705046463,1705046463,41.20017037276285 +1705046468,1705046468,80.19268726851604 +1705046518,1705046518,78.2197182542633 +1705046523,1705046523,58.17238299468917 +1705046528,1705046528,39.851763737271995 +1705046533,1705046533,88.78864020420282 +1705046538,1705046538,89.94277091887228 +1705046568,1705046568,85.38363112579638 +1705046573,1705046573,42.86078479062303 +1705046578,1705046578,49.00913710006552 +1705046583,1705046583,31.38080525141308 +1705046663,1705046663,56.259475275395076 +1705046668,1705046668,26.13517863141275 +1705046673,1705046673,20.18444464790169 +1705046678,1705046678,98.36383600339985 +1705046683,1705046683,72.89405806190643 +1705046713,1705046713,64.42997853042715 +1705046718,1705046718,19.43565304063648 +1705046723,1705046723,89.18338190519843 +1705046728,1705046728,38.211241907459005 +1705046813,1705046813,69.2505501327115 +1705046818,1705046818,24.0561599028819 +1705046823,1705046823,71.20657071951793 +1705046828,1705046828,17.005364507415553 +1705046833,1705046833,47.37564026517141 +1705046903,1705046903,98.4409488812101 +1705046908,1705046908,42.943350399120575 +1705046913,1705046913,54.546241523835604 +1705046918,1705046918,60.142213245309165 +1705047003,1705047003,68.91728977659083 +1705047008,1705047008,60.45914283299325 +1705047013,1705047013,5.1404770688451284 +1705047018,1705047018,8.142254274596006 +1705047023,1705047023,98.2895488775687 +1705047078,1705047078,60.2886768544176 +1705047083,1705047083,96.34388434770308 +1705047088,1705047088,74.06346919747588 +1705047093,1705047093,54.7408277418142 +1705047143,1705047143,70.6352084923004 +1705047148,1705047148,18.6869022479364 +1705047153,1705047153,38.30488976318305 +1705047158,1705047158,68.18386005962097 +1705047163,1705047163,99.68229695378548 +1705047208,1705047208,81.52636680320236 +1705047213,1705047213,86.47112125534646 +1705047218,1705047218,63.84806693668572 +1705047223,1705047223,27.83837342408779 +1705047298,1705047298,17.273484655453153 +1705047303,1705047303,23.10943844508646 +1705047308,1705047308,54.66165562737968 +1705047313,1705047313,13.523927089306543 +1705047318,1705047318,51.52485190489637 +1705047368,1705047368,78.21677548690859 +1705047373,1705047373,79.46423811969123 +1705047378,1705047378,2.778897025788063 +1705047383,1705047383,92.57554681570616 +1705047463,1705047463,66.50062106794036 +1705047468,1705047468,97.48311796756381 +1705047473,1705047473,47.6083017697809 +1705047478,1705047478,99.75993242156107 +1705047483,1705047483,29.38755486667978 +1705047553,1705047553,92.57226157076637 +1705047558,1705047558,54.85869158704375 +1705047563,1705047563,94.76698372576841 +1705047568,1705047568,62.731479005585854 +1705047668,1705047668,40.63236962723481 +1705047673,1705047673,96.86839024102369 +1705047678,1705047678,73.56771194777595 +1705047683,1705047683,28.183441551335076 +1705047688,1705047688,8.492883791380768 +1705047733,1705047733,37.96728659667949 +1705047738,1705047738,92.75551813665174 +1705047743,1705047743,8.709443223560065 +1705047748,1705047748,50.65862864874605 +1705047818,1705047818,92.59178448097069 +1705047823,1705047823,93.67949106726803 +1705047828,1705047828,44.61209730956924 +1705047833,1705047833,5.997534468965926 +1705047838,1705047838,78.03488189360968 +1705047888,1705047888,79.60413133276512 +1705047893,1705047893,88.11780671002097 +1705047898,1705047898,12.917882789177249 +1705047903,1705047903,0.32112425504489117 +1705047978,1705047978,62.81377928189299 +1705047983,1705047983,26.586748408451967 +1705047988,1705047988,60.87246918418509 +1705047993,1705047993,24.990051593648353 +1705047998,1705047998,45.71855830679027 +1705048053,1705048053,35.46113373023667 +1705048058,1705048058,70.14117597611076 +1705048063,1705048063,2.3217198700597796 +1705048068,1705048068,10.984067206490977 +1705048123,1705048123,18.09453851636321 +1705048128,1705048128,97.82264748659686 +1705048133,1705048133,28.388784979046378 +1705048138,1705048138,10.44458863232176 +1705048143,1705048143,24.372652157607888 +1705048213,1705048213,9.388478483907425 +1705048218,1705048218,57.85786770847764 +1705048223,1705048223,91.89177384796237 +1705048228,1705048228,83.41453321732365 +1705048283,1705048283,5.339602664682541 +1705048288,1705048288,20.14566574522455 +1705048293,1705048293,8.489515839304751 +1705048298,1705048298,11.903943026032405 +1705048303,1705048303,13.776308756061884 +1705048378,1705048378,78.27343872614843 +1705048383,1705048383,58.00201482191729 +1705048388,1705048388,35.279003437407944 +1705048393,1705048393,60.00160507966035 +1705048463,1705048463,72.30197383179114 +1705048468,1705048468,88.24725436513519 +1705048473,1705048473,42.11857734775637 +1705048478,1705048478,52.68337633691169 +1705048483,1705048483,99.52802774924457 +1705048528,1705048528,56.646097935761574 +1705048533,1705048533,78.37548294260411 +1705048538,1705048538,6.050719089397083 +1705048543,1705048543,5.301671424339061 +1705048623,1705048623,24.389356468023283 +1705048628,1705048628,95.8513046360174 +1705048633,1705048633,40.96435772242707 +1705048638,1705048638,35.575294950851685 +1705048643,1705048643,24.442375983564535 +1705048733,1705048733,24.879542118550347 +1705048738,1705048738,94.12103587809504 +1705048743,1705048743,51.2976145375322 +1705048748,1705048748,84.87324255536292 +1705048838,1705048838,74.08002866440228 +1705048843,1705048843,66.32152403914893 +1705048848,1705048848,88.76501787994793 +1705048853,1705048853,43.918712017267744 +1705048943,1705048943,38.30282151264226 +1705048948,1705048948,72.8111898305442 +1705048953,1705048953,37.11933343830949 +1705048958,1705048958,53.818138637887536 +1705048963,1705048963,12.628458416134603 +1705049023,1705049023,20.07665793364041 +1705049028,1705049028,58.40161039712045 +1705049033,1705049033,57.26955969741837 +1705049038,1705049038,82.80265553272837 +1705049118,1705049118,81.47595846827642 +1705049123,1705049123,45.97458833921544 +1705049128,1705049128,80.44912998691164 +1705049133,1705049133,12.57576763209174 +1705049138,1705049138,46.768600085515565 +1705049163,1705049163,73.58721116186875 +1705049168,1705049168,47.43057067696802 +1705049173,1705049173,14.115679457599528 +1705049178,1705049178,2.0411787012610705 +1705049228,1705049228,89.67416036811154 +1705049233,1705049233,67.70905799332884 +1705049238,1705049238,51.64505110255069 +1705049243,1705049243,32.778848397105875 +1705049248,1705049248,16.78604364557511 +1705049298,1705049298,72.54153228081329 +1705049303,1705049303,18.178787418246344 +1705049308,1705049308,55.31457790723104 +1705049313,1705049313,86.9065472384166 +1705049383,1705049383,23.513519591852383 +1705049388,1705049388,0.7829691427858165 +1705049393,1705049393,95.07573948592632 +1705049398,1705049398,31.821227826891608 +1705049403,1705049403,53.44756166902744 +1705049463,1705049463,22.645665043947872 +1705049468,1705049468,57.09376367233834 +1705049473,1705049473,7.283755306137274 +1705049478,1705049478,18.906131253800183 +1705049538,1705049538,94.50422442087681 +1705049543,1705049543,91.00076673387116 +1705049548,1705049548,54.09048227838563 +1705049553,1705049553,12.98559578414713 +1705049558,1705049558,97.9800715879263 +1705049613,1705049613,80.01144776776813 +1705049618,1705049618,49.58555876228423 +1705049623,1705049623,30.447947525867715 +1705049628,1705049628,31.47168509443883 +1705049688,1705049688,64.01648894936976 +1705049693,1705049693,7.281743125999185 +1705049698,1705049698,61.73767726876963 +1705049703,1705049703,61.47377816113997 +1705049708,1705049708,69.67482823259094 +1705049763,1705049763,86.62523410994886 +1705049768,1705049768,46.12417922315834 +1705049773,1705049773,31.183300986896167 +1705049778,1705049778,73.81285834984159 +1705049838,1705049838,63.05138835049677 +1705049843,1705049843,83.06349403234479 +1705049848,1705049848,53.5870718888147 +1705049853,1705049853,61.20521816222555 +1705049858,1705049858,33.8698288698904 +1705049903,1705049903,16.43763069496178 +1705049908,1705049908,11.987414769770165 +1705049913,1705049913,97.14399019830297 +1705049918,1705049918,4.0614887100439585 +1705049983,1705049983,91.16908322681759 +1705049988,1705049988,95.7589415378524 +1705049993,1705049993,57.042678422363835 +1705049998,1705049998,60.5048810836335 +1705050003,1705050003,13.610336602912154 +1705050053,1705050053,87.24432854746492 +1705050058,1705050058,54.04471526652168 +1705050063,1705050063,75.83136909028933 +1705050068,1705050068,53.44629022898519 +1705050148,1705050148,13.14400918916544 +1705050153,1705050153,65.03190149742089 +1705050158,1705050158,42.498923054724656 +1705050163,1705050163,93.99405845931561 +1705050168,1705050168,48.56425313616498 +1705050223,1705050223,72.10476618199179 +1705050228,1705050228,83.91312269971336 +1705050233,1705050233,52.353297027281606 +1705050238,1705050238,29.66476241489491 +1705050293,1705050293,75.96093102667915 +1705050298,1705050298,67.27221255221393 +1705050303,1705050303,73.11209838870981 +1705050308,1705050308,33.400272339939676 +1705050313,1705050313,77.00848809958028 +1705050348,1705050348,98.25098569381184 +1705050353,1705050353,8.451783911594212 +1705050358,1705050358,14.897530305411133 +1705050363,1705050363,69.20998285286906 +1705050403,1705050403,88.60226769020542 +1705050408,1705050408,61.67245160964211 +1705050413,1705050413,20.09383482020778 +1705050418,1705050418,84.86476411939388 +1705050423,1705050423,81.392107577665 +1705050448,1705050448,98.63595084453004 +1705050453,1705050453,17.312538893686035 +1705050458,1705050458,89.9051157862797 +1705050463,1705050463,60.464585168265096 +1705050508,1705050508,84.03168852623956 +1705050513,1705050513,90.14880350691648 +1705050518,1705050518,79.13913447203285 +1705050523,1705050523,2.382062893953507 +1705050528,1705050528,5.85986287202217 +1705050548,1705050548,84.34389984321072 +1705050553,1705050553,16.10017163254378 +1705050558,1705050558,96.98077498846988 +1705050563,1705050563,94.20628099428609 +1705050598,1705050598,86.70306125334888 +1705050603,1705050603,83.24669614992474 +1705050608,1705050608,88.73810639469158 +1705050613,1705050613,26.100425531046866 +1705050618,1705050618,46.68449843204917 +1705050648,1705050648,60.72182565721861 +1705050653,1705050653,59.304647717006134 +1705050658,1705050658,87.14176212890133 +1705050663,1705050663,89.61636242896527 +1705050698,1705050698,67.4385354535357 +1705050703,1705050703,83.09425152429034 +1705050708,1705050708,75.50327840556338 +1705050713,1705050713,44.5609692777335 +1705050718,1705050718,76.66720568397069 +1705050773,1705050773,90.60200752401687 +1705050778,1705050778,45.7051527808842 +1705050783,1705050783,50.79390119971032 +1705050788,1705050788,45.99913428451067 +1705050848,1705050848,63.027780782353325 +1705050853,1705050853,56.7856228063974 +1705050858,1705050858,12.81402475851129 +1705050863,1705050863,21.008172760928336 +1705050868,1705050868,67.12342156717767 +1705050908,1705050908,48.263162752761154 +1705050913,1705050913,55.50725413163268 +1705050918,1705050918,80.2536014556992 +1705050923,1705050923,21.869507391585785 +1705050978,1705050978,19.478732568220146 +1705050983,1705050983,42.999322811740285 +1705050988,1705050988,30.90644495467716 +1705050993,1705050993,86.38420392579329 +1705050998,1705050998,73.4633359728562 +1705051048,1705051048,23.14417246636815 +1705051053,1705051053,59.8436754107749 +1705051058,1705051058,21.54857412314204 +1705051063,1705051063,34.37735244866855 +1705051148,1705051148,21.16581541289875 +1705051153,1705051153,2.205453341438657 +1705051158,1705051158,45.656372053882855 +1705051163,1705051163,37.68500276204407 +1705051168,1705051168,40.028026668433746 +1705051218,1705051218,31.975427059467208 +1705051223,1705051223,9.60313802645939 +1705051228,1705051228,62.25051923328845 +1705051233,1705051233,46.395697201593876 +1705051293,1705051293,8.182422706584891 +1705051298,1705051298,47.66823499861055 +1705051303,1705051303,52.666770494172596 +1705051308,1705051308,97.98915513464908 +1705051313,1705051313,54.23214309789229 +1705051363,1705051363,73.17715798968001 +1705051368,1705051368,11.079583674749859 +1705051373,1705051373,64.11215064447124 +1705051378,1705051378,18.789432890953584 +1705051463,1705051463,64.04045694684976 +1705051468,1705051468,20.99691535089899 +1705051473,1705051473,86.54957123821444 +1705051478,1705051478,84.43695631340985 +1705051483,1705051483,42.643069727781494 +1705051523,1705051523,41.79653143931302 +1705051528,1705051528,60.60236122239618 +1705051533,1705051533,93.79801787525368 +1705051538,1705051538,31.846773132027227 +1705051623,1705051623,82.36365363559499 +1705051628,1705051628,83.39873846725139 +1705051633,1705051633,24.166298244548923 +1705051638,1705051638,15.642978573880328 +1705051643,1705051643,38.90204731751433 +1705051688,1705051688,48.3753024400968 +1705051693,1705051693,52.27953254581262 +1705051698,1705051698,54.61748081618668 +1705051703,1705051703,37.60583093101892 +1705051813,1705051813,72.369048583231 +1705051818,1705051818,46.84233019861568 +1705051823,1705051823,6.08494258025678 +1705051828,1705051828,52.28299268936245 +1705051833,1705051833,57.31094431528753 +1705051903,1705051903,46.17463165929874 +1705051908,1705051908,50.48086294163109 +1705051913,1705051913,51.61218702980116 +1705051918,1705051918,80.79464662608228 +1705052023,1705052023,83.2054271888935 +1705052028,1705052028,70.58564626195148 +1705052033,1705052033,73.63668906356308 +1705052038,1705052038,33.8096800103131 +1705052043,1705052043,33.293873646488706 +1705052148,1705052148,11.825448042874875 +1705052153,1705052153,99.36046650627736 +1705052158,1705052158,92.34071299683472 +1705052163,1705052163,27.08934336461153 +1705052228,1705052228,66.96814203229654 +1705052233,1705052233,27.244293715918666 +1705052238,1705052238,19.948498089112633 +1705052243,1705052243,68.45589120299059 +1705052248,1705052248,45.788109661303025 +1705052278,1705052278,19.432915724944657 +1705052283,1705052283,95.64406135490647 +1705052288,1705052288,54.703200406583875 +1705052293,1705052293,24.489033104575675 +1705052338,1705052338,19.229667328405863 +1705052343,1705052343,88.84542070141985 +1705052348,1705052348,63.062620050359584 +1705052353,1705052353,60.905916062498775 +1705052463,1705052463,85.73956474144015 +1705052468,1705052468,40.33763446761293 +1705052473,1705052473,36.23340171857091 +1705052478,1705052478,39.874981798301064 +1705052483,1705052483,39.834816783715375 +1705052513,1705052513,71.03645575927901 +1705052518,1705052518,41.75794490230884 +1705052523,1705052523,33.17029942833245 +1705052528,1705052528,99.05602552119105 +1705052588,1705052588,95.49418427060957 +1705052593,1705052593,66.6942445808949 +1705052598,1705052598,43.695499233194326 +1705052603,1705052603,92.67354254334305 +1705052608,1705052608,41.32057259485195 +1705052658,1705052658,12.309447453526722 +1705052663,1705052663,11.875160729035683 +1705052668,1705052668,33.56597074435157 +1705052673,1705052673,22.08419307760947 +1705052728,1705052728,26.58112079816961 +1705052733,1705052733,71.23366255401196 +1705052738,1705052738,85.17521786949146 +1705052743,1705052743,96.6524182813582 +1705052748,1705052748,50.73374375116464 +1705052803,1705052803,28.896055037511125 +1705052808,1705052808,75.91195463812707 +1705052813,1705052813,83.30990556758961 +1705052818,1705052818,81.27369996142488 +1705052843,1705052843,82.12038515795558 +1705052848,1705052848,42.492752907482455 +1705052853,1705052853,19.994767459801643 +1705052858,1705052858,78.44314118464251 +1705052863,1705052863,31.30655104745863 +1705052943,1705052943,70.1652455517904 +1705052948,1705052948,80.19655941141546 +1705052953,1705052953,20.541508577848077 +1705052958,1705052958,23.63105085694439 +1705053018,1705053018,20.698601947921357 +1705053023,1705053023,15.46415792663326 +1705053028,1705053028,0.779735810254989 +1705053033,1705053033,87.50526302254727 +1705053038,1705053038,41.3704663365196 +1705053118,1705053118,95.86151487467014 +1705053123,1705053123,96.90410356575534 +1705053128,1705053128,55.20667916038848 +1705053133,1705053133,79.9061409390702 +1705053193,1705053193,51.28369907376502 +1705053198,1705053198,77.44129019788694 +1705053203,1705053203,72.33250378195326 +1705053208,1705053208,36.09690396331657 +1705053213,1705053213,65.79040673013652 +1705053293,1705053293,82.43477708765757 +1705053298,1705053298,60.92995735299335 +1705053303,1705053303,17.30834892295463 +1705053308,1705053308,4.719352467013993 +1705053378,1705053378,13.207147277638963 +1705053383,1705053383,94.05508508515396 +1705053388,1705053388,88.0064547567059 +1705053393,1705053393,25.79664870983258 +1705053398,1705053398,88.61299666706789 +1705053433,1705053433,21.690813710091238 +1705053438,1705053438,47.12806068193098 +1705053443,1705053443,40.829430888954256 +1705053448,1705053448,50.8836641377259 +1705053493,1705053493,45.962829179625544 +1705053498,1705053498,10.182914927082898 +1705053503,1705053503,51.14233999331618 +1705053508,1705053508,53.224128722701614 +1705053513,1705053513,66.98745028001312 +1705053548,1705053548,35.62110835784304 +1705053553,1705053553,72.76866476011995 +1705053558,1705053558,54.62119201226828 +1705053563,1705053563,21.64378729437937 +1705053598,1705053598,33.78749815558274 +1705053603,1705053603,26.90200109708696 +1705053608,1705053608,64.61948492796424 +1705053613,1705053613,89.95524264752291 +1705053618,1705053618,1.7710318546583004 +1705053653,1705053653,18.497859650948367 +1705053658,1705053658,49.21092541553818 +1705053663,1705053663,0.901055323298916 +1705053668,1705053668,74.94698583510427 +1705053708,1705053708,94.94605163888228 +1705053713,1705053713,38.362983644159875 +1705053718,1705053718,77.20114308328512 +1705053723,1705053723,77.59493900359489 +1705053728,1705053728,37.433634243675726 +1705053763,1705053763,36.029150964330505 +1705053768,1705053768,66.86458187533236 +1705053773,1705053773,7.217645555240482 +1705053778,1705053778,2.071338586182514 +1705053838,1705053838,46.896665336020185 +1705053843,1705053843,70.01018576925676 +1705053848,1705053848,59.72533308573479 +1705053853,1705053853,61.14125500666575 +1705053858,1705053858,40.005927633751995 +1705053913,1705053913,1.4970403018057188 +1705053918,1705053918,80.36999262883313 +1705053923,1705053923,83.44410082567794 +1705053928,1705053928,9.86446208054904 +1705054013,1705054013,90.01383197276209 +1705054018,1705054018,60.8379236367989 +1705054023,1705054023,68.18098650935663 +1705054028,1705054028,77.56511825160061 +1705054033,1705054033,36.913320962794415 +1705054088,1705054088,43.77308918792787 +1705054093,1705054093,8.393835960878004 +1705054098,1705054098,18.69201381957577 +1705054103,1705054103,75.31914120714683 +1705054188,1705054188,36.142034970308224 +1705054193,1705054193,87.49176867921933 +1705054198,1705054198,15.127876892217017 +1705054203,1705054203,30.636161051896693 +1705054208,1705054208,80.45954605458311 +1705054263,1705054263,56.47843764070899 +1705054268,1705054268,80.97350165098302 +1705054273,1705054273,80.7752858018399 +1705054278,1705054278,18.05436984340727 +1705054363,1705054363,48.194447234411896 +1705054368,1705054368,30.282881013505946 +1705054373,1705054373,29.359098609221878 +1705054378,1705054378,79.98777918818412 +1705054383,1705054383,24.471346335258737 +1705054463,1705054463,6.5845678002046775 +1705054468,1705054468,52.0817492374674 +1705054473,1705054473,96.61325780003457 +1705054478,1705054478,64.75599663757204 +1705054543,1705054543,14.561066242626408 +1705054548,1705054548,52.49206307176453 +1705054553,1705054553,54.52394167602347 +1705054558,1705054558,51.249839019734765 +1705054563,1705054563,53.65131365065757 +1705054603,1705054603,25.813496612805487 +1705054608,1705054608,32.15596146861387 +1705054613,1705054613,46.25406695736268 +1705054618,1705054618,56.89901770966477 +1705054683,1705054683,49.784422656066305 +1705054688,1705054688,35.268323161364364 +1705054693,1705054693,69.6199124880636 +1705054698,1705054698,51.30038502061124 +1705054703,1705054703,72.71080052753287 +1705054783,1705054783,36.69065298565651 +1705054788,1705054788,7.686265635101286 +1705054793,1705054793,55.08727888131377 +1705054798,1705054798,51.61547240590206 +1705054858,1705054858,62.04667276523873 +1705054863,1705054863,45.30358546404112 +1705054868,1705054868,10.7895763968894 +1705054873,1705054873,66.50032680504214 +1705054878,1705054878,66.38255591380806 +1705054938,1705054938,51.124856943683916 +1705054943,1705054943,90.4677036568903 +1705054948,1705054948,77.1206974206153 +1705054953,1705054953,17.315896318764267 +1705055033,1705055033,25.77043464909494 +1705055038,1705055038,5.224151766130925 +1705055043,1705055043,48.08153405862107 +1705055048,1705055048,91.29915477878495 +1705055053,1705055053,0.9429790174602548 +1705055113,1705055113,56.04003475688237 +1705055118,1705055118,65.25275802600132 +1705055123,1705055123,25.29768199275477 +1705055128,1705055128,14.099183493793587 +1705055213,1705055213,4.130057777172958 +1705055218,1705055218,84.55313734272374 +1705055223,1705055223,53.9263841267028 +1705055228,1705055228,23.367894889159114 +1705055233,1705055233,91.99784245313502 +1705055313,1705055313,5.8470797867671065 +1705055318,1705055318,39.30228593484141 +1705055323,1705055323,84.97840427390416 +1705055328,1705055328,45.30005667023026 +1705055413,1705055413,76.98499763588696 +1705055418,1705055418,98.90265546652672 +1705055423,1705055423,46.26947142898858 +1705055428,1705055428,79.74542772300906 +1705055433,1705055433,12.297701057981335 +1705055483,1705055483,19.92313324187127 +1705055488,1705055488,55.517090676279366 +1705055493,1705055493,45.91943948082194 +1705055498,1705055498,14.869372940300252 +1705055533,1705055533,71.39151347300408 +1705055538,1705055538,93.98661239471132 +1705055543,1705055543,73.6996992343076 +1705055548,1705055548,83.02468051045645 +1705055553,1705055553,56.029059197685726 +1705055633,1705055633,6.003131320662913 +1705055638,1705055638,10.659456994852945 +1705055643,1705055643,88.23942555624103 +1705055648,1705055648,53.46607014553627 +1705055718,1705055718,59.230878261690215 +1705055723,1705055723,32.68107152755435 +1705055728,1705055728,0.42816330265530445 +1705055733,1705055733,7.079219247296331 +1705055738,1705055738,0.026265716661200145 +1705055793,1705055793,90.42373494052117 +1705055798,1705055798,21.750763044729272 +1705055803,1705055803,67.61298573061192 +1705055808,1705055808,79.64711937571337 +1705055818,1705055818,34.628339153749764 +1705055873,1705055873,8.243279535703184 +1705055878,1705055878,31.4042396176487 +1705055883,1705055883,61.03453695963237 +1705055888,1705055888,65.52102062869866 +1705055948,1705055948,36.93793161411871 +1705055953,1705055953,22.033672225565937 +1705055958,1705055958,71.07986343999686 +1705055963,1705055963,36.58840983244331 +1705055968,1705055968,36.23710363866116 +1705056038,1705056038,18.679879606475648 +1705056043,1705056043,7.6907800106899575 +1705056048,1705056048,56.742895473786206 +1705056053,1705056053,73.13264207804171 +1705056113,1705056113,14.101986607120075 +1705056118,1705056118,45.765887297188016 +1705056123,1705056123,5.978138001314637 +1705056128,1705056128,43.5516558130447 +1705056133,1705056133,57.68534749499901 +1705056188,1705056188,82.76847170788889 +1705056193,1705056193,50.385608692072246 +1705056198,1705056198,47.5952475102531 +1705056203,1705056203,6.357015352992546 +1705056278,1705056278,53.47648865640851 +1705056283,1705056283,96.25859534591909 +1705056288,1705056288,74.18347657303475 +1705056293,1705056293,86.33778595909925 +1705056298,1705056298,91.50354543669266 +1705056378,1705056378,15.070150458940557 +1705056383,1705056383,19.322209175903225 +1705056388,1705056388,38.921386023890356 +1705056393,1705056393,52.365134653388935 +1705056468,1705056468,68.37189884015514 +1705056473,1705056473,82.64642845455012 +1705056478,1705056478,36.513823030800985 +1705056483,1705056483,56.48310948278939 +1705056488,1705056488,41.79472775670355 +1705056568,1705056568,43.080064164104236 +1705056573,1705056573,32.73871747930126 +1705056578,1705056578,75.8931376310816 +1705056583,1705056583,82.10123577098022 +1705056653,1705056653,99.58882548809937 +1705056658,1705056658,21.466610495580017 +1705056663,1705056663,53.31554167548247 +1705056668,1705056668,45.01516808097232 +1705056673,1705056673,50.51749242262898 +1705056748,1705056748,18.885177662514074 +1705056753,1705056753,63.23601515686151 +1705056758,1705056758,97.43567278784195 +1705056763,1705056763,90.12086804512671 +1705056848,1705056848,94.99193758880644 +1705056853,1705056853,40.793088358307436 +1705056858,1705056858,41.95207445958754 +1705056863,1705056863,12.967876151940184 +1705056868,1705056868,45.492241448788704 +1705056913,1705056913,25.752891293410574 +1705056918,1705056918,62.44809145829584 +1705056923,1705056923,32.411095957984315 +1705056928,1705056928,32.978471183936044 +1705057008,1705057008,54.77290079348297 +1705057013,1705057013,5.050213627523803 +1705057018,1705057018,40.35246586483366 +1705057023,1705057023,62.753098836614384 +1705057028,1705057028,28.300681035869125 +1705057083,1705057083,33.90052902177363 +1705057088,1705057088,78.90263458670162 +1705057093,1705057093,99.55105507451091 +1705057098,1705057098,30.486866669227386 +1705057183,1705057183,4.242806670071364 +1705057188,1705057188,81.39917546558134 +1705057193,1705057193,38.561477766078944 +1705057198,1705057198,29.24548922319621 +1705057203,1705057203,71.01534878798189 +1705057278,1705057278,80.63359116515069 +1705057283,1705057283,47.92227449995992 +1705057288,1705057288,48.206003121196794 +1705057293,1705057293,97.38930142841082 +1705057383,1705057383,38.346084064120426 +1705057388,1705057388,35.23233166878315 +1705057393,1705057393,72.2694503436534 +1705057398,1705057398,69.57074100402632 +1705057403,1705057403,93.98779471646088 +1705057473,1705057473,58.47172628459053 +1705057478,1705057478,35.972366977670674 +1705057483,1705057483,63.96702528142091 +1705057488,1705057488,50.47793380660611 +1705057553,1705057553,33.10151790722872 +1705057558,1705057558,50.484729566487694 +1705057563,1705057563,38.659314413759525 +1705057568,1705057568,15.80118584219452 +1705057573,1705057573,55.30761419209577 +1705057628,1705057628,48.55321623767396 +1705057633,1705057633,24.816502226456695 +1705057638,1705057638,94.71110139551588 +1705057643,1705057643,96.59835147832942 +1705057713,1705057713,0.3257347544079914 +1705057718,1705057718,34.04464109044623 +1705057723,1705057723,75.42234215308197 +1705057728,1705057728,56.98884955613016 +1705057733,1705057733,70.24047632159993 +1705057788,1705057788,88.47481200632386 +1705057793,1705057793,52.67917521093999 +1705057798,1705057798,43.21327406211574 +1705057803,1705057803,94.75639442004137 +1705057888,1705057888,2.316344967208417 +1705057893,1705057893,24.681921179934506 +1705057898,1705057898,32.2042433197694 +1705057903,1705057903,55.33353941007765 +1705057908,1705057908,30.55966968831133 +1705057953,1705057953,46.367551854517174 +1705057958,1705057958,56.44096873646065 +1705057963,1705057963,93.94434597525111 +1705057968,1705057968,57.23376824160646 +1705058033,1705058033,35.3874764439847 +1705058038,1705058038,53.46391690558052 +1705058043,1705058043,44.53049017834226 +1705058048,1705058048,0.45803714517347327 +1705058053,1705058053,17.967231045825304 +1705058113,1705058113,26.296179755887785 +1705058118,1705058118,99.08432610679222 +1705058123,1705058123,56.98462080268894 +1705058128,1705058128,50.863413806024006 +1705058208,1705058208,42.263369215454205 +1705058213,1705058213,65.87883741407954 +1705058218,1705058218,11.080722937531428 +1705058223,1705058223,43.179245288840285 +1705058228,1705058228,28.300023281414365 +1705058283,1705058283,52.97742099817534 +1705058288,1705058288,1.120484536199895 +1705058293,1705058293,13.23424003101923 +1705058298,1705058298,46.03618789655156 +1705058358,1705058358,83.9581982447384 +1705058363,1705058363,41.51140686407271 +1705058368,1705058368,17.38115575211838 +1705058373,1705058373,31.450932273300335 +1705058378,1705058378,93.64803796083477 +1705058433,1705058433,12.691342942718265 +1705058438,1705058438,94.61632417494576 +1705058443,1705058443,75.47719599004692 +1705058448,1705058448,44.42752422087499 +1705058508,1705058508,42.631157901746654 +1705058513,1705058513,10.201140042061219 +1705058518,1705058518,58.38269203034137 +1705058523,1705058523,49.09533105996048 +1705058528,1705058528,97.85788456561258 +1705058558,1705058558,69.85080224199326 +1705058563,1705058563,5.2636971900122065 +1705058568,1705058568,37.371009485626914 +1705058573,1705058573,27.786449325373795 +1705058658,1705058658,81.66159140428965 +1705058663,1705058663,32.22969787437698 +1705058668,1705058668,50.68505609091749 +1705058673,1705058673,17.8306893001707 +1705058678,1705058678,26.529205089058514 +1705058733,1705058733,87.12547837381315 +1705058738,1705058738,14.170396355317038 +1705058743,1705058743,65.32232603556542 +1705058748,1705058748,68.10882941396511 +1705058808,1705058808,64.24554363857293 +1705058813,1705058813,49.90319105631419 +1705058818,1705058818,7.5270579630521866 +1705058823,1705058823,57.432172780172365 +1705058828,1705058828,79.82357807513539 +1705058888,1705058888,57.83058699111107 +1705058893,1705058893,90.32441064474251 +1705058898,1705058898,50.897760267616995 +1705058903,1705058903,75.10894123971266 +1705058978,1705058978,69.51252602509247 +1705058983,1705058983,27.33048608936357 +1705058988,1705058988,29.951632910524662 +1705058993,1705058993,86.78714387362464 +1705058998,1705058998,35.806187529379706 +1705059058,1705059058,23.07271318037325 +1705059063,1705059063,34.376680820508874 +1705059068,1705059068,43.295615825348634 +1705059073,1705059073,23.93872853501222 +1705059128,1705059128,26.781919828621092 +1705059133,1705059133,57.40360563915712 +1705059138,1705059138,92.9563946326432 +1705059143,1705059143,31.80774987984186 +1705059148,1705059148,25.599278837879456 +1705059203,1705059203,7.817373890888746 +1705059208,1705059208,8.24348845063244 +1705059213,1705059213,64.02424150622676 +1705059218,1705059218,94.83750711665463 +1705059278,1705059278,52.4758820725342 +1705059283,1705059283,16.81054697243155 +1705059288,1705059288,65.54498779928068 +1705059293,1705059293,22.537608491214666 +1705059298,1705059298,99.92604182434913 diff --git a/exponential-smoothing-predictor/src/r_predictors/forecasting_real_workload.R b/exponential-smoothing-predictor/src/r_predictors/forecasting_real_workload.R new file mode 100644 index 0000000..88c08ac --- /dev/null +++ b/exponential-smoothing-predictor/src/r_predictors/forecasting_real_workload.R @@ -0,0 +1,477 @@ +#!Rscript + +# Copyright (c) 2023 Institute of Communication and Computer Systems +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +library(rapportools) +library(gbutils) +library(forecast) +library(ggplot2) +library(properties) +library(xts) +library(anytime) +library(purrr) + + +# Outline of the operation of the forecasting script +# +# This forecasting script relies on the presence of a dataset which contains the metric values to be forecasted. It is called with three main parameters - dataset path, metric to be forecasted and the time for which the forecast should be produced - and two optional parameters, the alpha and beta coefficients to be used during forecasting. The time for which the forecast should be produced may be ommitted under some circumstances. +# +# To create the final dataset which will be used for predictions, this script creates a timeseries with all times from the beginning of the observations in the dataset, until its end, using 1-second intervals (to allow for predictions based on epoch). In order for the exponential smoothing forecaster to operate satisfactorily, it is necessary to set the `number_of_seconds_to_aggregate_on` variable to a value which is large enough to smooth small fluctuations, yet small enough to allow for reasonable reaction times (e.g 300 seconds). +# Once the creation of the dataset is over, the `configuration_forecasting_horizon` configuration property is evaluated. If this value is positive, the time for which the forecast should be made should be provided as a command line argument, and this allows the formation of a training dataset and a test dataset. If a non-positive horizon is provided, then the `realtime_mode` configuration property is evaluated. In case that this is false, the prediction time does not need to be provided (it means we simply want to evaluate the predictive functionality based on past data), and the next prediction time will be the time of the last observation in the dataset. If the realtime mode parameter is true, then the prediction time needs to be provided, and the script will try to create a prediction using the minimum value between the next prediction time and the last observation time which is available in the dataset - in this case the next prediction time is also needed(TODO:perhaps this behaviour should be changed). +#Then, the final data points which will be used for the forecasting are determined, and the forecasting models are created, to produce predictions. The user of the script can opt to try finding the best parameters manually, using the `try_to_optimize_parameters` configuration parameter. + +find_smape <- function(actual, forecast) { + return (1/length(actual) * sum(2*abs(forecast-actual) / (abs(actual)+abs(forecast))*100)) +} + +get_current_epoch_time <- function(){ + return (as.integer(as.POSIXct(Sys.time()))) +} + +#Assumes an xts time series object as input, with each record having a 1-sec difference from the previous one, and returns the last timestamp which is (or should have been) assigned (if not present). +find_last_timestamp <- function(mydata,next_prediction_time,realtime_mode){ + possible_timestamp <- as.numeric(end(mydata)) + if(realtime_mode){ + #return(min(c(possible_timestamp,next_prediction_time))) + if (next_prediction_time>possible_timestamp){ + return(possible_timestamp) + }else{ + print("Possible problem with the requested prediction time, there is already data for a timestamp newer than the time requested to predict for. Returning the newer timestamp, being aware that this will lead to this prediction returning no meaningful output") + return (possible_timestamp) + } + }else{ + return (possible_timestamp) + } + +} + +get_time_value <- function(time_object){ + time_object[1][["user.self"]] +} + + +####Time the execution of the prediction +start_time <- proc.time() +time_field_name <- "ems_time" # The field holding the epoch timestamp in the generated csv +time_unit_granularity <- "sec" # Handle monitoring data using this time unit granularity +endpoint_time_unit_granularity <- "seconds" + +#configuration_properties <- read.properties(".\\prediction_configuration-windows.properties") +print("Reading properties from the following file:") +print(paste(getwd(),"/prediction_configuration.properties",sep='')) +configuration_properties <- read.properties(paste(getwd(),"/prediction_configuration.properties",sep='')) + +realtime_mode <- as.logical(configuration_properties$realtime_mode) #whether or not we should use all datapoints available (True value), or we are only partially using the available dataset (False value) e.g to test the prediction method performance +try_to_optimize_parameters <- as.logical(configuration_properties$try_to_optimize_parameters) +prediction_method <- configuration_properties$prediction_method +number_of_seconds_to_aggregate_on <- as.integer(configuration_properties$number_of_seconds_to_aggregate_on) +preprocessing_required <- FALSE #Required for some/all FCR datasets +write_back_clean_data_file <- FALSE +csv_has_header <- TRUE + +periodic_data <- FALSE #Setting to TRUE uses gamma, else gamma is set to FALSE +if (try_to_optimize_parameters){ + frequency_setting <- 12 #12 five-minute intervals per period +}else{ #downsampling to single hours + frequency_setting <- 1 +} + +#Parsing of command-line arguments. Providing the alpha and beta values as arguments is entirely optional. Providing the next_prediction_time may be optional or it may be needed, depending on the circumstances. Please refer to the execution flow which is outlined in the beginning of this program + +args <- commandArgs(trailingOnly=TRUE) +dataset_to_process <- args[1] +attribute_to_predict <- args[2] +next_prediction_time <- as.numeric(args[3]) +alpha_value_argument <- as.double(args[4]) +beta_value_argument <- as.double(args[5]) + +#mydata <- read.csv(configuration_properties$input_data_file, sep=",", header=TRUE) +#mydata <- read.csv(dataset_to_process, sep=",", header=TRUE) + +data_to_process <- read.csv(dataset_to_process, sep=",", header=TRUE) +#sanitize data_to_process by removing any very old values which may have been accidentally introduced. For this reason we remove all data points before now - number_of_days*24hrs*3600sec/hr seconds, and we additionally subtract configuration_properties$prediction_processing_time_safety_margin_seconds in order to account for the time it takes to create the dataset and start the prediction process) +current_time <- get_current_epoch_time() +if (!realtime_mode){ + current_time <- tail(data_to_process[time_field_name],1) +} +oldest_acceptable_time_point <- current_time -(as.numeric(configuration_properties$number_of_days_to_use_data_from)*24*3600 + as.numeric(configuration_properties$prediction_processing_time_safety_margin_seconds)) +print(paste("Using data after time point",oldest_acceptable_time_point,"...")) +data_to_process <- data_to_process[data_to_process[[time_field_name]]>oldest_acceptable_time_point,] + +if (length(data_to_process[,attribute_to_predict])>0){ + print(paste("Constructing fine-grained data series for",attribute_to_predict,"using the requested granularity...")) +}else{ + print("No valid data points remained after enforcing the number_of_days_to_use_data_from configuration option. This may mean that you are trying to predict using realtime mode, using data points older than the number of days specified in the number_of_days_to_use_data_from configuration option") + stop() +} +#Fail-safe default +df1 <- xts(as.numeric(data_to_process[,attribute_to_predict]),anytime(data_to_process[,time_field_name])) +date_time_init <- anytime(data_to_process[,time_field_name]) +date_time_complete <- seq.POSIXt( + from=as.POSIXct(min(date_time_init),origin = "1970-01-01"), + to=as.POSIXct(max(date_time_init),origin = "1970-01-01"), + by=time_unit_granularity +) +df2 <- merge(df1,xts(,date_time_complete)) +mydata <- na.approx(df2) +colnames(mydata)<-c(attribute_to_predict) + +print(paste("The complete time series to be predicted for attribute",attribute_to_predict,"has been created")) + +configuration_forecasting_horizon <- as.integer(configuration_properties$horizon) +last_timestamp_data <- 0 + +if (configuration_forecasting_horizon>0){ + print("Using a statically defined horizon from the configuration file") + forecasting_horizon <- configuration_forecasting_horizon + last_timestamp_data <- next_prediction_time - forecasting_horizon + first_timestamp_data <- as.integer(index(mydata[1])) + #from the number of datapoints, the last 'forecasting_horizon' datapoints will be used for testing + data_points_number <- next_prediction_time - first_timestamp_data + + mydata <- head(mydata,data_points_number) + + number_of_periods_in_dataset <- length(mydata[,attribute_to_predict])%/%frequency_setting + #data_points_number<-length(mydata[,attribute_to_predict]) +}else { + last_timestamp_data <- find_last_timestamp(mydata,next_prediction_time,realtime_mode) + number_of_periods_in_dataset <- length(mydata[,attribute_to_predict])%/%frequency_setting + data_points_number<-length(mydata[,attribute_to_predict]) + if (!is.na(next_prediction_time)){ + print(paste("Using value",next_prediction_time,"from command line arguments for forecasting horizon, to be derived after subtracting last timestamp which is",last_timestamp_data)) + forecasting_horizon <- next_prediction_time - last_timestamp_data + if (forecasting_horizon<=0 && realtime_mode){ + print("Cannot proceed with prediction as the horizon should be a positive value") + stop() + } + }else{ + print("Cannot proceed as a proper prediction horizon value could not be determined") + stop() + } +} + + + + +if (configuration_properties$forecasting_data_slicing_mode == "percentage"){ + forecasting_data_points_limit <- configuration_properties$forecasting_data_limit *data_points_number + forecasting_data_points_offset <- configuration_properties$forecasting_data_offset * data_points_number + number_of_data_points_used_for_training <- round(as.double(configuration_properties$forecasting_data_used_for_training) * data_points_number) + number_of_data_points_used_for_testing <- round((1-as.double(configuration_properties$forecasting_data_used_for_training))* data_points_number) + #data_used_for_training <- 0.95 + #data_used_for_testing <- 1 - data_used_for_training +}else{ + forecasting_data_points_limit <- data_points_number + forecasting_data_offset <- 0 + # forecasting_data_offset can be from 0 to 1 - beggining to end of dataset + + number_of_data_points_used_for_testing <- base::min(as.numeric(forecasting_horizon),data_points_number%/%2) + print(paste("Forecasting horizon is",forecasting_horizon)) + number_of_data_points_used_for_training <- data_points_number - number_of_data_points_used_for_testing + print(paste("Data points number is",data_points_number,"- from these",number_of_data_points_used_for_testing,"will be used for testing. If the horizon is too large, only half of the data points will be used to evaluate the prediction")) +} + +#TODO check the code line below for validity - maybe use head and tail +data_points <-tail(head(mydata[,attribute_to_predict],forecasting_data_points_limit),data_points_number-forecasting_data_offset) + +###Load time +load_time <- proc.time() - start_time +print(load_time) + + + + +if (write_back_clean_data_file){ + write.csv(mydata,configuration_properties$clean_data_file) + if(!file.exists(configuration_properties$clean_data_file)){ + file.create(configuration_properties$clean_data_file) + } +} + +### Preprocessing time +preprocessing_time<-proc.time() - load_time - start_time + +testing_datapoints <- tail(data_points, number_of_data_points_used_for_testing) +if (number_of_seconds_to_aggregate_on<(forecasting_horizon%/%10)) { + print(paste("Setting new value for number_of_seconds_to_aggregate_on, from ",number_of_seconds_to_aggregate_on," to ",forecasting_horizon%/%10," in order not to make too far-fetched (slow) predictions")) + number_of_seconds_to_aggregate_on <- forecasting_horizon%/%10 +} +mydata.test <- tail(period.apply(testing_datapoints,endpoints(testing_datapoints,endpoint_time_unit_granularity,k=number_of_seconds_to_aggregate_on),mean),forecasting_horizon%/%(number_of_seconds_to_aggregate_on)) + +if (length(mydata.test)<=0){ + print(paste("Unable to generate predictions as a prediction is requested for a shorter time duration than the aggregation interval (requested prediction with horizon",forecasting_horizon," whereas the aggregation period is",number_of_seconds_to_aggregate_on,")")) + stop() +} + +training_datapoints <- head(data_points, number_of_data_points_used_for_training) +mydata.train <- period.apply(training_datapoints,endpoints(training_datapoints,endpoint_time_unit_granularity,k=number_of_seconds_to_aggregate_on),mean) + +#print(paste("length-debugging",length(mydata.train)+1,length(mydata.train)+length(mydata.test))) +mydata_trainseries <- (ts(mydata.train,start=c(1),frequency = frequency_setting)) +mydata_testseries <- (ts(mydata.test, start=c(1), frequency = frequency_setting)) + +if (try_to_optimize_parameters){ + #initialization + alpha_ticks <- 5 + beta_ticks <- 5 + if (periodic_data){ + gamma_ticks <- 20 + }else{ + gamma_ticks <- -1 + } + minimum_optimization_variable_value <- 10000000 + optimal_alpha <- 1 + optimal_beta <- 1 + optimal_gamma <- 1 + + iterations <- 0 + iteration_average_time <- 0 + last_iteration_time <- proc.time() + #actual optimization + for (alpha_counter in seq(1,alpha_ticks)){ + for (beta_counter in seq(-1,beta_ticks)){ + for (gamma_counter in seq(-1,gamma_ticks)){ + + alpha_value <- alpha_counter/alpha_ticks + beta_value <- beta_counter/beta_ticks + gamma_value <- gamma_counter/gamma_ticks + if(beta_value<0){ + beta_value <- FALSE + } + if(gamma_value<0 || gamma_ticks<0){ + gamma_value <- FALSE + } + + holt_winters_forecasting_model <- HoltWinters(mydata_trainseries,alpha=alpha_value,beta=beta_value,gamma=gamma_value) + + holt_winters_forecasts <- forecast:::forecast.HoltWinters(holt_winters_forecasting_model, h=forecasting_horizon) + + optimization_variable<-3 #1: Mean error #2 RMSE #3 MAE #4 MPE #5 MAPE #6 MASE #7 ACF1 + + optimization_variable_value <- accuracy(holt_winters_forecasts,x=mydata.test,D=0,d=1)[1,optimization_variable] + # Use [2, optimization_variable] in the above expression to evaluate with the help of the test set and [1, optimization_variable] to evaluate with the help of the training set. + # Evaluating using the test set can be useful when the quality of multiple step ahead predictions should be measured. On the other hand, evaluating using the training set tries to minimize one-step ahead predictions. + # Resampling the data can be an alternative to ensure that one-step ahead predictions are performed and therefore the training set can be used to evaluate accuracy. + + #if (gamma_value==FALSE && beta_value==FALSE && alpha_value==0.75){ + # print(paste(optimization_variable_value,minimum_optimization_variable_value)) + #} + print(paste("Alpha,beta,gamma: ",alpha_value,beta_value,gamma_value," optimization value",optimization_variable_value," minimum value",minimum_optimization_variable_value)) + if (optimization_variable_value0){ + print(paste("Replacing existing alpha, beta and gamma ",optimal_alpha,",",optimal_beta,",",optimal_gamma,"as",optimization_variable_value,"<",minimum_optimization_variable_value,"with",alpha_value,",",beta_value,",",gamma_value)) + } + + optimal_alpha <- alpha_value + optimal_beta <- beta_value + optimal_gamma <- gamma_value + if (configuration_properties$debug_level>1){ + debug_option <- readline() + if(debug_option=="beta"){ + print(paste(optimal_beta)) + } + } + minimum_optimization_variable_value <- optimization_variable_value + + } + + iterations <- iterations+1 + iteration_average_time <- iteration_average_time + ((proc.time()-last_iteration_time)-iteration_average_time)/iterations + } + } + } +} +#Override of forecasting model with custom values +#optimal_alpha <- 1 +#optimal_beta <- FALSE +#optimal_gamma <- FALSE + +#Creation of forecasting model +if (try_to_optimize_parameters){ + holt_winters_forecasting_model <- HoltWinters(mydata_trainseries,alpha=optimal_alpha,beta=optimal_beta,gamma=optimal_gamma) + + ets_forecasting_model <- tryCatch({ + ets(mydata_trainseries,alpha = optimal_alpha,beta = optimal_beta,gamma = optimal_gamma) #phi is left to be optimized + }, error = function(e) { + NULL + }) + + + +}else{ + if (!is.na(alpha_value_argument) && !is.na(beta_value_argument)){ + if (periodic_data){ + holt_winters_forecasting_model <- HoltWinters(mydata_trainseries,alpha=alpha_value_argument,beta=beta_value_argument) + ets_forecasting_model <- tryCatch({ + ets(mydata_trainseries,alpha = alpha_value_argument,beta = beta_value_argument) + }, error = function(e) { + NULL + }) + }else{ + holt_winters_forecasting_model <- HoltWinters(mydata_trainseries,alpha=alpha_value_argument,beta=beta_value_argument,gamma=FALSE) + #ets_forecasting_model <- ets(mydata_trainseries,alpha = alpha_value_argument,beta = beta_value_argument,gamma = FALSE) + ets_forecasting_model <- tryCatch({ + ets(mydata_trainseries,alpha = alpha_value_argument,beta = beta_value_argument,gamma=FALSE) + }, error = function(e) { + NULL + }) + } + }else{ + print("No alpha or beta values provided, so will calculate them now") + if (periodic_data){ + ets_forecasting_model <- ets(mydata_trainseries) + holt_winters_forecasting_model <- HoltWinters(mydata_trainseries) + }else{ + ets_forecasting_model <- tryCatch({ + ets(mydata_trainseries,model="ZZN") + }, error = function(e) { + NULL + }) + holt_winters_forecasting_model <- HoltWinters(mydata_trainseries,gamma=FALSE) + } + } +} + +print("Starting execution, forecasting horizon, next prediction time and last timestamp data are as follows") +print(paste(forecasting_horizon,next_prediction_time,last_timestamp_data)) + + +if (try_to_optimize_parameters){ + print(paste("The optimal alpha, beta and gamma values are, respectively",optimal_alpha,",",optimal_beta,"and",optimal_gamma)) + + if (prediction_method=="Holt-Winters"){ + holt_winters_forecasts <- forecast:::forecast.HoltWinters(holt_winters_forecasting_model, h=forecasting_horizon) + } + else if (prediction_method=="ETS"){ + ets_forecasts <- forecast::forecast.ets(ets_forecasting_model, h=forecasting_horizon) + } + +}else{ + if (prediction_method=="Holt-Winters"){ + holt_winters_forecasts <- forecast:::forecast.HoltWinters(holt_winters_forecasting_model, h=forecasting_horizon%/%(number_of_seconds_to_aggregate_on)) + }else{ + ets_forecasts <- forecast::forecast.ets(ets_forecasting_model, h=forecasting_horizon%/%(number_of_seconds_to_aggregate_on)) + } + +} + + +if (prediction_method == "Holt-Winters"){ + holt_winters_accuracy_measures <- accuracy(holt_winters_forecasts,x=mydata.test,D=0,d=1)#d,D values only influence MASE calculation, and are chosen to reflect a non-seasonal time-series + print(paste("Holt-Winters accuracy measures")) + print(holt_winters_accuracy_measures) + print("------------------------------------------------") +}else if (prediction_method == "ETS"){ + ets_accuracy_measures <- accuracy(ets_forecasts,x=mydata.test,D=0,d=1)#d,D values only influence MASE calculation, and are chosen to reflect a non-seasonal time-series + print("ETS accuracy measures:") + print(ets_accuracy_measures) + print("------------------------------------------------") +} +###prediction_time +prediction_time <- proc.time() - preprocessing_time -load_time - start_time +total_time <- proc.time() - start_time + +print(paste("The load_time is:",get_time_value(load_time))) +print(paste("The preprocessing time is:",get_time_value(preprocessing_time))) +print(paste("The prediction time is:",get_time_value(prediction_time))) +print(paste("The total time is:",get_time_value(prediction_time))) + +if(prediction_method=="ETS"){ + + forecast_object <- ets_forecasts + + print(paste("Prediction:",tail(ets_forecasts[["mean"]],n=1))) + print(paste0("Confidence_interval:",tail((ets_forecasts[["lower"]]),n=1)[2],",",tail((ets_forecasts[["upper"]]),n=1)[2])) + #2,1: Mean error 2,2: RMSE 2,3 MAE 2,4 MPE 2,5 MAPE 2,6 MASE 2,7 ACF1 + print(paste0("mae:",ets_accuracy_measures[2,3])) + mse<-as.numeric(ets_accuracy_measures[2,2])*as.numeric(ets_accuracy_measures[2,2]) + print(paste0("mse:",mse)) #square of RMSE + print(paste0("mape:",ets_accuracy_measures[2,5])) + print(paste0("smape:",find_smape(ets_forecasts$x,ets_forecasts$fitted))) + +}else if (prediction_method=="Holt-Winters"){ + + forecast_object <- holt_winters_forecasts + + print(paste0("Prediction:",tail(holt_winters_forecasts[["mean"]],n=1))) + print(paste0("Confidence_interval:",tail((holt_winters_forecasts[["lower"]]),n=1)[2],",",tail((holt_winters_forecasts[["upper"]]),n=1)[2])) + print(paste0("mae:",holt_winters_accuracy_measures[2,3])) + mse<-as.numeric(holt_winters_accuracy_measures[2,2])*as.numeric(holt_winters_accuracy_measures[2,2]) + print(paste0("mse:",mse)) + print(paste0("mape:",holt_winters_accuracy_measures[2,5])) + print(paste0("smape:",find_smape(holt_winters_forecasts$x,holt_winters_forecasts$fitted))) +} + +#GRAPHING DOCUMENTATION + +#forecast_object contains the timeseries which is forecasted, the original time series, and the one-step ahead prediction, along with the confidence intervals. When it alone is plotted, with the command forecast_object %>% autoplot(), the black line are the original values of the timeseries, and the single point in the end along with the blue zones, are the intervals which characterize the final prediction is calculated + +#To draw the predictions along with the original time series values, we can use the following code: + +#x_values <- seq.int(1,length(forecast_object$x)) #This should be changed as needed +#pred_values <- forecast_object$fitted +#observed_values <- forecast_object$x +#residuals <- forecast_object$residuals + + +#plot(x_values,observed_values,type='l',col="red") +#lines(x_values,residuals,col="blue") +#lines(x_values,pred_values,col="green") + +#plot(x=as.numeric(time(forecast_object$x)),forecast_object$x,type='l',col='blue',ylim=c(0,1000)) +#lines(x=as.numeric(time(forecast_object$mean)),forecast_object$mean,type='l',col='red') +#65130 was the length of the training dataset +#lines(x=65130+as.numeric(time(mydata_testseries)),mydata_testseries,type='l',col='green') + + +#dev.off() + + +if (as.logical(configuration_properties$generate_prediction_png_output)){ + print(paste("creating new figure at",configuration_properties$png_output_file)) + + mydata.aggregated <- period.apply(data_points,endpoints(data_points,endpoint_time_unit_granularity,k=number_of_seconds_to_aggregate_on),mean) + mydata_full_series <- ts(mydata.aggregated,start=c(1),frequency = frequency_setting) + + png(filename=configuration_properties$png_output_file, + type="cairo", + units="in", + width=10, + height=6, + pointsize=1, + res=1200) + forecast_object %>% + autoplot() + + geom_line( + aes( + x = as.numeric(time(mydata_full_series)), + y = as.numeric(mydata_full_series) + ), + col = "red", + size = 0.1 + ) + + geom_line( + aes( + x = as.numeric(time(forecast_object$mean)), + y = as.numeric(forecast_object$mean) + #Painting the actual predictions + ), + col = "green", + size = 0.1 + ) + #goes to above line: + +# geom_line( +# aes( +# x = as.numeric(time(forecast_object$mean)), +# y = as.numeric(forecast_object$mean) +# ), +# col = "yellow", +# size = 0.1 +# ) + dev.off() +} \ No newline at end of file diff --git a/exponential-smoothing-predictor/src/r_predictors/prediction_configuration-windows.properties b/exponential-smoothing-predictor/src/r_predictors/prediction_configuration-windows.properties new file mode 100644 index 0000000..9dc0496 --- /dev/null +++ b/exponential-smoothing-predictor/src/r_predictors/prediction_configuration-windows.properties @@ -0,0 +1,42 @@ +#AMQ_HOST=ems +#AMQ_USER=aaa +#AMQ_PASSWORD=111 +#AMQ_PORT_BROKER=61610 +APP_NAME=default_application +METHOD=exponential_smoothing + +INFLUXDB_HOSTNAME=localhost +INFLUXDB_PORT=8086 +INFLUXDB_USERNAME=morphemic +INFLUXDB_PASSWORD=password +INFLUXDB_DBNAME=morphemic +INFLUXDB_ORG=morphemic + +broker_address=localhost +broker_port=61613 +broker_username=admin +broker_password=admin +prediction_method=Holt-Winters +forecasting_data_slicing_mode=none +forecasting_data_offset= +forecasting_data_limit= +forecasting_data_used_for_training=0.999 +path_to_datasets=C:/Users/user/Desktop/Predictions_using_R/custom_workloads/datasets +application_name=default_application + +input_data_file=C:/Users/user/Desktop/Predictions_using_R/custom_workloads/datasets/demo.csv +clean_data_file=C:/Users/user/Desktop/Predictions_using_R/clean_data.csv +output_data_file=C:/Users/user/Desktop/Predictions_using_R/output_data.csv + +number_of_seconds_to_aggregate_on=300 +number_of_days_to_use_data_from=3 +prediction_processing_time_safety_margin_seconds=10 +testing_prediction_functionality=FALSE + +try_to_optimize_parameters=FALSE +debug_level=0 +generate_prediction_png_output=TRUE +png_output_file=C:\\Users\\user\\Desktop\\Predictions_using_R\\output.png + +horizon=0 +realtime_mode=TRUE \ No newline at end of file diff --git a/exponential-smoothing-predictor/src/r_predictors/prediction_configuration.properties b/exponential-smoothing-predictor/src/r_predictors/prediction_configuration.properties new file mode 100644 index 0000000..47623fc --- /dev/null +++ b/exponential-smoothing-predictor/src/r_predictors/prediction_configuration.properties @@ -0,0 +1,34 @@ +#Fri Jan 12 17:06:48 UTC 2024 +APP_NAME=default_application +METHOD=exponential_smoothing +INFLUXDB_HOSTNAME=localhost +INFLUXDB_PORT=8086 +INFLUXDB_USERNAME=morphemic +INFLUXDB_PASSWORD=password +INFLUXDB_DBNAME=morphemic +INFLUXDB_ORG=morphemic +broker_address=localhost +broker_port=61610 +broker_username=morphemic +broker_password=morphemic +prediction_method=Holt-Winters +forecasting_data_slicing_mode=none +forecasting_data_offset= +forecasting_data_limit= +forecasting_data_used_for_training= +forecasting_data_used_for_testing= +path_to_datasets=. +application_name=default_application +input_data_file=/home/r_predictions/datasets/input_data.csv +clean_data_file=/home/r_predictions/datasets/clean_data.csv +output_data_file=/home/r_predictions/datasets/output_data.csv +number_of_seconds_to_aggregate_on=10 +number_of_days_to_use_data_from=3 +prediction_processing_time_safety_margin_seconds=10 +testing_prediction_functionality=FALSE +try_to_optimize_parameters=FALSE +debug_level=0 +generate_prediction_png_output=FALSE +png_output_file=/home/r_predictions/prediction_output.png +horizon=0 +realtime_mode=TRUE diff --git a/exponential-smoothing-predictor/src/r_predictors/r_commands.R b/exponential-smoothing-predictor/src/r_predictors/r_commands.R new file mode 100644 index 0000000..b55d323 --- /dev/null +++ b/exponential-smoothing-predictor/src/r_predictors/r_commands.R @@ -0,0 +1,15 @@ +# Copyright (c) 2023 Institute of Communication and Computer Systems +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +install.packages("rapportools") +install.packages("gbutils") +install.packages("forecast") +install.packages("ggplot2") +install.packages("properties") + +install.packages("xts") +install.packages("anytime") +install.packages("purrr") \ No newline at end of file diff --git a/exponential-smoothing-predictor/src/requirements.txt b/exponential-smoothing-predictor/src/requirements.txt new file mode 100644 index 0000000..54e7dfd --- /dev/null +++ b/exponential-smoothing-predictor/src/requirements.txt @@ -0,0 +1,9 @@ +python-slugify==8.0.1 +jproperties==2.1.1 +requests==2.31.0 +msgpack==1.0.7 +numpy==1.26.3 +pandas==2.1.4 +python-dotenv==1.0.0 +python-qpid-proton==0.39.0 +influxdb-client==1.39.0 \ No newline at end of file diff --git a/exponential-smoothing-predictor/src/runtime/Predictor.py b/exponential-smoothing-predictor/src/runtime/Predictor.py new file mode 100644 index 0000000..bcb5d19 --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/Predictor.py @@ -0,0 +1,416 @@ +# Copyright (c) 2023 Institute of Communication and Computer Systems +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +import datetime +import json +import threading +import time +import os, sys +import multiprocessing +import traceback +from subprocess import PIPE, run +from runtime.exn import core + +import logging +from runtime.exn import connector +from runtime.predictions.Prediction import Prediction +from runtime.operational_status.State import State +from runtime.utilities.PredictionPublisher import PredictionPublisher +from runtime.utilities.Utilities import Utilities +print_with_time = Utilities.print_with_time + + + + + + +def predict_attribute(attribute, configuration_file_location,next_prediction_time): + + prediction_confidence_interval_produced = False + prediction_value_produced = False + prediction_valid = False + #os.chdir(os.path.dirname(configuration_file_location)) + State.prediction_data_filename = Utilities.get_prediction_data_filename(configuration_file_location,attribute) + + from sys import platform + if State.testing_prediction_functionality: + print_with_time("Testing, so output will be based on the horizon setting from the properties file and the last timestamp in the data") + print_with_time("Issuing command: Rscript forecasting_real_workload.R "+str(State.prediction_data_filename)+" "+attribute) + + # Windows + if platform == "win32": + command = ['Rscript', 'forecasting_real_workload.R', State.prediction_data_filename, attribute] + # linux + elif platform == "linux" or platform == "linux2": + command = ["Rscript forecasting_real_workload.R "+str(State.prediction_data_filename) + " "+ str(attribute)] + #Choosing the solution of linux + else: + command = ["Rscript forecasting_real_workload.R "+str(State.prediction_data_filename) + " "+ str(attribute)] + else: + print_with_time("The current directory is "+os.path.abspath(os.getcwd())) + print_with_time("Issuing command: Rscript forecasting_real_workload.R "+str(State.prediction_data_filename)+" "+attribute+" "+next_prediction_time) + + # Windows + if platform == "win32": + command = ['Rscript', 'forecasting_real_workload.R', State.prediction_data_filename, attribute, next_prediction_time] + # Linux + elif platform == "linux" or platform == "linux2": + command = ["Rscript forecasting_real_workload.R "+str(State.prediction_data_filename) + " "+ str(attribute)+" "+str(next_prediction_time) + " 2>&1"] + #Choosing the solution of linux + else: + command = ["Rscript forecasting_real_workload.R "+str(State.prediction_data_filename) + " "+ str(attribute)+" "+str(next_prediction_time)] + + process_output = run(command, shell=True, stdout=PIPE, stderr=PIPE, universal_newlines=True) + if (process_output.stdout==""): + print_with_time("Empty output from R predictions - the error output is the following:") + print(process_output.stderr) #There was an error during the calculation of the predicted value + + process_output_string_list = process_output.stdout.replace("[1] ", "").replace("\"", "").split() + prediction_value = 0 + prediction_confidence_interval = "-10000000000000000000000000,10000000000000000000000000" + prediction_mae = 0 + prediction_mse = 0 + prediction_mape = 0 + prediction_smape = 0 + for string in process_output_string_list: + if (string.startswith("Prediction:")): + prediction_value = string.replace("Prediction:", "") + prediction_value_produced = True + if (string.startswith("Confidence_interval:")): + prediction_confidence_interval = string.replace("Confidence_interval:", "") + prediction_confidence_interval_produced = True + elif (string.startswith("mae:")): + prediction_mae = string.replace("mae:", "") + elif (string.startswith("mse:")): + prediction_mse = string.replace("mse:", "") + elif (string.startswith("mape:")): + prediction_mape = string.replace("mape:", "") + elif (string.startswith("smape:")): + prediction_smape = string.replace("smape:", "") + if (prediction_confidence_interval_produced and prediction_value_produced): + prediction_valid = True + print_with_time("The prediction for attribute " + attribute + " is " + str(prediction_value)+ " and the confidence interval is "+prediction_confidence_interval) + else: + print_with_time("There was an error during the calculation of the predicted value for "+str(attribute)+", the error log follows") + print_with_time(process_output.stdout) + + output_prediction = Prediction(prediction_value, prediction_confidence_interval,prediction_valid,prediction_mae,prediction_mse,prediction_mape,prediction_smape) + return output_prediction + + +def predict_attributes(attributes,next_prediction_time): + pool = multiprocessing.Pool(len(attributes)) + print_with_time("Prediction thread pool size set to " + str(len(attributes))) + attribute_predictions = {} + + for attribute in attributes: + print_with_time("Starting " + attribute + " prediction thread") + start_time = time.time() + attribute_predictions[attribute] = pool.apply_async(predict_attribute, args=[attribute, State.configuration_file_location,str(next_prediction_time)]) + #attribute_predictions[attribute] = pool.apply_async(predict_attribute, args=[attribute, configuration_file_location,str(next_prediction_time)]).get() + + for attribute in attributes: + attribute_predictions[attribute] = attribute_predictions[attribute].get() #get the results of the processing + attribute_predictions[attribute].set_last_prediction_time_needed(int(time.time() - start_time)) + #prediction_time_needed[attribute]) + + pool.close() + pool.join() + return attribute_predictions + + +def update_prediction_time(epoch_start,prediction_horizon,maximum_time_for_prediction): + current_time = time.time() + prediction_intervals_since_epoch = ((current_time - epoch_start)//prediction_horizon) + estimated_time_after_prediction = current_time+maximum_time_for_prediction + earliest_time_to_predict_at = epoch_start + (prediction_intervals_since_epoch+1)*prediction_horizon #these predictions will concern the next prediction interval + + if (estimated_time_after_prediction > earliest_time_to_predict_at ): + future_prediction_time_factor = 1+(estimated_time_after_prediction-earliest_time_to_predict_at)//prediction_horizon + prediction_time = earliest_time_to_predict_at+ future_prediction_time_factor*prediction_horizon + print_with_time("Due to slowness of the prediction, skipping next time point for prediction (prediction at " + str(earliest_time_to_predict_at-prediction_horizon)+" for "+ str(earliest_time_to_predict_at)+") and targeting "+str(future_prediction_time_factor)+" intervals ahead (prediction at time point "+str(prediction_time-prediction_horizon)+" for "+ str(prediction_time)+")") + else: + prediction_time = earliest_time_to_predict_at + prediction_horizon + print_with_time("Time is now "+str(current_time)+" and next prediction batch starts with prediction for time "+str(prediction_time)) + return prediction_time + + +def calculate_and_publish_predictions(prediction_horizon,maximum_time_required_for_prediction): + while Bootstrap.start_forecasting: + print_with_time("Using " + State.configuration_file_location + " for configuration details...") + State.next_prediction_time = update_prediction_time(State.epoch_start, prediction_horizon,maximum_time_required_for_prediction) + + for attribute in State.metrics_to_predict: + if ((State.previous_prediction is not None) and (State.previous_prediction[attribute] is not None) and (State.previous_prediction[attribute].last_prediction_time_needed>maximum_time_required_for_prediction)): + maximum_time_required_for_prediction = State.previous_prediction[attribute].last_prediction_time_needed + + #Below we subtract one reconfiguration interval, as we cannot send a prediction for a time point later than one prediction_horizon interval + wait_time = State.next_prediction_time - prediction_horizon - time.time() + print_with_time("Waiting for "+str((int(wait_time*100))/100)+" seconds, until time "+datetime.datetime.fromtimestamp(State.next_prediction_time - prediction_horizon).strftime('%Y-%m-%d %H:%M:%S')) + if (wait_time>0): + time.sleep(wait_time) + if(not Bootstrap.start_forecasting): + break + + Utilities.load_configuration() + Utilities.update_monitoring_data() + first_prediction = None + for prediction_index in range(0,State.total_time_intervals_to_predict): + prediction_time = int(State.next_prediction_time)+prediction_index*prediction_horizon + try: + print_with_time ("Initiating predictions for all metrics for next_prediction_time, which is "+str(State.next_prediction_time)) + prediction = predict_attributes(State.metrics_to_predict,prediction_time) + if (prediction_time == int(State.next_prediction_time)): + first_prediction = prediction + except Exception as e: + print_with_time("Could not create a prediction for some or all of the metrics for time point "+str(State.next_prediction_time)+", proceeding to next prediction time. However, "+str(prediction_index)+" predictions were produced (out of the configured "+State.total_time_intervals_to_predict+"). The encountered exception trace follows:") + print(e) + #continue was here, to continue while loop, replaced by break + break + for attribute in State.metrics_to_predict: + if(not prediction[attribute].prediction_valid): + #continue was here, to continue while loop, replaced by break + break + if (State.disconnected or State.check_stale_connection()): + logging.info("Possible problem due to disconnection or a stale connection") + #State.connection.connect() + message_not_sent = True + current_time = int(time.time()) + prediction_message_body = { + "metricValue": float(prediction[attribute].value), + "level": 3, + "timestamp": current_time, + "probability": 0.95, + "confidence_interval": [float(prediction[attribute].lower_confidence_interval_value) , float( + prediction[attribute].upper_confidence_interval_value)], + "predictionTime": prediction_time, + "refersTo": "todo", + "cloud": "todo", + "provider": "todo", + } + training_models_message_body = { + "metrics": State.metrics_to_predict, + "forecasting_method": "exponentialsmoothing", + "timestamp": current_time, + } + while (message_not_sent): + try: + #for publisher in State.broker_publishers: + # if publisher. + for publisher in State.broker_publishers: + #if publisher.address=="eu.nebulouscloud.monitoring.preliminary_predicted.exponentialsmoothing"+attribute: + + if publisher.key=="publisher_"+attribute: + publisher.send(prediction_message_body) + + + #State.connection.send_to_topic('intermediate_prediction.%s.%s' % (id, attribute), prediction_message_body) + + #State.connection.send_to_topic('training_models',training_models_message_body) + message_not_sent = False + print_with_time("Successfully sent prediction message for %s to topic eu.nebulouscloud.preliminary_predicted.%s.%s\n\n%s\n\n" % (attribute, id, attribute, prediction_message_body)) + except ConnectionError as exception: + #State.connection.disconnect() + #State.connection = messaging.morphemic.Connection('admin', 'admin') + #State.connection.connect() + logging.error("Error sending intermediate prediction"+str(exception)) + State.disconnected = False + + if (first_prediction is not None): + State.previous_prediction = first_prediction #first_prediction is the first of the batch of the predictions which are produced. The size of this batch is set by the State.total_time_intervals_to_predict (currently set to 8) + + #State.number_of_days_to_use_data_from = (prediction_horizon - State.prediction_processing_time_safety_margin_seconds) / (wait_time / State.number_of_days_to_use_data_from) + #State.number_of_days_to_use_data_from = 1 + int( + # (prediction_horizon - State.prediction_processing_time_safety_margin_seconds) / + # (wait_time / State.number_of_days_to_use_data_from) + #) + + +#class Listener(messaging.listener.MorphemicListener): + +class Bootstrap(connector.ConnectorHandler): + + start_forecasting = None # Whether the component should start (or keep on) forecasting + prediction_thread = None + + def ready(self, context): + if context.has_publisher('state'): + context.publishers['state'].starting() + context.publishers['state'].started() + context.publishers['state'].custom('forecasting') + context.publishers['state'].stopping() + context.publishers['state'].stopped() + + context.publishers['publisher_cpu_usage'].send({ + 'hello': 'world' + }) + + def on_message(self, key, address, body, context, **kwargs): + application_name = "default_application" + address = address.replace("topic://eu.nebulouscloud.","") + if (address).startswith(State.MONITORING_DATA_PREFIX): + address = address.replace(State.MONITORING_DATA_PREFIX+".","",1) + + logging.info("New monitoring data arrived at topic "+address) + logging.info(body) + + elif (address).startswith(State.FORECASTING_CONTROL_PREFIX): + address = address.replace(State.FORECASTING_CONTROL_PREFIX+".","",1) + logging.info("The address is " + address) + + if address == 'metrics_to_predict': + + State.initial_metric_list_received = True + print_with_time("Inside message handler for metrics_to predict") + #body = json.loads(body) + #for element in body: + # State.metrics_to_predict.append(element["metric"]) + + elif address == 'test.exponentialsmoothing': + State.testing_prediction_functionality = True + + elif address == 'start_forecasting.exponentialsmoothing': + try: + State.metrics_to_predict = body["metrics"] + print_with_time("Received request to start predicting the following metrics: "+ ",".join(State.metrics_to_predict)) + State.broker_publishers = [] + for metric in State.metrics_to_predict: + State.broker_publishers.append (PredictionPublisher(metric)) + State.publishing_connector = connector.EXN('publishing_exsmoothing', handler=Bootstrap(),#consumers=list(State.broker_consumers), + consumers=[], + publishers=State.broker_publishers, + url="localhost", + port="5672", + username="admin", + password="admin" + ) + + thread = threading.Thread(target=State.publishing_connector.start,args=()) + thread.start() + + except Exception as e: + print_with_time("Could not load json object to process the start forecasting message \n"+str(body)) + return + + #if (not State.initial_metric_list_received): + # print_with_time("The initial metric list has not been received, + #therefore no predictions are generated") + # return + + try: + Bootstrap.start_forecasting = True + State.epoch_start = body["epoch_start"] + prediction_horizon = int(body["prediction_horizon"]) + State.next_prediction_time = update_prediction_time(State.epoch_start,prediction_horizon,State.prediction_processing_time_safety_margin_seconds) # State.next_prediction_time was assigned the value of State.epoch_start here, but this re-initializes targeted prediction times after each start_forecasting message, which is not desired necessarily + print_with_time("A start_forecasting message has been received, epoch start and prediction horizon are "+str(State.epoch_start)+", and "+str(prediction_horizon)+ " seconds respectively") + except Exception as e: + print_with_time("Problem while retrieving epoch start and/or prediction_horizon") + return + + with open(State.configuration_file_location, "r+b") as f: + + State.configuration_details.load(f, "utf-8") + + # Do stuff with the p object... + initial_seconds_aggregation_value, metadata = State.configuration_details["number_of_seconds_to_aggregate_on"] + initial_seconds_aggregation_value = int(initial_seconds_aggregation_value) + + if (prediction_horizon {address}") + else: + print_with_time("Received message "+body+" but could not handle it") +def get_dataset_file(attribute): + pass + + +if __name__ == "__main__": + os.chdir("exponential-smoothing-predictor/src/r_predictors") + State.configuration_file_location = sys.argv[1] + Utilities.load_configuration() +# Subscribe to retrieve the metrics which should be used + + + id = "exponentialsmoothing" + State.disconnected = True + + #while(True): + # State.connection = messaging.morphemic.Connection('admin', 'admin') + # State.connection.connect() + # State.connection.set_listener(id, Listener()) + # State.connection.topic("test","helloid") + # State.connection.send_to_topic("test","HELLO!!!") + #exit(100) + + while True: + topics_to_subscribe = ["eu.nebulouscloud.monitoring.metric_list","eu.nebulouscloud.monitoring.realtime.>","eu.nebulouscloud.forecasting.start_forecasting.exponentialsmoothing","eu.nebulouscloud.forecasting.stop_forecasting.exponentialsmoothing"] + current_consumers = [] + + for topic in topics_to_subscribe: + current_consumer = core.consumer.Consumer('monitoring_'+topic, topic, topic=True,fqdn=True) + State.broker_consumers.append(current_consumer) + current_consumers.append(current_consumer) + State.subscribing_connector = connector.EXN('slovid', handler=Bootstrap(), + #consumers=list(State.broker_consumers), + consumers=State.broker_consumers, + url="localhost", + port="5672", + username="admin", + password="admin" + ) + + + #connector.start() + thread = threading.Thread(target=State.subscribing_connector.start,args=()) + thread.start() + State.disconnected = False; + + print_with_time("Checking (EMS) broker connectivity state, possibly ready to start") + if (State.disconnected or State.check_stale_connection()): + try: + #State.connection.disconnect() #required to avoid the already connected exception + #State.connection.connect() + State.disconnected = True + print_with_time("Possible problem in the connection") + except Exception as e: + print_with_time("Encountered exception while trying to connect to broker") + print(traceback.format_exc()) + State.disconnected = True + time.sleep(5) + continue + State.disconnection_handler.acquire() + State.disconnection_handler.wait() + State.disconnection_handler.release() + + #State.connector.stop() diff --git a/exponential-smoothing-predictor/src/runtime/__init__.py b/exponential-smoothing-predictor/src/runtime/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/exponential-smoothing-predictor/src/runtime/exn/__init__.py b/exponential-smoothing-predictor/src/runtime/exn/__init__.py new file mode 100644 index 0000000..74c0c17 --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/exn/__init__.py @@ -0,0 +1 @@ +from . import connector \ No newline at end of file diff --git a/exponential-smoothing-predictor/src/runtime/exn/connector.py b/exponential-smoothing-predictor/src/runtime/exn/connector.py new file mode 100644 index 0000000..8a62016 --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/exn/connector.py @@ -0,0 +1,155 @@ +import logging +import os + +from dotenv import load_dotenv +from proton.handlers import MessagingHandler +from proton.reactor import Container + +from .core import context as core_context, state_publisher, schedule_publisher +from .settings import base + +logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') +_logger = logging.getLogger(__name__) + +class ConnectorHandler: + def __init__(self): + self.initialized = False + + + def set_ready(self,ready, ctx:core_context.Context): + self.initialized = ready + self.ready(ctx) + + def ready(self, ctx:core_context.Context): + pass + + def on_message(self, key, address, body, context, **kwargs): + pass + + +class CoreHandler(MessagingHandler): + + def __init__(self, + context, + handler: ConnectorHandler, + publishers = [], + consumers = [], + ): + super(CoreHandler, self).__init__() + self.context=context + self.publishers=publishers + self.consumers=consumers + self.handler = handler + self.conn = None + + def on_start(self, event) -> None: + + self.conn = event.container.connect(self.context.connection) + for publisher in self.publishers: + _logger.info(f"{publisher.address} registering sender") + address = self.context.build_address_from_link(publisher) + publisher.set(event.container.create_sender(self.conn,address)) + self.context.register_publisher(publisher) + _logger.debug(f"{self.context.base} Registering timer { hasattr(publisher, 'delay')}") + if hasattr(publisher, "delay"): + _logger.debug(f"{self.context.base} Registering timer") + event.reactor.schedule(publisher.delay, self) + + for consumer in self.consumers: + address = self.context.build_address_from_link(consumer) + _logger.info(f"{self.context.base} Registering consumer {address}") + consumer.set(event.container.create_receiver(self.conn, address)) + self.context.register_consumers(consumer) + + def on_sendable(self, event): + if not self.handler.initialized: + self.handler.set_ready(True, self.context) + + def on_timer_task(self, event): + _logger.debug(f"{self.context.base} On timer") + for publisher in self._delay_publishers(): + publisher.send() + event.reactor.schedule(publisher.delay, self) + + def on_message(self, event): + try: + for consumer in self.consumers: + if consumer.should_handle(event): + _logger.debug(f"Received message: {event.message.address}") + self.handler.on_message(consumer.key, event.message.address, event.message.body, self.context, event=event) + except Exception as e: + _logger.error(f"Received message: {e}") + + + def close(self): + if self.conn: + self.conn.close() + else: + _logger.warning(f"{self.context.base} No open connection") + + def _delay_publishers(self): + return [p for p in self.publishers if hasattr(p,'delay')] + + +class EXN: + def __init__(self, component=None, + handler:ConnectorHandler = None, + publishers=[], + consumers=[], + **kwargs): + + # Load .env file + load_dotenv() + + # Validate and set connector + if not component: + _logger.error("Component cannot be empty or None") + raise ValueError("Component cannot be empty or None") + self.component = component + self.handler = handler + + self.url = kwargs.get('url',os.getenv('NEBULOUS_BROKER_URL')) + self.port = kwargs.get('port', os.getenv('NEBULOUS_BROKER_PORT')) + self.username = kwargs.get('username',os.getenv('NEBULOUS_BROKER_USERNAME')) + self.password = kwargs.get('password', os.getenv('NEBULOUS_BROKER_PASSWORD')) + + # Validate attributes + if not self.url: + _logger.error("URL cannot be empty or None") + raise ValueError("URL cannot be empty or None") + if not self.port: + _logger.error("PORT cannot be empty or None") + raise ValueError("PORT cannot be empty or None") + if not self.username: + _logger.error("USERNAME cannot be empty or None") + raise ValueError("USERNAME cannot be empty or None") + if not self.password: + _logger.error("PASSWORD cannot be empty or None") + raise ValueError("PASSWORD cannot be empty or None") + + ctx = core_context.Context( + connection=f"{self.url}:{self.port}", + base=f"{base.NEBULOUS_BASE_NAME}.{self.component}", + ) + + if kwargs.get("enable_state",False): + publishers.append(state_publisher.Publisher()) + + if kwargs.get("enable_health",False): + publishers.append(schedule_publisher.Publisher( + base.NEBULOUS_DEFAULT_HEALTH_CHECK_TIMEOUT, + 'health', + 'health', + True)) + + core_handler = CoreHandler( + ctx, + handler, + publishers, + consumers + ) + + self.container = Container(core_handler) + + def start(self): + self.container.run() diff --git a/exponential-smoothing-predictor/src/runtime/exn/core/__init__.py b/exponential-smoothing-predictor/src/runtime/exn/core/__init__.py new file mode 100644 index 0000000..bdc524b --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/exn/core/__init__.py @@ -0,0 +1,8 @@ + + +from . import context +from . import publisher +from . import consumer +from . import state_publisher +from . import schedule_publisher + diff --git a/exponential-smoothing-predictor/src/runtime/exn/core/consumer.py b/exponential-smoothing-predictor/src/runtime/exn/core/consumer.py new file mode 100644 index 0000000..e5c7424 --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/exn/core/consumer.py @@ -0,0 +1,17 @@ +import datetime + +from proton import Message, Event +from . import link +import logging + +_logger = logging.getLogger(__name__) + + +class Consumer(link.Link): + + def on_message(self, body, **kwargs): + _logger.debug(f"{self.address} Got {body} ") + + def should_handle(self, event: Event): + if event.link == self._link: + return True diff --git a/exponential-smoothing-predictor/src/runtime/exn/core/context.py b/exponential-smoothing-predictor/src/runtime/exn/core/context.py new file mode 100644 index 0000000..1b99056 --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/exn/core/context.py @@ -0,0 +1,63 @@ +from . import link + + +class Context: + + def __init__(self, connection, base): + + self.connection = connection + self.base = base + self.publishers = {} + self.consumers = {} + + def get_publisher(self, key): + if key in self.publishers: + return self.publishers[key] + return None + + def has_publisher(self, key): + return key in self.publishers + + def has_consumer(self, key): + return key in self.consumers + + def register_publisher(self, publisher): + self.publishers[publisher.key] = publisher + + def register_consumers(self, consumer): + self.consumers[consumer.key] = consumer + + def build_address_from_link(self, link: link.Link): + + if link.fqdn: + address = link.address + if link.topic and not link.address.startswith("topic://"): + address = f"topic://{address}" + return address + + address = f"{self.base}.{link.address}" + if link.topic: + address = f"topic://{address}" + + return address + + def match_address(self, l: link.Link, event): + + if not event \ + or not event.message \ + or not event.message.address: + return False + + address = self.build_address_from_link(l) + return address == event.message.address + + def build_address(self, *actions, topic=False): + + if len(actions) <= 0: + return self.base + + address = f"{self.base}.{'.'.join(actions)}" + if topic: + address = f"topic://{address}" + + return address diff --git a/exponential-smoothing-predictor/src/runtime/exn/core/link.py b/exponential-smoothing-predictor/src/runtime/exn/core/link.py new file mode 100644 index 0000000..65d6395 --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/exn/core/link.py @@ -0,0 +1,18 @@ + +from proton import Link as pLink +class Link: + + fqdn=False + def __init__(self, key, address, topic=False, fqdn=False): + + self.key = key + self.address = address + self._link = None + self.topic= topic + self.fqdn= fqdn + + + def set(self, link:pLink): + # The proton container creates a sender + # so we just use composition instead of extension + self._link = link diff --git a/exponential-smoothing-predictor/src/runtime/exn/core/publisher.py b/exponential-smoothing-predictor/src/runtime/exn/core/publisher.py new file mode 100644 index 0000000..2768c5d --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/exn/core/publisher.py @@ -0,0 +1,33 @@ +import datetime +import logging + +from proton import Message + +from . import link + +_logger = logging.getLogger(__name__) + + +class Publisher(link.Link): + + def send(self, body=None): + if not body: + body = {} + + _logger.debug(f"{self.address} Sending {body} ") + msg = self._prepare_message(body) + self._link.send(msg) + + def _prepare_message(self, body=None): + + if not body: + body = {} + + send = {"when": datetime.datetime.utcnow().isoformat()} + send.update(body) + msg = Message( + address=self._link.target.address, + body=send + ) + msg.content_type = "application/json" + return msg diff --git a/exponential-smoothing-predictor/src/runtime/exn/core/schedule_publisher.py b/exponential-smoothing-predictor/src/runtime/exn/core/schedule_publisher.py new file mode 100644 index 0000000..9cf8b64 --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/exn/core/schedule_publisher.py @@ -0,0 +1,14 @@ +import logging + +from . import publisher + +_logger = logging.getLogger(__name__) + + +class Publisher(publisher.Publisher): + send_next = False + delay = 15 + + def __init__(self, delay, key, address, topic=False): + super(Publisher, self).__init__(key, address, topic) + self.delay = delay diff --git a/exponential-smoothing-predictor/src/runtime/exn/core/state_publisher.py b/exponential-smoothing-predictor/src/runtime/exn/core/state_publisher.py new file mode 100644 index 0000000..8ea6af7 --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/exn/core/state_publisher.py @@ -0,0 +1,45 @@ +import datetime +import json +from enum import Enum + +from proton import Message + +from . import publisher + +import logging + +_logger = logging.getLogger(__name__) + +class States(Enum): + + STARTING = "starting" + STARTED = "started" + READY = "ready" + STOPPING = "stopping" + STOPPED = "stopped" + +class Publisher(publisher.Publisher): + + def __init__(self): + super().__init__("state","state", True) + + def _send_message(self, message_type): + self.send({"state": message_type,"message": None}) + + def starting(self): + self._send_message(States.STARTING) + + def started(self): + self._send_message(States.STARTED) + + def ready(self): + self._send_message(States.READY) + + def stopping(self): + self._send_message(States.STOPPING) + + def stopped(self): + self._send_message(States.STOPPED) + + def custom(self, state): + self._send_message(state) diff --git a/exponential-smoothing-predictor/src/runtime/exn/settings/__init__.py b/exponential-smoothing-predictor/src/runtime/exn/settings/__init__.py new file mode 100644 index 0000000..cf50d1c --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/exn/settings/__init__.py @@ -0,0 +1 @@ +from . import base \ No newline at end of file diff --git a/exponential-smoothing-predictor/src/runtime/exn/settings/base.py b/exponential-smoothing-predictor/src/runtime/exn/settings/base.py new file mode 100644 index 0000000..27ac8a6 --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/exn/settings/base.py @@ -0,0 +1,2 @@ +NEBULOUS_BASE_NAME="eu.nebulous" +NEBULOUS_DEFAULT_HEALTH_CHECK_TIMEOUT=15 \ No newline at end of file diff --git a/exponential-smoothing-predictor/src/runtime/operational_status/State.py b/exponential-smoothing-predictor/src/runtime/operational_status/State.py new file mode 100644 index 0000000..d6146d4 --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/operational_status/State.py @@ -0,0 +1,62 @@ +# Copyright (c) 2023 Institute of Communication and Computer Systems +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +import threading +from jproperties import Properties + +class State: + """ + Fail-safe default values introduced below + """ + + prediction_data_filename = "default_application.csv" + MONITORING_DATA_PREFIX = "monitoring" + FORECASTING_CONTROL_PREFIX = "forecasting" + + #Used to create the dataset from the InfluxDB + application_name = "default_application" + influxdb_bucket = "nebulous" + influxdb_organization = "nebulous" + influxdb_token = "tzIfpbU9b77quyvN0yHIbWltSh1c1371-o9nl_wJYaeo5TWdk5txyxXhp2iaLVMvOvf020HnEEAkE0yy5AllKQ==" + influxdb_dbname = "nebulous" + influxdb_password = "adminadmin" + influxdb_username = "admin" + influxdb_port = 8086 + influxdb_hostname = "localhost" + path_to_datasets = "./datasets" + dataset_file_name = "exponential_smoothing_dataset.csv" + number_of_days_to_use_data_from = 365 + + #Forecaster variables + metrics_to_predict = [] + epoch_start = 0 + next_prediction_time = 0 + previous_prediction = None + configuration_file_location="prediction_configuration.properties" + configuration_details = Properties() + prediction_processing_time_safety_margin_seconds = 20 + disconnected = True + disconnection_handler = threading.Condition() + initial_metric_list_received = False + testing_prediction_functionality = False + total_time_intervals_to_predict = 8 + + #Connection details + subscribing_connector = None + publishing_connector = None + broker_publishers = [] + broker_consumers = [] + connector = None + broker_address = "localhost" + broker_port = 5672 + broker_username = "admin" + broker_password = "admin" + + + @staticmethod + #TODO inspect State.connection + def check_stale_connection(): + return (not State.subscribing_connector) diff --git a/exponential-smoothing-predictor/src/runtime/operational_status/__init__.py b/exponential-smoothing-predictor/src/runtime/operational_status/__init__.py new file mode 100644 index 0000000..ae07b8f --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/operational_status/__init__.py @@ -0,0 +1,5 @@ +# Copyright (c) 2023 Institute of Communication and Computer Systems +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. diff --git a/exponential-smoothing-predictor/src/runtime/predictions/Prediction.py b/exponential-smoothing-predictor/src/runtime/predictions/Prediction.py new file mode 100644 index 0000000..e61b0db --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/predictions/Prediction.py @@ -0,0 +1,31 @@ +# Copyright (c) 2023 Institute of Communication and Computer Systems +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +class Prediction(): + value = None + lower_confidence_interval_value = None + upper_confidence_interval_value = None + prediction_valid=False + #Error metrics + mae = None + mse = None + mape = None + smape = None + + def __init__(self,value,confidence_interval_tuple,prediction_valid,prediction_mae,prediction_mse,prediction_mape,prediction_smape): + self.value = value + self.lower_confidence_interval_value,self.upper_confidence_interval_value = map(float,confidence_interval_tuple.split(",")) + self.prediction_valid = prediction_valid + self.mae = prediction_mae + self.mse = prediction_mse + self.mape = prediction_mape + self.smape = prediction_smape + + def set_last_prediction_time_needed(self,prediction_time_needed): + self.last_prediction_time_needed = prediction_time_needed + + def get_error_metrics_string(self): + return self.mae+";"+self.mse+";"+self.mape+";"+self.smape \ No newline at end of file diff --git a/exponential-smoothing-predictor/src/runtime/predictions/__init__.py b/exponential-smoothing-predictor/src/runtime/predictions/__init__.py new file mode 100644 index 0000000..ae07b8f --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/predictions/__init__.py @@ -0,0 +1,5 @@ +# Copyright (c) 2023 Institute of Communication and Computer Systems +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. diff --git a/exponential-smoothing-predictor/src/runtime/predictions/prediction_requirements.txt b/exponential-smoothing-predictor/src/runtime/predictions/prediction_requirements.txt new file mode 100644 index 0000000..938e335 --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/predictions/prediction_requirements.txt @@ -0,0 +1 @@ +jproperties \ No newline at end of file diff --git a/exponential-smoothing-predictor/src/runtime/utilities/InfluxDBConnector.py b/exponential-smoothing-predictor/src/runtime/utilities/InfluxDBConnector.py new file mode 100644 index 0000000..1229963 --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/utilities/InfluxDBConnector.py @@ -0,0 +1,60 @@ +from influxdb_client import InfluxDBClient, Point, WritePrecision +from datetime import datetime +from influxdb_client.client.write_api import SYNCHRONOUS + +from runtime.operational_status.State import State + +#import influxdb_client, os, time +#from influxdb_client import InfluxDBClient, Point, WritePrecision +#from influxdb_client.client.write_api import SYNCHRONOUS + +#token = Constants.token +#org = "nebulous" +#url = "http://localhost:8086" + +#write_client = influxdb_client.InfluxDBClient(url=url, token=token, org=org) + +#bucket="nebulous" + +#write_api = client.write_api(write_options=SYNCHRONOUS) +# +#for value in range(5): +# point = ( +# Point("measurement1") +# .tag("tagname1", "tagvalue1") +# .field("field1", value) +# ) +# write_api.write(bucket=bucket, org="nebulous", record=point) +# time.sleep(1) # separate points by 1 second + + +data = [ + { + "measurement": "temperature", + "tags": {"location": "Prague"}, + "fields": {"temperature": 25.3} + } +] + + + + +class InfluxDBConnector: + client = InfluxDBClient(url="http://"+State.influxdb_hostname+":"+str(State.influxdb_port), token=State.influxdb_token, org=State.influxdb_organization) + write_api = client.write_api(write_options=SYNCHRONOUS) + + def InfluxDBConnector(self): + pass + def write_data(self,data): + self.write_api.write(bucket=State.influxdb_bucket, org=State.influxdb_organization, record=data, write_precision=WritePrecision.S) + + def get_data(self): + query_api = self.client.query_api() + query = """from(bucket: "nebulous") + |> range(start: -1m) + |> filter(fn: (r) => r._measurement == "temperature")""" + tables = query_api.query(query, org=State.influxdb_organization) + + for table in tables: + for record in table.records: + print(record) \ No newline at end of file diff --git a/exponential-smoothing-predictor/src/runtime/utilities/PredictionPublisher.py b/exponential-smoothing-predictor/src/runtime/utilities/PredictionPublisher.py new file mode 100644 index 0000000..0c0a83b --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/utilities/PredictionPublisher.py @@ -0,0 +1,11 @@ +from runtime.exn import core + + +class PredictionPublisher(core.publisher.Publisher): + metric_name = "" + def __init__(self,metric_name): + super().__init__('publisher_'+metric_name, 'eu.nebulouscloud.preliminary_predicted.'+metric_name, True,True) + self.metric_name = metric_name + + def send(self, body={}): + super(PredictionPublisher, self).send(body) diff --git a/exponential-smoothing-predictor/src/runtime/utilities/Utilities.py b/exponential-smoothing-predictor/src/runtime/utilities/Utilities.py new file mode 100644 index 0000000..8dbbc1d --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/utilities/Utilities.py @@ -0,0 +1,114 @@ +# Copyright (c) 2023 Institute of Communication and Computer Systems +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +import pathlib +#from morphemic.dataset import DatasetMaker +import datetime +import time,os +from dateutil import parser + +from runtime.operational_status.State import State +from runtime.utilities.InfluxDBConnector import InfluxDBConnector + + +class DatasetMaker: + pass + + +class Utilities: + + @staticmethod + def print_with_time(x): + now = datetime.datetime.now() + print("["+now.strftime('%Y-%m-%d %H:%M:%S')+"] "+str(x)) + + @staticmethod + def load_configuration(): + with open(State.configuration_file_location,'rb') as config_file: + State.configuration_details.load(config_file) + #prediction_horizon = configuration_details.get("prediction_horizon") + State.dataset_file_name = State.configuration_details.get("input_data_file").data + State.number_of_days_to_use_data_from = int(State.configuration_details.get("number_of_days_to_use_data_from").data) + State.prediction_processing_time_safety_margin_seconds = int(State.configuration_details.get("prediction_processing_time_safety_margin_seconds").data) + State.testing_prediction_functionality = State.configuration_details.get("testing_prediction_functionality").data.lower() == "true" + State.path_to_datasets = State.configuration_details.get("path_to_datasets").data + State.broker_address = State.configuration_details.get("broker_address").data + State.broker_port = int(State.configuration_details.get("broker_port").data) + State.broker_username = State.configuration_details.get("broker_username").data + State.broker_password = State.configuration_details.get("broker_password").data + + State.influxdb_hostname = State.configuration_details.get("INFLUXDB_HOSTNAME").data + State.influxdb_port = int(State.configuration_details.get("INFLUXDB_PORT").data) + State.influxdb_username = State.configuration_details.get("INFLUXDB_USERNAME").data + State.influxdb_password = State.configuration_details.get("INFLUXDB_PASSWORD").data + State.influxdb_dbname = State.configuration_details.get("INFLUXDB_DBNAME").data + State.influxdb_org = State.configuration_details.get("INFLUXDB_ORG").data + State.application_name = State.configuration_details.get("APP_NAME").data + #This method accesses influx db to retrieve the most recent metric values. + @staticmethod + def update_monitoring_data(): + #query(metrics_to_predict,number_of_days_for_which_data_was_retrieved) + #save_new_file() + Utilities.print_with_time("Starting dataset creation process...") + + try: + """ + Deprecated functionality to retrieve dataset creation details. Relevant functionality moved inside the load configuration method + influxdb_hostname = os.environ.get("INFLUXDB_HOSTNAME","localhost") + influxdb_port = int(os.environ.get("INFLUXDB_PORT","8086")) + influxdb_username = os.environ.get("INFLUXDB_USERNAME","morphemic") + influxdb_password = os.environ.get("INFLUXDB_PASSWORD","password") + influxdb_dbname = os.environ.get("INFLUXDB_DBNAME","morphemic") + influxdb_org = os.environ.get("INFLUXDB_ORG","morphemic") + application_name = "default_application" + """ + metric_names = ["cpu_usage","ram_usage"] + for metric_name in State.metrics_to_predict: + time_interval_to_get_data_for = str(State.number_of_days_to_use_data_from)+"d" + print_data_from_db = True + query_string = 'from(bucket: "'+State.influxdb_bucket+'") |> range(start:-'+time_interval_to_get_data_for+') |> filter(fn: (r) => r["_measurement"] == "'+metric_name+'")' + influx_connector = InfluxDBConnector() + print("performing query") + current_time = time.time() + result = influx_connector.client.query_api().query(query_string,State.influxdb_organization) + elapsed_time = time.time()-current_time + print("performed query, it took "+str(elapsed_time) + " seconds") + #print(result.to_values()) + with open(Utilities.get_prediction_data_filename(State.configuration_file_location,metric_name), 'w') as file: + for table in result: + #print header row + file.write("Timestamp,ems_time,"+metric_name+"\r\n") + for record in table.records: + dt = parser.isoparse(str(record.get_time())) + epoch_time = int(dt.timestamp()) + metric_value = record.get_value() + if(print_data_from_db): + file.write(str(epoch_time)+","+str(epoch_time)+","+str(metric_value)+"\r\n") + # Write the string data to the file + + + + except Exception as e: + Utilities.print_with_time("Could not create new dataset as an exception was thrown") + print(e) + + @staticmethod + def get_prediction_data_filename(configuration_file_location,metric_name): + from jproperties import Properties + p = Properties() + with open(configuration_file_location, "rb") as f: + p.load(f, "utf-8") + path_to_datasets, metadata = p["path_to_datasets"] + application_name, metadata = p["application_name"] + path_to_datasets = Utilities.fix_path_ending(path_to_datasets) + return "" + str(path_to_datasets) + str(application_name) + "_"+metric_name+ ".csv" + + @staticmethod + def fix_path_ending(path): + if (path[-1] is os.sep): + return path + else: + return path + os.sep diff --git a/exponential-smoothing-predictor/src/runtime/utilities/__init__.py b/exponential-smoothing-predictor/src/runtime/utilities/__init__.py new file mode 100644 index 0000000..ae07b8f --- /dev/null +++ b/exponential-smoothing-predictor/src/runtime/utilities/__init__.py @@ -0,0 +1,5 @@ +# Copyright (c) 2023 Institute of Communication and Computer Systems +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. diff --git a/exponential-smoothing-predictor/src/setup.py b/exponential-smoothing-predictor/src/setup.py new file mode 100644 index 0000000..5f7e6c4 --- /dev/null +++ b/exponential-smoothing-predictor/src/setup.py @@ -0,0 +1,40 @@ +# Copyright (c) 2023 Institute of Communication and Computer Systems +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. + +from distutils.core import setup + +setup( + # Application name: + name="esm_forecaster", + + # Version number (initial): + version="0.1.0", + + # Application author details: + author="Andreas Tsagkaropoulos", + author_email="atsagkaropoulos@mail.ntua.gr", + + # Packages + packages=["r_predictors","runtime","runtime.exn","runtime.operational_status","runtime.utilities","runtime.predictions"], + + # Include additional files into the package + include_package_data=True, + + # Details + #url="http://pypi.python.org/pypi/exponential_smoothing_forecaster/", + + # + # license="LICENSE.txt", + description="A utility to generate monitoring metric predictions for the Morphemic platform using exponential smoothing.", + + # long_description=open("README.txt").read(), + + # Dependent packages (distributions) + install_requires=[ + "python-slugify", + "jproperties" + ], +) diff --git a/zuul.d/jobs.yaml b/zuul.d/jobs.yaml index 83505c8..b969c27 100644 --- a/zuul.d/jobs.yaml +++ b/zuul.d/jobs.yaml @@ -8,15 +8,15 @@ - nebulous-exponential-smoothing-predictor-container-images description: Build the container images. files: &image_files - - ^java-spring-boot-demo/ + - ^exponential-smoothing-predictor/ vars: &image_vars promote_container_image_job: nebulous-exponential-smoothing-predictor-upload-container-images container_images: - - context: java-spring-boot-demo + - context: exponential-smoothing-predictor registry: quay.io - repository: quay.io/nebulous/exponential-smoothing-predictor-java-spring-boot-demo + repository: quay.io/nebulous/exponential-smoothing-predictor-exponential-smoothing-predictor namespace: nebulous - repo_shortname: exponential-smoothing-predictor-java-spring-boot-demo + repo_shortname: exponential-smoothing-predictor-exponential-smoothing-predictor repo_description: "" - job: @@ -44,7 +44,7 @@ description: Run Hadolint on Dockerfile(s). vars: dockerfiles: - - java-spring-boot-demo/Dockerfile + - exponential-smoothing-predictor/Dockerfile - job: name: nebulous-exponential-smoothing-predictor-helm-lint