From b262f01fedf1eb39eb6d91e4bad1c5c9829bbb16 Mon Sep 17 00:00:00 2001 From: Avik Basu Date: Thu, 15 Jun 2023 11:15:18 -0700 Subject: [PATCH] fix: lint Signed-off-by: Avik Basu --- .../.dockerignore | 0 examples/block_pipeline/Dockerfile | 45 + examples/block_pipeline/numa-pl.yaml | 96 + examples/block_pipeline/requirements.txt | 4 + .../resources/train_data.csv | 0 examples/block_pipeline/server.py | 20 + examples/block_pipeline/src/__init__.py | 19 + examples/block_pipeline/src/inference.py | 64 + examples/block_pipeline/src/train.py | 64 + examples/block_pipeline/src/utils.py | 42 + examples/multi_udf/.dockerignore | 6 + .../Dockerfile | 0 .../README.md | 0 .../entry.sh | 0 .../numa-pl.yaml | 0 .../requirements.txt | 0 .../src/__init__.py | 0 .../src/factory.py | 0 .../multi_udf/src/resources/train_data.csv | 4000 +++++++++++++++++ .../src/udf/__init__.py | 0 .../src/udf/inference.py | 0 .../src/udf/postprocess.py | 0 .../src/udf/preprocess.py | 0 .../src/udf/threshold.py | 0 .../src/udf/train.py | 0 .../src/utils.py | 0 .../starter.py | 0 27 files changed, 4360 insertions(+) rename examples/{numalogic-simple-pipeline => block_pipeline}/.dockerignore (100%) create mode 100644 examples/block_pipeline/Dockerfile create mode 100644 examples/block_pipeline/numa-pl.yaml create mode 100644 examples/block_pipeline/requirements.txt rename examples/{numalogic-simple-pipeline/src => block_pipeline}/resources/train_data.csv (100%) create mode 100644 examples/block_pipeline/server.py create mode 100644 examples/block_pipeline/src/__init__.py create mode 100644 examples/block_pipeline/src/inference.py create mode 100644 examples/block_pipeline/src/train.py create mode 100644 examples/block_pipeline/src/utils.py create mode 100644 examples/multi_udf/.dockerignore rename examples/{numalogic-simple-pipeline => multi_udf}/Dockerfile (100%) rename examples/{numalogic-simple-pipeline => multi_udf}/README.md (100%) rename examples/{numalogic-simple-pipeline => multi_udf}/entry.sh (100%) rename examples/{numalogic-simple-pipeline => multi_udf}/numa-pl.yaml (100%) rename examples/{numalogic-simple-pipeline => multi_udf}/requirements.txt (100%) rename examples/{numalogic-simple-pipeline => multi_udf}/src/__init__.py (100%) rename examples/{numalogic-simple-pipeline => multi_udf}/src/factory.py (100%) create mode 100644 examples/multi_udf/src/resources/train_data.csv rename examples/{numalogic-simple-pipeline => multi_udf}/src/udf/__init__.py (100%) rename examples/{numalogic-simple-pipeline => multi_udf}/src/udf/inference.py (100%) rename examples/{numalogic-simple-pipeline => multi_udf}/src/udf/postprocess.py (100%) rename examples/{numalogic-simple-pipeline => multi_udf}/src/udf/preprocess.py (100%) rename examples/{numalogic-simple-pipeline => multi_udf}/src/udf/threshold.py (100%) rename examples/{numalogic-simple-pipeline => multi_udf}/src/udf/train.py (100%) rename examples/{numalogic-simple-pipeline => multi_udf}/src/utils.py (100%) rename examples/{numalogic-simple-pipeline => multi_udf}/starter.py (100%) diff --git a/examples/numalogic-simple-pipeline/.dockerignore b/examples/block_pipeline/.dockerignore similarity index 100% rename from examples/numalogic-simple-pipeline/.dockerignore rename to examples/block_pipeline/.dockerignore diff --git a/examples/block_pipeline/Dockerfile b/examples/block_pipeline/Dockerfile new file mode 100644 index 00000000..90af045b --- /dev/null +++ b/examples/block_pipeline/Dockerfile @@ -0,0 +1,45 @@ +#################################################################################################### +# builder: install needed dependencies +#################################################################################################### + +FROM python:3.10-slim-bullseye AS builder + +ENV PYTHONFAULTHANDLER=1 \ + PYTHONUNBUFFERED=1 \ + PYTHONHASHSEED=random \ + PIP_NO_CACHE_DIR=on \ + PIP_DISABLE_PIP_VERSION_CHECK=on \ + PIP_DEFAULT_TIMEOUT=100 \ + PYSETUP_PATH="/opt/pysetup" \ + VENV_PATH="/opt/pysetup/.venv" + +ENV PATH="$VENV_PATH/bin:$PATH" + +RUN apt-get update \ + && apt-get install --no-install-recommends -y \ + curl \ + wget \ + # deps for building python deps + build-essential \ + && apt-get install -y git \ + && apt-get clean && rm -rf /var/lib/apt/lists/* \ + \ + # install dumb-init + && wget -O /dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.5/dumb-init_1.2.5_x86_64 \ + && chmod +x /dumb-init + +#################################################################################################### +# udf: used for running the udf vertices +#################################################################################################### +FROM builder AS udf + +WORKDIR $PYSETUP_PATH +COPY ./requirements.txt ./ +RUN pip3 install -r requirements.txt + +ADD . /app +WORKDIR /app + +ENTRYPOINT ["/dumb-init", "--"] + +EXPOSE 5000 diff --git a/examples/block_pipeline/numa-pl.yaml b/examples/block_pipeline/numa-pl.yaml new file mode 100644 index 00000000..617f35de --- /dev/null +++ b/examples/block_pipeline/numa-pl.yaml @@ -0,0 +1,96 @@ +apiVersion: numaflow.numaproj.io/v1alpha1 +kind: InterStepBufferService +metadata: + name: redis-isbs # change it +spec: + redis: + native: + version: 7.0.11 + affinity: + podAntiAffinity: + preferredDuringSchedulingIgnoredDuringExecution: + - podAffinityTerm: + labelSelector: + matchLabels: + app.kubernetes.io/component: isbsvc + numaflow.numaproj.io/isbsvc-name: redis-isbs # Change it + topologyKey: topology.kubernetes.io/zone + weight: 100 + persistence: + accessMode: ReadWriteOnce + volumeSize: 1Gi + settings: + redis: | + maxmemory 4096mb + + +--- +apiVersion: numaflow.numaproj.io/v1alpha1 +kind: Pipeline +metadata: + name: blocks +spec: + watermark: + disabled: false + limits: + readBatchSize: 10 + bufferMaxLength: 500 + bufferUsageLimit: 100 + vertices: + - name: in + source: + http: {} + - name: inference + scale: + min: 1 + udf: + container: + image: blockpl:v0.0.8 + env: + - name: REDIS_AUTH + valueFrom: + secretKeyRef: + name: isbsvc-redis-isbs-redis-auth + key: redis-password + args: + - python + - server.py + - inference + - name: train + scale: + min: 1 + udf: + container: + image: blockpl:v0.0.8 + env: + - name: REDIS_AUTH + valueFrom: + secretKeyRef: + name: isbsvc-redis-isbs-redis-auth + key: redis-password + args: + - python + - server.py + - train + - name: out + scale: + min: 1 + sink: + log: {} + edges: + - from: in + to: inference + - conditions: + tags: + operator: or + values: + - train + from: inference + to: train + - from: inference + to: out + conditions: + tags: + operator: or + values: + - out diff --git a/examples/block_pipeline/requirements.txt b/examples/block_pipeline/requirements.txt new file mode 100644 index 00000000..b1cad3b3 --- /dev/null +++ b/examples/block_pipeline/requirements.txt @@ -0,0 +1,4 @@ +cachetools>5.2,<6.0 +numalogic[redis,numaflow] @ git+https://github.com/numaproj/numalogic.git@main +# ../../../numalogic[redis,numaflow] # for local testing +pytorch-lightning>2.0,< 3.0 diff --git a/examples/numalogic-simple-pipeline/src/resources/train_data.csv b/examples/block_pipeline/resources/train_data.csv similarity index 100% rename from examples/numalogic-simple-pipeline/src/resources/train_data.csv rename to examples/block_pipeline/resources/train_data.csv diff --git a/examples/block_pipeline/server.py b/examples/block_pipeline/server.py new file mode 100644 index 00000000..a3ca0aac --- /dev/null +++ b/examples/block_pipeline/server.py @@ -0,0 +1,20 @@ +import sys + +from pynumaflow.function import Server +from src import Inference, Train + + +if __name__ == "__main__": + if len(sys.argv) != 2: + raise ValueError("Please provide a step name") + + step = sys.argv[1] + if step == "inference": + step_handler = Inference() + elif step == "train": + step_handler = Train() + else: + raise ValueError(f"Invalid step provided: {step}") + + grpc_server = Server(map_handler=step_handler) + grpc_server.start() diff --git a/examples/block_pipeline/src/__init__.py b/examples/block_pipeline/src/__init__.py new file mode 100644 index 00000000..bf567c1c --- /dev/null +++ b/examples/block_pipeline/src/__init__.py @@ -0,0 +1,19 @@ +import logging + +from src.inference import Inference +from src.train import Train + +logging.basicConfig(level=logging.INFO) +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.INFO) + +stream_handler = logging.StreamHandler() +stream_handler.setLevel(logging.INFO) + +formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") +stream_handler.setFormatter(formatter) + +LOGGER.addHandler(stream_handler) + + +__all__ = ["Inference", "Train"] diff --git a/examples/block_pipeline/src/inference.py b/examples/block_pipeline/src/inference.py new file mode 100644 index 00000000..417430e9 --- /dev/null +++ b/examples/block_pipeline/src/inference.py @@ -0,0 +1,64 @@ +import json +import logging + +import numpy as np +from numalogic.blocks import ( + BlockPipeline, + PreprocessBlock, + NNBlock, + ThresholdBlock, + PostprocessBlock, +) +from numalogic.models.autoencoder.variants import SparseVanillaAE +from numalogic.models.threshold import StdDevThreshold +from numalogic.numaflow import NumalogicUDF +from numalogic.registry import RedisRegistry +from numalogic.tools.exceptions import RedisRegistryError +from numalogic.transforms import TanhNorm +from pynumaflow.function import Messages, Datum, Message +from sklearn.preprocessing import StandardScaler + +from src.utils import RedisClient + +_LOGGER = logging.getLogger(__name__) + + +class Inference(NumalogicUDF): + """UDF to preprocess the input data for ML inference.""" + + def __init__(self, seq_len: int = 12, num_series: int = 1): + super().__init__() + self.seq_len = seq_len + self.n_features = num_series + self.registry = RedisRegistry(client=RedisClient().get_client()) + + def exec(self, keys: list[str], datum: Datum) -> Messages: + # Load json data + series = json.loads(datum.value)["data"] + + block_pl = BlockPipeline( + PreprocessBlock(StandardScaler()), + NNBlock( + SparseVanillaAE(seq_len=self.seq_len, n_features=self.n_features), self.seq_len + ), + ThresholdBlock(StdDevThreshold()), + PostprocessBlock(TanhNorm()), + registry=self.registry, + ) + + # Load the model from the registry + try: + block_pl.load(skeys=["blockpl"], dkeys=["sparsevanillae"]) + except RedisRegistryError as warn: + _LOGGER.warning("Error loading block pipeline: %r", warn) + return Messages(Message(value=b"", tags=["train"])) + + # Run inference + try: + output = block_pl(np.asarray(series).reshape(-1, self.n_features)) + except Exception as err: + _LOGGER.error("Error running block pipeline: %r", err) + return Messages(Message.to_drop()) + + anomaly_score = np.mean(output) + return Messages(Message(tags=["out"], value=json.dumps({"score": anomaly_score}).encode())) diff --git a/examples/block_pipeline/src/train.py b/examples/block_pipeline/src/train.py new file mode 100644 index 00000000..3f759613 --- /dev/null +++ b/examples/block_pipeline/src/train.py @@ -0,0 +1,64 @@ +import logging + +import pandas as pd +from cachetools import TTLCache +from numalogic.blocks import ( + BlockPipeline, + PreprocessBlock, + NNBlock, + ThresholdBlock, + PostprocessBlock, +) +from numalogic.models.autoencoder.variants import SparseVanillaAE +from numalogic.models.threshold import StdDevThreshold +from numalogic.numaflow import NumalogicUDF +from numalogic.registry import RedisRegistry +from numalogic.transforms import TanhNorm +from pynumaflow.function import Datum, Messages, Message +from sklearn.preprocessing import StandardScaler + +from src.utils import RedisClient, TRAIN_DATA_PATH + +_LOGGER = logging.getLogger(__name__) + + +class Train(NumalogicUDF): + """UDF to train the model and save it to the registry.""" + + ttl_cache = TTLCache(maxsize=16, ttl=60) + + def __init__(self, seq_len: int = 12, num_series: int = 1): + super().__init__() + self.seq_len = seq_len + self.n_features = num_series + self.registry = RedisRegistry(client=RedisClient().get_client()) + self._model_key = "sparsevanillae" + + def exec(self, keys: list[str], datum: Datum) -> Messages: + """The train function here trains the model and saves it to the registry.""" + # Check if a training message has been received very recently + if self._model_key in self.ttl_cache: + return Messages(Message.to_drop()) + self.ttl_cache[self._model_key] = self._model_key + + # Load Training data + data = pd.read_csv(TRAIN_DATA_PATH, index_col=None) + + # Define the block pipeline + block_pl = BlockPipeline( + PreprocessBlock(StandardScaler()), + NNBlock( + SparseVanillaAE(seq_len=self.seq_len, n_features=self.n_features), self.seq_len + ), + ThresholdBlock(StdDevThreshold()), + PostprocessBlock(TanhNorm()), + registry=self.registry, + ) + block_pl.fit(data) + + # Save the model to the registry + block_pl.save(skeys=["blockpl"], dkeys=["sparsevanillae"]) + _LOGGER.info("Model saved to registry") + + # Train vertex is the last vertex in the pipeline + return Messages(Message.to_drop()) diff --git a/examples/block_pipeline/src/utils.py b/examples/block_pipeline/src/utils.py new file mode 100644 index 00000000..14fa70b4 --- /dev/null +++ b/examples/block_pipeline/src/utils.py @@ -0,0 +1,42 @@ +import logging +import os + +from redis.sentinel import Sentinel + +from numalogic.tools.types import Singleton, redis_client_t + +_LOGGER = logging.getLogger(__name__) +_DIR = os.path.dirname(__file__) +_ROOT_DIR = os.path.split(_DIR)[0] +TRAIN_DATA_PATH = os.path.join(_ROOT_DIR, "resources/train_data.csv") + +AUTH = os.getenv("REDIS_AUTH") +HOST = os.getenv("REDIS_HOST", default="isbsvc-redis-isbs-redis-svc.default.svc") +PORT = os.getenv("REDIS_PORT", default="26379") +MASTERNAME = os.getenv("REDIS_MASTER_NAME", default="mymaster") + + +class RedisClient(metaclass=Singleton): + """Singleton class to manage redis client.""" + + _client: redis_client_t = None + + def __init__(self): + if not self._client: + self.set_client() + + def set_client(self) -> None: + sentinel_args = { + "sentinels": [(HOST, PORT)], + "socket_timeout": 0.1, + } + _LOGGER.info("Connecting to redis sentinel: %s, %s, %s", sentinel_args, MASTERNAME, AUTH) + sentinel = Sentinel( + sentinels=[("isbsvc-redis-isbs-redis-svc.default.svc", 26379)], + sentinel_kwargs=dict(password="zCvQCUcvRFPylBnF"), + password="zCvQCUcvRFPylBnF", + ) + self._client = sentinel.master_for("mymaster") + + def get_client(self) -> redis_client_t: + return self._client diff --git a/examples/multi_udf/.dockerignore b/examples/multi_udf/.dockerignore new file mode 100644 index 00000000..087f5822 --- /dev/null +++ b/examples/multi_udf/.dockerignore @@ -0,0 +1,6 @@ +.git/ +__pycache__/ +**/__pycache__/ +*.py[cod] +*$py.class +.idea/ diff --git a/examples/numalogic-simple-pipeline/Dockerfile b/examples/multi_udf/Dockerfile similarity index 100% rename from examples/numalogic-simple-pipeline/Dockerfile rename to examples/multi_udf/Dockerfile diff --git a/examples/numalogic-simple-pipeline/README.md b/examples/multi_udf/README.md similarity index 100% rename from examples/numalogic-simple-pipeline/README.md rename to examples/multi_udf/README.md diff --git a/examples/numalogic-simple-pipeline/entry.sh b/examples/multi_udf/entry.sh similarity index 100% rename from examples/numalogic-simple-pipeline/entry.sh rename to examples/multi_udf/entry.sh diff --git a/examples/numalogic-simple-pipeline/numa-pl.yaml b/examples/multi_udf/numa-pl.yaml similarity index 100% rename from examples/numalogic-simple-pipeline/numa-pl.yaml rename to examples/multi_udf/numa-pl.yaml diff --git a/examples/numalogic-simple-pipeline/requirements.txt b/examples/multi_udf/requirements.txt similarity index 100% rename from examples/numalogic-simple-pipeline/requirements.txt rename to examples/multi_udf/requirements.txt diff --git a/examples/numalogic-simple-pipeline/src/__init__.py b/examples/multi_udf/src/__init__.py similarity index 100% rename from examples/numalogic-simple-pipeline/src/__init__.py rename to examples/multi_udf/src/__init__.py diff --git a/examples/numalogic-simple-pipeline/src/factory.py b/examples/multi_udf/src/factory.py similarity index 100% rename from examples/numalogic-simple-pipeline/src/factory.py rename to examples/multi_udf/src/factory.py diff --git a/examples/multi_udf/src/resources/train_data.csv b/examples/multi_udf/src/resources/train_data.csv new file mode 100644 index 00000000..37884034 --- /dev/null +++ b/examples/multi_udf/src/resources/train_data.csv @@ -0,0 +1,4000 @@ +361.86834209028797 +352.49891829992214 +364.0937989181251 +377.0069376699338 +351.07829368241477 +351.0753697171932 +377.82638566673944 +365.8447483898283 +347.5899745821006 +362.5162838457451 +347.6675344504415 +347.6266084583594 +358.06068704194763 +326.25346863803964 +329.02399623299067 +346.1686021675177 +339.5112730906141 +359.0809869200409 +341.03610989726286 +333.58412119866074 +376.03414999433846 +351.0653944307157 +355.3794216073838 +333.34776896734365 +346.322283132452 +355.9755756328147 +337.3409176661202 +359.8497349913333 +345.4274095258651 +349.9679667664151 +345.3756003274879 +381.5636108417251 +354.0157849590194 +338.5889576173678 +366.3101648467293 +336.13993067932887 +357.2123829051394 +325.19454658468146 +334.4885369075341 +356.965868463852 +364.9325553272695 +356.54045071923014 +352.2801698363492 +349.5177583273153 +332.11898503526476 +343.2854428782441 +347.0819181913657 +369.44696171430104 +358.89055304932333 +327.7784666258 +358.54230505349045 +348.048114654303 +343.71070888596074 +362.6910399436973 +368.8451915827862 +367.34062146836794 +341.1842172106282 +348.96963800317235 +358.38435544635456 +367.8546731509892 +346.3550131516315 +350.648823021421 +337.02744834425886 +335.66346041667316 +365.2624183203755 +373.24540759318273 +352.13276637806115 +367.96137430320135 +358.4496935686961 +343.5541787048559 +358.3625815774978 +375.68049265999025 +352.4159483648409 +375.98601526664686 +314.20371083318594 +364.9379965693663 +354.0501420513459 +348.308042164821 +354.0268743320192 +323.3004581710702 +349.33677741850073 +357.79841165249667 +374.2858239822353 +344.7841704461124 +340.45198929440846 +344.92699670807184 +365.78499041114645 +357.07751239322585 +344.3583489822093 +359.6945832625115 +353.5004538061234 +366.30577981893043 +341.601077857943 +347.0697686856499 +346.0631468076681 +330.19891699669324 +356.10430175322006 +355.5295064813162 +351.69526534607195 +348.10009209967836 +330.6193057274561 +345.2361776170958 +346.3257959039822 +339.48449931161383 +348.88058119563345 +357.15990444865076 +378.96544348040885 +353.64884804295707 +354.8095775447542 +349.8471635229329 +322.57078364966543 +350.4247002070551 +351.63890527003923 +387.0275914475742 +347.77918762144395 +354.9992282163559 +349.97015799801767 +333.1709107139296 +367.2067371525422 +361.37003262492567 +361.8769995512475 +336.71798997830126 +370.76174950894506 +329.3095558055327 +358.5796287857748 +382.16713877460575 +335.16062987948123 +341.3463842073281 +351.0979342349201 +342.1245782724561 +326.5988815736978 +350.41386926085977 +333.65251885306463 +356.2370007494269 +335.60677673256765 +371.96286426048204 +337.46002129832453 +344.185910621111 +360.86143443707846 +330.618226715419 +352.05464607336825 +367.9039592843438 +324.8193652051195 +351.1791840507405 +352.20724899355764 +359.8254495579771 +329.9565952006713 +328.64086015953956 +355.74008683903145 +352.33635848386774 +351.5652504031873 +352.8953994690636 +337.6643771338452 +351.03788100491477 +351.8481708369251 +336.89676647087134 +374.87683408565437 +354.251172957893 +329.59423179873943 +356.76873327720716 +332.61103900229773 +358.5143958344564 +363.9049767322477 +334.6107453071163 +360.841616201852 +352.6257356064087 +358.5717237368225 +374.3355823282713 +342.63552437362534 +335.04115326478274 +332.9433552481564 +333.93587909206104 +344.7396654277837 +350.81489951091146 +349.767518851826 +357.792960517822 +345.6830949308316 +366.8396128022153 +341.3908045502599 +385.3314968488979 +354.32959394967264 +332.3521523978603 +329.09887511883113 +351.9175720260365 +341.4013476799001 +355.13196853492116 +351.47821052042883 +343.3194771556989 +331.7978344331784 +321.83843159650263 +337.49784449694323 +356.617941474137 +347.03720047776994 +325.39396868841453 +346.2244331110523 +349.24919258310933 +330.41777736113886 +345.6206256533947 +344.10496724285645 +326.2755877127038 +348.31111811672133 +351.198653008873 +358.7964043673021 +358.25651429924625 +322.2730227047026 +328.65352982590395 +349.98003920836123 +349.851735453695 +349.7600991529967 +398.89481227032695 +350.36239718456665 +358.58243512368773 +355.7918369741188 +351.21490494183587 +336.8399839444744 +352.5768285367726 +329.86299956387063 +337.657866413322 +333.8768302264906 +342.1317721352035 +374.9603880984363 +313.14386216265007 +350.7041276424549 +316.6685660304985 +333.3840669516242 +356.2975060628249 +341.0624614162119 +324.0955944975738 +329.32579884663676 +349.7889445937794 +328.86780699652206 +342.71922509767205 +340.0792048663021 +329.6738652190217 +370.8009560497441 +348.40185775236773 +309.0491647519601 +341.5595307054297 +328.92368406658255 +351.1440856620364 +326.7526360978978 +336.63136339661565 +345.65314163286627 +350.8538608085969 +320.2481798393929 +332.89968286653414 +330.7044889609339 +327.9492256412655 +363.5131712089444 +343.3163845638269 +318.613436037216 +350.6349318066623 +368.27874914908284 +352.07603465969913 +314.3000656916667 +329.44723443782516 +355.15837549309873 +325.8986097665904 +342.7616821451396 +347.515974054855 +322.2835828094969 +334.9543953884546 +287.8824379222633 +320.4633571153877 +331.7231034298278 +316.91116050875314 +359.27807309862607 +313.96342071602146 +328.4427229879804 +336.7351096329444 +355.94175390148354 +313.36185785163923 +351.57890255738096 +334.43805715844206 +319.6752169180371 +340.84420685967416 +336.83238122518355 +324.9085667212441 +334.6630303503302 +327.81665531435794 +335.0449188171675 +343.0074847634409 +356.506741740325 +314.7106605429575 +364.3128424193804 +303.9068636100957 +330.33626446271705 +341.12291175220685 +336.45524587834007 +322.988375774565 +328.9715306899339 +324.63449165338204 +323.0786809716163 +344.17548803258404 +336.77330902228425 +321.1477883929655 +344.50948408852184 +335.6355733696855 +342.959743893257 +340.1210143937828 +318.4645717325571 +322.29517725823405 +341.4503865269642 +339.2942908701572 +329.84425577650137 +331.7475510520569 +348.7312340907424 +321.015399990969 +337.6790926334699 +326.4870442245024 +326.1216246645411 +345.40806791627426 +341.23761135554815 +340.9246389241568 +348.04589366662526 +328.95675614732306 +338.5709554050951 +323.79361225045216 +333.0163484734776 +326.1752834223656 +329.3884350341565 +336.6002287966878 +315.60841460894807 +358.41407311135026 +312.5605834986038 +309.3504928405906 +344.2134628083266 +338.6679124832922 +336.0569900290151 +335.9803088018328 +326.38967088306873 +313.19276583366945 +327.4103367709447 +316.161452003651 +340.4003538758168 +323.70382742780555 +313.5543171259187 +320.8525074117983 +331.54716601903226 +316.99747650108577 +313.0437118511315 +328.6305891147908 +328.5095240128197 +317.2755885922234 +317.6652981796952 +327.89881585504537 +302.96939879619526 +303.4285528502151 +313.45437033262 +320.7650164956954 +328.36124346784624 +345.40160398608504 +336.14755148773014 +320.9931875481312 +322.93200707588284 +308.2805010740093 +322.6585858378149 +318.5323200982445 +327.4123017775935 +310.3050763585136 +330.0324698653981 +344.84392642713124 +320.4842033835646 +327.8753958620604 +331.9905470282553 +315.74770933753905 +324.83332493066115 +321.57232350539914 +322.6872387278013 +309.70041575346147 +321.326896848328 +328.17251743845134 +342.09519935321407 +334.69760436085824 +352.1726880730315 +308.94191042541144 +332.9939081733581 +322.68827798171594 +352.15214335102263 +307.77700509475136 +307.1732992180229 +310.5791520980091 +287.94613839562646 +311.3857369653601 +307.8025387144273 +321.0822078200844 +323.7658878326864 +346.26549750735745 +332.4670991679762 +309.79283650307667 +304.90967709242267 +325.28375126426545 +298.40730610805537 +344.7692184310832 +335.00995529035646 +310.5466322079983 +292.0538449081192 +337.1666301795214 +315.3623614838573 +335.1767825992028 +293.25026339127794 +307.7931062019268 +316.5754476098714 +317.0529415384776 +309.58113147683025 +325.2732109297667 +300.19345371484474 +313.7069263748068 +317.4447856125473 +323.122490543792 +325.89420561632727 +298.664069935087 +292.4853370841313 +333.8343615793305 +319.74918363917396 +303.6658392833901 +337.45880170044865 +316.1427224401253 +331.69936084559174 +315.15952583507897 +344.4322081312921 +339.7901583728511 +310.08214056002765 +327.95468718179393 +323.0063944972331 +333.54222155187125 +298.9769807866979 +323.20099932502245 +328.5602871598772 +286.86021356107597 +295.2165771290829 +282.4529344340229 +308.43141532388114 +322.85925943306626 +334.3049255714226 +313.09827063412007 +335.9008239756361 +291.3759775732535 +286.4731741613616 +310.6530977641761 +317.0066992523329 +310.7252691649561 +280.5717115326502 +309.6285640728097 +291.5650940310089 +320.5606976277686 +315.9576803829461 +296.55031356942186 +302.7049331751944 +294.52800572264334 +309.10071220721437 +323.9877537385743 +295.22149249236634 +317.0723247909772 +301.682287802656 +297.6782587880236 +307.66833371700096 +293.8443363295219 +300.8213277823237 +291.1878103134671 +337.721846036885 +309.12605405751606 +298.15417577657354 +311.5079607064696 +306.56640897776794 +304.83665728833427 +317.03197878088713 +319.02058644783176 +299.8908366788492 +299.09644588626463 +303.4085719948521 +273.3782263772698 +284.8609769073179 +327.25930631541405 +331.2379795527785 +303.1691068546766 +315.226376506305 +311.1884302540389 +351.8997805003655 +322.86856755289386 +304.33999084736655 +292.00661353961505 +282.28087982637555 +308.8631673493485 +294.58030224544575 +284.6342090330767 +295.95804028024475 +289.4197637482905 +330.1497589082145 +318.1452244319125 +304.9000080572502 +326.7340014285446 +305.9209891697212 +291.95317937200605 +327.01529442794174 +312.37591029186376 +289.0031446673237 +301.38140520358445 +291.1536008292167 +283.55386156161165 +317.5050395437179 +331.8961628405217 +282.9734380895729 +311.7993865444649 +293.7784554834256 +296.0765015368846 +294.4091478086769 +290.28808169599773 +303.638128897819 +290.54898379289926 +306.68676635387936 +301.8427310729885 +298.946407558913 +288.9697666670691 +293.739100968848 +313.2833635491212 +309.41822437695646 +287.4941574193802 +303.2731335636426 +312.78436235247705 +276.95809122461867 +309.4973478257501 +291.5955764024065 +309.6830977304366 +289.8954073094656 +274.4198470053302 +276.9296786348041 +301.5461566239862 +304.56282274874627 +287.2826806365977 +309.94218575932655 +275.9008284547656 +299.3362083190227 +282.3395270813733 +290.4863762260016 +300.70005734095446 +287.20322872469944 +294.1219578121933 +314.54118609806795 +291.080924675968 +311.8216919264738 +282.7229452947735 +307.1078111495795 +320.4605480475673 +262.62436532115976 +287.2353408496772 +307.4089013124755 +295.800784300256 +304.1750462007182 +289.690506500035 +299.7828074807772 +296.1120713595957 +315.5430549967124 +301.9716493525557 +303.1040348684715 +291.9514941080775 +290.74014718051467 +291.4587885111393 +303.5676782163539 +291.44379238986363 +301.8383808016146 +328.09239049042475 +310.23280707382065 +292.4788483228575 +314.921884060879 +291.08798459228206 +266.9482236609369 +282.0568102715059 +269.23966809344614 +291.56761596543123 +296.9381720629387 +321.31409307320143 +301.31636383217335 +293.1739685476664 +308.5583602762026 +263.61201365515365 +299.62753693423053 +307.4406230804224 +274.167739633071 +312.77544088776386 +300.81166329234236 +289.60783856787793 +304.9896749412907 +329.0747290860884 +298.1747048920614 +299.0734593302904 +288.5537972117302 +282.7132055769721 +307.4244030999803 +282.46408967366557 +296.0732059518456 +287.89251577827974 +301.9303235719212 +299.71001711444126 +310.0195444266629 +287.1111436674215 +290.5795657557546 +280.04618195753386 +287.85826273381696 +299.90717095210056 +305.43657544509267 +280.5896262865532 +306.95442841897795 +314.05442649120704 +300.08226875363886 +321.6031592460475 +282.42599370477467 +275.4096907603469 +267.4614390108294 +315.71050633948715 +303.2246869474132 +292.68295540352466 +297.5674526983274 +276.76503563305533 +329.3910836869357 +295.14744918255286 +294.7907224623394 +303.82122177976544 +300.1468610917218 +296.2905649806107 +281.2623293879101 +299.81996502445315 +320.5708461306619 +312.593185422705 +316.1889550597774 +285.08056020356685 +277.9634704562846 +290.65031811837696 +293.270735775472 +308.5355131992317 +267.36365802208746 +314.84636793095734 +289.89209320614896 +285.8701444719173 +277.1812097581572 +267.6439988705578 +304.15243837015026 +293.0361825087132 +272.8697808846812 +272.74272393245184 +286.84548695680405 +316.37466566989826 +287.8693815302525 +269.4722944718813 +287.97567575952115 +287.5294316950531 +251.71489477434676 +290.65757491733154 +288.00491312827944 +301.6383754086213 +318.60112436327597 +307.8979726541195 +287.2647867068374 +274.8623921525332 +329.113666811703 +291.97670125397434 +291.2666099593206 +290.66383696920116 +293.9016396600152 +288.80893374112264 +282.4352961036053 +282.7917639535961 +290.33864444837576 +282.766184716209 +280.2292380927111 +292.28044474286617 +286.9120236543184 +312.8289721441689 +251.49029088498145 +306.6737438884943 +308.9206898445105 +259.91083443133255 +285.4136336177756 +284.95739832753435 +269.63943944488307 +278.8993504425611 +273.9594678216626 +316.1692464846922 +304.09190504522707 +309.01907298074474 +300.8780310620985 +273.5444878727221 +282.4372534653339 +297.37049814871733 +272.0928846951361 +300.61948018559514 +286.5294772896999 +284.5213448103866 +300.5181798011869 +296.56069274846993 +284.6580977856812 +307.06770334765594 +273.9914003754918 +299.0093307814154 +298.6528440709527 +285.3158825163707 +294.6765261341904 +271.3874896384474 +303.4630703051107 +287.0849431640663 +282.0846145371986 +305.2590872504445 +279.3747042417473 +268.97169639450357 +266.771931200994 +298.6672398527626 +270.8216442370943 +315.59256047571347 +258.97299298635846 +314.7099774574168 +292.78327778503177 +288.23348844632505 +281.61167551890463 +295.53236363326226 +289.08046679281375 +305.9072105407224 +291.3076381062501 +291.83405535062457 +284.246361180652 +288.7663948755227 +294.14396980957287 +264.3667099289855 +269.704697347676 +300.5604302650678 +292.11342634393634 +286.8768331217971 +289.86293062581615 +294.7194202113725 +281.6280419512556 +278.109827834242 +292.4847318636199 +275.16247131077154 +295.6243817950206 +264.48412884651304 +304.7935073519439 +296.5868114488391 +293.3970464979409 +304.1246067801789 +314.2053779184687 +304.60610046533304 +262.48678241242675 +270.7768952677721 +280.44656282503445 +290.0600395243448 +297.3231313868076 +278.988461930556 +292.4634803722073 +278.5747939032202 +280.710142176501 +268.99162721590676 +276.1381627053153 +269.83113925426585 +275.39107684492217 +305.3509267976201 +275.8136501960538 +328.6773536595765 +297.13432224377175 +292.6009267331244 +277.2279337196466 +300.2442882744714 +281.4383440421809 +291.7520963977842 +327.74529835792566 +288.5772211650955 +306.973483869458 +279.66457433642586 +289.54661295992656 +316.2137998353245 +280.8608434799158 +316.8779435770101 +300.60457540564573 +281.8896246452772 +299.54609418110107 +304.59219820576277 +299.4452080645931 +267.1317969523778 +279.60021273654064 +286.70646116836537 +289.29059268959844 +299.57737591523136 +293.0731596872135 +270.78127812419484 +296.12566839697797 +299.55815510131475 +298.8425515535996 +306.56384201891433 +302.956601455748 +297.46309953155395 +289.68908939669785 +266.25466385651083 +297.1370811163057 +293.9005003789287 +294.88160935750795 +272.07605353954585 +275.0029293490686 +306.53193183014616 +290.4504472189523 +301.13039682513573 +291.5349589159334 +291.5985782552319 +305.04627790739795 +283.63214014331726 +292.70833547038177 +284.5142238594849 +284.9692994208406 +286.8641489844641 +294.74955674625926 +284.45538234779815 +310.09431341792174 +278.41510922819157 +288.9058446942749 +285.2241799997225 +313.1110006632459 +294.7120411315739 +307.08695689292153 +269.9956127790792 +295.9060980315179 +305.1442762677739 +293.285362155478 +307.8452860689924 +284.546580597429 +313.0274201001335 +326.20728804663776 +286.9907795224004 +285.82733837040746 +313.90092407574446 +315.82002963408587 +284.85783876051323 +286.4310719931126 +288.5320010742218 +272.9124886806789 +279.254823325491 +278.05397759215987 +281.6020771583398 +292.48021916454906 +296.50972785340264 +315.99325402140346 +278.4496959198918 +307.7664331233837 +290.1502908551611 +292.6424335073495 +303.3939568573534 +276.9381340065451 +299.2115699874625 +296.0920055683822 +300.9691746679674 +298.0376388879186 +330.0657797394638 +284.49879198385975 +286.14302091526355 +284.85330989830044 +285.9219516729809 +284.78423916963663 +311.8029461147045 +315.2902198951468 +285.982940862355 +282.19588407088736 +301.505492937392 +286.476182327586 +304.03666429620495 +297.76695984200046 +272.4844402434867 +317.756450669599 +321.49728444674463 +286.03573997107594 +289.4339760409565 +299.44970172075637 +300.2448315757821 +305.1052045178273 +325.1272246358605 +292.9368592988737 +283.849351425642 +275.35732363152454 +285.0049343786546 +295.3820828129857 +322.4303605012227 +288.39827774404085 +299.420057411442 +295.9592805049338 +313.8193994267281 +333.6529702222993 +288.6218818768878 +289.3183658136084 +312.0313135290265 +306.77238459466673 +324.0450627843231 +305.50061086394385 +291.6714909040596 +305.7752645683559 +313.50707260262726 +309.34336452145436 +304.81143007540027 +313.1547164798998 +314.7589495843381 +317.9901734716476 +307.25961651402156 +295.3140405911793 +300.0362759844316 +315.7651514142897 +286.00326580882444 +303.5892945004594 +292.4398676244116 +298.7614189730437 +317.2944390514421 +301.34607380845506 +299.3069098172635 +278.6536297064809 +309.8239660297138 +308.433651516343 +330.92423831985445 +294.5630424573527 +302.43521709142414 +302.97935584227577 +322.67264013980923 +298.0912159228563 +303.7133070358255 +308.6653201477159 +302.5495648552309 +293.30989758320266 +302.8612446262476 +315.9395475687375 +285.0548773203727 +302.26431350016793 +290.0749847456191 +318.1397008746321 +278.1370855542805 +292.4676855358375 +306.38361232266897 +324.02063584092457 +300.05686022510423 +292.94033627037413 +328.99253324816254 +279.9785090539683 +269.0071247930371 +308.04762134711115 +294.25477104276274 +286.7017427455006 +312.32819146628105 +305.5818115342504 +293.77025314460826 +283.3113408992121 +315.1828031721712 +312.01275680275836 +301.0657282040862 +329.88480632766937 +286.96070626886217 +280.3515188066828 +292.7618732581519 +302.40913901661486 +306.78356396188497 +299.7458108087917 +308.61161182182616 +285.0641126837047 +324.9443567313721 +302.54358941705874 +320.35406716029786 +309.0395295938272 +310.8359756232087 +312.61774676600993 +310.93150861729157 +313.9237608711758 +324.1668390325873 +307.5711434448834 +315.2483208335231 +303.5795797099604 +326.26798139908965 +295.1569807721344 +331.8253839094965 +304.77844833601716 +284.3783602343497 +307.4964257357618 +295.6759673485394 +318.24596440645286 +296.33241866713763 +299.49721978831525 +278.3206113725223 +299.64551281570596 +270.67593859844243 +283.18920942692785 +317.8983020500505 +318.3933118908198 +313.1973774155427 +292.77390522591594 +306.45827971490746 +307.2305297174968 +290.31448004381633 +329.70899855058224 +320.59441752207226 +304.5117365780986 +308.29125330274337 +311.0920031885121 +278.01608363986094 +304.61693837127063 +298.3252029243845 +293.7329333963712 +304.4877220599033 +335.2830690452509 +318.33900496439855 +300.5810460421483 +317.5813390715224 +329.90485787193006 +323.02587903425035 +310.38876779180396 +300.0894758511285 +320.06222672747776 +315.6920480784271 +323.22064036468237 +319.51059075326765 +325.7510891217892 +302.49535752301466 +329.95664747749095 +313.561933358276 +341.39290680704227 +300.73274438045195 +336.6419228710814 +314.0767622910877 +301.67345805105333 +304.27343360784016 +306.81463243233117 +317.9278884617263 +319.5123150042342 +303.4624244619888 +311.69656498680723 +343.7927688744451 +337.8029550183406 +318.88120064270294 +313.1337297450045 +314.47360080915774 +321.8844262961503 +297.87163749414634 +309.29488001816975 +288.6035794298395 +319.2429874785937 +323.03206708789673 +306.4845370634304 +336.96740546162414 +295.78964446126906 +292.3999867768414 +317.4484771157883 +329.7171518129648 +339.2443351811914 +307.75983289336386 +330.5769664457392 +314.22504754214197 +312.37778425369214 +328.0942579963793 +324.81276742559874 +292.061371687747 +337.2373109641195 +335.9462538906017 +306.4861866782448 +321.6879288628039 +323.2694071634691 +319.9586653550516 +308.1255637585688 +306.4680182453866 +316.13282168326094 +333.9452501071383 +324.7954554192751 +311.43946052369836 +328.4262520491086 +275.14471905651317 +334.25517541390036 +291.77040006106273 +312.22403403608234 +301.18454305622623 +298.7353096797183 +335.0977230296688 +311.20288536030876 +323.3489882485549 +317.6773474376553 +325.5411430569135 +319.7692961692705 +299.8392544797694 +333.60135377997045 +311.75020031202246 +296.2020701626899 +312.98502533245556 +341.57749874139057 +332.11242494672115 +314.556997841458 +314.6812484405543 +315.2219794059861 +350.741703814764 +325.86899603328146 +326.71191391590156 +335.7012150539405 +324.15632589856415 +316.94423522489916 +318.0022775663073 +319.97586361468274 +320.61610587073767 +332.03396299150194 +322.1976113509069 +332.3737049152265 +320.50601535965694 +322.98994364523315 +292.4803119256632 +335.614987798868 +327.3400500843733 +337.0854231628987 +279.7606423933732 +353.43809455126717 +320.698360015944 +339.2407840696778 +307.67944711533426 +332.1958915501154 +307.744505549972 +314.2157494930267 +351.79133064204126 +320.8695894157159 +327.0228971181713 +336.78386347730225 +331.39172215384514 +326.42916561066744 +329.7260883171761 +359.9335349973642 +323.75386960355945 +327.70228184117815 +340.3680116525611 +341.3085657201235 +342.6419773346972 +334.68292495465795 +308.52524674654717 +349.6202743377698 +308.7369102354217 +330.24597466721696 +314.78210336745553 +325.0946801001928 +331.0215801888382 +331.04211073940724 +332.6555004940468 +350.3691077790902 +333.38083546799834 +323.2160853464067 +341.1720095374705 +344.6263391784055 +309.0927268967298 +336.14815117674203 +337.8077375591643 +323.20037026902486 +348.0165349566352 +325.63290610709464 +329.82748783920147 +325.54880594464026 +328.459718953185 +312.18237372912216 +307.2373441462943 +352.137185423114 +316.2417494032179 +314.2373819726302 +297.2192847946697 +319.68993123734293 +309.72212649532423 +353.59615758875987 +344.3941431774218 +319.4672145550075 +362.97890883578003 +344.35605551461003 +325.2029367955512 +293.24317100879813 +364.04605533997807 +309.86668356949747 +306.2161539185519 +345.70409079431613 +366.73725057193695 +351.2876675355421 +339.3068576144825 +339.8848643960906 +343.82390480599906 +342.5522536849848 +335.6257641287606 +333.1363475194624 +330.7971405411475 +333.92561183760444 +340.9251911029699 +320.1043934462474 +343.6484207949767 +330.52983398985765 +328.8495939970303 +347.80303557786806 +365.70337703268564 +358.7309306206626 +322.02653399415846 +330.6133949940574 +359.11163742104577 +330.7516804492184 +341.9497802464253 +353.39621051016627 +331.0096819149629 +346.86816594545314 +325.64719171634016 +336.4735199785047 +350.08091263873143 +321.8755936800107 +351.8945195579389 +345.12228640014087 +353.5800790980957 +348.7485802604463 +365.5882873881372 +347.325304831365 +339.1585124816691 +347.31493670893116 +353.54292703761104 +346.26421805091786 +346.1586190991644 +335.2186754536673 +335.81182211535895 +324.9143527806171 +371.43911879014365 +327.2892482188849 +335.434649844503 +335.0747180645067 +358.89473906098885 +341.3552914426169 +364.1330594581392 +335.8028862758382 +349.87252931169144 +333.44750784812516 +377.4391198194103 +328.2829577074602 +350.39273494164854 +355.1888344933709 +351.95953703745636 +343.13673489134356 +343.9714366486738 +346.5495925689017 +343.75058015238216 +360.1572192165482 +378.5669490141144 +337.7430147138649 +325.774198877515 +344.6985014022433 +384.0792677593842 +334.17594591909597 +370.2339991975319 +370.8195697411198 +337.91464549964695 +354.4937277006603 +370.1409620671264 +340.5375279074775 +343.1438880793901 +337.58152782049575 +331.20804355007004 +336.6167117077318 +328.1541977228656 +346.73176872491194 +334.8846891560123 +349.7107449392252 +323.3214120584512 +351.1757940309455 +358.6082822985604 +316.9100794370511 +351.86153486498887 +364.4722550194822 +328.5275654289759 +371.0689573235155 +352.58981422348063 +336.02166047663616 +345.61702125431214 +354.69381418695446 +347.5936807548281 +354.43746392767486 +332.92073309230466 +349.019666842082 +325.67862031732614 +344.9121701999927 +333.23285821772515 +335.7333390581669 +364.83952546275617 +362.7195205983542 +355.62155892464506 +330.5339317417269 +341.99805860853206 +364.58107953070584 +348.78971652323554 +380.93511656130784 +352.5342263150409 +349.5807856935624 +342.20255946441165 +348.74981911833714 +344.54602353672806 +357.2594322422519 +360.9433971867899 +335.2472495001087 +327.21865964393055 +319.7842431116732 +354.387451575959 +330.6290335170968 +315.1601036863443 +352.6739272515682 +383.73938570037853 +346.88333569489885 +359.36038845620175 +348.21243886160033 +345.56213855393247 +360.5976490050611 +342.77055294446734 +351.01464128032126 +351.831962211561 +337.24435959030336 +361.7546035251148 +344.5523189935602 +335.999278122727 +355.0816840062408 +333.9255855543265 +347.61373916777666 +347.0794520619659 +363.2517272669121 +354.249951574587 +346.8928781609688 +359.3437778890922 +367.8058107378379 +355.5403675687693 +347.4790171850158 +327.9870080418228 +331.6432597497206 +342.8709455617752 +338.3974006637461 +344.64772527623853 +348.2582072782629 +355.25365099360613 +346.41422053567186 +354.6483959304848 +348.437659309624 +318.3556569011255 +333.65908520353526 +345.40840328133385 +329.70205047427845 +356.4178398150074 +370.16748647428534 +365.5802730921454 +344.4649984027741 +369.6248647089592 +349.8396320500757 +342.688618933312 +338.6277039209341 +343.23127330692853 +341.9826699355598 +350.2402937904228 +350.1110233979889 +347.80274308903006 +354.2204793051958 +365.3568829297844 +361.81566024822916 +325.912843476767 +310.1560329106562 +361.63866832728826 +327.7019081775909 +344.56895703856605 +330.63685616632665 +321.32997729779277 +355.9218542347947 +359.1496670191803 +339.4586957900582 +309.75149631259035 +339.9370456052826 +353.7932246089446 +326.2079331058543 +350.7495450229829 +347.83418323671464 +356.623017434677 +349.8561574387765 +333.75070519737744 +365.77819859536703 +345.800434754395 +347.7524395363046 +334.40140011510914 +341.646672321108 +335.1481846537438 +345.667013596739 +373.4897036968753 +328.0089088125981 +324.4592085898754 +369.988213716805 +345.2094635275523 +338.4419981182296 +363.6726721588821 +339.40992190056375 +375.302783882103 +358.37937799503993 +341.19402794950037 +380.23832736226535 +339.48753805454726 +359.38940464605787 +352.8719436515144 +367.6782185215323 +371.52675009312225 +348.9756716407308 +337.40307299527336 +355.3216410766119 +338.55159189276947 +378.27283053750074 +350.596886880828 +343.2080947367201 +351.3387858241125 +328.7537523475554 +334.3099292028648 +366.37254566109743 +338.98493405006866 +333.2462514467425 +356.62645610855526 +366.2185354954905 +359.34768326098254 +363.4517764216849 +337.6054683199732 +327.80933829335544 +370.9541583622047 +344.0577653060436 +345.13354994348236 +368.4467898655972 +357.07268868150027 +355.60792503175924 +380.8405081421984 +339.41834235647616 +362.61841889891696 +349.7856493389447 +352.92306634262746 +371.52741534763584 +356.48435362096586 +356.94943888776555 +364.84707373236375 +343.65398140674495 +336.67232063735844 +333.6545164484686 +320.07337400598175 +379.43934650146485 +332.83991393618265 +345.8682533281137 +345.0641774557735 +353.69962799227443 +361.21537507804027 +361.8910926857223 +340.6081031898149 +346.7609130986582 +353.41162225110514 +345.5887132283255 +372.98896368806413 +356.533290091176 +360.14755698753225 +359.100935768756 +366.6277041507205 +351.97743035827057 +330.1647386685817 +355.18727229541514 +339.67067659626724 +341.4719082178003 +357.912392085862 +367.52010178641854 +349.55235450529165 +353.78298922771603 +374.32867484914686 +352.75240425953194 +387.5724179435085 +357.51544317724563 +323.17764199886915 +360.25582854737974 +354.74812062734975 +368.1368450228535 +359.02214807705855 +347.0287668422952 +330.989072672033 +345.94938491758825 +336.4645018659479 +340.4275162737796 +357.65563137095467 +373.58803944091034 +354.7503851967222 +331.2597680237056 +355.4404327060948 +366.51189842330996 +339.8346030722541 +346.82878245879857 +348.9968012141426 +337.1727915676077 +358.2911725467814 +346.91387258383475 +354.85987893283277 +335.54655650764704 +342.15687916247987 +359.23932630563684 +343.04933049925194 +373.99903887631865 +342.59043087214997 +351.7692615123072 +362.1807418847306 +327.46011491934894 +322.3731905469316 +325.80772328761157 +366.91076735447564 +340.10368129960113 +385.95377266811454 +339.8467520235165 +350.85683334090584 +370.8481787120439 +377.6548119906311 +378.4326341641865 +365.80484126979496 +363.04465958604266 +356.63614984848755 +359.3359346146659 +339.67668239155864 +335.693834517491 +347.67220458284817 +345.16661910231704 +340.94550048058323 +357.86174647477037 +361.6357506885814 +348.79848820491634 +369.24677015947765 +330.55400459433906 +344.4930842999929 +336.725071273605 +319.7121565256789 +345.9815700331582 +345.3543795790819 +369.42928718725136 +356.3546072094641 +331.88368225195677 +374.2977287275466 +364.90371346732746 +355.4224091115836 +343.43752731803323 +332.56789905538926 +341.1762060869267 +362.6751546063574 +374.3601622015226 +369.26625199341805 +339.22586917211095 +329.86055760557156 +348.3991532369651 +320.16843982394766 +350.9683042825962 +343.9614111490035 +339.20158469376486 +322.48671467482734 +353.53069510225083 +338.0300039390845 +328.5645364404943 +303.3832291309574 +345.29074808399434 +371.77970625903805 +370.07612639757286 +338.7546652553886 +336.5465180153542 +352.2806158703503 +330.5654893701933 +349.68006352221056 +356.4611054504783 +363.19091431134603 +343.54029754391235 +341.9420821609489 +331.9217085053198 +332.6037661899695 +341.3898365039863 +350.07863521194514 +358.0642162319723 +332.66044272337246 +366.45984938336113 +340.3608480155028 +343.9702009869244 +333.1846780568682 +308.3645286259566 +357.0989080688902 +354.8493180491163 +339.74861014351404 +344.80904855222064 +351.35370126572053 +320.60721131595176 +335.7754080969617 +355.219255882724 +324.9128405029311 +347.6684590750413 +323.2393682979216 +350.05383938463603 +342.56272960731786 +319.1745024554887 +360.10529666304103 +331.99702762848386 +330.7953129878704 +345.6234403178959 +359.5251546770465 +327.50310081187337 +343.3135568498221 +348.64255765441607 +352.4536143779889 +344.7417302536718 +336.63386257093345 +329.74874530117984 +343.13999035475473 +325.95949859084504 +298.58432547555566 +348.0363460484374 +354.83993460489074 +306.5467419965582 +326.4191678855595 +350.358648299218 +371.4863073055241 +341.3415151028403 +330.1984485325991 +338.14560850222097 +361.03353413304893 +331.12089763036545 +328.76320134067623 +333.3347851615688 +326.29377095500416 +342.07114113175635 +364.13353874237873 +344.8300937223635 +336.2403066178176 +335.55803353840355 +316.6991111084013 +352.6916805394986 +338.41209854931304 +336.7957914395887 +386.468544401999 +343.66147412483485 +328.05819062270785 +332.75611619897995 +355.8872449060185 +340.5094112908795 +317.51240546270884 +352.1905259987111 +328.66409479130834 +366.05520249000216 +354.24469775206495 +331.60230972734166 +356.9953186255665 +338.98804107396 +350.46070498482095 +344.92179756478583 +325.17332636296015 +328.0560825725145 +352.63770842645147 +332.39158754709115 +331.26466892708487 +323.01689200612583 +343.2474931039488 +367.3168364012773 +321.022554753905 +337.0179257227237 +357.3838636160968 +335.25891672608947 +342.9945371168754 +320.5308972218165 +342.41055634750677 +333.2149403331766 +350.4045223129628 +353.26403597905403 +373.83608887575525 +344.06431882852286 +340.2022150771956 +338.1460473157876 +329.9496610522597 +340.0365040489415 +330.56557971255296 +337.2908426157763 +354.1265244292984 +319.71592260061936 +351.26517192662254 +353.76004618466567 +332.4643665650498 +302.7789761824147 +324.99636097352817 +352.9791608404074 +333.3835954766313 +318.854750468895 +326.02864337642893 +345.75619931781404 +341.29689757131695 +329.5813913155993 +327.5705702906668 +327.07850757463336 +319.1245839368824 +356.44310750380845 +327.72852624886445 +350.3170807094385 +354.67895537875654 +346.8362810037816 +325.61219552676414 +337.81055009095087 +331.3697896064079 +318.26595037749547 +336.257586894222 +313.94802440745485 +348.73922350050555 +324.23218675620785 +333.926515170432 +335.00919866307896 +326.88014945238524 +339.2267747207265 +323.4336859285792 +343.16580783982005 +310.3208674181539 +331.91382321743487 +358.5257912559815 +315.0276429048892 +319.6556149153206 +337.10585714052985 +332.0410167251882 +334.43238509123285 +336.3441063983254 +338.3585234474282 +345.2334159596026 +334.773773102559 +325.0339719676974 +338.3831090507843 +356.35714618430313 +326.23437916115097 +313.67819413030685 +344.2561865002787 +326.01075430655163 +295.59530989104564 +340.01928439067984 +319.4819942458569 +325.90870747372566 +332.00645168404725 +329.7826104382599 +337.3028108778999 +320.2731814891528 +334.13197772645134 +322.5947663858903 +337.18742908817256 +335.2284627664855 +312.2094868172662 +341.8961812930356 +317.82719561634724 +337.5189156700602 +330.8770058265537 +352.4403066014863 +321.8830099898651 +319.8869777226197 +324.6150305368873 +320.2887904179809 +336.4249067881897 +300.63478844240313 +308.795929058874 +308.44735629669736 +338.08285572616427 +349.16010387156814 +322.2393194863166 +321.1486580646714 +324.53204601704465 +340.50000197481853 +309.53341588271815 +326.59139157867196 +337.32117329065903 +330.184305331195 +325.4462224191325 +337.27678539841736 +282.48039209224925 +332.224093981602 +312.4295671943715 +294.9276510018618 +329.3371841339912 +341.9193242024295 +319.4809768978107 +335.4249096152412 +345.01079308438506 +340.4800828718785 +345.13257706053616 +331.74206474480076 +321.76181581319366 +296.86916449005435 +316.7308114615456 +307.77583004043345 +352.10417984130214 +317.33415926378734 +321.6028556998947 +327.77757752960815 +320.1397349657257 +344.36133520267106 +310.02066623169696 +321.93415463653463 +307.96351879427493 +299.2973762467536 +309.6023849052417 +317.93731190980384 +312.0047538763351 +307.97761417024765 +297.29949080125397 +316.677506764765 +295.55735376986473 +328.82743370121136 +318.68439553763386 +295.81753388917787 +312.61523358797353 +305.9344562114643 +321.59582668956165 +336.51860051525654 +288.9287099968266 +318.1472778270291 +313.94195283236274 +326.06423376358435 +319.1590449344829 +304.7730561120516 +311.014828063467 +303.8317950049411 +331.3067834806645 +315.5997968986124 +343.19053380052185 +314.09904849289217 +304.39633732577704 +292.3689020672476 +287.95298255228255 +291.0386131856449 +318.2071589546516 +321.6261744288111 +290.64524730405884 +327.0348163918942 +306.5563146305379 +315.7038697017902 +337.17977264083027 +326.4793181666897 +309.1396134209472 +299.80724778762453 +281.06221506969973 +302.05488093734425 +309.40515233761295 +297.80981357941965 +310.2932015302552 +313.21857882139363 +308.6219936171116 +302.20420315692013 +314.1379826192424 +318.02523582960373 +295.27171756302823 +332.03244780718717 +309.6157580300047 +311.2038345373075 +321.2303938231876 +314.0776233492039 +324.55516842072734 +314.5842680906316 +301.1675889985391 +315.39326235914353 +293.0405187093033 +311.3732103287412 +309.13731820524595 +306.41319961683706 +307.4436597143444 +281.43112598319556 +300.9570271625036 +310.2796047478902 +311.1250706794325 +293.4606838915498 +327.1550233793088 +295.5575910177856 +322.4983545520473 +314.3549602947075 +298.3747982449716 +333.96060590551934 +290.01345211172946 +321.04415689355505 +322.1035794696601 +297.3042141179636 +327.6019693230941 +303.22621038145456 +311.0335042556295 +310.4736130728483 +304.50997393279306 +318.3135764680358 +317.9172225504664 +280.27071644411217 +325.1733467195782 +281.259343989701 +320.8827070283422 +322.131962948637 +289.2718465050839 +299.16739429041144 +288.775275864355 +301.77891014512613 +300.2659716192925 +316.17527573388037 +323.86590455633706 +324.9870065049478 +295.961831587181 +301.03115743037546 +279.14209467065615 +291.95227670228405 +317.9405528524986 +327.4042753945299 +285.21825214056577 +294.55189506291646 +302.7669865142238 +307.1536655053988 +290.9386058253256 +309.00444090678116 +295.6206485224342 +302.26297632249145 +310.40086957114283 +302.3003833509434 +295.6320944145287 +300.3187517956401 +300.4977584174134 +296.2079944401665 +297.7149024587072 +324.98651323403055 +309.5420114099066 +296.7731404538813 +311.2828608453797 +295.9417163761559 +318.04319639988296 +306.05610248067967 +298.8870877364839 +306.944325454241 +277.0298517034459 +283.4512038004507 +282.3294350590906 +301.92340288682306 +325.24613217745497 +332.4752945153357 +308.8381404944079 +306.68422231923313 +272.59191366964205 +291.0295955875775 +287.28448611793476 +289.6191447179626 +296.170410324547 +291.55808825266854 +269.19271371053014 +309.3037230899108 +282.31428953739993 +301.54525257563455 +328.49078522654673 +284.19817145595806 +260.30468961405563 +293.2922589343862 +313.6309701668389 +326.1564617432133 +278.9967401780887 +304.3423497165101 +290.0247893843019 +295.20352312252385 +335.6591991558018 +274.34554608752927 +300.14223632059037 +303.17690520753393 +312.17471513658967 +297.4789233198391 +300.45726969739 +290.0129513755725 +299.64189243602607 +290.48749859977494 +304.6022980323514 +289.85873330445565 +300.75700182338124 +294.6427740830395 +311.57041969715914 +294.08012105056486 +268.5609195950272 +313.22252810307344 +281.12342561474094 +284.7246081686354 +285.4658688767069 +314.4177224378048 +262.5130266034982 +340.2040099121815 +309.3754760760916 +296.9736451455996 +292.7562065520285 +297.6659145807811 +301.0285762617314 +302.74689495290136 +301.31252650473874 +294.32483616954073 +289.98011681004795 +290.54875670047295 +289.7943303935289 +309.28789572488233 +301.20758737256597 +248.95713180162852 +301.90903212090296 +294.996229045315 +291.7388075344001 +286.1747461932853 +308.3852832451833 +305.6729426577966 +280.1829959136484 +297.4860031630215 +277.0383928025218 +270.9139434030118 +281.91770076301947 +303.7841649793619 +305.01890134340977 +298.4228910504982 +301.4478768289511 +298.2627843034557 +281.0800634803448 +296.81567030882474 +302.1511265608555 +301.3697935753574 +307.6819258089913 +300.4908503685681 +295.1261345150814 +305.63101995850764 +289.3517095653142 +276.63331707420514 +287.1411232571733 +278.459245843301 +279.3911643473951 +287.124353481749 +277.46910467221386 +284.5215406857239 +261.031309426504 +292.022871129614 +288.79962537046754 +276.6326799348168 +298.32194734860985 +302.33584089528705 +264.6919795470757 +277.06532001932965 +276.8794578782268 +274.269304177441 +300.2851092544967 +285.09724584177235 +283.96503928817543 +258.2133525961916 +297.06594240583354 +269.3185448355631 +288.3999413125079 +291.5214034406891 +307.41821327022893 +267.9460001548083 +242.6205609286045 +289.7992629391132 +313.5677440523092 +305.19842139597887 +289.9286725942747 +279.4987171398222 +298.5787715568904 +272.2243917053227 +293.53550338555664 +293.8842785887475 +301.9888544133458 +326.98339557053777 +291.9770412256612 +278.59907254286594 +285.6529812590344 +259.8510875926796 +275.6254623076289 +279.7601775785328 +277.99018950219397 +287.8950597806179 +273.4378415617799 +302.03765694232766 +285.42663909167675 +285.21289658029406 +280.43930594252237 +287.4945041635416 +297.3066811233286 +272.2676153359349 +275.2806695270129 +280.43920202421333 +264.9933037334418 +272.6939456417332 +277.68657867837607 +297.54583626673127 +288.45114714824973 +287.3664967133131 +296.99816793137705 +282.3509577437354 +290.07345785434734 +282.72459493097745 +288.0985210470142 +275.52131298756615 +248.0731659088542 +282.01247792168436 +304.9233121178091 +297.5357694595277 +298.05289940348507 +301.9869758004997 +284.9969007807081 +286.54078258828633 +274.4577266477864 +278.8491442591762 +292.54027338782777 +301.1604453835713 +281.28398262568874 +276.6432478959127 +283.237917021867 +292.04574117632484 +261.8179631429056 +249.18878385166403 +274.8915248567854 +264.9509984266894 +275.41257895407944 +280.67806525027345 +276.12027561760806 +304.18759469598166 +287.52862679078896 +287.0919366400662 +291.7903741000878 +265.7594386965409 +297.8462246748158 +281.3501746702233 +292.3143241352514 +266.5616403686682 +259.40644908513946 +294.3541009279928 +287.79646443554395 +268.8903037637281 +269.32545177717395 +298.71967362605966 +264.52407485231 +306.2686608234361 +268.70364136316226 +291.3709668308369 +277.06415019124955 +290.7737086649255 +273.80798699988196 +279.3966812364545 +282.36542769013283 +266.93880022430756 +292.62011551591496 +274.08251384216754 +278.2473018048311 +266.9152610286088 +243.74736191518855 +278.70170162211286 +317.08462290169865 +293.03284266489044 +281.14140096321546 +277.51643964092983 +281.69693661146374 +289.4086899615914 +263.88561925087254 +297.7208569513646 +291.80737857616805 +291.8219804534869 +287.66886245673334 +281.4632876763989 +291.0765012945456 +289.8563170034568 +275.8770576656761 +272.6143597891282 +282.5577088151186 +303.8876742274024 +262.72929147411065 +259.3383367107278 +283.4014583623847 +281.70174245887563 +283.48947903433236 +284.51291723386043 +277.6025526321076 +302.8605282662265 +257.2416922614914 +268.6220656764212 +279.3071557979285 +256.57165512451604 +278.20703248882495 +305.30197520276795 +281.08325953895155 +284.1665628384409 +262.15804378448337 +271.645771384718 +275.1934367655127 +276.03157148206674 +299.6196730385608 +288.92946587415054 +264.29410718707834 +284.32240709049756 +288.029373897915 +297.4942412262258 +303.98618673287973 +265.68415126291734 +268.6929883737506 +262.0979834380717 +277.1965737375498 +287.5274647099151 +295.2119941862657 +279.5223824839027 +275.922924248064 +282.88082680330973 +268.32002680770046 +311.47266673930153 +256.9243851197864 +283.37217824127293 +310.506116676432 +280.75273966914773 +277.85239614159616 +275.3868781501744 +278.004271358293 +300.9269949454931 +248.0432229308073 +303.30949125608095 +259.6826079535316 +276.7659624567241 +274.37570294640085 +289.4019150361493 +257.14879651391965 +287.5576033805276 +310.61697979079713 +260.64854200494887 +283.5725365205657 +271.01929193238374 +287.0835468979064 +281.09642054293283 +271.3638367019248 +288.04203192767517 +307.4816056305905 +278.05939620969343 +291.512633150944 +261.82929071058464 +266.8172709682181 +287.9177057899848 +302.8642089892811 +286.23387026177807 +276.388632596947 +281.018298431581 +262.6015534020455 +289.9920637839773 +294.11400701300437 +274.4489753564791 +274.2082055229928 +285.0909118802999 +274.7498093522804 +280.24343190723226 +312.22563530826886 +277.6279358351444 +276.0131690413641 +271.774376689231 +292.33726212183916 +278.71270306099154 +271.8354050774485 +300.941963085176 +302.4233879392166 +272.65085560650874 +254.00237718213356 +296.43997675134597 +271.50690279915176 +293.30730061732424 +252.60909143052953 +294.88149086843737 +263.87743916448983 +292.5656966766499 +282.031173114797 +267.7832348650069 +275.8904036378686 +292.0606792375178 +283.53600943580625 +290.6359079631546 +311.2146032287942 +259.0149613391243 +305.9966015297647 +283.7173215626326 +268.9591454661771 +262.63525793421417 +279.51643040607377 +295.94929232711723 +280.51374709940364 +304.7370367714221 +261.07563485787716 +282.35481381868243 +264.1018804834706 +287.9927824979755 +295.7611305820293 +276.5162298711655 +244.34998229363578 +285.75850791798337 +289.317200667566 +288.88931210342105 +301.20870686659595 +267.22474520474907 +293.1160154270244 +300.72751253203154 +256.944465959359 +287.95666517250976 +275.8561605730544 +282.14732022748416 +288.53553875512614 +276.27326142021116 +273.5491017517148 +284.079889144538 +267.59215844867816 +267.6714501982279 +293.7746502318025 +266.860623661258 +293.7012401565324 +290.75589572816335 +258.528470719471 +274.0560739303551 +301.7334033142877 +269.7011629878223 +277.388675056028 +291.12161853698024 +295.92668685689125 +280.7215678407193 +275.682081684591 +305.54970037857805 +310.2860067082117 +299.1387139982363 +286.0222486991823 +272.90563839832515 +272.64655217482306 +292.6772147066282 +291.21019820037327 +305.7862961172581 +294.77373451964735 +263.07044022616645 +300.83934086559617 +270.66444565139005 +279.7970527094682 +289.2264523455284 +315.0527861152803 +331.56641278823884 +294.70748159773393 +283.1272959873328 +293.79156768925384 +299.07759245195876 +281.3255809504195 +312.620476634971 +289.6048038148448 +293.63157405819936 +296.19088838578267 +292.6642270398976 +298.9008659559514 +277.4950023875315 +278.44457275842876 +270.5301458771476 +293.3274388856316 +298.4167646800105 +293.75984572142727 +311.79384816606034 +287.087785434356 +297.12020795603144 +271.2294908233239 +281.7093317312539 +297.767308306432 +300.1178581479682 +283.3378810470061 +286.70446417296745 +265.4517820066857 +282.6658692699596 +301.15764480103064 +296.59486668531287 +295.58298453986487 +289.01869136922437 +288.4772915812069 +278.71966273134467 +298.862652863236 +294.8531231596757 +295.9918302210028 +281.0619863501046 +257.14342966991643 +305.1940985343567 +282.03354515068236 +276.46135804014335 +299.51585823613976 +283.59353057567444 +305.10988169638955 +298.668938980462 +299.7456577299466 +269.6012703445117 +307.73191153631296 +293.8008734237698 +284.5940666566434 +292.25471543115765 +264.0289303636508 +296.3629141319337 +275.24359654007196 +270.5717155115728 +268.166615771721 +307.143955349292 +281.54192455267287 +313.5551526318523 +283.1206450496366 +265.93555795531944 +274.75375548723014 +309.56212453492714 +289.1299220316703 +283.44241764118453 +293.9953101661768 +299.1404790793745 +308.3265205406162 +313.3150820235997 +286.738991202183 +272.5862777704997 +286.1552875879625 +296.2007535448309 +278.2460052276737 +278.44899756122396 +297.7493251044025 +292.06529895857057 +293.37355044716924 +281.8054055711275 +289.7042794072507 +279.57476102841173 +306.45336746302263 +308.70163982073166 +266.2964199951631 +279.9302242285309 +271.67339374229283 +284.2724901838903 +292.7418888087019 +272.6944931828694 +280.5920424943348 +279.49146644232746 +297.4733330806262 +295.5497177792181 +283.9894595267595 +297.3590526328228 +286.79650953297977 +290.9668584449218 +319.7784842803744 +314.9785539019256 +276.1398826794397 +307.67021054517346 +307.5136629007737 +278.71444656531514 +307.8513973316228 +318.5768883284824 +279.4383816828836 +282.5790193592821 +311.24675069003877 +300.3534871795823 +304.6006215445694 +301.6055694624175 +302.4615860506167 +277.24287818100413 +312.38382157359126 +314.30535128386566 +293.7820537420592 +296.6430891346071 +274.81230606003726 +305.1087782511097 +306.08035434832135 +296.84139301192397 +314.4672782100271 +293.06853834425925 +306.447701310756 +283.192727673698 +298.009851875617 +295.9052316136581 +301.92254701800886 +293.26692822529924 +296.90029581713145 +311.14910321423633 +292.6386076078584 +275.5004544574251 +325.14027806566776 +319.83083381878555 +280.5041820185645 +309.869350983659 +292.3947763275944 +303.8263058738829 +304.40288725793755 +296.72652782884376 +288.74455675079747 +290.24367066753643 +287.03816975768666 +288.40698533192733 +299.8129979670671 +290.3679492206027 +311.11629126527635 +323.12110057907194 +292.7443322406901 +304.9599404965627 +308.92537547256825 +308.64228949888684 +302.92440693658625 +312.8872128400588 +309.17051248909473 +283.92033848193535 +315.1312045979592 +315.52503968569766 +291.2982728067792 +303.2463757888122 +312.8953920705748 +299.85187428940503 +318.89822680674325 +338.0716220545188 +291.72474091017546 +283.07239924917894 +308.0589365048463 +314.3500621864574 +300.42531799228124 +325.4013450945998 +284.3371163040445 +314.43897324292675 +295.40449620367775 +329.840110431649 +333.9984330014662 +293.4171283514686 +296.7488568004435 +317.6685168444569 +299.4027408999427 +304.5734321299047 +305.74696262729674 +277.1778517354505 +305.4263019613755 +295.58316110068756 +298.6131734736567 +327.31803162866515 +287.6086445155361 +318.2753539411581 +302.29064168424657 +302.40847018366924 +318.32720637130075 +311.8127151849695 +315.3442671916192 +321.3399940394168 +302.296677019257 +298.28167764256773 +291.4340580663633 +295.3963529695882 +351.21672945688675 +326.19928048251086 +288.0307435708305 +288.5830883408355 +315.33488018764126 +316.42997917380745 +316.58408933916917 +304.85418999445096 +306.8951634865517 +313.7140827563439 +310.27400715240645 +276.3926741318427 +305.8767641235032 +296.8356770686555 +312.11305320220845 +353.70378252993515 +315.2105061401692 +305.29292490336877 +323.6497138758991 +317.3011706069418 +316.50792204227923 +319.3936022498594 +340.9131161679375 +294.0148690118887 +317.81868568983134 +297.29257955137433 +319.2870954231697 +297.66634868754903 +305.1930716447334 +307.1272281237318 +326.00860960146684 +325.2922111077139 +293.4911858816099 +312.81131721338744 +301.66121616775814 +293.69195019265834 +309.1881309481072 +307.96825086938793 +348.4539013908055 +319.1668573699727 +292.58243703443344 +304.70478992704506 +328.2368259015407 +344.10982467380757 +290.0252185951261 +285.8173908044466 +341.28832456236483 +319.56088909471816 +301.1301242542389 +321.95807465701046 +275.30988568072746 +314.3769756692412 +319.29242995648 +328.22101567804765 +299.75291359068996 +316.10469394852475 +301.31444420140593 +318.8644470779995 +302.013998179164 +309.3307052077023 +300.7869671567185 +325.21412792133015 +328.40028065251147 +312.3999432319612 +316.55289842859895 +294.74266658503706 +311.82099426623404 +315.6284668353833 +355.16384331724146 +300.21582499232966 +338.3514320794568 +331.5825941970935 +321.1411771885375 +343.0737033989712 +322.74226689815015 +323.11939792406815 +316.7192083311802 +335.6811344737221 +333.93090814753776 +308.6466302075634 +298.5381703943058 +315.13249485792085 +306.44763323760435 +317.43860528864946 +336.7574684048579 +311.8765078963046 +318.1155073403722 +319.7268884363628 +331.51209985113184 +285.96574062109437 +310.28854080672147 +322.48001772768447 +337.19152201334026 +312.349733802992 +292.04221039205623 +328.994818913186 +310.5986816469387 +302.5417459590496 +311.0039365547964 +317.61420872454914 +311.5349584795134 +288.03646089403753 +333.93413459217305 +339.6285863234535 +330.5513304235451 +304.27242413406685 +318.2047900443785 +321.20066107801813 +343.4583867660459 +344.49848242185493 +323.8192889291629 +335.8753219105058 +341.4263926400816 +356.1732152860354 +345.1019988773115 +346.36346944397184 +335.9722501286986 +355.55983286425896 +340.8092037933461 +322.07262596503756 +355.4972117486525 +345.1025009925514 +328.2825629668809 +327.7587730301505 +339.2231500543927 +341.69535276983214 +337.7862748855359 +339.482502738014 +359.9850974788691 +350.7272531778295 +337.74403306639306 +348.83374337611025 +319.725102054703 +340.8444635680918 +361.6824372249512 +331.7841801954829 +322.50901708333066 +325.4081217314729 +318.9664404028739 +323.47861043833865 +329.60465221603306 +314.34703353163997 +335.3296909928454 +348.42575970711664 +321.7339006376252 +357.55729022233567 +342.6916495831906 +350.37478848917533 +325.47733036476114 +347.80521063044495 +319.10048240574736 +348.3602749923777 +337.77463476724046 +343.41611728652146 +317.9221308583426 +322.07509383450713 +344.10698036504175 +321.317018851072 +342.15758209665876 +315.1660570097864 +347.8655106216678 +317.18018650648736 +343.52809263369113 +344.6240491300866 +325.1268717813677 +344.0087122934981 +339.277952095209 +327.49904958921184 +320.5827538123938 +306.5200682978291 +340.65019244576325 +312.4177039821465 +336.9260989217966 +331.646361209305 +345.56768555409855 +331.10490823588566 +330.7146168167523 +346.38769149430857 +340.546993556945 +340.2821210590578 +342.55519624604875 +312.9891121476043 +346.82541208591516 +344.710055150066 +320.687000342378 +332.1002618871218 +335.1355732865056 +333.7451335950047 +340.6694498329567 +356.8764633624425 +351.7323643677099 +316.42468655921704 +344.97787799808486 +355.421208369071 +341.5347946948241 +351.9384129486188 +365.54546494879935 +350.9739208246228 +339.56216272375264 +351.3174004717094 +338.0495541134433 +336.27852939084676 +330.7549933954638 +359.02104754943673 +323.8925545173798 +358.59104473423724 +343.3711281183146 +315.3641442143672 +341.4484438579374 +305.05353538070153 +345.2810433274725 +349.1271215778202 +327.34031866705544 +337.91703879804317 +364.9405212428202 +328.66028046691173 +320.51278806919146 +358.0112820613021 +365.12103387008153 +336.23290818473015 +351.1158939306204 +355.9990540946453 +325.2656264803353 +329.07416153343485 +354.4093170715847 +361.123893885818 +344.5815899539355 +323.3096066078372 +365.62251904251895 +328.4846166910098 +331.38804801493916 +341.39780098596685 +359.2914936685375 +348.9747763238481 +342.51003445040277 +343.2385283596848 +337.0590893913063 +344.66608968789825 +299.1231494495835 +332.08295294427637 +340.0337984980204 +319.504843549937 +342.2012999370463 +333.4985628426979 +362.43034788916935 +359.7523828054621 +329.6849037594989 +334.3461035390115 +335.49462255441085 +329.93578394847464 +339.4912450236797 +325.4398807513283 +319.9603776354047 +345.84362026046693 +345.9582797697756 +324.81688953193736 +349.90848423176936 +327.3936461204901 +340.4615122382337 +348.84392660430444 +336.2584192763107 +343.47781798162305 +329.1628932308447 +333.8978073103258 +333.7732886918703 +325.8094017983438 +334.2305580751761 +314.00396460765324 +329.6202303454884 +332.67779953220645 +333.1152569124529 +333.345957152346 +336.0118740360119 +344.0110844002897 +349.8542398977469 +327.37849440121823 +319.226988364211 +321.61882049861504 +329.8192215823139 +331.82929311835517 +325.67495206148743 +317.9264652307731 +330.3341319939743 +339.7548091331925 +345.8713302893091 +328.88172984258904 +331.02671343199586 +323.46148293477813 +336.6845273481054 +324.6444703728191 +345.63269082555684 +310.8413619728417 +331.8986382509132 +341.66146794752257 +339.94527571677924 +376.9809578493076 +342.42217111604685 +322.46102404295743 +335.880740769894 +311.09599680664496 +336.12824731576546 +325.04034053083905 +350.85161675926264 +329.2516208940878 +335.65102234015086 +328.0106881614092 +363.05764039368637 +332.6763976487449 +364.468404766317 +349.45660643704656 +344.5710121020361 +342.9129541719669 +343.296864152016 +309.05920082747997 +333.4001125365478 +349.9987118107632 +336.82162391050156 +316.82452419857145 +336.7980957036359 +362.7283608352384 +355.99658111051974 +336.69876549125655 +351.6657176929993 +332.23424977569573 +312.516429370187 +324.0301649861867 +360.7435703190065 +333.655701333207 +334.1214387019451 +333.3026118869726 +365.83493700285067 +361.7447295531977 +370.5055458030096 +335.4364082529259 +342.1588878137195 +315.43419998811123 +359.61659417917065 +320.6096986791338 +341.05203447357786 +321.67780029862 +329.193567736417 +325.54278285909015 +328.941371923266 +329.96990625771383 +329.8490665046806 +350.2478433545889 +321.6651552805988 +341.2347640683708 +355.96514876703236 +330.4372216863258 +327.43081401982386 +334.6361383920302 +355.4575924724018 +340.92959530304495 +330.242090060062 +345.2332372785761 +321.84450189542054 +348.1752592763234 +344.1651259016609 +333.6090326520402 +325.7919094018339 +325.09644795720993 +346.08387662946325 +356.339952201319 +328.8182472877263 +344.9986540772906 +307.45689744116106 +329.6381230075799 +337.8196483830487 +324.8702776079085 +324.48868449015293 +328.4677329141865 +342.6456575421887 +335.5847901775792 +305.33923660875405 +307.06517302615555 +329.39206032752884 +345.0894633705819 +297.78899639417983 +330.94287135350305 +330.5404547220423 +358.7771401196761 +332.6000074255261 +343.91852630731904 +340.33835278735984 +306.80490151087236 +349.5596295183707 +341.3878847283206 +345.69303583524527 +396.10634535338534 +307.4103370301171 +363.58903903585104 +333.8827766159605 +342.3442368777337 +337.4137913411426 +331.8057722734961 +329.6367997392052 +342.8846081785425 +315.61602619151824 +349.0526405437853 +331.8144727369833 +321.25792510084403 +331.2673277906479 +356.43040215950396 +329.9578884426569 +343.1189734464892 +327.01866643524687 +348.95871795162 +347.8623257913073 +364.99455268591754 +335.1000490230222 +347.52618551625517 +339.0771961596507 +356.7190668162768 +326.96185348879783 +348.52768727656905 +334.6302661274815 +336.52252707502805 +338.789418689973 +341.12281072970666 +335.6511939874574 +340.4983471889618 +360.5782195276078 +351.79692620958946 +350.04361936644136 +330.4605866764984 +324.0229802839625 +351.1987676319965 +349.98963337751394 +358.7520419624139 +328.0714398415852 +333.55438302112555 +312.70956865005815 +331.0657090790064 +351.5168042779917 +329.8863368570142 +346.1745628885501 +333.86887404430536 +341.41524434611006 +319.65435447700264 +337.7982157306326 +292.3613879578765 +333.6881673324169 +312.340617231032 +354.14175255498117 +347.76856410007883 +343.1336128263227 +358.6388254166594 +322.14535027377923 +361.8752322670651 +349.79538584935784 +332.49819446784664 +352.690081379837 +319.55787957146447 +323.66054937810344 +326.79101230436913 +327.90970437466837 +320.06911218044564 +353.6466600299904 +331.72402383316717 +340.6860187789967 +327.01113523405115 +308.5051870219124 +339.29165795841016 +307.03264725177667 +334.17309673160383 +314.93562924518835 +364.3830938947491 +348.44606056747364 +336.4966377672275 +353.51773471274635 +322.32144469117077 +342.76212685687153 +337.6261269423881 +338.5075650270909 +353.3183857318587 +345.2860600327899 +338.67097941293827 +309.9261587168027 +320.10943172949857 +332.39460340662094 +335.51301087630173 +317.3896798928905 +369.57697120161714 +356.296319815627 +342.73490530925517 +334.8414936577893 +330.57469550383655 +319.587295198569 +334.7014056776957 +337.28667549880214 +315.08728895373395 +338.2636288194941 +330.96622764992173 +305.03189597549624 +320.4087833759821 +326.92305291238364 +360.79894314827607 +341.08022359661055 +313.0852725040714 +339.8808411491176 +309.79998869907814 +348.52308654642695 +325.51628478765156 +331.00410043716874 +351.86461770069394 +313.2292738130256 +311.5236696117341 +323.4428083965602 +347.28973158566896 +309.4673703131949 +290.0124248628996 +325.05667273807006 +339.7675026052127 +349.24921645313566 +324.619213399896 +325.29475156178205 +348.3018652848789 +303.6012480163191 +325.36645387566614 +333.81867787752924 +337.54681431193325 +323.30632967903017 +331.2451750716033 +293.93172950180593 +320.84121545630853 +337.15186218601133 +315.87445216209744 +331.1442794622379 +336.77326380156404 +325.0313714725374 +332.50558083419173 +315.6905880558519 +326.7507687291738 +338.706171339597 +331.9220551493582 +320.85486222281656 +332.71918080680564 +339.8564295742269 +298.96864616153357 +346.2164779311774 +324.05433781355197 +335.193387070999 +346.47971521298734 +308.4760898508352 +318.1455698927528 +324.253795637069 +316.84516165459763 +353.9041353499124 +315.5620861670004 +319.9029490269531 +331.011353886036 +310.15438625512553 +321.9484968046361 +332.36507800177867 +322.66446423615236 +326.0916528844885 +319.5530559211546 +304.91105893063923 +331.89362660927077 +352.93385454428693 +327.20429477081285 +330.1478280598668 +336.9358768695906 +307.87765637324543 +351.615472261226 +329.37099400141796 +350.3521285544494 +315.34870732792257 +352.87702295428994 +337.37780689760206 +333.9884301496611 +329.1689630411807 +321.93621705395844 +343.2027722966566 +327.44683160542667 +296.2389369911076 +308.66387342499013 +322.2902838082499 +329.4908547440936 +323.96642830325953 +342.6704291630752 +295.781664730384 +326.5706591470792 +297.5118677052889 +335.4264981383096 +322.70588138749883 +330.1723841223087 +311.11668441061113 +342.6214198752804 +338.9943979606051 +332.1145786990019 +321.4738015084878 +331.81978648156013 +312.71392255645435 +335.64576187969027 +347.23820429268864 +338.57560734230526 +311.8925285130615 +327.8673975410985 +303.3327154643624 +330.7343306369955 +328.8140325544985 +294.4540171462407 +304.7765133902387 +317.61595849955853 +317.2297888708548 +303.6987123376414 +327.1575415552189 +325.00308549342674 +318.3004799696882 +309.88930713458376 +336.38691985775796 +345.2114945843582 +313.5252236917748 +311.50024753919297 +327.6520285774484 +314.99400588497946 +318.0914054945796 +330.93255104848356 +291.7192020143476 +339.2119162667206 +320.70405311431796 +313.4305801480604 +318.05521366746547 +318.68711145766605 +293.5680637036635 +341.03672658098697 +319.45844270821345 +325.2534686675249 +332.625040374854 +303.38699163218007 +325.30710463250693 +314.2399717955855 +330.5496378053017 +286.5372344688228 +316.327757731531 +308.7621021869826 +323.900332210717 +324.32377742806943 +306.81379100865445 +306.6122115598906 +315.35236862866213 +303.6208483136457 +329.13793072660786 +311.1321960119009 +273.5532641516415 +310.7778638185829 +300.8490058479579 +291.9673361054746 +297.64180819727585 +317.37674684313 +335.2287801158756 +320.1092385269044 +306.4024861493011 +321.94005458886477 +308.30214192070764 +304.68938094172074 +297.76772899845895 +288.81414964880776 +308.76961842949856 +316.7159293368299 +312.81940616676764 +307.96859776713836 +300.0127579339658 +322.8014256355846 +294.25408323698696 +324.9974322300067 +298.6205964193678 +302.16580108222223 +291.48569869612595 +305.5887967353619 +327.2360960246933 +320.31293598301477 +327.00018571674707 +320.12694756921303 +295.9978692820218 +307.2597857341689 +300.48746052935167 +331.48883011497253 +294.0573693959062 +324.7591250020996 +324.60601147762236 +338.28363462783545 +305.1017296494462 +321.5137037633323 +344.52547412884695 +301.6055152591591 +287.92699330874086 +282.6941688571709 +320.8049503568721 +282.3614220665255 +304.5093855214287 +316.31150695810294 +312.4478053364763 +315.849147582658 +312.70795106991767 +328.1531615027035 +295.0895589808354 +299.0076773229754 +297.4520599896363 +320.9568429002699 +321.8483736206714 +315.0767093155072 +325.73635912286034 +290.7489014084257 +332.5842879270541 +330.3151628905715 +318.54962272276634 +333.8404292925055 +282.96385583079115 +299.5233906907449 +296.2673257825029 +317.616120723642 +291.3318620858715 +317.857154252741 +326.75693937579547 +316.6475567599174 +310.43152947232255 +291.52418332576457 +293.4594741830034 +324.24608042734394 +317.1620900690976 +304.9420962067978 +299.2062993338237 +275.33726243723106 +289.2814337222472 +333.13731270214305 +285.89768104522045 +307.4399950387432 +319.36289212437055 +285.8375131408925 +306.9327143947475 +317.9001120589381 +304.1005517614885 +346.0918926250473 +279.00575492504476 +319.1000237795473 +300.78397776659716 +314.577121871263 +309.5535445752478 +292.07952315987984 +306.1298949060203 +275.19355281970456 +311.36068360828784 +306.71380924492263 +311.5922445465569 +317.63565399579437 +307.3024223339578 +303.91805569609824 +288.58820640496066 +290.9341843265731 +318.8068222633937 +322.34435490314996 +297.4938964550489 +301.5407513733473 +287.37002241808773 +317.87533719441507 +310.24499085353455 +328.9237924833149 +287.1785456395194 +294.4156990021393 +303.2632017029945 +309.2423739402544 +296.37736576493387 +286.53507542607 +312.27535442539806 +309.7664556140825 +285.4634508153159 +318.83713013130176 +315.9600596588532 +300.5321828293191 +299.58141584167623 +306.4381435343005 +285.405999822672 +298.41955717753154 +266.076152281272 +310.62150020048176 +274.5080953363979 +319.58592691830466 +292.39040635762495 +293.99540141763686 +287.714015829692 +292.5834994278725 +317.6205031715209 +259.8428172880645 +315.2475322406068 +301.25213525718783 +278.31422698079194 +280.1158710954274 +320.57398826764404 +281.74823335775244 +278.5404423199656 +312.1966608519955 +300.2705767441386 +281.2962420305194 +298.19031557063374 +279.71945239030595 +310.9554209788862 +310.23328379132624 +302.28296448207374 +299.6299078176889 +320.13946887835976 +294.01029506167913 +276.43796110847165 +300.36843056272767 +324.37614551163597 +278.4871537541243 +287.9876848273986 +299.3269753131977 +292.24921155726577 +278.4134501092532 +309.32132496723676 +326.8622908763017 +295.3881684060661 +279.0184098631781 +269.3666387492465 +295.890197674235 +308.2345315855555 +298.82216748429136 +291.6399651062469 +282.84539548227434 +275.2900535948672 +303.5851588135098 +304.6160131563681 +268.19287635378214 +314.32157144177427 +299.2002562754676 +311.2462215958343 +270.66003161609626 +270.1768045036391 +287.9973487917088 +297.48044223865816 +316.433466312767 +300.214477400905 +286.0838062825064 +274.3889257756499 +307.5483696741144 +275.03536399236407 +313.1646750437998 +284.8107549589632 +312.34392218502563 +298.7626491033564 +286.59398613735755 +280.8219981471179 +283.3258498908975 +294.54590795515395 +289.2357046069187 +279.20723019224346 +285.39627053866946 +288.87120947084685 +256.17588361457604 +294.2163037295836 +272.8738857473657 +270.1853713860346 +262.17968104791765 +260.4812461985461 +266.82413357777284 +276.2359710988211 +315.3907207630041 +278.6875038073628 +288.9442894014222 +292.10603762156114 +288.00680004141554 +284.80653587642564 +268.18986471385085 +307.109930123244 +312.2435740681643 +260.63051721313565 +270.2259712590303 +281.08456567627695 +270.86034894864105 +292.43547780653824 +274.1042772433661 +316.6729524761188 +302.17456403325656 +287.6254043207728 +299.5220854436967 +300.56733835658684 +275.811100842102 +271.9706633204602 +285.0483640859537 +296.49065552578816 +285.7122523408723 +260.27605326836306 +271.5819215596025 +282.2194842845419 +282.07872912658456 +312.1832822085768 +262.51533313250206 +290.3096672436592 +304.7066449053991 +316.1356219998922 +276.54175404205273 +289.64597969120734 +290.68898232107244 +285.05441103633217 +280.5998866222413 +288.3792439311129 +244.47393817343414 +291.7883251216984 +283.4761724051231 +278.22209665323004 +311.5951616576843 +271.32772297568 +275.23010469709493 +310.45300239763776 +268.68453404911986 +272.7369972672276 +278.57728192704514 +293.04440803989877 +283.5997118706814 +261.35609965848107 +272.47078923089515 +271.2565496013425 +278.9738170290504 +286.2921500638848 +286.0758201141821 +253.59838022040066 +295.39727090871366 +283.3236788217653 +299.9231413082831 +285.9476962905213 +295.542145880469 +286.0758695104981 +298.9548732568215 +286.69801229637454 +277.44866570869726 +312.3228803389957 +291.8134592822712 +287.0636882649397 +259.6700511243784 +259.3960336471923 +282.62653785192066 +280.35878379064525 +269.0552154858514 +280.10124085368193 +301.365682988148 +288.09262094889414 +260.9039245486582 +276.00034245988417 +265.6761278306868 +271.740394867154 +271.2662795779562 +270.23025529459323 +258.6681203126408 +275.2130544057547 +268.7352999588112 +233.69526852879386 +307.1187798609221 +292.8042491365053 +271.10023095767343 +276.8425927201725 +259.19106123881613 +301.41095109250057 +304.29904247627917 +278.53231132147647 +291.2370378509525 +278.637373864353 +256.24473831823235 +269.807688799212 +277.7475132783864 +269.0120891926531 +272.4106976444876 +274.2069021786728 +274.28130390517316 +276.16533073751685 +259.6659197527592 +264.65606842472835 +256.203198955322 +289.505176143995 +243.9329737507457 +291.9436765847078 +295.30119717825175 +270.31187850253735 +236.28713396074994 +269.2887052277302 +273.5980295936405 +259.56025506151315 +266.7957394083408 +296.90148741015014 +284.06256766531516 +260.53873840734985 +250.53715856177115 +269.21291537510774 +270.8181104538817 +281.2188450004163 +265.9302741086039 +281.3066718284701 +302.243615630786 +285.6562376294144 +272.8474771352238 +270.78821322459027 +268.16204000572947 +290.778687849329 +264.03863985383674 +273.89715852679194 +273.9215521062774 +265.69945380501787 +252.79046404695066 +277.74347635328746 +272.0165828289624 +280.23638773132905 +264.92231913834644 +290.7477896233143 +259.7398404231695 +297.87735452536674 +246.77390673390806 +278.916265906323 +279.4591302767929 +260.6500462876762 +278.5937050241922 +291.15515170301325 +239.5141979549569 +279.58532643028553 +235.32742744303414 +257.81317257871 +296.0457059438455 +263.3726765553467 +254.5852981481259 +268.9339018137721 +302.3147347071311 +244.7292289950489 +256.1940510718672 +293.75058364440713 +299.01824784315767 +270.03568087768326 +253.2335879767004 +302.39164026468274 +294.94821333746256 +281.395683675943 +259.34738608513874 +270.5666279793541 +268.88077238808717 +276.08561121120016 +292.5706207682445 +284.0957823764596 +255.18364933730226 +291.3486220069433 +275.6196515444039 +281.0976628412781 +292.5597633753765 +254.48332189840477 +270.31801662019535 +262.96856575206033 +247.64090797101062 +275.85354253938715 +307.7594441866 +243.519528240481 +270.1585893400383 +280.05244950840097 +272.3849843061467 +268.8678989168827 +251.3365207645628 +273.9093970220338 +259.27899635082093 +238.10406361525065 +288.01131706999894 +284.4978191493538 +271.09185188150917 +273.6822113977124 +286.12658905031213 +273.5596795838957 +283.5624532087876 +265.81027726195737 +289.5326625175964 +274.88456036226984 +272.99165704976673 +251.36720502813245 +274.31815056862973 +257.78813352531165 +260.6250252810215 +257.99212737142835 +254.27145340597622 +301.3338638847427 +289.6090854208882 +298.28222103228876 +251.88844976971535 +270.9663796392887 +250.814441476387 +259.61960613177325 +256.32319770284954 +288.1448450893756 +263.99609556039417 +285.59269392571554 +278.73071853873256 +303.7944524596902 +247.9666108520674 +288.36367359410417 +286.6897761808018 +255.4041109257481 +284.61676463623843 +274.70887024680286 +266.38571440566835 +257.57866185097885 +259.11922074764567 +299.96737126235007 +269.72894280228854 +281.25442334768024 +258.0417540020163 +258.20168898175945 +285.6694447047586 +249.7915151116186 +263.57619671891337 +270.2038305843519 +271.34499297713177 +267.05992356095857 +275.54358345376903 +279.92795151254455 +280.54682535266977 +255.16584934860242 +265.5218368510036 +287.3465259642204 +282.92334126886954 +249.47320129901584 +274.9207343544187 +240.55409771085453 +270.4412577895159 +297.756920726681 +255.77952778540669 +257.4642262145686 +281.0565345432989 +247.03101058672888 +260.4690111096817 +278.61646278091564 +260.4699577626426 +266.35951229991343 +280.8343354220868 +276.08786920170115 +273.819402106453 +264.8942122045034 +275.3734120326526 +268.1040775546268 +276.70116287978385 +262.632094014702 +267.28837760513534 +255.39453806336508 +269.50345557416784 +258.0740348474688 +253.62324621538846 +273.89768616231987 +273.2417833462926 +281.6759686993264 +263.7870232903938 +276.1919698375497 +278.3220845104101 +276.78237426292225 +258.06324065339726 +272.47476411517795 +275.6700263894988 +270.43025439976776 +239.56727492539227 +272.74791658193857 +303.05317267178157 +265.12589799567274 +259.72564419505227 +276.00693809575387 +275.13843121941005 +288.1591798890314 +252.03437030940762 +281.4172498628551 +279.3709055250341 +268.5963167975873 +275.7252743088246 +285.9522768150554 +283.66946881315835 +253.97083316756624 +282.9731085409829 +269.95522613869014 +272.022902476345 +272.06627128728485 +268.80874142801326 +288.64809522732253 +269.87035280095006 +254.62828370452172 +265.3816099051842 +273.8664429879761 +289.4087889724462 +280.213963944191 +258.8103448461422 +308.07109771526723 +275.3551985771443 +290.3116044079493 +269.30159192312334 +279.4559677204912 +284.01952857868173 +289.655065713985 +287.33041422853137 +284.6471266438821 +267.1788832470386 +263.4419546516617 +276.835560047046 +285.7468655375865 +268.74464452145145 +287.7987740210139 +293.5679376100236 +258.6690321641018 +259.89430232952907 +270.2256642454217 +276.8902890206956 +264.6674273079319 +292.41388555881053 +278.776337265226 +273.15855727128434 +251.44821219757705 +253.27822550847895 +276.8969848903826 +241.34500253414882 +287.8105758662229 +270.59657439300406 +320.8405277092267 +307.103928743235 +270.43682093299174 +271.6074206015074 +287.9284112403426 +298.43188156925686 +249.19859568009377 +247.07432138212994 +264.31840414563743 +282.1595532121851 +280.95871862556675 +289.4779798576696 +256.06052466092734 +239.6556825566472 +286.5564103625576 +261.7460938318256 +244.25324300356158 +276.24466019741686 +285.87727986664896 +272.4442670025339 +267.5610424408531 +272.03667694109583 +268.9924151176 +254.64322712884103 +264.06129628780656 +282.3707472910698 +279.4999175652677 +277.3080196952011 +260.22079250173334 +272.3012228705665 +242.93414368340785 +277.7652338164672 +296.2908901512166 +253.53676660575775 +266.7196791451349 +280.2989694688283 +294.0071125148792 +268.98849629052705 +265.46804704730494 +246.71203894156935 +277.36931678380466 +306.05406319312004 +280.0986893569571 +275.7600867712316 +280.9237254126596 +276.09125044440196 +264.34315878556373 +288.56982678710915 +279.8384974936282 +276.85253862679014 +262.2873660174337 +295.9967074238134 +286.6580571990494 +268.779766814181 +291.80642011635206 +269.77165937428117 +265.66334439417216 +266.08107879781966 +251.24822774785446 +284.4261139522141 +250.5415322156981 +259.52448763766523 +247.11636849088404 +276.56177642355044 +275.70560864104726 +273.19552972385475 +262.7258280589969 +260.90593548501903 +285.1464543146032 +270.2658846191988 +283.15093246567915 +265.51678582554763 +281.34470670339323 +297.99786641306537 +287.51335696903254 +272.8764002027592 +282.8529460341147 +275.6045327000397 +279.3693110943998 +274.54692684075417 +277.0249075155384 +282.6776841863477 +264.99128678660884 +264.75866457269484 +259.3603033327923 +256.33682816616476 +262.08839007936933 +282.50257186346295 +267.0789142511663 +287.93144252364056 +280.96793005467924 +251.51451131568405 +290.3253608384654 +292.7279131984113 +266.2051816044071 +287.17286812480535 +268.44075862086095 +282.62385894200116 +262.6312932208797 +254.9377366661128 +275.85167046565886 +279.78077220165375 +275.8455892871808 +264.35061952825725 +276.0274244936376 +286.0087787828071 +281.48131330470073 +284.94488430264835 +272.4739614847221 +299.75821611881264 +265.2261626342684 +289.8833493149208 +300.2379693969824 +290.0059683699949 +280.033246113082 +275.33789512878036 +298.53090506781973 +262.3608974511694 +269.1545970528719 +277.7149305236528 +301.9542275449322 +289.4098024242147 +269.6371415811454 +279.4553921110468 +275.08389517184935 +273.7897275231833 +298.8197380331531 +264.25261898499474 +308.34356963711423 +296.94261638045407 +300.9334392906657 +278.1242623938644 +282.8587849447977 +264.0425731839889 +277.56374017916255 +292.70564079484086 +304.66222334630913 +269.3221310635411 +280.38281870483854 +283.661699142249 +265.4187394630048 +294.8565894031527 +275.56882444385263 +283.48743976951033 +279.8217960330867 +274.9638201121861 +286.6262919050818 +283.66955844673686 +281.4849560050391 +276.3445015899997 +291.9280690347297 +311.7332070978198 +289.5208308273062 +302.27593524229695 +267.1892583711678 +290.15116642929047 +271.75522734135285 +266.27801999579356 +277.28324721534227 +305.90124037370776 +302.4559866338375 +292.1482875650397 +266.07293640685924 +285.91517044311837 +293.3869825731894 +291.6501562129746 +261.98112955560566 +276.1741084524483 +288.4899955319481 +297.4735152705425 +257.2841333979395 +287.4203791469822 +292.0490446192702 +302.60013730153554 +300.4137630203187 +298.91316545898496 +278.6419091467859 +262.4201555335023 +284.89939900411247 +305.6043781531361 +311.5129737613457 +301.5648254158629 +297.5436118654715 +296.938298113881 +283.2599675590858 +289.6745132320207 +316.347971008587 +277.9437596585922 +315.8043873233246 +287.35699802042075 +311.79327542945447 +271.6099961365587 +301.1406255548487 +281.7549501799243 +271.8738261717787 +296.10926972907197 +307.908912573311 +280.6783111108497 +271.15804535649187 +292.0502231986853 +292.24570317195366 +301.75639312273034 +307.80758604691715 +293.051064127712 +321.43531318810165 +297.4980053678133 +289.20935571876413 +270.67422960724093 +290.7077816056362 +289.7513656138784 +309.0146835301874 +301.80124508820586 +277.70845847328036 +297.7825304352289 +305.2808818129992 +318.0499145400362 +308.73134838213116 +306.9946789137872 +296.7875800796292 +301.7625440339903 +314.601171263878 +276.6336603946606 +291.27459227316615 +285.16407625791555 +302.2895371982693 +314.97911520954665 +288.1526809165778 +261.8259877618598 +291.14406706282983 +310.83663458770314 +305.4241441591727 +303.942270150463 +293.62647911319755 +279.01929139444246 +305.62638324487784 +285.84728853519607 +330.51454634657796 +306.8401593204958 +289.9887206085896 +289.6683424163322 +297.45072871371343 +295.42150518508754 +315.5664890605938 +301.9719651463425 +288.55993657071076 +327.380087707678 +300.34857252061505 +311.09795655573276 +290.9134157644772 +305.3781107848205 +304.7439670245663 +272.40634425669384 +330.15408685685696 +319.5957594393764 +294.82586141737005 +284.5560284768991 +306.08039658547614 +302.36453118158533 +306.46602051800244 +304.17792361260314 +308.9534896458915 +322.97115733631745 +310.13194841369227 +286.39578132888545 +322.11922813021647 +326.35437902040053 +348.78737528078295 +285.83701274009223 +306.12952742187184 +271.9584483310027 +310.9722304996913 +294.8548855554076 +331.45470059245656 +291.7787887858425 +278.4170868415468 +296.51875256164334 +274.4569093982738 +314.81783723644503 +273.3987293593373 +304.41929982079944 +273.4743223320849 +299.5368489180037 +328.6410789653376 +309.8466171423233 diff --git a/examples/numalogic-simple-pipeline/src/udf/__init__.py b/examples/multi_udf/src/udf/__init__.py similarity index 100% rename from examples/numalogic-simple-pipeline/src/udf/__init__.py rename to examples/multi_udf/src/udf/__init__.py diff --git a/examples/numalogic-simple-pipeline/src/udf/inference.py b/examples/multi_udf/src/udf/inference.py similarity index 100% rename from examples/numalogic-simple-pipeline/src/udf/inference.py rename to examples/multi_udf/src/udf/inference.py diff --git a/examples/numalogic-simple-pipeline/src/udf/postprocess.py b/examples/multi_udf/src/udf/postprocess.py similarity index 100% rename from examples/numalogic-simple-pipeline/src/udf/postprocess.py rename to examples/multi_udf/src/udf/postprocess.py diff --git a/examples/numalogic-simple-pipeline/src/udf/preprocess.py b/examples/multi_udf/src/udf/preprocess.py similarity index 100% rename from examples/numalogic-simple-pipeline/src/udf/preprocess.py rename to examples/multi_udf/src/udf/preprocess.py diff --git a/examples/numalogic-simple-pipeline/src/udf/threshold.py b/examples/multi_udf/src/udf/threshold.py similarity index 100% rename from examples/numalogic-simple-pipeline/src/udf/threshold.py rename to examples/multi_udf/src/udf/threshold.py diff --git a/examples/numalogic-simple-pipeline/src/udf/train.py b/examples/multi_udf/src/udf/train.py similarity index 100% rename from examples/numalogic-simple-pipeline/src/udf/train.py rename to examples/multi_udf/src/udf/train.py diff --git a/examples/numalogic-simple-pipeline/src/utils.py b/examples/multi_udf/src/utils.py similarity index 100% rename from examples/numalogic-simple-pipeline/src/utils.py rename to examples/multi_udf/src/utils.py diff --git a/examples/numalogic-simple-pipeline/starter.py b/examples/multi_udf/starter.py similarity index 100% rename from examples/numalogic-simple-pipeline/starter.py rename to examples/multi_udf/starter.py