From 569c38b3904943f8e19968d4d0f2773ba5a41087 Mon Sep 17 00:00:00 2001 From: Powermacintosh Date: Tue, 16 Sep 2025 23:13:20 +0300 Subject: [PATCH 1/9] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=BD=D1=84=D1=80=D0=B0=D1=81=D1=82?= =?UTF-8?q?=D1=80=D1=83=D0=BA=D1=82=D1=83=D1=80=D1=8B=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20Kafka?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + docker-compose.yml | 73 ++++++++++++++++++++- gateway/api_v1/rest/__init__.py | 3 +- gateway/api_v1/rest/tasks/views.py | 26 +++++++- gateway/core/config.py | 13 ++++ gateway/core/logger.py | 10 +++ gateway/infrastructure/kafka/entry.py | 33 ++++++++++ gateway/infrastructure/kafka/producer.py | 9 +++ gateway/main.py | 2 + gateway/poetry.lock | 79 ++++++++++++++++++++++- gateway/pyproject.toml | 3 +- gateway/static/swagger-custom.png | Bin 231503 -> 285628 bytes tasks/api_v1/rest/tasks/dependencies.py | 8 ++- tasks/core/config.py | 15 ++++- tasks/core/logger.py | 28 ++++++++ tasks/infrastructure/database/uow.py | 5 -- tasks/poetry.lock | 67 ++++++++++++++++++- tasks/pyproject.toml | 1 + tasks/worker.py | 62 ++++++++++++++++++ 19 files changed, 422 insertions(+), 16 deletions(-) create mode 100644 gateway/infrastructure/kafka/entry.py create mode 100644 gateway/infrastructure/kafka/producer.py create mode 100644 tasks/worker.py diff --git a/README.md b/README.md index 8126bd8..aeb42ec 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ - **Loki** - система логирования - **Grafana** - система мониторинга - **Promtail** - инструмент для сбора логов +- **Kafka** - система обмена сообщениями ## 🚀 Запуск проекта diff --git a/docker-compose.yml b/docker-compose.yml index 5456356..e05cb2e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,6 +7,8 @@ services: - ./gateway/.env ports: - "${GATEWAY_PORT}:${GATEWAY_PORT}" + networks: + - appnet entrypoint: ["sh", "-c"] command: - | @@ -16,6 +18,8 @@ services: depends_on: loki: condition: service_started + kafka: + condition: service_healthy tasks_app: build: @@ -38,6 +42,35 @@ services: condition: service_healthy loki: condition: service_started + kafka: + condition: service_healthy + networks: + - appnet + + tasks_app_worker: + build: + context: tasks/ + container_name: tasks_app_worker + env_file: + - ./tasks/.env + environment: + SERVICE_NAME: tasks_app + KAFKA_BOOTSTRAP: kafka:9092 + KAFKA_GROUP_ID: tasks_app_group + entrypoint: ["sh", "-c"] + command: + - | + python worker.py + depends_on: + db_tasks_app: + condition: service_healthy + kafka: + condition: service_healthy + networks: + - appnet + deploy: + restart_policy: + condition: on-failure db_tasks_app: image: postgres:17 @@ -52,16 +85,46 @@ services: - "${TASKS_DB_PORT}" volumes: - db_tasks_app:/var/lib/postgresql/data + networks: + - appnet healthcheck: test: ["CMD-SHELL", "pg_isready -U ${TASKS_DB_USER}"] interval: 5s timeout: 5s retries: 5 - + + kafka: + image: bitnami/kafka:latest + container_name: kafka + environment: + KAFKA_BROKER_ID: 1 + KAFKA_CFG_NODE_ID: 1 + KAFKA_CFG_PROCESS_ROLES: "controller,broker" + KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: "1@kafka:9093" + KAFKA_CFG_LISTENERS: "CONTROLLER://:9093,PLAINTEXT://:9092" + KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT" + KAFKA_CFG_ADVERTISED_LISTENERS: "PLAINTEXT://kafka:9092" + KAFKA_CFG_CONTROLLER_LISTENER_NAMES: "CONTROLLER" + KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" + KAFKA_CFG_INTER_BROKER_LISTENER_NAME: "PLAINTEXT" + ports: + - "9092:9092" + - "9093:9093" + healthcheck: + test: ["CMD", "bash", "-c", "kafka-topics.sh --list --bootstrap-server localhost:9092"] + interval: 10s + timeout: 5s + retries: 6 + start_period: 20s + networks: + - appnet + loki: image: grafana/loki:latest ports: - "${LOKI_PORT}" + networks: + - appnet volumes: - ./loki-config.yaml:/etc/loki/local-config.yaml - loki_data:/loki @@ -73,6 +136,8 @@ services: promtail: image: grafana/promtail:latest + networks: + - appnet volumes: - ./promtail-config.yaml:/etc/promtail/config.yaml - /var/run/docker.sock:/var/run/docker.sock @@ -87,6 +152,8 @@ services: grafana: image: grafana/grafana:latest + networks: + - appnet ports: - "${GRAFANA_PORT}:3000" volumes: @@ -96,6 +163,10 @@ services: - GF_SECURITY_ADMIN_PASSWORD=admin - GF_USERS_ALLOW_SIGN_UP=false +networks: + appnet: + driver: bridge + volumes: db_tasks_app: loki_data: diff --git a/gateway/api_v1/rest/__init__.py b/gateway/api_v1/rest/__init__.py index 7453f5e..14ed4a1 100644 --- a/gateway/api_v1/rest/__init__.py +++ b/gateway/api_v1/rest/__init__.py @@ -2,13 +2,14 @@ from .tasks.views import router as tasks_router from .tasks.views import router_list as tasks_list_router - +from .tasks.views import router_worker as tasks_worker_router router = APIRouter() router.include_router(router=tasks_router, prefix='/task') router.include_router(router=tasks_list_router, prefix='/tasks') +router.include_router(router=tasks_worker_router, prefix='/task') diff --git a/gateway/api_v1/rest/tasks/views.py b/gateway/api_v1/rest/tasks/views.py index 9a8fdb2..1635020 100644 --- a/gateway/api_v1/rest/tasks/views.py +++ b/gateway/api_v1/rest/tasks/views.py @@ -9,9 +9,16 @@ TaskFilters ) from infrastructure.tasks_facade import task_facade +from infrastructure.kafka.producer import producer +from core.config import settings +import logging.config +from core.logger import logger_config -router, router_list = APIRouter(tags=['Tasks']), APIRouter(tags=['Tasks']) +logging.config.dictConfig(logger_config) +kafka_logger = logging.getLogger('kafka_logger') + +router, router_list, router_worker = APIRouter(tags=['Tasks']), APIRouter(tags=['Tasks']), APIRouter(tags=['Task Worker Events']) @router.get('/{task_id}/', response_model=SchemaTask, status_code=status.HTTP_200_OK) @@ -31,7 +38,6 @@ async def get_task(task_id: Annotated[str, Path]): """ return await task_facade.get_task(task_id=task_id) - @router.post('/create', response_model=SchemaTask, status_code=status.HTTP_201_CREATED) async def create_task(task: TaskCreate): """Создает новую задачу. @@ -168,4 +174,18 @@ async def get_list_tasks( limit=filters.limit, column_search=filters.column_search, input_search=filters.input_search, - ) \ No newline at end of file + ) + +@router_worker.post('/create_event', status_code=status.HTTP_201_CREATED) +async def send_task_creation_event(task: TaskCreate): + event = { + 'event': 'TaskCreation', + 'task': task.model_dump() + } + try: + await producer.send_and_wait(topic=settings.kafka.TOPIC, value=event) + kafka_logger.info('Сообщение успешно отправлено в topic task_events') + except Exception as e: + kafka_logger.exception('Ошибка отправки сообщения в topic task_events', exc_info=e) + raise HTTPException(status_code=503, detail=f'Ошибка отправки сообщения в topic task_events: {e}') + return {'status': 'published'} diff --git a/gateway/core/config.py b/gateway/core/config.py index e27352b..5ce1376 100644 --- a/gateway/core/config.py +++ b/gateway/core/config.py @@ -25,6 +25,16 @@ class ConfigurationCORS(BaseModel): 'Authorization', 'Access-Control-Allow-Origin', ] + + +class ConfigurationKafka(BaseModel): + ######################### + # KAFKA # + ######################### + BOOTSTRAP: str = os.getenv('KAFKA_BOOTSTRAP', 'kafka:9092') + CLIENT_ID: str = os.getenv('KAFKA_CLIENT_ID', 'gateway_app') + TOPIC: str = os.getenv('KAFKA_TOPIC', 'task_events') + GROUP_ID: str = os.getenv('KAFKA_GROUP_ID', 'gateway_app_group') class Setting(BaseSettings): # FASTAPI @@ -36,5 +46,8 @@ class Setting(BaseSettings): # CORS cors: ConfigurationCORS = ConfigurationCORS() + + # KAFKA + kafka: ConfigurationKafka = ConfigurationKafka() settings = Setting() \ No newline at end of file diff --git a/gateway/core/logger.py b/gateway/core/logger.py index 5eb518b..1b6f971 100644 --- a/gateway/core/logger.py +++ b/gateway/core/logger.py @@ -54,6 +54,10 @@ def format(self, record): '()': 'core.logger.ServiceNameFilter', 'service_name': 'gateway_microservice_httpx' }, + 'kafka': { + '()': 'core.logger.ServiceNameFilter', + 'service_name': 'gateway_microservice_kafka' + }, }, 'handlers': { 'console': { @@ -91,5 +95,11 @@ def format(self, record): 'propagate': False, 'filters': ['httpx'], }, + 'kafka_logger': { + 'handlers': ['console'], + 'level': 'INFO', + 'propagate': False, + 'filters': ['kafka'], + }, }, } \ No newline at end of file diff --git a/gateway/infrastructure/kafka/entry.py b/gateway/infrastructure/kafka/entry.py new file mode 100644 index 0000000..1b076a1 --- /dev/null +++ b/gateway/infrastructure/kafka/entry.py @@ -0,0 +1,33 @@ +import asyncio +from fastapi import FastAPI +from typing import AsyncGenerator +from contextlib import asynccontextmanager +from infrastructure.kafka.producer import producer + +STARTUP_RETRIES = 3 +RETRY_BACKOFF = 1.0 + +async def _start_producer_with_retries(): + last_exc = None + for i in range(1, STARTUP_RETRIES + 1): + try: + await producer.start() + return + except Exception as exc: + last_exc = exc + await asyncio.sleep(RETRY_BACKOFF * i) + raise last_exc + +@asynccontextmanager +async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]: + # startup + await _start_producer_with_retries() + app.state.kafka_producer_available = True + try: + yield + finally: + # shutdown + try: + await producer.stop() + except Exception: + pass \ No newline at end of file diff --git a/gateway/infrastructure/kafka/producer.py b/gateway/infrastructure/kafka/producer.py new file mode 100644 index 0000000..effd7f2 --- /dev/null +++ b/gateway/infrastructure/kafka/producer.py @@ -0,0 +1,9 @@ +import json +from aiokafka import AIOKafkaProducer +from core.config import settings + +producer = AIOKafkaProducer( + bootstrap_servers=settings.kafka.BOOTSTRAP, + client_id=settings.kafka.CLIENT_ID, + value_serializer=lambda v: json.dumps(v).encode('utf-8'), +) \ No newline at end of file diff --git a/gateway/main.py b/gateway/main.py index 3cf58a5..40d2c9d 100644 --- a/gateway/main.py +++ b/gateway/main.py @@ -6,6 +6,7 @@ from fastapi.openapi.docs import get_swagger_ui_html from core.config import settings from api_v1.rest import router as router_v1 +from infrastructure.kafka.entry import lifespan import logging.config from core.logger import logger_config @@ -18,6 +19,7 @@ version='1.0.0', # docs_url=None, # redoc_url=None, + lifespan=lifespan, ) app.mount('/static', StaticFiles(directory='static'), name='static') diff --git a/gateway/poetry.lock b/gateway/poetry.lock index 5f26799..3b31a00 100644 --- a/gateway/poetry.lock +++ b/gateway/poetry.lock @@ -1,5 +1,58 @@ # This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand. +[[package]] +name = "aiokafka" +version = "0.12.0" +description = "Kafka integration with asyncio" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiokafka-0.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da8938eac2153ca767ac0144283b3df7e74bb4c0abc0c9a722f3ae63cfbf3a42"}, + {file = "aiokafka-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a5c827c8883cfe64bc49100de82862225714e1853432df69aba99f135969bb1b"}, + {file = "aiokafka-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea5710f7707ed12a7f8661ab38dfa80f5253a405de5ba228f457cc30404eb51"}, + {file = "aiokafka-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d87b1a45c57bbb1c17d1900a74739eada27e4f4a0b0932ab3c5a8cbae8bbfe1e"}, + {file = "aiokafka-0.12.0-cp310-cp310-win32.whl", hash = "sha256:1158e630664d9abc74d8a7673bc70dc10737ff758e1457bebc1c05890f29ce2c"}, + {file = "aiokafka-0.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:06f5889acf8e1a81d6e14adf035acb29afd1f5836447fa8fa23d3cbe8f7e8608"}, + {file = "aiokafka-0.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ddc5308c43d48af883667e2f950a0a9739ce2c9bfe69a0b55dc234f58b1b42d6"}, + {file = "aiokafka-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff63689cafcd6dd642a15de75b7ae121071d6162cccba16d091bcb28b3886307"}, + {file = "aiokafka-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24633931e05a9dc80555a2f845572b6845d2dcb1af12de27837b8602b1b8bc74"}, + {file = "aiokafka-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42b2436c7c69384d210e9169fbfe339d9f49dbdcfddd8d51c79b9877de545e33"}, + {file = "aiokafka-0.12.0-cp311-cp311-win32.whl", hash = "sha256:90511a2c4cf5f343fc2190575041fbc70171654ab0dae64b3bbabd012613bfa7"}, + {file = "aiokafka-0.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:04c8ad27d04d6c53a1859687015a5f4e58b1eb221e8a7342d6c6b04430def53e"}, + {file = "aiokafka-0.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b01947553ff1120fa1cb1a05f2c3e5aa47a5378c720bafd09e6630ba18af02aa"}, + {file = "aiokafka-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e3c8ec1c0606fa645462c7353dc3e4119cade20c4656efa2031682ffaad361c0"}, + {file = "aiokafka-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:577c1c48b240e9eba57b3d2d806fb3d023a575334fc3953f063179170cc8964f"}, + {file = "aiokafka-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b815b2e5fed9912f1231be6196547a367b9eb3380b487ff5942f0c73a3fb5c"}, + {file = "aiokafka-0.12.0-cp312-cp312-win32.whl", hash = "sha256:5a907abcdf02430df0829ac80f25b8bb849630300fa01365c76e0ae49306f512"}, + {file = "aiokafka-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:fdbd69ec70eea4a8dfaa5c35ff4852e90e1277fcc426b9380f0b499b77f13b16"}, + {file = "aiokafka-0.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f9e8ab97b935ca681a5f28cf22cf2b5112be86728876b3ec07e4ed5fc6c21f2d"}, + {file = "aiokafka-0.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ed991c120fe19fd9439f564201dd746c4839700ef270dd4c3ee6d4895f64fe83"}, + {file = "aiokafka-0.12.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c01abf9787b1c3f3af779ad8e76d5b74903f590593bc26f33ed48750503e7f7"}, + {file = "aiokafka-0.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08c84b3894d97fd02fcc8886f394000d0f5ce771fab5c498ea2b0dd2f6b46d5b"}, + {file = "aiokafka-0.12.0-cp313-cp313-win32.whl", hash = "sha256:63875fed922c8c7cf470d9b2a82e1b76b4a1baf2ae62e07486cf516fd09ff8f2"}, + {file = "aiokafka-0.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:bdc0a83eb386d2384325d6571f8ef65b4cfa205f8d1c16d7863e8d10cacd995a"}, + {file = "aiokafka-0.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a9590554fae68ec80099beae5366f2494130535a1a3db0c4fa5ccb08f37f6e46"}, + {file = "aiokafka-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c77f5953ff4b25c889aef26df1f28df66c58db7abb7f34ecbe48502e9a6d273"}, + {file = "aiokafka-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f96d7fd8fdb5f439f7e7860fd8ec37870265d0578475e82049bce60ab07ca045"}, + {file = "aiokafka-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8ddff02b1e981083dff6d1a80d4502e0e83e0e480faf1f881766ca6f23e8d22"}, + {file = "aiokafka-0.12.0-cp39-cp39-win32.whl", hash = "sha256:4aab2767dcc8923626d8d60c314f9ba633563249cff71750db5d70b6ec813da2"}, + {file = "aiokafka-0.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:7a57fda053acd1b88c87803ad0381a1d2a29d36ec561550d11ce9154972b8e23"}, + {file = "aiokafka-0.12.0.tar.gz", hash = "sha256:62423895b866f95b5ed8d88335295a37cc5403af64cb7cb0e234f88adc2dff94"}, +] + +[package.dependencies] +async-timeout = "*" +packaging = "*" +typing-extensions = ">=4.10.0" + +[package.extras] +all = ["cramjam (>=2.8.0)", "gssapi"] +gssapi = ["gssapi"] +lz4 = ["cramjam (>=2.8.0)"] +snappy = ["cramjam"] +zstd = ["cramjam"] + [[package]] name = "annotated-types" version = "0.7.0" @@ -31,6 +84,18 @@ sniffio = ">=1.1" [package.extras] trio = ["trio (>=0.26.1)"] +[[package]] +name = "async-timeout" +version = "5.0.1" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, + {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, +] + [[package]] name = "click" version = "8.2.1" @@ -164,6 +229,18 @@ files = [ [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] +[[package]] +name = "packaging" +version = "25.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, +] + [[package]] name = "pydantic" version = "2.11.7" @@ -737,4 +814,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = ">=3.13" -content-hash = "4171e4dd667f9f92551ecd415982ffc2dd873250383ef093f63469bb65c6f73b" +content-hash = "ee7111da074ba5f0900479930ae235d8b4f28198f0c17aee43b60e42dc097487" diff --git a/gateway/pyproject.toml b/gateway/pyproject.toml index 91c15bf..3846c95 100644 --- a/gateway/pyproject.toml +++ b/gateway/pyproject.toml @@ -11,7 +11,8 @@ requires-python = ">=3.13" dependencies = [ "fastapi (>=0.116.1,<0.117.0)", "uvicorn[standard] (>=0.35.0,<0.36.0)", - "pydantic-settings (>=2.10.1,<3.0.0)" + "pydantic-settings (>=2.10.1,<3.0.0)", + "aiokafka (>=0.12.0,<0.13.0)" ] diff --git a/gateway/static/swagger-custom.png b/gateway/static/swagger-custom.png index c56eb41e811911568c8e8068ab630e4a24492048..4050f1578fc160622e3b132df7fc77874032516a 100644 GIT binary patch literal 285628 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%0A(69mfp>@b)K&R#;v12qIrsPVDi+bps1 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

|QgD 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 literal 231503 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�jZL<#?Z1v`J}@6D zoZDZePyghrqEfZn{{A0Z4RE3zW*-QJ4YKazpCNm1zJb-hPpqG5h!T@c4HINsKIh=3 zSJLaY+Kgq&*DDg)*vD4AsT$H%z_dX8%IBNr_jtR&e_c2h#BTZcNCok4mwe*fSvQ2J zb=|cl;9UZ)u%f$)f zbzQnM#Z5R`W@=`oF-prV4O#(*dsP+vG!YIR^CbSJ#{lZptFb=&)Ar8fYoIUQH|A8o zVY|yGm=IP=1pD};j+9`Y?_dO`;nQ;s1{wIMH`R;q<+#yGtc4WqW24u-)vPeU=IyBvHZSh3G<{8;gnT>Sa!i%8JGt6eR4=csBrh!6a z^F=_8p>3IQy>s-Nb2d{miDi;U)*Vjwya9KSNd!=FiWSJ*4%lz}7P&liC~yC*uu;gm z+{-1|OxAHHr59#z=h@z*Cy3icT2aj30T0YE_rag-EQtqBE)1jqZi2minqY*aQKd1r z7c{N)W)&-0UzAncGZye)_13JOVtRhChSS7*Zl>0PUZ9!BTWb$b0TAswDJ+Xh=z;Vu zw1b{PJVb-r7Z8|D#gruQ@#5?+WrB-=_k3=k9U90f1P2an)MDeh0Pac+nJ-%8WJFHy_2EqbUa9 zc4Yiklrz8TODAD0$Nlr8Lm)lQd2(rm?>jq1t z0(EY8%m`Kn$e8e!?PG3QW^^YZ6o?croy{l zdaMo5chIepceC6PwD_qLGW=khfZOK2Tji^x+56oEW;d$?cK!!@?-|zQw(XBDE21JO zBGM5BM4EKzASfzLq)L@8U4rxy0R^NZ0@4Kpq=w!hD$+~nH4u?d0|_-Dfh6~3pS}L~ zth4voOYVpJ{~{lFc!2lKoO86_D07TQEeAjSr#<_siMj5n{c^T%@#SB?+V=s?fv_%q z8Hz8D2Kq$~Z)V8Mw-yKkaP11@pWUnQckMg%dBIZag${%Vp&HziGnPO=E&^!a)6zs- zJl8Lr`*gb|FMKmSKxwQ2&88j;%t)2@=s<-?gf)5eJsP~7FHTiv|4dp`v==Qch)9i{ zlc2a8GPMLSlb$Mi*riO=9zG;Fditd;(IsyN^0cxPzKPKCF64liG~eaY^qGhr6pLh* zmK^^O#iZBs{lr&I+n>?t8t-`_^`nysNqu;SUYS`B#0lCPH6Yzu)C+i#$mFz(oJ&UA zaocf!HsPO7f!2`AXo|**H^YiEdp2_@CeFg7#z$rM9|0Z0kSTg61|ezzBhBPtH5vjl zZJ39lIS_D@Y{9g#D376hc?mx9mHksqa}Ming}bL|m1nD5qnb9>Zb~PR9?zloS;ep6 zR{KY=vO=zqe>5P|(5Tq&x1DBsHOeNj9CM}nJx@H!c*fiDK-T$Yz(`#eHk69dK(HH^ zbsP4iNCaRFd8OGru!s)=1gY(DrZ~&tTLf|#IBeKfUkF@iu?ZtRz9u3v-0wE8ej?Yq z2U`II{jIuHW2WT90-j9_d$%wF4P|N!8{N<*o-v6jVyG^Vb_sz>yV}qwBC+EkBo$pV zJ)49?Dr*<)YfS4l`|#s2&641bCd-K<^=7!^aq^KG&C?TgIUzW=U{{G<2CKs48lK0X ze}VVw)hwi4dUsPw2meM=N5@px99}B-AQlgaqpeE(|E33%c?;bnbaHt z&c&xmkE$7~54|k!(+oA?m9&dM5BwHm5I*Wj>+5&%y;F&N1YHtlJI(&H)TCq{$Euwz zw$ojfN=Hs~M-S({`ju=vjwr59l}2-G&tT7KFO1pEhIeTo06k+X;Notb4>8YK1UZl? z(r4~A1N1=M*j5umG2|6i5BCGHJ=*(d0Xp?J$iCFEE^-S|Igy;O9VxmYxt6uW$x+cH zVtkg?)LnCH@(!aS@-Wl+I+UWGcM!II*z%}c_oo$bn|*7O0#bi%F0n+ald75Q&;fAO zSfJq>UjX~8OESKK0$~lN?D2JX2X~VG410OVGN!>dlBGxxCMVe&(DAYnh-QLD0qI}p z9(7Duqe7A6Cgs8Fr-8DNf3&77Qi?e6zqwYKhVK$h-tMWzPW7w)voTkH={_qU28uY9 zjv0QSY2f=}=Q$a;>pyg7>d6y>a`~At0!Zv+!ex~U2 z3AG*RW}jWNtvO#vUBXy36yv0{CiX;a&lkSjSe)lK_4&-&XLwz{T{@GBJ^f_4^?S9xonf|Wr(lmj z#Q^@H+3Po=ojF^F4m#oZysUzp-fF%2zQgJEB!Dfn<@S;M$;2LsWBvUr&Z7-E&%X@Y zG2R+k?V4($i%OqoWNz9ULampEcmQtULkXSb$W8xo_UzN%MBSv_ko&t$S=6$&N^kp_ zr`0wH473;Ar#5FaY6ER;5#EBU%~IQYMdH5eRGtq~YfRFvz41Bh);I2B_tSv3g_!?E z($^H6THxjHSL*tP3bH7L|I$Brh69zmbZ`*Wd$7X~Rt4j^QHXfUaN-D&bp)WZof~B5}Cek7=IL zw>YmOYF2Bs>nEBSGNYs^qTd0oe`E7LcD+2yX({v!`dB6v(O0-r=e8hFcO<*j6JyrB z#O1i=#8@@{tg3cpn{DUId_d7R-;VMlwNH8R@)V#O@O=faPBXATmElZ7CXcK@f@&mK<9-B20U^Pf@qw8~d6zbT${zfMxQj}JI^B2|v|FaA-Ix^YL-uTu z=QmCH0AM~eK68D@cfj^(&03bf0GFKfBXMVA%O%GB&LZrjHzd~_iBVsecY!9)t$Wmp zMS8m-_T5gIrUz@PdnqvEHe=M?8_w;@&FbWju1@)6=5%Owxs}%5efbfSR{IY3&xE^2 z1}+bJ14y7+*1A9)UXK(^-yAu9|YIdV36qVPw*V#yC8p-3__ zW*Amy&@Y}@q`=S5uM4z|yjN=v!Q7$haL8Q%TFbVCTGiv3wy{<8a9A4V)gej-JS3-6 z&k&YClIG5PTgkaNMKlh3a$B}>`5nqH3CIJIu$4_@=l)9B{j?tBPNhJXm;lgovkAL( z5?6_oHOSXcs^1A`>O;IeJ?q?9lF%vdhtYjn;bod(Ih6&@5m<9A!JF#$yTbz(p@7p) zB+MHVXVZaXehLa(GdkW(bUaF*t24~Lhqu@K)&^N7>Dn-pJgE|pB>qKch?u3?N5~UL zI=i7N_pHL#XwhpcyC||y)*K7hV*@iraYuo;JjUW-Ajx7iPZ)idn8=YZU#JRHlB6qP z{SmXW*>sPU)C_cE-h_lKNR@uQOJ(5#FEgxhnz6dYsPd3bM05Mfdhf)Bv1QDTh89M5 z{2wh9mqhZXa~J71WYTc&-lYMJbW6pu7DgAJ=BF;{!1O*wl^Bn@aIUm^ujj}ng?LIh z?x_fi2;UH|Dby*_nm)Zo-O(Uw)!23NtAvX&cb2*Nlj)Q84x@IDe;g3f4WJ$g#ZN2m zzPoU;dcJThws6!w!Qm53@9IX(lG!_UohQiZ3anJqrsD zVddPTFw>ehge!vhp2}zf;?+<&mXd1yYY!TmEW_UPkM4PeR8r=I@NK)(=SodOnyn$ z3|kL#1MgpCS9tZuvEwJt(ER-miR#A`k=EPI^(bM=rVWhk&nX9iu2iSBx~TbAE^P7o z`M>@u;NxNi*~8K>StA`MO?`Lqd!q?U)|oy7AFq`Uav8PJw^V8B=<4nYQO2nL^7_uu zJm3c2*{|yIYy0^>dlo(()LC=v7f<2OrwUG;jMI*1IMSXKUcF+kkUiof3iiOUk64}l z1q%JSwnK8VhdELo@sU_V1sX}Qp>bI-=UsCWJPW-72e#431aN1@jQcY)3ek^M@e4=S{r?YosPpCY*TG+D0vDD)_Sfc>)%&bU%zBhnNKgh zQglN80(a7Lc`KUFgd+rjbM_ zz5Uyd`fuxcHc3YVd>~Ms?oDZ76n>OPKdJx=_I)n_1}P%_s5y^zkot!QY3958X0M|% zCdtpO(iRq;WO|@77%)0ITE1d4ec8#y?sI8rl!+(VM@L7eO2_|3i>4I%RW|JZ;{jKl z0WMMXO!kb9U7dci(3o`Ykn3!L!F&wEKbtCJ_^14%#5&r)B4i7m@2fN`(%^GQA+l_L z!BGDx#kcGo2$d&3X7>DUI{795G#FKmPn^abWa};00Mm6Szh#`~kPsJd|MZsj=cvAE z7`06k+xB8#biLb>vaYWCc@`;-kn=38N}*ISx_VD}??bBW-%797c`x>^Y>uTu+N%mM z-$#03zS`WjV<{{rC@ypt3kf&QmYH9-NH1q<`#f0mQs!yVST2LIv%P(|gejP3TPA+K znJ3xS#|5O8D$aR}_m<^Gtho@McWEyyJV!5_N*pfpPP@SW&wSrsMCsqkUEnO|23&-? zLnsu(5V3m2#-%vVqy7&0XR5_8zuah}^T}5V{AeTUsbHH|nXZ zFR>pf;pQ&CkIxhitwVp{ZCo}1QtOn;L(BW5tWUz;?A&}#LqpAv*eXTjjWGXRh~UjT`l{B@0OEY7B`o}FaA>uT zH8g%WN3i*YU(-JNdlRAbGIp9gF!3UXzfpMP>aR=v$JFDR^4@05;2pX0&(7u^dAfQg zyaFvhv1_|H>I37d*Kz5QaP?(YR)H|%<8{W0$dC}io$ZlUi?2a=PQ5k1?ZJ+8+C%b6 zJR|ID&j)R5ERPlRlyI|1JI~+wG2KyB+HH~#j5FEqpLSijCy(A}DJ&|g%)d?VQ!4G; zD97r(hlWqhH1Ext&tJ#4Ehzo^+4D&T-gxZ?kMmUljMQ4TL$RcQ0C6E*$g6Y1(Yrko z_cILR$203i%yoQv)w`=XwThRLBZ-Drp9UXCfr*rMhGu=YUrF(t*o@em6!fc}`DkVu z;L#+Pg=aHsY}ccExLn)P(xR)r*%RMxcDYAT{*y^)|LHi}zLbmf2gui-_csLTr_|pU zd@e4I#IO=_47?M>ro}YeK}kZ%CaX0Gos{aGgW#9m`3;b zaBFapm~dcB`(+cS?_qTF^O<{)t8yS6Wo>P>bYY$hpVh1nLjHz>LYD2tS3+5n+4|Kr zOi6=pDXy?oPOUn0IQ#lt*Xxc{m)qTS-&|yZv`3AbU91!#KacRo!uP*S_(f>eIG}-1 zccspX#xK8ivB;?kZ`NKoP%IYlX!UToK?iQ$U#!E-8l9`*OlU;6m^s#uUeMCkPF)w_ zwImLl@ceEWGpqfw_tmiz^GIz0-l@{SUpH+xGZm(3woWrSF)W!8I(}>zIhuRcW{{?v-4%$b({q%IP$(^|La@%DD&3)SDeOwojuOHG&|&v zc=g(@*Rd|q3yCPi9P->EEW(nS{ODl2zN3=(I!+pC_%jMPf==KFGWM{q_wbx}Zu(kN z>_(1e%wUeblSx8j3mH=TT^5YDEQJ%Y8yciEq)~-qx|?78Yun7w1SL}w)Hhe|bT*~X z=;y$HlZM$!qoJ~Rg~R`zSoxY8)QKbSj_vJ>#MERI&g_<&%?j4wk^SqdM*3->Ezj&y zXLD2`e0R~vk=_?=a%VaHKa4RA&^)8&@&;0%K(i#DqbW ze_wTb+gRp=PV4Z79BisB114ys`W&OsF^ z21^#<&1;e7nf2RF@cLQqYl&S;_FgYJ_a>+l(sY2?>(iBYnkiX!7nY;kC~fXPT|PF2 zvJL7gQn9wy9VESBlsd~nzlvyZ?kSO@BNInmYD;hV_z&W_+un0rTd4`YA88;o_SCc0 zz#)CtB1&vLLNPd`YCZc1hJL3^;nH2Xl?h^YR+e1jP;}<3tcE0NJh|AyI!RAsQF1qw zqWuJp#3OBbwO%#Sn&k$txyt;YPWNQXZwSBn1h4&)abbB{i>*%*Qs-Id8~W}lA}1^5 z!zwl9D<0!CMyu2Kn!bh@DXXimK*g6eXz(AEG&)aajiW~VXS|4XoAAmQ&q9}JjfXVe z+x&72sZRAK#dSYF)bw@#M||=Z%&CxkYAPhwlLR+)-LlhHzIX3lt)4xA_e9#k+~|5# z`&0dAw-o83JyPnkMp zhpq9`M$Xm#e&*x;*)<;Z+0B3l!YcLB>)^-tZRuTA>!I)C^A!=A{61^|W)SzY@^i-o zi*R$stgq1!|1BT=Tm2Gv`M8r(XQTguk?YQ8de1ozo8%jjerSf!HkMk`)OCSKI74;D z%JnegZ`EmvNEOxwUi98JIl-WOyRR*%(`~6g+6^XiYZa9mBaAtST=%_j_4e%+Qq=YE z)1JV3HT3o^xR#q{^5v!j=8lWu;Jcx9BOLSl!-XScmS68Je&zm@#%Y2p3UIw| zyp77Vq0rUU?RYBRtZ`M6#k|(%97oa*UKJYrj3**GLU2#(ZNe1^Y8ELOx8s|2R~u*B zlfSHI*Wq!{r|^l@!W?#xYVDza2FHyX{aml*s?u>^@!eV0{aKcy5d)y&rp*~D4(@oT zhDq`AaXCa+YHiN91H9XO;68~NCb#{dH(8`Hr<8O0!rs^*!;<7i=@ZEEYE0hoU~EPWTXJk4-0X|qofIY+m<+4 zXu8EqT;r@?Yl7>XW=w<@Z^;#CJ$lX{U?3K)X&>_L5d4RAUsRS`Kw^|lX1)dSj*bb? zhqAgpiZnLQ4O;h{4N#If_>q2Udgx@_w8riAX3w7qNu+ctZcVTCw&#wHj?=j&_;Y3i zLqE_yY+*DBut1gTwm&1xX1V(%=Q}TG3Ywa~8FWRK+ty0EO1hL^dehKwYP0=y(tIvG znSty*huQo}F{~OHrncM&SooqB1C7XMEJxs7nLs;?dcPG%2Xd6Z;M{quylD`f^q$B8-++-o3^IhRh(_R z=Z@qYGPCW+*H)?3?5JNyn(PW6qk!lDQ*2Ee`gELXl>BlmttDXCt4+j>GNe5{(tH=S z03Xu~aB*q8$BG$}<3nR^O-K~*UDdW>HNfFxpb=kSgsYfDI{Got-Yybv0 z2=zZDWE! z)AYw1V$;}x=f+tYwfLY1v1=(0|G=+Hm_;Xb;`|cRgIp6b0&^en~CMawjL1|udCcsS9crmnQfBXjDgCt){^lA zK$Q7J`Ft7Ow~Xa}9a;cqv2qd^TH=*(JvLaKr6J6S2srtiYVAlq6$dOu@_N7I_UFX8Q_zmcr~DUW zL9QEh0OoRgvW?3Dp!!#m6EAHNQk%~Y-axkXn7q#P%-LiqH$BH zJZq#{JW{-iNz^%q=rBAYwRU1lySyWV;=A2Eblm(o z?uU{_q}Ui^t=F?f`$HVq;2`i82)SkGXV%2Nj*TCFTU1zh?!x*b8p-5k7fm=DxB*{# zYRRzx?$MY&uiCgi{-iepo0gV$uzcM!AJnV9G1mrod6aL)qM&Ki(<3E8csAt3f+r03dF`w#y3sZ+rZ=2NEcJ7+g9wc=m(rs&;@3` z^BGA;(IBrB7yxb8^XmE8U-t?Q0|)-<0CgbEuCODV2jIeeJP%k8YX#9$M>~-gF7`0^ z_-x%0=f6F%|LtXuPXh!HW={z^+KHF}(R;Lm3w-<1uSZJ&THOo=2*5z2uJ|{BmA{hp zBZTq{2d-KI?M?X?7x(X${9X|t!1=JeBQ24AU>u94E!yCru6Sy1EC%GyU- zBF(Y`KyCl^C|}c~F_$$Bjk3UrY@VZ-o0DgLi`&2O%x`h~pQ_=vxc#f({}#9Zsn-0} zpCtn+w7qYY{_8VdN77z_a(rd8r&D)V^XZk*qmYiiquh2rv!iEAM~GJgCNVIk z?2E7)$Ck<-iR|XO{cU z?w3JDJ?}9Zo<}4Ecw z>$NA}ZJ!n>pXRTA47tEj`#Lrini||06&1yH`knlNvs%BB0L}d?$^yIS>LWzxPM+a= z7-*bPr@L`SlD1x$k{x(4Z+3++u!ZzgRJ@U+fM8cDf3uz-@R4Z&aAsj=NBgimwdFb? zH%5?nWE$lSiO_dOL0x@a^Nu$qy`2@2LoR02MqN zMvGhib#Bc8-*27GKu7A=G4Yz(i#zjq)S7brA+aLI4zv7T168ln4x4D{A)no$CaaD|7K zqxiG?I=bUl$GaZV)Z@7+*(Jy~W_(m$)X-DJG3Asmh$4G=I;nPdH-CQ1+8k?IeGvVT zG*L#lYCJrV?D>iMXzIw6|F(mc^?~Jm_g;t3k)x+aI(&NkV=1reOJqhHKb`aw1}*9! z7h8Q##hq*EMP5b%On64pjROR_1lo$HyaxLWiH7#ECYDUwSf$f|6lD{RB;q}V3YYE& z_!&CsSZOHE`V2%~)iXgb-|v4P-_YHC;}snEco(mBQ%?@iC1q!lo!rIxYXJWfv+qp~ z$0AJ2jEl#h0%J@~pCu;hDUQPY$BtXmdAaJTH;F;T_10@|``!Y%tE;1Rkl|}@JAtuG zU*c&%i!uN^q{&j%3;8mF{QXU2#65MepI0=`XJSN=96p6dV)8_%K%@?mI}aBFuzLCW z7alDWll{4Z&V)(rINn?D*g;#7lVrZp&~uH9P}U< zHHQQ+wV7%+!eTJHq0Xhhd-7OgWQx)Ak5WfFS2oH(sG8jc4oua-r_aC)@uEV9>_;^9 zBaKc>%FbZ~0^u{gvcReQ^nZce|G{ehxXv*k6_zG@vA#iyR=E_!0aC%#@<^&mZQI$~ zN4B?zJb(TmsI!lo10ipl;FwAqS9zXvq>$FeMY`vd9OUsWTHw6(Z8eomnUytI8?&=5 z3grFUlr;SZ(nuz&weL>G$^%t+HbI^0$?PCvs3MZk0C>Eo1UvbUB=gE#6AhIgVOys-R9Mh090cECPT-K=h{Gz#D}Cxl|h0RCex-biy|YLB;d< zir>~#=_bb~8rl2PF1ILHFY0Uu>H+hA{CpVxqpP&9^@(zTax>Zz2*ccWJ*a=cZ zMygxq(#FyAR@dKRR5sP2$H7cEr+t&O+@>RM8LI_#ZZqDRH>=$5So2A(D0?>rI(xp* zIV_5z?@$01(#DK`nTtQdfUu4P6o5+JKfZr1D2M`zXFgw2M(-gMfjT?QfZLDH)LVi| ztgiq?f^2M4^<{p^N#ZQOtOX4gfuLZjSr%}JH6Wn$jdoF|t;lWPeNN!~wE@{c_tOGl zVuW#bmrFUnOcn*U%Rm`pz)Dc3$;83Jc@B9}fPDTn&pDQ>L;lC|IXn>q=YMtg0}_X; zLo@=b!-9d;fzzdKGp07Ypbeo}&Qq|y_g&+9b#^2H%)O{T`!1LW38c-*%M&jwa>y<$1h}~<8^AKt1=$>K zpw%ZN9hsdGisnT)P*srI#KdPN4m?+(l@j)=I)D%hu=sY*6=n3dJis|Po^q}E2@u55 zZ@D6I??0%Gzx=8BFe-{aMaki5o^zJN^H^W3DGv}E<28#&{nb+GKvMzWiG!e%agAkK zr{Wr4**t&%gccw>BoolzKkSVadDB8_7VECoe|zNZeu#CK*N-38=+cvkYO_uk*o1D4 z8Tb;Lq)z?4%qf`tgN0CsWFi9J6huDhp9P|u3c5ShYhM#{WqN(1?Z4i* z;}Iyq-EFRCJ?gj1u+~jmlz}K`3`uJH0@6k^x&F`xcGL22g=E_KOw0)g7c!X zsi6%O)oxrd@&4lbk%unOD*&kThAdS!qUm{y?{Gm%rQblw>w!(N7MC6y`}eudB!iNf z_cw^OZP$}C$1b&zm|tKE!CXPU82A$k#tMGXxFo$<#XCK^8xo#zfdfJ6K(xze`io+;pmiM* z7V&*GJw=T_imzMD1>wEj`QHF3fJg|NmoZRnQkPrkhzOuah#FGbK8Q2jaDFo_LYlx`?!Ya4XW?YyE)E)LcChyPYWcShb=X93g4^nv zF~I%objoNM!%I>D_%S!j!L$`l3Mvy@lmStDUuFGc+^Kyz|H<(j9@^Jy-L}Dybh;Dz z#=IE~dk!WH8BCQ2-KY+N8Q!(Dsn~2Mgng?TDkV4@u${oXkg*>iIA-Fqaxkib=4x;) zzY)}_I>qNL?@7jcZqB}c$kOfSM80m>=PtfnrfJJWZ%umk<6C8PBtg%7>AJ=pXsh;1 zm->}LulZ^+lD`}y5yRtfN6KZ3Q^&v%s6b+Cl4WhcCBn72@^6E&s{4!GZ2}oy$kJXm zdbn}1q>&lWCV6+}tt-(5oG8&@h;qK%NWw{MuO_wy0p4@1UNk#Mc$&cEMAvAmF)6T= z&kGIit`9)f+w}X%&nEBP?@g8!IV~W6^E4GJD{o1Y572?F7QOiQvSIM;csdn_W`M(8 zzkLUz1vL5#CX>-@5;I_2&n@WOfPS|(YMqZvtV542S?+ZX)`KJk0EPGQW*D5ID(}O= zPKnS;IZAq1ay*}dws6vleC}LG+~J)QFh;}zuZ4OkA0}gCTnt?*sNXjk6HN4=@wVrh zAQbgn@x8z(BYHu05gryEZkju%4Srs zW^a+vm2*Lz5eP%u;7-q3AE(|FN!csCnM}iZ8vWBr{FN-yq@m9RrA|B^`;7n{8k(OM zQ33@#^lxEBg2d~dx4erMACS~JkF9BfNky_C#+RsSDL3MTlIQnU+{{#R={iA2fBd@; zx7ko>3-_(kmY>BRw)&0Arx-0QGfzaL-*Wao{EM;rSCR66@Uc=6`5L)umc}Y^fO#XC z?hggpLBkYfQ{U7tc31u+6v1F6_-bNIxC=7~RBBv$4$$Kd&T=H(PbFY{=lk{po>p1j z{vFw;*G23qX+1R zryeKEn37;_lHUZ;q^Jq2?RC(C^`-@(if1xb8|7dlhSDoifJY$< z_HWIuBWzVpr4Iyb%;mR*2@|VL^}!U?Eikk(6u7YCI*bvB7=xaO=o<%r`O?c~oED2$ zZPRLN_*AM%`mvBPol1^%JhY@mr7g}~lB~UH86<Ku^3) z@@oA_1|R5SWkoN@yxh#nS};}xtWio(CrgglNMDRC*!!`lwZ@1ev4BBTSZ~%Nb6LWo z`t#@F@Q^p#7X6==EVt&#^l_AsYSMwcFYXxYz3LFx1JyS-PM&G@{8adPqAe(FVXEv| z{c5#^;7x4wxIhrQp1>{aEH7{$BAia^;z~2^Blb_T+kL|E$&-^-m6NfjNb@J8-4@eC zDxs4zuRA#g1B<B#RlTf%|6q)K|ZbVLS;t(I#Q*Id#?U>{Z0J1bq= z%(`NeYW42VN`Gg_=N&Ya$FT=>I!8Hq$|kZ`*zW~zOiC0wCUSZ3Lua~cy65~W+bGf+*&ez=>Y%MDMjv?XRYX; zyQ%%QCBNW-*`Tm*d*;^CNSFD{j-Pv`0KvH7B|@xN)5nKj5*ZfXI#rYt$PRMh&|&d^3YRkgqC{*+poHFG_=Yhld6Hx-dvgEnCC`+91`kzt-9YYDq%^3!+k-`Q6?(9~CbnlKbJfEwDg z5Y05NN|tDxSaHW*&yYM&M5YP&f0{&}kn!hmvKn*X>*BEk=#l+JVA!;&oi?rCeo%L6 zhYCVUPRY1djY6L6FBcOZv!cNhYct|_Iua zj;5*%Pu*`cIui@Qvdxsw1fB|;ojoW1R!>Mn43eyDXdza#>NfCr_H~SDoCiyTYN*Cc zZaRLujoYP@O}hoB#sXpgv1~rxJtbC@UJq+owy~QkuC8RU<1AIQ+BTecUiftiQfc9K zLdnLa#%iRiv`pCT({_&tWV*UYKRm?U!Pe@bo`*?Sp|<|eu>Czoi)!#LzHzG>KW~ba z{9y)qRiIVM8=uq->u91+J-dR#s2TZiXlT6F&f7>p1Izxd^(Ms2A z2FcnU*)nQ*(3_dW6zS}nQLr_U-lABaGhFROM@s;j1dU=qQgV#jO`1rttdy)4 z5aZQjr8vcAWM3AULVznPAylYd6MB6~55qpKqHFp0&R8v$nhJnPa!>P!oAG=mG6>+F zO@U=l`iv)B8!NxJ{H5MTgKRPz;1p>)A<#@6+l-S}6Qz+rWg^ng#!nR}wsL`bDVH8r zCOXMl!kKc=Y#eXiyg}!c?Y0nOl1!U%)D93er79a>5_Py5K9}!DNynWs#2=IHF(*z? z&goArJF9ck z>A3`jT&dWo0+g`El5GDC9=BLzB&Z_wa#jlqhd@Q2KgK58YFd%Ya)!vdbe;v!?St_Mbmfbvhu70v=#Z0)R747r1fuLJ}UMk@xQAz^M8^kXtKPfmxE3BF&KCJ777XRHzhiJ0bAvpVBHB6 zCB3O4GjN8zSGM|1L7jsEr@b$*=0~}-_?dBOobgvun$P23fJgL@zFvHJhSqX=pbFs)0igYGont$Sq@YM7w2+)(z7TeTuJ@o zgC3q&G;0dBZTM6K>yko0+KW9ER=BMG?cT1H*4_SHyIafEWz6K9%kBKYi_Al*+7X0)qWde zcVJnfSG}hs=W=&dd<@Fi$Ow!*cKfUSz%*!Fq z2yQQt=9z1SdE-nGgG~}M9d@I6IcWjW1&hoy_s3p*I*mx;OIc#Q2KZO=+IOc5`i2!bq)ZN%NZZ52oDL78zit{}##scE&ld@MN5OhNqfVAK>eb zC4(?>DxFlG(bXig=HaVt;fwk%&_&UB>b;Sb=G?oTJ_^zlzK_R_YcuoDNRcmVtMN-p zwo&R$<4-P~ba=*T_Y(;pV!Y%0;~H>g6$VkN0mR3PnttuWS;V>ET=V>ylJM^tETvIF zQ7C0{T~aYYy)UAyxFS=YFD)gG-`((~J2j=TOZmR*yU|bnKjaz*4u@P!K5O&!V#X@EyDiIC3e2DfXW^yVVRm8wTLOw0{ir!XHqIcpQzf|@ zK^m~LjxkAweeCWx(E^vS$}Y}L7d!VE)x?Xypjp}1=+FqOmQz1>m)PR!E6LFl`jDkB zA_A4S&QQ!ect%~krcQ;e1K#N)GB8g)vxaZ}!s;Tw>buJ4rv19{o&RI@8MKQ$cD4w@ z4Eo-M%~L+hvG4N7G8v+6RVzykYA^qlZvG0f3c7&)S_*ZM=e>?;{+8ULk0DwwpAdX# z=)<31(vjV;zJ<_P=<{52$e~t_E?^no>bmR3_(-EQFHiXSbrdgrDfMjly;R<-Q`@Wa zr}8RXqKhhAbb~tgKZLhaeCTc`S*xCm<8@fX4Y|qf_VVUBQMkMyM`$A6J*1W2kjZ_1 zH%ICtz&C<2V!gBC+nPGJPUE8+WnVRBk|EjE)I3$TZA04r1d@w#MYkLo6 zC}hNIyHAhv)m~>3wZBExyL4YK-6!ujVeQLmyWzdvEr(EV=QJKs2~C;hM(?{Zxz~2| zoTOBVr=vJMM?p`^{o?q{8V01I41zix#){twf6$1Gw$4d3VbKGWf+XyTJLr2j;v!4W6!=RwVgjX?TR7 zp?%5tqyi1O)`ANVMbnZB_!s!qOR6+-DZnsAYQ(CJ=ol;_-E&(1$&)A6b4?6eC`~h? zrBB=q+ok(m7dtZMWadKA&5y)C-0E-Gkv_PwGEg7-X}pmCoSOSCHNv|e?KJ$lT>_84E;cI{`O0JfA9DvFwRFvG*V`@IXa;cnymzh=)?e(G#zxE7v=`w9DepMS5t1Sv5ncOrDeu&P%&4u^cLvKj(OeSmUiz;9Q#z}a9YEKP|tW(1rGuX&}3?YGt^QEIg(hTAzw&vUuH`NvEkz7 z)sbg@>r)I{lO2#Zy9nHu>(=BJmC$Pak&Ug&>(*oP+Ud^aIvU8FEDC z=}58npELQjGy73rDoi6i6%e6Y z)Ez3eHo^mN3+R$DqcRRa8Hi!E8Y`P?yzTSxjArXEUlcQHx*fl7G3X@Yc~_-3D?NK1 zmSl^JKBZm~y`2gb+QKBcSD>UN4C;9KByP{my9w6!oyAQpWhG!cqFHYhsfU>+sg|~A zR`hw990p@dS#hz|tUXJw#9nNh(VdE`w%-mWH^Wz(m1<2v2R!ukp+@8{J{$c##pBxl zh5MD{x#7CC((aQFH4bo`8LpK!YGN?+PorbF0a`1V|Gp85#J+W$wjqF2K#@iR8d$2b zwGjW6(P1wr_qK1Ank1MKcY>4D%bOz7Z-d5Jn-}^oLLS=adHgUoY(h<`M#nLL$u{ed z0-6d|c>h<{_tgqRLqnWmVtvTVPt@kxFFzEXlrag~k{yfY-_sxZ-c@f+nal6>o}c3n)tz?eS`9j|3D01jMaQlGgJf$P;e3 zkmj`kCwf|`hJo40y$`l>qLmzeAE$yv)pm*to-dnX;h4vOH}93t^MnRpmP2wnm9`$O zn)JcGF$Qk#A{Aq6W>vT>zO6Ut?%`}Y$iC%i21eSI0yl52RJx-;3v>IB%`~Oxf+?S` zbe>X9=#8YA&siN0<{mc25U*m`w^9Y=1%^p`T^XhqB&_&XEs`eSr}j+ z8v##DAm##ekl~6B!^9+mIVXU(Si#GQW!q9{d~y1Nefhm-iaBUeK2?aMalPhkxns_Tz!P!0wpT%B+Jzm*=@kxPXF;@ z;MiJsdxNIShXE$;my&J+R6|X=(hf7k@%Nd~I2^*K-5vz?a0DWvv&jYW67DP3w^;XK z+Ai3^?heDKS)yAnF*#S_beiSy?&M@^^2QKs6-qvs{C{YB@3t=RCjjo~`@) zeg20eH*>F=aqz8G`|Aa zXD_q~hQVI#yBwyutUJz&nOX3`yieHH)11%XtR8Qo$`VTi4w8E^HwxT6X!n}tP#v>p zwju|G%PAD1WHU~YRmu!gA|%j%aq+_zCR)jdVO_sVApJ0jHo=`rQZa zmL1*Eo6(J1c00p5*EtoGEH0dnJIdQ`Er|54Znk{XRy7kEGfFgC<*RB1-9{PI6RsO_bjNp9i1m4{QsuRLb$L+rKZEJn> z{a86c>_no?YJ4?!I`rr{h&JrrKH}lTLj?ywOc(r2bCS)FWu(PzVSMPIUYiqvv`j2Q!JrK0ueK*-Ef_>sT9SRZ zotIs|(xs1jE}2bAOa?y3bd-l64~~bw1RR}*)YNwT3_J7J%l#gE5a4rn?$X|GUfW&WPu=*_#^go z!M~Jg=8I_d9~jDB-l$db=w8dL8TW4K-jtES)u^AKDoq|zh!v!O|-Y|b+aoe>tR_}(^_1-J}%$pC^r8!&FG8gD~p9gewN#mKO9UdUGhnY7| zY2y&jcCqOuo9L3GQl^6!1$d|qXSY$A{cf%joc$+G))J%4n?Z9? z`AvBGwKowSiabQojh^@<<&P{vhDKJ17tDo|2 zsZw*&Xs!RHQsVQ8j-eedf5QEFcux&NZhLZWYyIAq*aB3D3R<;4N9Q|rpAuHfvxf*Q zJ&|QSrk@#D z*D2atIjWpMfo>DQ#J)-<-XVCyMxOE{E`h45+mUmHIOo#DV|KsJ7wbd>3&&6TU=+d7}PjJ!t6y7uK zl9a(sUBq#=i7KR@l4!71{hv-AB{FXUPJA{n$Jw*5RmM|s?3lS?H*oGX!g3%OLrq$} zyId`{Stodohv)&gZuK>P!;+JZZM~UpN0o#vGH^3jb5$KP|2(ks4M1i9t& zY)693T}Tych2H(BDu4;1=B>4Ix5D!M`(U=4KZeK+P5y;L2QF0>`^!konU<7EgslW* zV1@&`(>|DVtj$?ZTk0kAU02}0iKKylUq7xPkb3>5hu3zbFr_{=yX4SDI;-kRlS~-w zX!}4tQ%Lq$NR$^YLY;6F(ah9ezn};1hcBw`K5>P#d~QEZO(i5vd#i%=d<(taeUdQ{ zc&X;{y}u-^YoI|(B&;Qca{{5Jo(&--ikl!_R3E6_*BEoeNeTF-!c^4-06kp?Zc=2+ zaWt&e&X;ujESOK5=ey|fem{JF&JuE4HT+^8@`a|HYEh3DPP)_RPODVz4`!F>=E3Rj zT7`pxw?YAOz5NdI1lcHdqfNAiw~eNVq&%=|aPW%v_bAoR-1kP0gp45)Y^rv{#e8WZ zv#%iSZ}`K;hlrsVK&Q}THQP$}$he7iuHorfkH{njhUTWi0Ewz6h}+*Qsk2KQE^(r@ zY@Q3KmlQv|@2S67K9uRQO-xOMUzObeypw!{@5&gIOnRFDe=E@krb4lw_lzz5mf=@f zVJdxuM?STdQMHS~qhxS4PsVN!Ao{xjIwM|Y`bNP;1qH(12))%=nUGTQROt`u^3Pk> z8$J_1UiMwuTxP7wwEunvnj`adZH$k0Q)2%O&tWgMlRigSqaTL#`qod!%hB1N+D5OZ z=v7aHEa?l#<4CGh(C&lD`{>I9$v=+6h;B=4-?(seX;WbBd0}8yAmR?B>&SejoI#ah zzf#jQdA;R$#C1<;-F_$i7+sdx418Q*%3vaFR)QX`2!pi+I1;&4Jf1l2xucrl@W!usT(x+|#o=^3C zYrqkFu!l2{&$Ub=+eC(-jkcDJ%k`2xvxt^2F#mPhG5Vf6VJu|hm9uoLM5#>cq0CP? za?p4x^^*U04vb~=IjL3QYFP>~LhoQ?>_B+$#em6L0c1F|>5o2(E#V!811PH)gD371 zKYvehJ@idtVxanV)$;w9)Um{@uTmg2+0dNoM20ImfpApa<4HB^72*O@_6)?XOAQ;m zC-pYOlu`7KgXhp3d^XJdgsnHV_SvqjqC9DQLo%Q=kEM6_0Fk2+a5R8#Sn=GuhXE{u zNAkxGuk*3y!me50teIMFOr5Kx)v1ZQE!jHj?Olszb}@Sx z^yU`J$ouzS^)D>Q3bZ)AwXo8oZ@wu02@tTSEc6J&Wbvwa3*larFme^JcHeNm$1+HaAh7&NBX%FJ}OzUVagsp*QU3RKKg@Cl)ezj`!#OLA<=+06e8WZp61+>k#HbA897p%)9Yfc6ZxHj0G2yCUS zLNfyn`3)MMMiqz^gUk#W`K13#hpwrG>tm(nqONSMuLs{f(@|De-dedh8iuph`g)st z$m*4ayIStg8eeJB$*6$uhVz0S85B@UU51th$x7LCjg8f(xed7VgwNXC;iZu{Sqpfm z!_@e*Q%v7FZj3b@&+17O?RI_r!)}2=AxcFto zQkJsz6S?QIsvz`ah_~P#RjmBxIHu}xcPTZ@q$rF&Hor?EiO+!fG)pF^=`nHO(g~Tf z$L8!UZFSBqj|l57KnbVr%Gsg2wuS6%9<{cvePOzDJX5=l%|LfFAj0$%>0P#3&173{ z=Qt1J3EbWH5k~u37zn1;!RVI9YbOGt3w*NX>TQcGj*zhxE@x zM@+Zi*V@a`%$wvls>G*r^fOXCN58zFCVKITI)jWF)&@lXXrdabCEWLp*=4=ypo`@}I&YxbzUj7M z9S!M(iObHBS&+0RlL<4V@!S5^)hXooiEcr=k!MKU0IJ_89UOf)FI zq7bl;d1Zl;3G^aEzcZs0J8@a}m6d2b{*jZGcf zl&qK7JNxzw<Sr~XuPy-%(%jY$c0}6NUg^H~-C@70i$9vLe_>E4 z?TIAqYb#CUxH#XX6Fp^HO#o4<%a^SL_aByg# z`%FBOC^ec!Fi}={#lQjZ!dM=8Dh^#NYcyIyJ74RaK8LU4c|OYUzUav+Sr=wz`(eog zQMT)6I3cfSq*pDyxZN%FijSK=VcOGltq2Kc;HFfl;p7E+A2Ux=S`mG%muLV& zjt)}Hi}_midY<|k&TllT_S%=1+dR?V>NXIhHkide{0|e;dkCqI-ZdlgGdSVLPTS{MxVt>~9K`I?lzG3CIP~y1oEfWBxV8+b~0f)ze1N~gSokH_Z_p4iBy_R$L zvrkg!Lfr=F(lw6zAJ0p@XIY&JJVq7uOk}%iZXLJuEYWd=!G`l5Oo+C5lQRWu+YXlC zj#1Zs$q6&ZeM}-@UEZj!%edO!U92NIxcKdnge>;j0x_%po0?~c`YO#I2MI#P3>D6V64lo?9;Es^_Sl~L`Z+o*N)2o@9IhyM6 z@Yhj5N0LfxHxn^(;c-%K`Cz=b!LcVc1K}+Q3nH z@9e)?WkKcWk)b{``xe~{qo?Znwy{Q1u(t1J5*QUJl#L*r6T@@^$e_}CzjvkgEn{_f zogSs9Kq6__(#WAYotn}f2~G&rp!Wv#^zr@BTDxLIPH4%*wBkg;IutIRo*FmjmSI!; zCBVG6{UG_>*6_W+=!{(<**^Im`{MGzu;8v4HfNFbc*{)xL{iq}@5$|vKXvPeMM&GS zJU1L4LgLWJ8-_sMW`9O+N^>oZVcV~Yd&hug!ofduX@30e!`k!B$?t(Uz<=&vIi>qY z-%4f#Z!U!-50$@ThMI~}=gs$|>S>f!m>^cYV<0I;Jh6xnHG7Ne?Y<)Z63 zs`ys^~eVfnFi`lozKhbHyjiCQq?oFgsGc5aBH~E0HRdD!nj1 z=j%_-rrORDz(Tm!l0>t7vk1{bALpQ;k1XvnKLg^(fl|u>NIjdb56$G3Nmmv75t5>` z4D9R-F6_vJIQ`U>*wv3hiMgq*H{q3ObWFU4yErx%UzNQ$zqeuz^i69&KbYcyVC?No zb&SuBOOHM5-c`PIK3e*!R*zjtS?cr&SIp5kb!@e|`~>ZLR{`2C#9p!Q*|ODtQC)7% z=HLQxA;~O&?)*l)iw8$&clJK3&GJ_PsmsazGE4c*i zH65iI<|{nwpfVs6en<4FvGuwOBc353ZUtoj`aBx-x1|=z3$IdB6Pli@ZSiM(K<^q# zJhATN7_fO9u{ngx8bhQ%@Yfs`UJn`{=E)E_QGtO(9qC91uK#+K2}72wY{%Sv`>?~E_yw3N821nraP2wR)IuTg>t2M5R3br>jOG1)pyhtnPaagH} zr^m2&Ce$?$kuc-Q7eL2X`%M&bebsU!SS<5#!h~r`$3?;^F0s<3;*C45Ss?+YQcpX+ z^r3qZxJ4hWr@d30ld=|p9N(3KZk>4RRxwZoM+(iUQ7U-6T5lFfeAaS@+Qr;tTvj`S z?WQDs?|3p)RPBynrIbm?+$Int$KjB^Wh56jZC^fuQ!PUo>7M22nCaq<<{Ovu6qk38 zof0R>8VF@SP1@Wz{tkb(Io1!=AA!h+7G$_q4++QwhP(;*J{l%UeV2g^Mv&pG<#qS- z(*gq?QKkSlOz*|rsCV^;Wm)|lEi6+h#iMJA@{KepkLyq7&UN$~;B?1JZl}BT3Dq6uTL{7=%-lkcgAb53J-k%|0y43s#w=WO^PVC1)d85RZd`+m7Ra2;^{1FgCnu$HAMoWt5E|Ou zhig^>hOq&QKk8BI6nuu&xb%qT$+@0A9lbJBvp3qX55BFTy}6Jv4b*z_F1;k{Us4Yj zm?@n92u89z1e{c3#RXRVv%N2vMIDVfU+yonk*Sne%5`3M=jeR#VACZz^~1CBVNuC2 z;~Ie<7MDG8Q*NokT|$tPr}BsAFomr@iGaYZ*Md*Vq+fN)zM`K8%zA~#s-5@tr{&hO zNyi&NB@_z5ytxrJ4pa`5PN@QPYDliZ!4qf!(#e+*i!ou4#d@W9gSw8!ou&9q^m_bJ zFKYL4M>@a6I*RjY*2HP9_3c1yw+m%)C144Qf)>1Zr!)?kpS*Oy9RkXfa3}MccSMn2 zW6uPigVch1e#W8f;JcqsM=Y8{TYIY)sGsr$pROGD;?DRRZ;N{c@K)4f%ZGG%2HiCp z`1F*(&WQd?o;7JA&V1HTugXf3#6%F2!4h?awO~Puk#w6~QXGL41`_td7&O!?cl=p{ zpdgRLN)uBwbA{d$DcsICB86#Mk>}{8*S; zaKU(rOn11$)O*MSo!(sxUQcPjvU^LPssT}!b^t2LdU z`X_GdbbhT*i%bxQ%Ri2beQ+Z-C~~nM7K=^#(1PXQdONp^3;hOjJi# zF}3O}9i@_~U2#~cXjz8(K3xX-y;KXKv+(m}({MFvT-l9Ao+y=8Q5^zlJH>@_WYT)09t*T}Cussx$*(CVcUQ*N z-{s^+gW3oowWBcN)iMBFCmf_SJ-_ayaIPgOUbK?%C(QIHT5yf%h)b?T=~^-VNGYE0 z^X+`tk+o_Y;gOSD_b4B5Lu!B>G_ZD3`ASC^9%J?#g)8;zEOY*ei<7f3qVoYq zWlXDw=x?2yC>~AmnUzE@Lfop@&h3T9aXgP9ImzJ3(Y(N%m?WcB($Kr|^usJ3i@~;N zEIO-sQ_a818@_$3EM@a*Q@Nb;ho=G^WRjWLOvU@;Vj;7P||3p1TXGB*s+I|B}1#9yxxIq00pHe zbb69?smwH*Ny7P?0wmi*aL~?hMxCQ$4N`LMqQ14a_dsO}?Tz#SX*-+A{Z~#zb5sTZKYF-}0n;h?1CIF@U z$n{%k28;W$XhM3ZI=ciSKy9o2j?%e7O{staL0ul4so!u@p9e&Ldw%9rf{~IRi8OZ~MpBbEz3>LDU}Mks8NYP-^Ge^9X^z`xX;@1lrf#axko zOOU%19cb*t#Z`2>x2c!x4*Ky+?;`=jTiqkMO87o0c0oaeil!%+D86lU}&X7xP8c09{d8Ib|$Ee;&fk=o$hO?D_~zovJi7=F@V_qvH0N{PwqQrs;@(w z0UI&Cc}^4Qw4#MK!;Ez}-y*Fxgbe=4KJ_I4nNe4s{2EO>yXWYmBGaJcEC#O1Z4bhJ00Z?4`&waoa zmL8+&wx!HrMS-`);;k+WogvEkROm*Di@iS@gE9O;7BwVF=}af$&5 z6JmwDx^DE4Vn58hKPJO-!Z{*~hUgb6EAE{MS~UXWSU3Rge%c?H^-o)#k+q0rlvw3@ zko8nU&Xh@mBnS?9-1)hF^UDiS%QcuS&~RSa6}rIsDpp|vG<dTN2Y|FXaZR?u7B|+j&TJ4glDWNVrQeOJP3TAz4$pH zVrxsZZFRfiPUV-}&od%Sl)w1;V-aU$v0oE!04|#+6Z}P+OUgg9vC&ozJ~f=abzID$o}zc)7SDr`fLs-=jVs7q4(2 zVr=xq;9AtL&CoxyU>|om!D4mmC1&mTIT~#Z+COxSR+Qf42(5g4;Vgs_slk^dwLA}T zymJ4qtM&dXm-~SM7>mrr4NQLH-pqA{%xY;xE9`L8G%pzLFoC$`tSaJ7aIyMlo8Pg) z9|Se>z;@XYz*&XT1OfoZ@#V{=ztdF+NCJ~xdTsLD4p}~S`^qnQzkfRy@IW+}qid5F zFNYw3erf+e5B26KZB9|Rk}y`3inDut`OXEl2ORecib-rPcz3Ks#-(U$4;NjF{ykHB zoVr^#3=pSfoCo4V{-PpVunk!|JGtT#(jDAYR8)#L&`PJ$%RJ$Lt7)1aDHZtnl775@ z!o|&<@cCK@a(64W^0rBmlS+K!4=OI@x7PMq4ADlF_bR-}t@EfB7A5CS@iFd{Re-+R!XOMsXcJS{Y026Qi11*L+z z3jCACm+L>=lZH-prIrT{HD0r_y6`uiYxL?lXIOgDKkW8|o0T&y9I4!iidQ-{9Or4T zKPTJBte385^R(^y^1lJ=#Q`sP?BK6jLL+NI6hZxaOAV}#AV;l_WUM%NrIt3F*`=5> zjJ}JRQeoG`Cy=6EAv}U4FNV3I|F!zxcrFCw3pE5~u~Y#5SLj>@dHnB*IB+LMxN2_U zUERyxpBt{C!sJu2DRF~AA-2DC0{! zhE}0;pQ1u~;>9J_h=f#%3KMFK?tKwRtUgU%7x}UaOr_ITl=~gGOS&mcE#$Yh_vwdY zuAMa`^&Sj&E7{y&#FTJwR@=A=Tj&sDbmcWPP-pJQVqHp;^b|xMVh6PpEfCxlp|RE6 zn~kJJdPR#FuHhHhl5>#!zx~cZ@CWzgku7kIMA9#vgEuOX#i8kOsY|-@{3T(q{@3Bi z%cU@ooqhm+W9)Fm#Saejmz&+8^ac-OtRfxLAiR8c!Z{?W+Y;VJ-D2qduTK2e;Kv2_ zch9e`o9HL-Mu_Ai#~Z1ZFVW@Ebn&N@sB>V2DCJPx$ZQ$q8@zM}ITKgd?xul#TIx;m zy4vQ90S!Fd*zij68)I0I1t}YVDO2Z3Edm1IZQ{0lg#Ud#|ND^sUt~i;+!v}!o0J=J z%Sa%yA}m-co)_u7%AIqX+7-f;p|O;f%1Gvl*UV`Y6;~1=iu`4;5$iDZ+!3EB+FN8t$|6BCTC?WbHcFJj=8DR;$0 z&DancbtBx-4*C!H%jG&W&R|}|@5u0F)BCWdWodkt=2>=ch5r7E7)yH|&o)V~h>9sc zw&rFU3$pO9lIxs%7}C)Ik2tb%WJf}kU(+k-u}QpfK#35=RKwed8ONyOrC2QN9|vD> zrTzUsd7RP~UaleG|aHXz1UkaVsc!F~_Y{pk&29-YnpTJEord8O0C{IiVHInd@ubdKOx z81nzvxFd4_Y&*LqCvg5^O!05D0#?Vpor@F-r2*zqzv!a=>vunj0Lbf|hRBs<`5U{u z7z!er9XeNnzwzA~F#ul2#yMt*e=CCc$KbV&0O3__;JM z{5N;;A5-!_{}{9c0uSS(cKSd5#&;bxK;Ll@Pi1epzp z+C}+WA>cnu@b2I|px#?@3HTIflXHxu)oj)u9cz}aQv9o{UyJP9V zT#jpTn=k&;0sO*i6b1x2f@xm5nV19@cZB_oMHXXoR#|yXaMPjAlYRR@k5+-7TCRim zsNo0p_lLvHMM1*pER~IgbAvG{Ga*`$rP|2SVHHz}hQHypz~0G(J+oey3v!cjg8%Kclg|SkY&B$=(GDL9r2rQe@~s*OAg7ZJSPJVQLEn3g6L1v z*i`XZr4IEyW)}l$3sR<6XOVe%9BJo}2ajLH?r=3+0WYJZnd$L&yvW<+l<6V2OIO&ppvKg>CvQea90 z=t-_8CtOu6B4z-^d`P`(7=k$YYzv9E^eT)-*%tnjppdTlVEY#q7{h27v#q&5z{J=y^Il7hYiQ5s>rcm zpKKLQ&&2(BQe?CjErhwN3`+j^7GIWh`NysNjnInu@_CX$S|z7d{t8}mXM;49L7a{@ z?3Rm)i^|P6uxJf;3xC4bl=n3N*bI$!=Mo-{Ru$Eku8~9Dcz#;FAp!H%pe;+Y*qIji zJF|a2Xcpt!y}dHT&cQKE!ft;JQ<{)&QOv%4g@l8%y;A)nvr8c@n448Qq~Yay08bQO z4*JhNEkbNCsX8k*9a;GAGFIGfiiCKG-&PX4_&0{|p5m4_=1s7-w)F)0piM6t^}PCe z#%zCR2nUC7FF~Ae82v%cAK0%$&f)S{zx)!r?8k}m-i5{kkkTR#W2!}a9vk5&%h&Jhxf;@1 z!m{iDN-EwCzWGIf@qb}hOw8FoKtd#Z{Mo=$E+u>Bc)BT;qN2sL5>`$lNNjwZ5C}>0 z=UOX?^)6$`SnY+ePq?`FV_5+W60}mgcV+oN(@|9NTIn1gd~4?K?2q?XK>uxfv#Cs1 zLZj9er{fPrVd?xuTt#u|alC+OyYa%|Ea>wd;sr#iPXI&2516&jXBR86+V&s6?Xm?E z4u<~rD?k4z!t&L1mm0OTSB$x-3|O6nZ$io}Va5a1J4CS&d4+{a;Q&q$bOikNW(#su z07Ov@H)}yY;P*+WW4jT}d3o6fgWxa$$phXmUx25BC`<-+TB5YLS(7=D(!c*V;3k0N z(sU3REDlSzgDCJ{WL@4;J>}F2QcgLwn@2`71*|}0s|vcmerd_5p%o&P$-E`LHjVj~jK62E8r2{y zHeq$s8=vL&m_qD}u7ZfPuEMUp<7Ct|1<+9LDB09%Cv`MH;l;qD6)9^04PUYdPrJ%o zzU5?w1B({vSvou6SntTbq~LGu!?z@Kenk=Te>c~MRS@=&nV55ijl1RM=H;n^nv~qr zp5CMs>&z|%9JniT{8{Nu&#r#GwfV*h-R`ZIFaJLs=l{?DdyM}x!`XM5WN7LT3>&|R zJ7-&S5Pz*NnB{`5`eS8{Km$G8*Z=RlJ;T)rMPcl<(m&*j`R_rn#dLSh{SM;&xceuU zK5?41H~?vj`i}Gx_M)o0|4dulR9A_e8XMQIR=yVbTif}g$IVkFeBkuCKfrS_&1Y_> z6UtK*R(wpTX)Tr{qWnE*_@M~|USuZEB#0!+7nPJ%Rg=E~*PyI?c}H1AqedJ^i-z~Q z+5XW^N+zQBG#B%*lwkfL1O$o@Y75EVv&o-hA3h!X5}>Nj(aK-Z2EnSF=~WGq-#J^E zKY{4y6+Z>oRHlXhKcv1kT6k5Hc$37o=DcpKjWp*7IgPgswV$@}idi^ICxY!vDAJKE zz|=i7UmVGfFNh@lwJrMCm+CY@wsg97cTQC|r`dU6(BtIUoDHU~wlYqi8`9YC^4NDr zc%RXcQ+#>FDpJ_qbrx6D(mm>K50~-w_I@uT6CW3cO`z0_?dgFjNX+uN zNY7*j-X|fsm~NhzpWl^IkTL7PIjG`J6w7(C7jh`FBigUC=BXuPi>_%Z0C#jlfxx{U zWzWgRCcgyK0z1pY$ya-gl<*!5lKzIbT z(GujS%{&S&5SMMfL_eab2YYlw-_*N=-gCUAwy=%d~>p<_)|6DpJ+Vuy6wxr{3d%=*Z zMH_nZ*po3+KtfbAiDmspch&3-b^4jOIAd<-ECbmF@%DOqyGLLqvaaFldQv1hSneJr z4CSQ}vpK`NlK@9&TPfyh-7T@+!ls(U&xNZ<_ix7x7Mahx;1v*+g@sz7lTy0j;o<2l zqNct%7M7@IHAg%GEyr;^>0(2m4nAeRU6_6~#qXlyH(iSTt=Czdd&Dyt)6bL8p?Y_n`2fBf@f}t~^sr+;feWlkD1p?HH{nxJ|;O8nl>juVL_A zvnh7SG8B16k9x9yDZJIJHk@lEjWRC2sio49nzLW|R}NK*2SGL=$ctBdV&gUWdBnXo zzM#9f3eqV%1Yb)IM+m%$9f%&Eck{xpmgSkX-stm?)Vsji@lJ`N{z+9%mP&lw-~!0U zz7b_e7x1m-yIA8VQ>(D{_B-iSaL5+%>EYF6 z!i9!Tfo1Rlp=?-d$48Ut8C&3JKMr^ykKy;EtS$R%bQM;;pxyAZ9A1-}Z(9vj)^t8w zTFUB?N7ju}p!H6-b&Qkr*)l`Hq zdOxY+HEdKGt+f}JKb#-$A}jcX`h|~IuY`eW_=2synN}>un#r?o1tutvH-Z6nyAEGCkjDL}+?=nH z$>{4~a&26xv3IuiwKp~>e^O7)=#u4Iq6g2F)sXkp=~)&wJ8dv-=(yE_n`GJF-;Wv^ z4k=4YKOjwCeMcRPl;tk3KDxE<>%H7moBnA)FP$$@yM6;jm;S8bJqy;pmy{6W&P{fE z>>M%c*cD;?+pLy{`6q%Cu2;l%Tyx!*MKWt1iGpcF%nR^~fG$N$40_p8nb{+cWJ1R0 zuXi7`Mn}2?1lUm22Q;O-6nIZ3&RZ@q>AW_IY7phShWDTH;i!Ew1W&kJeHQm#~syTAj+9D|Pk+`D^Vd>;sb{RgkWbgXvPv0v&`;%up zEx&KL+?)2F#033#oiM0B;flFxVk>hx7dGfR~*GvQq! z7c?vh&&bQOZ;J46tX~{WgMWPznV}oZRF~gV<3_PR4-Je%Px|%N)0%iLa9bbZWlnpL zg9>pAZgi>H55zh`6*ZsePj;W~u5n91#<=^5N#?oxzDMIBr%Rv96m7m&pU4LyeX=~TKBxku9@*9A{vr}B@lqBMD&`rnGR+M%Z& z__(cKMsZ5>ol5YpJG^BtNLfQeyo z`Rms=;I%4NG?b5;TU=LoSl6XvZV(OK35ha09Dh>bV5D5oR7gzU;?@~^CbLN{XJD9z zLZL=#^Wb2^I^J^n{mZ^vG;RnWkX~5feU&<(l1LPXQ`OdvTbXK^BH>TwHyJ&A;V-7F zbd%1mGHg`%dHt6|Djz$$V#v!|(#UViengCAZC*?m)L zPT$GnHLVyCbb|#y*OZY^*T3zRh7dK=y24*s062Lo(`d>{5hb3`04`H7A^ggQnhgJvy2Ej$>7cssc-kw%xWYD8S0R zFPXn>3yq^!5@Y5FPmUSPQ&IgAPMuem(!ZKJvpU%{R<9v^FC`|1*|I0=?iRFeaeyV7 z0M013-TAJ@yhwI^%&5jGX?xqv)fql7`Sgk-h4*YR_2#axvu{{w!y&ir^iOJ;WIvk8*L z_K|91PsACBtt~CAI$0=5q~B(8Mfcp~kcf{akY3gol0i%gO5CFF4o4O(8pN4>)(RT> zS@y%CQ_mSF;f9IMAq)m8;=VK`#)pU>_0mS^DPpnMb9bJ6yYQgIX5jsuz3ERZ=TZ=VHLW}s%lg3=V|M6bbJ6on(qdMpVg31P1Reif+*w=m-S}iKZNa10_?Ip8#9qtN zh?I{@*B!_9*N)|9$_MM}3NmSM30CT9h_v82cf{cZRwBYn%foOUf9EDan-d8ShvZ~a z-_D_cpO1ge>y_~xQQqA_RA=eJ4SR>u%prA9ooncHb@jqw_i%0iOR zY(K>oevPqae_u;fZ6!AOOUn!TGP!+{!MbPWi{s6ex~0ZnFsRJe>|rq3#lVw!zJ2>4 z=&n`Y@~o6Va=hlH(zQjm3va!x4sDdjtGjI>B@OP&V%^hLhr!4U36G?$UTfxYDlZ1R z$B+{O4Z|X#r-R|$O#+BJ9}JGi>tvITYrZu&uL#exeA8_*bQf#tU3Bpo6Z{++CY;{v zws<9Fem?qa99e83zlsK*5T6ggX%+Nw~?f8zL5we8|caaF{(T zWt``R|8x<~YFz3k#%1tcx6nk%iJNuV-yo3TUUZS#;)@vbIS)lAfE`;ea1rU`8rQqb zWyiT_e3S+yI6CB=8m^4n{tHc<-$HHzzsglX_LqVCP06#M@5&AX0l3)6Lk!BuB+mc- z;DgyzdcO>GRS5B+fM1WSMs!eMuI3(}I|F{>{~E3esD3RNfy{pN5I@ zv8f*TYb(^;pmrsM8{ROPY`i0J=2|y%MP@7~DNZ_&yw2r;;eTXD@(oi7dQtv8JN=J4tL{${6jmRCFKF?LmS zYT9<_JgFWTxq~1CN~*C zDNWU)oCY`wqt_4TSKr;McN#1Ae^CFkaZQ|Vpvnr=O&v{@N%-3j!#F%~k&=6~juiXD zqNcGsbSMdYZ?9V6vP4{ezOT$_{5|Ge-zxeBmff1H{?mVG?kl-mUB}>ugAbotC)E2I zr=HdGur600ZQ2VE`ST0E@b{cTxE?x)ON2kU5$Ef8bN%DQV)gc%gfn3iIRYBFB;3<_ z24cBbk>?S=L#s@IDSP4p1HfW3M3RUh=jEgGu?6Z`+}%k6g5)Z?G0SE3ruqGE`FYf+ zZSiKLO`aL3A42um_p0g7%kg{*=cuyOj@k~?mIMeEbSv+ZZoSjIxQr%RSs(ZauD;P| zJ~}o^5p<5)={~!5dq*}~W9}IBX*_OV~*E9P{mJmkI1KW_$t?HAg z42+qbn$L>7ZskD@VJ)0Otr$Bjau$avAe|bur2@1Z9 zRHZP8{uv)Vm1x~T=1NwhQ&6d{I5Y2mQ9wMy&uaTbK45RUd2>j!GNbxDwH%7!ih{=o zTNX=LdL<-R7CXUZ;L?i!!XdbD8ZY`;PlV@drZCjs4cwp?+r;8PIC@n-6el850n=w&L1yU`ypnCf6mf z5HmMtySn9ZCK@V*TAc6`BxN6EW)S(05&so^(yiU5 zyfWP)?O~^`9eZ}rl+``dI?ETewVwQup-3}u>t`t9M>F)P^izaKL2Z15z{<4HD-u>B z>B6r$zR@wm=!{Qqe?diu6b)(wKJ;V0`jOUssiU{9Z{S9?@dG)Wp@)ek1vAsvdy}O0 zzB^Vt{v=t#!OyS3=<~GBc)T?&qXy_>#n*$!iyof@mMW0UgTCcz({ zZGD!=t(TyZ$eq^pF3|$LW}-KIU*g&<6I2%;z+wG00vriQ3?hKC%FI3!TB!f!ELNnUxlw#cT%t3m)KWXGjo?5?9}_bzT-3fO*Ib;af7Cbj!* zXu(J3hN(UP1MrZIUApcvzBuNJDR+-avH8xFjK2TF+;>L9*{*Fz3PF?v@k9?nln}kQ zkO-ngA2o>I7X+hsDM~Pd=!}v?^ctPfql95bpD>v3viJVp{qDWix1Qwr_5HEN zS~K_DbKU24US~PZ3WzEslkupIv> z0M*(5+&6shN5CtQ-1KxVwg+UMXceQYO^OI|ZPB+dy_Y8)xdBy2lY#YTVqhOtXMM1D z?2~7u_%Pn}x@Bgj9_;7@clxoeM>;RfI>v3c*j5(aC*=3pSR*zBC>;Ivww1@WpNlNn zmo~Kfl((MJ1e>SwrclV9ewxydGdRmi=tk^W5WR{NM=w5g&lyOf!lfm@)_$oRy%_-> zEo)rh%PgI5h8TOerv07!-=n(;cPaY@NCU5*#15(;eNA1`D?6Z?atmJOZlCWDU5ZxcqG47f8=$vMLo$tnhI-_I~>jlDT)|S(TPwRy@mlQ%CbRDiTmtLgz zKuy2_{d-uxe?{e^H>^TJih_cIkKF5od0->nNSU$7o>+R?Z=DCkkso&FKInk|mKmkr zB%8~XR!QMCea3H87LSK*LyPs5A zTjh>_hS0F0K<9(F!GL_@88-!gQkM>g@06zG!maw!f&CoO7LpdaUMcu}9?cfsu7v!R zhV1>mM?AMD(0d0t`wjE7fWo~|zw6}L3a!EkB4<>uf6c{7%U6R8&0RbtmO)Y}cOtD> z5Fk5R$wM}4ds%Qgj~tQ?(V&I198DRQN%Tm*CqOsX9_)g6#{?=qhf)gZ6tN$P?`P~! zDku~tExuez@crXJT(XQW)~o%B-=Ck$j%v(uFAzyHxXBHwPR#k?Umw>Ti+MZDKN+Yy z2$o`TthH_1-{z0;{1WAX2#?m zE~GOzLw<9BG@xeeQb2gs%UOItlI?II1m)a(YK_8;8Ql$>B$x{oB;NU<7_wo#i$S@0 ze+l&x`A~v&U=+I>kN=iLu?%t`L!^@HK!s(@LQ(ueaLidkMJ-LPxmbCJTPk1nJkB~H5vztj9q%dD>w)bn z^Mt~rYF*1KOXO_yT=vR1FVohS)3W;T-r8+uGN8AoDPN_qG>pm! zZSH!K#C6qq6Lj|b$Gq1b4=OBOB3T zxSN^x35{l|2BT#9`YT#V$G5?qsb+3PRU!m7zEc&Wx=8;uZ{Kg;n{xxY-{1@IcPN;& z^m~P+Nmpy%j9oB6+s?~nn=37`q5`(q{azd%qfpq#SX@CbviAqKv@Q0dxdo$A0Hzh+ zSut19Lha5h!!Mf5WV~8B^xmBP2e9CMz7dts!eKC8S;mph zV{?vQ%FViLtAv-{@kK9xBrHe<@vf*z(_f|#B{8($TREeCwGT6uecPh_^~<9pJwgxt z@H7>PG+v8bdU`h#qlLYs#EkHX?iNT$XIb-hu}!{yBH9y~om2CI6o=(h2`*Zqb2?hj zgy_GRm|0DscY=m@h`D4O7h~-74iJ4OZ!BMFYsg_^%sA=d4l+URD>+*_gOHioXP5)5 zDO?6MjfG7tw8D`Le_S5m0)Ky0#~Cn_JlDdD`+lQ(LG@Uz^fJnAbw6 z73ed<4W~nn+xygw11>^+O`mbs+T62a)8CVbA0tpAl{wQ z`2gB5`7PbJ#JSprY~;Slnv1o8FV(91TyxXTh>#|vXMcT6gn~yYAnpaBfRMx`C&p#fy`{lacge#`>uX#Vu({`>V;7$rXuvx(Vxy=xR-Fip(n zS@ljOBHu_vpd0n|%eqe4pUT7rp4i7^xoUW7wgel2HgOmTBC@^#UI_>Tyaz zl-7v{_m7me`tlKU^~u+oJZE@Di}gHHTKj$+fWm&#oc^hGF&joC@Srnj$x`RF^vu*F z^Ue5J8I56`4AtD(@rmd~TBR}W=p$EjTa=Z-LX8yS0>s1kiC4FiXG^g!R4lI0=FepSn|~wqt5+03~#)R}FDBCCJjH9v0w+*M~!xPYtv#A+p4})#wgVMm=W-T9nh+Ib+#pKM2$7 z(dP*D)Yh^Zc+($24@@?||2^4Flp(YKv*M@>mbWtQaxI7=`Ppw~R}PD5boY1Do(K1; zrQRVsy0X5C+E$3mw5w~o7rRi)dL2+j8U(_he13OnXSH3tO00q_mGJkF7}+wg6+*Lzg8d9)9! z3Zc5^>~6%vr8k6gK419WoVg$PpmE5zOt%5P^@b*ZpT;8bczlxjM z^R4?5pg7lm`oP*>rpL&Q2)em{RGfV5xv5%(CPh3dhwzLdFcCp>`M~3$%d2GX=25Wy zROfFxNZ5BKI6-^)4QjRUNz^P;E0HtEgMx+d+(#dbnlMHW@BdWp(L6aT$|Fur;H%C} z6CQ322=QTgDA<^|7>xs&p0e{Tqd_gdfSZnul7|7ZTMi(`<1ley1<%u8KC2T# z_}cPID7Kg1&Y(O6yP=YVz%*-&m6l&3){^Br+Raw@hASUKZ5!$AL(S!jfj8Iy9H|cw?gsDKWDI(=g3i zerN;o@G+JtfGB|tn&jcCaIYEG;qp!YDw_LNV@iOAqL?F}JJ9U01b*BsnLO(88EGA5ERd=@=|JZL8y>cg*$>D{wO@z#h zW6&<$2axh8tKY_VDhdYqlRT3EN>2l%r<}POxDi*cJAMAEB(8Yktm#qrO?OaLp`!9M z(%U-W4nbPXc;m7alI=I$(c^|QA=4HQgygpS46J63+{X&AbFM9*O3S`+7t@T7y#Q$f@gP*b^A8jyB-ba&#a9N)|Gq2gOet(wfGMeKC%a49r z+eBj?LBP#MTCDFCRRpy9*!zEIVFjJw-C1PCv(YH6){E8l&pp4!a|Tbb*+znLFab(J z?vw@WoG~h1at67(k;mf&uQ|l=6_}=nI8mwm`YO5iP5)r0ztAye1ur&f@*!){tNMk3 z80vC)aOCaZ>CKT*Bcy2V;3h2SaYqTqr<&zh-obAACOb^-q>37+|GCf_=X4no2Xqa% zms~)OEMy20bHx+t`j4YfkPlwAQoEik$o^eM&br0NCVX0|I;qe%H-&4cFh8*TC;ae+ zpm$L%J~W3*yX;+HAfx|q`Np|(cWuwO0Mb}0BE;sdpH~#Ao%2KJ-4`xoJPM0&ooY8@ zHXQxt3~PT)*P}i@qay^jjXvzLOMXd6I@-r|N*?ARj;yVZWiosHcA zpV%_Uu(iuRjX$jB>ickGxtq?OgIjBZpIduZHJPb8y`%IfCD_>^IbKJ^oNw|K1Y1Z( zC77WPK^fqzw7*T&F4b|h>vY;5?B51-{wpfW@8U#GzP-Lz=>{^X?(Ghdz0GSXln^m#c$=+DeLY9)3bi_= z_sY0=w`XO`E<;Ujk;e-n>rFCXFZTG?1w+;Ptz;tiLDaV_b9>~a(vdZC!KMi3LP{xd189C?j!Cdsb}?a zZa@wQO>@`RN^?)5Xt*E3jjG|ePi1NW)nm$ZN*)GHu}iY=Fk&rd*jc6on;hTv-4gO6 zYt>Y~J9;I$$=~}f(7Fa@*k4Mz07w@#%Y;nJ6wpdK?2<2rELzTzWAsnv+G2BId;axw_rIw$zTE7tpqw`PynwBH#v zrcJ)F?Kpi@zt)9JD{Y`dEGO`-FiqQ0%q5f^I-hEf+g((**?PX zpZD}`l213CQrDm6dHXa3Mw*7GnZ_Mpi8Eu)@-yF9Aoq;en8tJxKIL#%y9PdIW6d2x<4`x%WA`IS2! z4s+jhSFUUm3@ps=0J7uno8#H>sdG-k4*K1?cVnZY6SH5vQZNO<#ElzkJ8OY*$zjpg z3HPz~muaE~)G6yhRcQ!QBXtsvbsT;%Q_dM7LEv!mNJex^fD1B&laIi(7YN)PWSY=y zbrmxYRD0qY+v82l>O9x1-rgk6wDh5g+@bHPn>hAZ8OIl^H$rMzL4)O zr9n0Bdi=0Z%vPQD0K3AY7D0sknM(XpvzPoON>OyxO+q<5=8tFY#MtOdm8*XILe_od zN0T(rec7F#RB=+RD4QQuI+}?Yqv$Y1QoH&fD%uKiGlRV#_h>U&$yr9JdJSMdJ+XQLm279Om3X-CgK~Anz;@uBy@C7L6gm$t_ zLyFTMCrbE^?s#QpY!iB#!f`@jDY-2#f3CZd=UKK_N)TqBj53Jre@e-JzO?EpvN*T)rkyy0q*6`@5aCp{tE zt2HGQiu3)-sATpu_@Kw&ju-`!<|7)uy*(R9ikUJngpbenFvMNKr5G$IpS-NttwIAeo4%v5%OImPg;@f!vAeTR^@qa7{@+ z%tYfN)RizASfxJ+3IZYjoClx^x7_K>5Rzr`?2<(U>J0zNJ&g&#GW=f%+!nyV>3!hp*k9N>t}lf zpcDD6(cdQ)B46gP6fE#6$ zFXn%KdcRPSTnKELnIKs#Un$15Da-4N3YufG$tE?1Nos1ifOG+5P5pFJqpEq)0jAW{ zZsP#~dVC<=+thI8q&1&Vyv{E$zSl8pZ`A5Qk*W1;ZOCdGL7p+t*%`l}Nw#}2o!NW- zDwlDMiPqdhdJg}+oHI1y@Ch*4ME%0*gR14K_*5VQh-thT2s>@9jMjSF?>Q$%<89!@ zvlC9r>Psj>N+&oT)l8T62*496jpPj2!llo;%%CW)46Dg_lZfsE_8R2S=1|yn3;N8v=5%C29}@H4sX?I9jj`|+&v6<`m`NP~HG=&G1JEoPt6ak}?v?qmzzdu&(GRJ6Zd z`o|A5fq&&X=z>UqupkUdzV5lHAuJap+b)#CH|^eGs*TXke&gY($Q#`0E#S%=-B01` z@}bb~17WK0R^Cl{U&*de$1^BxSa4?fHX#zxVmE z2EhdGG4#0%UwJr_Dcs22Gx4Ws;uL_3SNN8HqRcDZCAGj^f+F0|tgAUQeROC5N$5#| z&ki1Uac1+5o4IHEdMfPx--^7g^H^1S(YcupNUU{xS(LY!YnDy=_rAU=E0neOY5uBA z<`0{|55$jFsD<|tw8Bm!hE5G=>j5tiItjWhX|37{_*w~nHYanZU_A61G>jwj7x|+6Xmiu7|J|IU{j|c;O{&lL%}zl8xJ0Qv)kJ= z;@>}=oL%cAL}8IWSf_EsGS)Xf=fLe@P?<7n11eD(m$o@xXQr8R)^!=ta!2|N>IRHa zHlL`Sm*GcqIU3bg*Zj&*Zcs4o?GG#!&6Rn1GAjl%-}4`(S6sqBaGhXNSYr6|SRYVC z>1@}u2}U;JpM>|Crg97nL^rD1KG}4(bZM)KVLhB_U>{k(i?EPRK>+J6Z9mq* zsOZ`K`tHV-DULrGxj)evhK(@2K|xHHv-no0qV@NY-@ZSP(o@Q&v2G_%m~u2?blpy9 zb15jYF0Kg}KL&lwP9)wNIs4Ve(LJMx#Q#+-w;RCPv}hHO7X&qPyw==`apt#FNs&I> zdpPOLeKa-v=jnw!)#T!XXS!v`M>N~p1sQd|-H!6QwK86}?}xu;SYc|<7?1kqXjDy1 zf^Co@B$RN^K0@k6Y&M(w3#oyk5k2TU>`R%E?bSY?y;rs4kRO$t-Fy(^6YGz@F=-q8 z4sE;DTHs>G<-9!d0+8b$yskA*9ktg-L_pU$C<6yf@w7X12X3(o_k=->*Xyhbzgr%{ zl%SuF2F@16RE({E$sev$Z;MPB%8Y&U0vGL;ePqjyb41qOuL5oh$(TVV z7O4*nn8!11`IY$#xHcT$#S#rzA2HezneY2fld~ZeEH{sbz7iKq;U3sXVMV755&Cx~ ztGp{Ko0|{GTUz~6QF|v8b6u(C{%f$|8*q-&Tx4FJ|4z)I1DFt!L{+<#`$7y%e75t4 zYWCMOa;N)&|35&i?ET!Jtm-#_X?;F48(GdQMX1m*%{@HN(*_W(Mp2o8YIXSRwo;G}2f_@^z)?CrV9&Fr`-riMMJu4O(6 zHVD#rBHnFQWw33pBt(x)d0Ii=H-CJ;$q5_hYc6ItQjF(1aA5%wJ zaHTIVA{W70QFB(HCoa5GVPITF=Rq(2B5Slj#B!9U zK7m~FnLIg;9cN@3lg}qa?)zQmG3sp))h|0_`@mgo<{SW23M?jZZsu}96l@dzd=2xg zt}-6wv=*nuxn0ycj-xWRKS#)o8jv%m9=>HvO=sOFP!k$1>~6&ORT@Z?9i&-YRiMt}V9#P$vT<~XN;^wYczpI#0BVnL^9wm^ ziKp|hGS4-n!ZSoAVNhA)v1*BG#f)`J_|X;H{QXMFY<4QMzEiZTTw{4)U_ztN8l&bP zkd9%CLC1cyPwX*nrgjM{7f|c*p5m4C3yk7er8n`w2o&BoVS zi1rA=hK;I*+CFf4vO9ZPJ;VNabgth9f5Q7C>qmVZdL7kwftrYseg+M~WPwpwX2#&& z&BLwl6jq1b%jktH?-R2h{t#zd(7-EnJdXYjyX(``;GU0xdrEE|^hTFSV=f{xbB1(} z_L|$x+IaqYxKo}0uxR$T1BgxAebB71sdDrsS1Bkl4lYtPsTqM%zOmO+syst3*U2I1 z%v6n1U{hB)r4qke4t!?ic%H>hqiU_1ug%J--;!md1GX%}f&3L2cqm>e^8CM5SB9-b&b1(4@ zg+~z`gtFIlH^-e}VAlXXd9R~aZ~mOV;W!Y_G{a9kwJ-EtSt?n|-Kqt7q+&|7F@Rd~ zBtH&rf^MvWhC<4v=<7=p)&Ht}h@X&W+}+gS(4}90d#=zT@;fB|H zjdiJ&4g)`5(|Dcy)YBiAFC^^gNqK!dPO#zsV26(HCu7$EI_m4&FC)+x9WWew+(2}H z=hS6b`9hcdc-cqpAv!+XW#b;atvN!JwvDS7Lhbk z3NbD=D0}LO^&c%>q8D{2|5Bc;E@FR@mCThrj~t(=+b)x{0+W~t>B(FjV&Z1S`Xwv6 zJ7Ze=09bWPLIP5(4_`mj7!~l?nBa?e^t`r_xFl8ma&!NF!_@OrnfN-X$Eqo}ZS_c; z2j|6Y{ID;V#v21P%aG;$lAK0G$KsXv#g)d1VFDeifZ-MO0(f10;aKv|pKSPp(eLI> zKGnpFn2PgLN3tau+d7%M-a?DX zgzW^aoriz4LZHz%;4xWA34C0(=}&99^(ke$xDjZoe)tbq&2X{GsNtV6b*z1RFtrgrY zNtYnM`iIikpVM`;Imw_@`LuQ)(eD=WiKPfw;KnCws{tmNeD#tVg_+}ak}IsJ2Xd#v z24|I{keU`$EFur|jWlo>)g{aOfh}m>@nVP?8jYNT^!LP=gT4cTeCXsj+C>IN7}XKO zY!P<7)sX>wTXT=WDF;TwM{L@9tN}nz6mtDre3QW!PR|3}!7Ku^f026gG{EALncUi% zt)Re!Dn@^+B1hAg)Lp7Vi2CR zw2u-Ci>o%W6wo1%Sf%R}kWOnk)H>9=DsktIUU)3SdT7M{^cA1y@kL(^CAmL>5Jk{x zof>k8>wdEd&-KUnrDRR*>E6J7F&sFWsRQsH(xbejvt--r>8T0m*0~}-_~5za`L$OOVQEXs+KbRNxuuPwFi3o=3It+h5qui zO=)%r5rrg>FbD{wYJ}UKuS0XOv6+IJoSOAO`lge|iso~dV0W1-fp%V6VQZgQ)(ZLp zyFg_QPLc;2{{4Rh2pL^%Kmx13Vi72Xqfg)8=N%}p@su#`mqjsXW`-Aa#L(aIJwR_) z5fQ#N&k$D-J$29P{`q=*_V!uHagt*y?4-c1gz)){PLGapH%*fdB9k>|JgPkUI)74F z3vawXE&(?9!pEn<2B)RhR4s^#U=ExwI(BgWFsfSCyl7Vaz=}a!5Hb_(7!Ai#eG(07f5Q z6~@r!;T_uq)Attg-VB&8t0pgjs$2>t@Tb`de-`FOLv6jjQJOu+bd}{=*$P24R>pMC zPt<;DdU&N)ixSJya&q00USTPC#QInGBJq}IR%Vk6tSt9D=zYBTsPdM&vy5d2E9b{) z9n@Fn&;tad_GL22iv4I|CIynj&CA9x!^4MEjk#P{U zM+dZ{#^L;Wy_yBIBT44gm)wt`Xq&~%vhId`R2JI5bc0P@(`kj5HatBfLK}v1z{PIr z&(}TJr_)~^`}y-naRc++(VG2?(PE^>?Rv|u1ddQM1#W{ajA-wc>;I3Y;FT;z03pq8xMuXoct%^-h_0#snB_#-bts3TYotrNK zXEg4>QU8-nS7@n@jt>0h$j5tOB-(I0kyi(jU7H_|O^;9#6Hn1dx`4R2IG{8}ua-VU z>@9hW4-n|nJ%|4$)ZWK2G5z7Gg=Xg5m$?O|CC}-4Aefy+f9L2I{4xt=6W~X2kOJ#$ zq6o0c@)n8rxZ;`rsajCBdLhQiW&_dmlXc~dy(<{7Yy;x?UU z^GvN2($9+1bULOLx>j#Uy?Kt|NLa4~fD7{o8HthNdzHFt&XBl=lc6q8I}Qt{LpBELPoI5?yr~%~@|69r zBO)-(s01kTB#?mcpL!ge!nX$}^0Y{nl>cWGO$t-{ucm6&@_Pv#AZL5_V^-~__KE~C zfxB5ZeGh(sRKMCiCB4g>0KO;fuyogkli2DSjHND|#zJE9X6FkF*%z1#+C|TnUzi%w z-g^>Jgl_cNT&J{motxenNh#2FE1GsT{L}bn7;*-|Z`N2RE&KcfqRaC%*M-8UX@z34 z!Lj6n8gi@mY=SKIWYjf(2O6$t2)Pw%Daim;Q?cG$dyt2BH9! zb(;@}82r;CutWmJAuY2sh7kewcqo()WH?=?C%CrL(-D%!`%%;q1+z8^P3ZuIi)r}I zS7chEp}-iRiv!CaomWs`giPUvs9w8vEl;;-=<(~e2ft9V2XB#w0bWuYHPEJBjH(FH zg%osKSX+l%T3S8?jUh0cr@HEhHDu$Haxzh3Lvpgb>vy}y(taLa#j?}ha+*}uf|~-= zy()zdGxZ&19C^YjIpYU>hCzWwl=V;CC+UA_NBxV_ z=F>;+v&Y|i_R~oKfy^bkOlno&sKa)uUTFQ=;{D6m!%V=#JRk=6qP8&Af7=o1vhBi~ zUjQ}z`z<8(U;#F$03&@A=^4aFXKarDCFI6qhD(_&@nS)+IxmP3X04Iz%h+$--{s>A zfa1m`7swMlHaY%yg_XI*J1YIn)LbY6Y+jjQZD-M!Pw?!E-0Dm$}?XTHDpMW;~UMJhEBfPQj2i<-yC zBE-uC%iCh!&J7*ID(U7c1{5P$D?H^X)F$YNSsgy+P z?}H|VEFCb1h>1&ohX|e84m|wFSxi8sAek#Y9faWR3sIf6MMK`Ge@!>Ebvgw9(t+?F zKjhP#;+YnN{=b$DT=%NZRf*EbeU5*uT;{7xnLy34$8sdA=PGXXFsP@18{k_5s&2OS zf&Y{~_=UNS|1!rQi!L*)&1Wy z1YmnX7H8TAeAdC8+xqvHST*j0t2W!r(ku1%b|&q`0HSKf+G$6}kFd{%yX%Sb2evyi zmtOzJa{Sr?QWFO8wuE#h6reDb`n^Sm_dM<|{d}i=D~F{bHw9p#Su@9buXJ^SiB=$a zk;CoiaV2HZ7GbFl$KA^J@*fwCumMDgnS;OoxU{@3`2~08Yl}T>?XzI7He^pXcdw(q zQ%nPmR`r9jUNg95w)jZG5>Ud6=R+W8eC6p0MGBUH0Wm{(3R|PAmcfba_K0UpF1tJn zNdL--{{{(Un87E&h9|PkR+J-bP?PG&S<++b47l+Uz2IPCdrABRfbhRu&3X+CCvL!4 z+-H{V-t{iQn`e>)MKKP5Cz8R4UA^uRN89aP?zRX5_|GPLu-|^24{+C}C>^cjsRTPDre65NG9BHlz)pQlFSeZ*B9SrV| z-F30hp{XC5WmYd*BdMrA>YKd_#1rloz<%}Q{5Q?jZMXBKfQU8T-qBYvs&Er(x{T~$ zE}(Pq`}R&lWQh&nZ%nCU=N;aH*2-vnCBV`aCqso`ayM=m-H=e%&|u(M);=vS4ar`X z>OQS-RA;Hr+2&<<6NWy&{O7+t>94*bDg3jmJ4N+G=UPHQ3b*g7VMkq=t_8&GP?qW* zpY^>?qe~Jv&8)6&Yy3B-Fg7vc%YY4rOhRfFt_Q6Y6as?gI)cLSu%}BgZng<~rMl`F z2IBmeV}Fa??Vk@P==MdABuCDc)Fx2`Nd@uE4&$3kz%;)ezv6lJ`oq(uFM>4PEI=JY z0w;ptcG0)i_xJ-6(ghAizDi(+AAlmDZZFkAGF zcXBjoGxf5E676sMA%crL=JPMYCzPV#{=lY@L-NLROQ4OO4k(|I zpDpbDpIn}tDv!VH`p4gJk7s%b{buFYMPguqFpg}o(fGc59$VtRAz%KuS3_P~P6XX& zsZ{KYSQUN+#47ro2FPzQmj-9e+&2*V1+4CWvm|Q$yjW4$*8dW6)v{#$V|aWu#C-Fd z%R$9(eS9DFQB8QUndT0~8#GlJ75oU%gw%P&;N|LYu(U!dL!g`OyOc>GcSqB&^e z{gLq{Xq+>rpx&M8gvkiCK zJ-pAAi%`-g0is_^4*%onei8sAk%wtg`HeS!+s@8R9t7s6^p!+^ zIEIsT+3vC!vNy(AOhT-OOyF;%lJ3B>HqW9i(WvYDZ8S<<@_t8djB2A9G|7u z`1Xz8XQ~CE%9(nBfTyar;(t7Y|1!M)$G=Nw>IKJQ))ar^vkYhIo^ka$-SoeI;K{S# zL0G%mBH;V)L-3bh&8GqN0>9pD?b*MhUT}C;n!&%G{4Flme=T3fnR z+9!e6(HQ0xs*k{%-pd($KLlX``WeO^Ve8|gWwZkubz3n zG5q7$@sh(=G}`Gt0gb}Fiz>F_;&oE$HcoPCmc@o|QEDDgs<1y2$T13=t>g6Hagui#(%ZyL^Wwn&G?wlUcY3*Y6>O_DHYg2m*p(*uE$ z#-oSarD+cE3X2Ogo?owGbyY$-gD5KsURBe%JblU%YVyQP#LvV~izQvpmA%O$*3w{x z1DWW;)~s^@_(rGNdy|Kly60u|mYq)ZJx zb#zowRjoPSMfaeFhn+KxyKCzF+okSpC!VJO`b7rx0)RFGJksRN&81`M^wC?26(tTI z_c9zxcwW2Ot8F%N>n|c);$5i!F7C^d2>d6iDFiRMHZL0)KjDJ>NHEi$A0N^w{^z!`;tb!=&m)^7v(J* z+>upGZms<3mG*azqy+iL+h1Tyj)Ju-c3tYd$?eGXhaG#895Go8A7Zo8{`hc~b!JLe z*e0`y8?Oa}L`d;^i3|N3Wc~78 zXZaxc*xjApDK&NhuE!0fPOSSbC4^r(3%Ff^^=?2ebOv>IvO6~(E9-(BC>$CcbsoqQ zJ`!0vZj>&e+i9Si9D1&n;nr(Q&8;I5JoC2WKE-dF$GP(X=M_K~SFpvWA#c1hA>7#R zOddf;JFB>pSpTdh5|C7&d7*Pf6Nn>@#*@MUv)y66Al$vdL9;vAiQYI|AMh$&RU)@g z{e7)Q`F!dvK$WJqH0hqImK?0RR$T?X#aW2{5S8^@@4m*vL4a+{%x2DkThc(mw1~bU zU;LNgdtJ5MtgGEg9z5{f7H1#dkkt#T!+Ko&e~|x;^pk+*>;@F(R9;^L4kVBGT|(m`PB_fzIifx2f(q^1)iAUk#d zA`M`I7^(5_;lvt7_UYnCul$i`A#)UAyeCL3z(^H1K6b&&T~~m{U>8?l_N0J55Dy< zxskf4r75MVUnP3ndXoJ2HU=V3{@Jr3zQg8_InW7u0=>N=qhLvOi|=-16Ke$_)b*OH zm6=h4gId??XP7GrZye6+?P}-i=(81>r5V+beH8u8Z~Fiu&QGtfWUQR&pbGc_2!-Bd zjxASMYBV{lZnd+A6QHC*AxI=#VQJ0Xfb!l!#a)B`^K=i;^&js`V8Z%-Pl#%3?u?#Z zyi9}ATR{hOM3a}6s8v9RL3@&=gsxaU}j-THnqSC$Ql1YT-X-D&&6i9{11gu`nLoW2y_dM?mMrR`@?f z!T*1~PzSyWX4-U5|G09Za$#&!@?ppWbs7KOvtTIMl*OjUI$g@XVf8Lb%;A>fl;_T# zz%PpCZbbd#nSnmp6$3dy+B|5OuMMz{v3T3V(_M^XJW7) zHqPUDGx*EoPRdvB8rL{-+L(B~E{yxd*2WWqe{4S#kTIw`!j~v4P4^jF9gfd-M+8V0 z*^1=(BsOSQ-oH?!jR>EMk8ie`JH6>WDUov;E;FUJDf(K*AK8~iW9-F7>w95)ckd@iO>yw`w3)c@`4A?(bc*}eGlNS1pwNP%T z`Rf(q<8Rbl+`Mk>Yqi)8{6sfF%YJ0tnljo59@TTws5^txmw!-MtO5hm!87 zg|!j~AxJvCk#=tRnYXm;%8@NsKU`#bB@!w<<{hi&yangUG=&)54?1w zRL3Ag*q#gSfttV3^NVS$*5mW}#H?k;2yIa(Lw-gn4CHad>g2$2y->c>N%&CtV!B1$j(wdea}T5$D`u)n;Z|k#ntOXT zd`5SKFg|_522<(!oM=wRxF6pkcLIHLj!$;RD*|>*G+X8#4J%?(4mvPAueiE$+76K} zRzvJ@K1as~Rus3nc@ti>c1%=`*;lsuszoFc`W$(zJhHkB;HNc)!j1N|_bzl#X@J<#N3v{kzEg5CJ8d+QU2zRLp`##ON#$>>K8@|9k8UD;aM&kuMi^< z{IkCMw&`*<`V${%W9v-U(_1DsqBe7&Z{L2W$M`pDYbSY99u9k&r9fITiTq49JE;be z(7ssL{m7X56UoVD$CAQk8Q=lp+9ZMjCwD?L82t-5!6!ae zN=HhFt9WZHij#f}4pl2{F^-j8n2oMeAADG(Ow?D%*`G&h$Lp8`Rpf2z+v}VAyp~i<(2j2HY*tu$<6mEkqE&M8 zdCtG))qRS7D&^iFcoAyuZ5P99UeWndd;vz9Z;^`bKW=e+#|nt~9c%o$?j7#5idoHM z=v~$9C|Wh;bChz65(juXZ|{0RbnMjx=Pv^uh{Y7&{0DtT2M(PmWoK!Awd<#wYs@~U zG%v}NeMQX_grs;PrPmPrmWu|=QkaTW*$c~q78);C0HgWN_wk$v(&P4IY9%v-Pgvvj zhDDAZ(tU$fIomI#5HlyPNLl|A*2WeIGe%7}r7}nfHwP-jEi>sJ_dm<@asOfn*&cXi zzZ~scr(>7dJpj!(I*~XLv+o=vElo;sY)sB$gVUobTC7j`n43=O)3v9LTvQ_M-e22m5^n^T(u|_^ssQs_(OYpR3=)3iWy_ zFfsdUJH2V&#yAL>{S)>Cu}2Rbcd+K&n&yGmY#&Zo84;XLNi|Wdg)y46U*ebc$c33! ze<{ugnA+m$t`pJ!>pH{nCBP9{X3}gJ&OA3a*}27|+(m3-ve=ut`c;Zwj&DHr+E4tK zhFk;L%%|tOwomXUz|o3_;3ol(l!&0kUWq_tpjMALz^2}{UZB!VSHM@+cKovg>$oZ7PAobG_WzPP_pGLOde8e>8 zS{$uyE<&rP_UoidQ>UjFiNyI3YkWm|2#r^M-EdFw@O? zzD>BPm=7#3k6LcR65DY^*CTU#%zqLkgYA^jf1wTdoJyvUZ`_g>O+4G~dhuSFRp% z{`j2y5C?Z+3YJ){K(Y7fhL=Sa%89;Z~71Q9Xcxr4kO(aV`Zxs~TESDVttcBQ%B zuOR1!{VCdNDoB~hIUsqF#a?onSuTTe&vN&TDzADAsZ$*ihhqKcz?tFBA?;RZ2{Y!w zCu3rt&k9-mRfP3s@yxVP(59`QGCM1z6jDSIZa+s|R>H)@cb5gWhkp7l@7qKRi5HS1 zwELTv+Uqb;AZo}%Xj9hr&u-?Y5Z^F{e|T6^+Mfh#NjV~n_MLs1GGaG5$kt$cD48CB zRLhaYKH499oriU7dzWO02j8-W$3u^Hg;wqNmG%%SJsjTxSwWM3f& zF{&PxK7oRBRe7kW&I(zx(z$r(DkJr%#MmICHcGQjZi=M>cW!5QcPXp`O;I$+6enNM zlxv7lI5_&)j4oDKD(r|&*|#5$4EHY+PR8)O13adt2OI1ncB2OyqW0ejzjbdw=moP* zIr@yd%X^e1cb6qTdYzi@thmM*BL-EsW_%9ZJqq}8o~plb9=W))9zo?C6q z7f_J?5OmZl)=!+lPVjg|K2Kg#49}t-GG}7E2<=f!cKoY4o_x8yEg&*L3sKB*VVZYB zE7QMgAmsV#Ry1s6bEv4=V-m3Dx$_R%Ja_HcS9YEQH={L^9NY=lq`$q7b)bJ&<+I2D zIY}1_9o!CP%d>6i&-obGas-C~8uUVbuY$RW=sZ;;vJwP~oVkmrB_RbAz6KHW>?O)M zEl}Qv7F=k=4HM|uk0&J+>#=uSj43q3$Jj7t+q$-&YCFe`-8|`$&E!CF`UDmrtPur6 zsFk;4K)2(jrPX@pblOeLSpz?d;lXab_h?$OJ445pJW?R{iJ&%`I6YZ!#7~0ogKTVk zVt?}lbK9sIlh zXwu@7An=a53eF@*-o1+F-5n$rkr?7yEw&@ zy|=V+aidXu$-Eb&kc&(cw@ z=&?zu-QlWG8H%Rnv8-{@L}&Y@=oK4i+kdt%677-@SP}{$eyA6*go#hw`0C48Iw{wm zL0qetpU8I-P!pXCW~NF0&ZuB|2U=ObHSHDAb2m4I-*8lnMF0bPYCtrZke>zh3Wgoy z+RQFdd99+X!Oji^7{kX+NiS(WR=K6_0Mxu$q}B~Aqgz(Dm6(}Z87}y?CEdFYwRX(n3q3v z|Ayr4?@dbe)N7QZChr*R9$slTiJ#lnx6@H1;b5u41o0BPACd{O`PC2e!(UN+KENd0 zoo8+*x#ihB8;;^p!HIQq@`{SQNK7iz)l)yzE@de4#3-w&+#@XA;U57wt2ysh@Yy65 z7Qdjf6kz;az*u@{S!IU(T%sYuB;ma4PG@a2CH{SRfXy|&!Kbq^D54yGDCITT?Cmz2 zDV|DnCoW1o*d0Bh<+m;WO_1Qe6;HTbY}0J`NJB<3vGN=u-I1n$x!BwLhdHbcf8di& zX+RjVF@x&oADIr((~PTJA~Q zW720fq}hWzKzWxzse;;RrYp6tA*SZGdJZbvD7O~jZZhZCjQ*x@`t1+`n~1B3G6p^l{{b$&q_iMixSCxa6Ak{X+RbDX$X!s{2+ znDke4OQX(_+sjpH-iw_3pR7o@;^Ch(W^hh$_WFwFve(8rV%yhY+ZV|R?*VFM*(ANU zv9s{7D4}-eMjJSmN$XN9DTId2^8K<6LRixIg|({w+KPfMvX?0aVK8@F@1|e+l&xFO z_KDC*@(`#?cyYw_g%8A}=apUo^^)evHqYvTzZV!1lZqHn1OGJh+pgSqL<&KM@@(?k z%{cLXyQ#N-Ln_@O2HkoQ`f?K6pS8OV?n=xq?zrv$fEBlIa=qt-wzimmOcaYRnkVbB zlJ-W%k1EbkM2S9^Tp|luE^Fc?Rt!#cvyu)9iPgwc)b6r2;9KIl#PIsNvhIbw?et#6jm*F3*kRJxM zd(vCWn2}!S$ZbJm{kk9BGQ6~Jv-SF2Wtku|yWPAr7E!+NU>HKW31jY zjD@b%FGGhKAH7j}M0bbUi9b#-8r|(t17BlAbNDGK6$d!UkbOuu&qP)DY$c&(1eded zg3AQIu~cq4y#8xwitT&=7*MHQn!K|K4~mGpLGbC|-MIQ=UFOmG^P6)>Bf&VZw~s8L zyuO>82+l{6NU z>N^vmWSk8_D&q#uQ(68oN~J0)T=@}iOEGdZIHq5^^Tw3MfIk z);H_z|5%(gk2jPPUN`t=@l#0WnzU1To^iocMrpZix3xyf?X(7RzKuTP2kDt+h_s(% zCb5+4jBIx6h8#V<=@bu^!LsFuo~it-4J*>9U%%LWS85ydLmqYEJ@qmr_Iq-h(=#+9 zW!Z2UY;aX#g~N;ip|w~xt{v|;we(&@yT9V@QL(}1x~k^mv0$6g0L4@`KjMW3xtMDT zVhg|4;(vyo?(mrL+m%wHmfZA0!#TS5%Un|H54$qK_N{=R&&zZyIr}F@LGSayQ*Qm$ zR1v{eHfeoL#JM3U*&}K%`FC)XXyI=ECz_7L*iKwQa0=!dDeOpQwQihHJr0DYWAMH9 z(1)_|jLj^bdsJL-F+V7ym5m5-%w?jft{0*l1o!-W&&#`oySp&-gvj`s)3Y;C@t@f? zwdVjHzsoW!JMX35${)6m*^21=f;uXtRz1~dNHt!(^oVxB#QRg8p7B2MOGSZx8^31w zuizlu%5sIH949Rka0a6GES^clMAoEQII`C7CeyD&g{pEDCl0=DvFbJ9{dcdCbx~Vr z&;;k%++j5%WJtbbfT>SZ=(Rr_`}L2g_AZIO%*wrrYO zY~_)PFg$7Y_CRPR=w@teCS=UCEzchKfF6dk;WALoqzh*a{*&u54*^EujWIIgR?#kHvY|wjJMr=hy z7iJe&?cxGdTy~qSLwDk+dC2+>LwB>OIT+sVd!<$x+IQoURMB88zv(IrzdpP_Zp?em z$IR1ZR48oKR6G&f*OwtlKPTWRJi)F*U&%N1gg1GsTbHEAb+L%Au&G>C@enQ3 z1+A3^Wcu2M72WHyq&FRc)t)gjE8d9XaG7)fk=z#Yvu(na-V<-5BTg)@^SzS9ux%cL z!)3W4dNa3qCkfC8LZ4lT_H@A&Smgy{jx{NIe~OWVDN|wb!gwA6s=Mrd;>_3Mk6WB< zOh0(?g_1aGu_KBBtT73G7zIm7&uvhrVo!qvdV4I3eyi)46HSCU0z(xP`Dr-?6NGl} z>nHU2yfDT!*|k^MAWCNC`&I?`lYM**m0<)w8W9?^@;HE_7}A`abC|GX_R-W9Fyp@o z8F2Xu_a7OW+mR2R;C3&d*}0u8ZUj%;4ifD-Yyrj&lVxYqE0&0DQ8}0E^eToZ{K`u= zBe=UDp_*%i{hcKUCw81)4!*+GH`8a|)|zs6T>3)fqV&G7%}+v)(DlWIA2uk&sAL8VEQA9~_o zE{sm2%6oR|=wo@&rL}9m+i&|ZI=aPL+4+TcG}2JSTDR_0*xbkdYP$;%8DMO7*su`$ z%OVBx%>TrfLe%pqCQiD)T2tRt&&P;{722lxZ@iOs9rg&vn>G+XNwqfc@#f`em}R|{ z{^ZT%F|>5gVp$V&r~9r6eBhMp?-CmYLxG}Ba7;DU@SlmwoL5$hgj)#3@KxA9FDSfg zK8I@cUp8ns*b7zO@~c&uz&LJV)zPYOz3?*WJZs(S8*SM=z8eal-NcGHMVl3;OpdA@ z9Hv-COey-1RD=QUDq=X*dI$j8&4UHj`=>u*K57qbJppC{=VIrJB1+w4rfYco_XcM5vL z{e4(zQ|+4ZDJ{lt7o8a6`g>#Q&N!>agTS1;yyiml#^z>@_B$Eci0_V}hoCa_(@UF*g7n(}V@@OE26GyK{+Yb}*xlNp+(p;@kVk#|W%PWX6ISeLvyQ zA>Xgz&BsDEvyX{(KMz=ZAeBgCwaT%gTAWLem72`wazS@+*yX@$$4?ADj zr#&Eg1_eKWx9nK8eCl;FDpIA~N3BJWmDkQ=Wi(XBsklkr9mV_@SXLEGuT=@4kicCX zK0KP<5*~F(W}U8T|4I%lZc!qpe-$@;7ch580R#Efe}fRcENU;QSPI86dV8*#Xk6Qh zj>_ahXvpxNBkjS84Q521!}>=VV6qpstdH0UDAI>AX25W~Cz?U|_Rjhfm(PP;SRQ$} z=m^1SqwB^g86ly}8VJ*}xShQ+aGI1~t~vX3hb1p<>iv`POPdnEzXyM|(WH?MdzN^o zRw~T5ajG?O?JWF&;~RlPSv+m-@z$Y8#x(uzloIIIX7>x;v)=KZK76LfX2^P_dcKn4 zVSXO!pqWmO%|P7cz=Q@QeU?@rKzeVacBt}j!>;FUCf)l5kWqPMcxjSI500J{iLYPT zT-SFUH+vn2myM#sP3k%+ZA@*|vHpwxW*_f%?o9DhS<|5SHog~=n~q_fZ$+vwW1Y7C4PD@+F zgiJFj1eSu&R5Ytu=@aJ~x?=Zku+p(R%BWac{c!*0#!-)Guy3~`P3PoI&G2%=@p#Zt z2E?$r-ZJd`M4_}2H1UEh4u-k9H@Ez2cNxPkZ%Gp>Iw0p))!XB`+Lv~h71nxAv$u!( z!Q(N+Sx8ygJw(R`nQnAko&S>wQ$ovd+9#B?Mwty_crp!34Z;mx545)kRs=q~zJf{2 zucrw)tx=(ssb@4;vaV;zr<8bdTw@?|$63yArE5jOfRCf~|94!)IK zDhGA_+-aUQ4XCJm9hx9IA#Vw#RUziGPj))jN^y?N$zH9i&A}0yEr{L^EynywA^Ha9 z&tM-87=2kP%vxGd>cF>y9zx$+TSQyekgCUm0d5hP3{`Q7Uxn|-O{VpyhK07X@H}od z>hW*Q{4Dw6SlD1m9q~=wLW6ltUQ{T*qfv5Gixoa7JTibH{xIVL!a6@duJ(qk8@Yns=D$8;=lUt3bHGJV-DKq7{7-$(@&-$Vqc z^!#=p>#xfjjQNXJ7W#^`AizM`K<-n;!19>M90^=&oM57mvo!guO&S+KHQe&($3@i^ zofyN0C^)vI0XnTJ>$PS;d}$*IdfT5Q_k@i}<{nAOz8aXOgy*7nDzd-pyDJS}_ipBO zBNlK#Q*doRAE!AcneQx>E==4z48U4uQVu~b5OMpfEl^d`axCT=l-2-c7B6JL#>l-3 zv$dHYY~LKMD>ht7alwT2m#9J^hDYZZ6b>Qtgw3fHw9!nnUxc-dV@xZd<_F_Ip{|hx zIeMB$0nu~EAEfk{zwxTwA<3-tU(%>BG5LzWPD*ebtqj_uX`D#?C7C%~J%O(WpBH}4; zqRbCj?F8^QJ4Q>DpP2dv-u^7rX^1R)*jDQX#vpTVx#lv*^&gp=K7Y=3hTAwHEsY1z znVXQ%Axy_93lLI+5zs(Cnsb zW&3O=3(?_=Mnq+4>*Ghs>6>E)?=2^)r}L{NtEb>FrFipDA558z$_)jKoA9r|SM$)H z?{9vo09=QR^ZlU-%RI9KJ`Qn-!d#IXgWdi{+}G|Na67*!`8CPXZ?_n5I0Jp?43KS{ zJf~kBbKSZf-?YioX(@cEgpvJVA@i$bz1o2^tY;N6hi@VvM=})$f*on3)^(QppmH!E zq!@be+(n9be(MvSd-igkUE34>YjsA|f5gJns+XR3ZRgIi)=528?wu%-8qD-t?+D(# zMkVv+g65dT>hLjI*^#4%EjPL?7r(AgNdnGVq9DL=wfl)LuF|6*D=SMWnld>A;&X%| z{_K=~FS_b85i9OZ+UM&8VG}a^Aql@Oa6m?c?w98m5TF~+?oFn*v^enkR!J>pXYTWz z3N@4ZrqE)+xJo5kG=six=83l`j@BcB%)XN!i)F3Wr;2ihve0+s8*Q=k>Z5w;GW}jq zt7ouryB48%u{EjDvT1!k{esdo*xtwaj4=D2`{>{r4K>NJ0V^~x=k|aBd}oy%Q;<4i z9*=)&&TfhBfp+a%1hzE=Y(xjPtze4o#ikI>k0#4r>Fqczwl-fB2_Y^)j!g(9$KYL|kTpy)qw6JbLVt^Tv6511n@-OPcQ1GaQT7O$+(+ks zagMmapg>*ut+n;CLgnz#aDQ^pyYn1%5t_L>1Wyt!a|(K(pVm`B2x{`T=>uj@Q)dxh z$4fd*`ztf|2oZ*MO-YsWKy-T07S_n0|b_5 zsF1I{;$4s)$!$l{tU}%~50h0SvRIPD$;qWsAz8sCAv)A=e2BYfu>Y=#qp+g!gInT! zkoxlx+-2=(%f?UoiD@TjsGLEimFkK+-QGDqy~>dd7g#!aFx$JbyDCuXXYotY=XQmm zSb60ov9Nl7kR?GWPp9Dd`^Px5`rhv(g_Z!%8}OZOZnmMW)Q|i27_%2}Za)BEmbU9W z805>5FcLG8!xix_xBTJR_I=_hkM^0J>VZ&f8TafxU0L|n85>g`k#yIOdF~GSeB}(a z{Ex=`rcOTEb@lrQhWRgAYbMxdFurrG;&*O9Q)<~Q>IXsBF>YxAu8VhbtLvIIT7`kr zyltLTdA?>+T8*Zf%K18f)EO%fu!S`S`iHJ$$;YK)MdHJTISw5?(V&fmmGE55PGQs; zfVAPt?MtP+Y=j2bV8jNpYG@CR6X7INCpBGQMmy>p^88U-Eg}N%^XxGBFsW=bNNs0T zHs_tEvg1$ZPihsLAEWJ>Ee-dCe+%3CA=kayPS>Bp({MSWO<6!0%w zxq{4C5Vq;O+83%@zK0VJ$#>4j`1HPAq9zdq&Xp)eB$7U&*Wp~Q`) zd@I%Qx{@61+QehV&xBY;?&OgMeKUR?)_b?U-ZUkqr+3Hs><&>{SdC7HV0;*ip-F>) z%9s|L@beDbN%>3$w*NooR@xj zX^A~ULKq$&G2t~~D0Dxpkl0f!=hLb4#MDxNhN!p!wX1&DMyMAty}BgK$`G3L5qcDxvVqP^ete}n+lxBq-_mfYf z!1keZL>hqJ`*C^<*YpzG4yU5#fLQq)RJ@xchlCH8q|_4cp>Ex2+hU#Yq#d2eA@9@| zI7L5EPpqr^8%68O%VD4vpn2HRMlaizjgA}1NDV8;5biaTz1I=MA+KyN+n8Z-Hxr$t1wvlLhi4J5IMt$^oR#|jz|8|Wh zR}N<3;44KLz%B6Bp$7L=UDSzA25WD9&_pXf*<4uUob!4%t zFoH=O1Qw+1Dbcy9z5bn~iKogdXS8EBxwjF>H^Gn%5$Az5x$z5gm~&x z?NN@hd#_ijpLU|(s<;7h$FI5stPs%;{(Id}Rr}cdDKTyKgA$O*Q&yN}2gPREuu70- z%Wx)`?J^p?z*2#}4=EF9$39aCm|mCTo+dVr<^+0{-O+W&NqroaX=~_yo+AfJQvTlJ z6>15O&+ekbT3N>)rpdhoF7XeZEKc9RIKBbPFI1?Xc!uVau_g;D4&n{>Z_-lhP7nth zy5&K1k=XzR_4fUWngRjMqNPSYBG zP^9-*LuBY9-Q`c}e@F~vRyoda@9m6H9+&)sYon&MW}a$oeBeTl;9D?*tvPper9IS+ zOQuMw9k6kh|5Rh9R+z4=;pA&g?tM?>4qMIO-BEL4oBeP>eQ`+Vl0e>GNT{k|t0~L= z)+QV~hOl6em>XAJ(@h>`?bbwViqVtD5roDjy&)y2*@in%eU~II-L)z-f`qt?w+@3I zgicTjz03&EOuetIrcP%tPa=d_Hx?gC{5sD8`L-B!^wGWf3!~ToZQ+|56>P_41=BR- z*!ihFU84{4_XELh&~qU|j;%nQzSTA{HR-0Ne~_{xWfuh)g{;?6;s^f2x5Hs!f|Yy$26Wc z@~Gb}44xy|NZnOSp$KXxkMjN-d#P0w8=jJ~qDN*$5wET= z29EvFo!JKZap2 zyB;ouG=!1X#=oBGPd_;amYUttH;7()=*-lEhvu98Df zoRIpZ8Q6ArlAt0#ySu>5*GO1JN_-TO(Z4 z)Jd1aQz(optlkQDHbHjTig%pl9M1^00Hw*ZbZ_;JvYJL|on>d@$9r3c;#@**?+0?} z>QdYy%bBXMH%!j-bpU&y(DqsDu2e==_{$ z(^x)TOY-g-d+gmzN{%XQ!~0~1hd}^NP#cCd2HgAol`b&UXMToWA$+LI?@p7hv1nFK zMmgY`udFCJP`_3)HL?}ZPoQ14 zKYr#9*U65hUS{nf8}ikhk$o#h}p zhTcf1e!cQr(yLHKNcK=vr_*iZJWhUASO}?SSUw?ODfOu;^=&d7j{cXBIOCt}aQ@qOChh@0DZ-_C_+>!f%v)H~K{etfnxgwkO zfbaUJQ*xgigzyJIBBzY%*)7~*RHc=0UJ*0c?G`ckbtshTxTNOVoga;e$&M3!D{@oH6g3KXP)M7&%bVWEWHRu#I#Z$>WX+Sh5|Cfh_ay&qkZ zhd;Xw+b;1WJHgi*V#}2Los3RttzQLOpVxvca6(-dmv_dbu~z9w?-H#6}m{|7|Is;vlg>J;5*5RNmAQ_?>F> z?FTRV&VP})3Nr=;4fJ>WL>$uIg?vq0zBVOqyk<1g; zYi&IpF?pYm;<2%)vbvPv=lLJwxWbr>r$%KX*I|U4WM<#2L5%_kw7n_~$%8uBMhF+v zO$D}L*ywzWU*@~?q>4QTNF6~ZbI0LDtC}0#p>${PgFhE9yya(U9p$~V`sT$zq-8wI3(e}D`=q1!r zmWX4Y3h2$wLK5ZvZ^-+9`@ewar#pb#PV07Sv0TU3f*zOVHo$thwtkN1R|oNuAWD)i zru34+E(NySH$@G##)WPk!x^f!mNo0^bsCmGx%%O#t4srdGg3m|(D=0tkb$doI%D+nkWCrQUdWi5NQE(O{ePSK+|h<@?6liIsl1+Ft~M{jur zAkYxMgJTg4R4csFBsfwcjRvpR!~yZsq*kX6(0 zfa=Ky76vV=Uek3VV+7k~v7DbxU^ziDiGYO4(dkJKBnYi3951nRoegL@G*U^@eSLmC zx{GRMuATg-Am$0cdc@N+aP*y5jo80Vrq_jUk@LKOKC1YT+{yk(<1+LddLlwExPDMa z5n-B{gPS88K89j zz|yAjJMBYe_S~$;S_+55s6&%etx&^EO%7x*5J85p&c$tV{B`La{4HJ&}$1Y z@?Hw~?qZ)}beGKI0vr-ZOj0+hzyX$qG)!f&Kn|-9%=D>DbQ`T%Gr>U=hyrgHK%%YiDT<&7gv9mj^{An_Sgh`iqhb|bGRtt#9*eTY%A$-c*SOS+YCYQ z^LwCRWS5VP151s%)n3UkqE4gX?EF;l?F4by6Qyfr#oa(%UO3}^gqyGDciu#dtrZE5 zmpV%Iz3UaVA1v(&0X4?$g~kKs=c)8jxM8cRR6nbYJ|4rNrQzJ-C@{CSZA@H$>I1le zO~4Ttd6J-QfZtPN6tTDOUI|htgCG6)<$2WcxEcrq(3q#?2egAztu*wAS@pm6iG6wL zYZy5DhP(3QIu}>a75AW36GzFbHPAWIQ8MV#s(sFJkTVYsma9tVvDZ^W{!zMJldZ1t zQw`tu#0_Xw%izmQk6Hy|W0rMOke>tFtk>!tv0OF>PYgCEEZY-HzK@z_QBtv23AdUQ ztMcdR@z65%{Q~0Zyb!b99@QB{daBG9k&N%{cz<3w_+C^){?78@s3S2@pXWm?s0?fC z3SA=J_^!?a*2}6%ZV$Z6Jq_sR_XZnxKZ4mVO&7I- zBfFsoQq|crQtnIKJgFYfHu5hmbb{RCg9tDufG#m{Xm)3ueOFNvWVI{yCGX`LweRT4 zQh{EC)5v{V&rU|hBonN_o_pCqi;AE$y7>HKG?>rmZ(qkdA zksIRXDu6OS6}HV%@X$pB3z(^z{u-DN`YCjBpp4D-Neh;7LjCR#er;Y~*-Q?$yO5mU66mhm=2{&*Ox(fZV(Jtr9B?teNQKrW8B#{=S_XQu5 z!b`_eKd{vptXDAnM}8f%=eXUxGWx`NQP{vb;X+-$%Xj*~tM;_}C3ViO#_q2+U>Gy! zUWjhe*>ZB?GKQQ)HV1h8f%C^>LE4syqds!?0>_H%%RhmFU09=n$to&hvHZ>4TBxME zDFF*+W1}ZSjYYl|Y5umhaT=_05@nX#Pc+Jg2R*^~g2f=1EVHKHmya29m+|vbl%o;( z%aQ8z@{`A)#LQSsL*Kq!59bzSE0%ENd|5$oE!N`ak$zCysOrF6gp}!Sn0x)Ci``i9 z`&^;%uB?L8$bE-lbQTY{Qd;O6)r#^B2IN_%L#Cq=OAWKtQHRhi>QB~WPY;q}xMGzUWVz!SpJM2pB(I1Kdv3RRmTdY2!lGV)G%uO>goKo;BSa>%T;jb2<%|SB z;j@yN1)qNS1)ZYu_*gNv{1r!Rt?ti>S1ApY3%dMI2v&UGpXBc{89&q0*Yih6COhO) zW4oE>%gEb91TWEEe1)R(lJMk%JR?*F%o(n%XwrY5s?r}|&w3#vFBD-Wh-TPeyN$t6(3&iH2$)rP z_;2$re17*`$opiOq()HVu{eBr5aC=r5A?Nf;Ly|JevRg72Q*O(>Wj~l$f+gX+LiSd zeCBm6ZIVwS%vrbCnj4!GJB)H_e*vjuzf&JENQv<2CPBq!nzeiBSeANe@wsN_$v|p#ne<7PPmHf5nOWNMe zF28zpGH&iI%-JJf9`e-i)Bq5uH0f;kVaG@t1z?*4wI<4(fs&w8dk-IT#uTU8F9y7`4UZHCUaclJc_QQ52RaPM@XJUB;BM~eQ| z8Vb(+q!rzeB!V3+7i<~OukciNyZ9qEN#;U#SI+iMY7w6(LXkdDGI4AE_DZy*te}@9d69zGuAEPt!|@=%6v8oef7$!8{phyA?RE6 znOakXt$HKae)ospiNoa2o#lI!O3xvS{vR^_r#ZhoX9)4p#YiydrY%-z#Dn+U4A-U{oG3bA1QOd&kc3jTHe$f|dAY;R zW7zNa=krHADQ|SXi)k24?cUMPmXwFvl*t`+~Tj{AjiH^S2sYbI7d<#%jGQ2&dHZ zWH*u!yXh_o-nv3f1F;&;5g7ZtHL7rIieZ5>q+?25p?tPn2}S}g(t0NY`?eT z`U(#i`}3Yg8lAde>`yIAQdn{w#Nt`}e^chF#>>DA%8ph1 zYDxQj=l&Lp5cD|v`7O}1`%sOLq0U0%?%v};&1?La!@xjagIZhUPH*eH zx`9@PPv<~vF$iw;-fwlmU1`Sm}CUe!XRHz1*POQPQfPxp&6(lw+l z;xm>(l#u|oT&Tnl*+6Cbm%hpYUcerM+7@{8Pvvujtw!XqTT=;R)e9mpgAZO&I+EuF zG?YeI7@1xR-o6FAbEtM-u81zPZH8BzcipnY=5&9_n0FDVc;b=wMc!Qh+}QOSV46k% z__0?)0Hb5Oxv_YINtSBP&ZAc;K;PyYWcmjWON=h}$Q4z7M_P$~SwZ9>wWh6oEM;_U z!R}*2@$q|5u1CytLc+wuZTQY4LO(>OrM$IVEF%wy6|K-Df}BZ+E2%$n#3y z46*Ft+ah~yHMQAypK9}pRe$uK6w`dXQl?hXHlJf}X^@1M*toF!q$~|R;in5`28^eB z8AB7^X`t5m4i}#35GpxH^ zee${Y#SEZ|&r?1>Tl__Ci^bSV7)Z9T)G3y0%dzZoi1mp>Ksv@XkZD|@%HF^|#A;sR zsqhvMShbr8=bnKYZ7F`{%K@oFgu1Tv4?uUB@Cw>qD_XGH4brb-`)f@UZIHL=KB11Z znswVeoy7s~94pE5;kv*LOm1Chh#J|%M)KBurDX;d>e1&93L{5@ zWD2mjl*ysFhHnk|wOTXx&P2gz?mq=bWYK;GePT`lm5b^06_I?7vKDV)SVZ_@lxb4kUS`3uC2= ztLG-PjyP*RR`N<|BfXA13_yif*XcdvNN{U3@3%smZkB^Zl5}{HbUZq3;(vJeU+Rq7 z-9>>@G!llUFw#^cTbbS~*{i1@Zq|^rFPyG^eV-2ls zIGFylE@)#|pcB8X{p;AIU@u{Nu17LE;l5X!GWYieR9VNS|J4runO4aylJ?dy!I%)y zs_?V60+9XDJ4}u}J*CabA>6jBPAx^(c-0dt+@T5iecm~Io4K2v5oR#bTEcEhZAZx? z^ru%)Q&uf=$@@yRK0mbhuNBI%qd+CrK#A9i^YDlE5nLb&dCmO2i&x^U_i=n`*mzyt7;D~kHb z;6(M^7;|IChS|8_8(yJiT!n<}#)OoPh-t!IFfXz1g-!=&T{~*x4bm#EqtrJYNQ>G% zQ8HbA5?TWk{M#okK&AfKgF@p8?vKZVe4)kxDPUxpHp%3#3EXq5{eQkwAnNKO>nXrj zrI)B=U%3UMu4Y-0(X6Q7z20cUIo(J0R*p$(Uqx>ERah3PGEnW?#SR0Z!DEwlNn={? zFiND|fPIlFLl48j2XSYdo(QMWGemtC-}3KF9J+w+XGiIe3n^2r3F**WCz<5Ejyole zD|!aS!v-WqewXn!V+(boO0i*M6}8YRE4RuT>)}M&HETMRp3=%^+4iE!1=^a+pC4GS zmDk>N6pxD)VLJd)TB!p2xryT;k_4fZV7TXc!>@a2>t#_}P6ktGQf_gxb=NOT%fhmr zxtv0^Jo|B@ayuR%DgWVqj&WDRtga*YOPSSsN|S|or?N_IY_h6M8Wp2x6sMc>mzvXE z63=a9RT<$xWONnr(5yx0i=Zl*G*dN4RF?A+d$sHxZ-m`-Cw1-LSeKU#HOUtQaSGEf z@BAHix4Rd>DcK7|&{LOzx7sPj0v(lr&2t=(GXo{i4|h&9to6Wd zPHO2}*1e=31D3e4q0O$5>0Ssxz~(lS)~|lzj973Q(K~$t#9h(6%^?-ah>Z>3&0!?% zIvUBez!LIDfI~whV@1CL+7stPbstRcT60i>#H;#x=~1MpV%$-g67p#EAd;^$J^=<$ zO}i+un{^#Bw(Wu5(Mapqy!{kD84`7vZS%vwZ1#^e<6$PiimegkUR^xSz50h^Rt(6! zY8oHi?0G+vLd5=4$=kEvll&F5!5t1)(OWx1iq4(o?Q-{%2Khz}1(Njco-|zYUS%GZ zkScJ>?>9AXPNIDKR>Mr1JFuk(j;(k3zNS?Se}sCx9m|$JRC{Fb8%mk^#jIX2LRPE7 zaA#3}g!1M=^V)igk~)H8ctQe5v!%La+Tuer{@z7A0~hhf@kKEF*NdppLiRCJ=o$pI z#g2Zkcm%MG8}~5n+BD-VuS5geE_rhZ?$5Or&ymq`VfS-HE})U_!6J~+9FYQ@-y`55 zDki(su8!9Ehp;k8Dg33r9-#aICPv4;cE?FqQ^!eHXGQe#{!F?$-lHFBNaSk$nRMk} z(6~&mI@c;B7oGinUe(;(ybTME_J@}}DCB2f<{z_LubUKAS_N_Mr4s(8Eh^t}(A6K{ zJio}m^smQAtH2#*%qyfuy)4J|G%`&nsZ`jib6)+WzrUC`y%*hOx+85u*_R2m`k=N2 zW6uV_V$^=2mdiQFDmLYaa8uiGb(G^ldrCh3bC>m2bA}lk^qg*erWar$5N50=g!yatqW?uKb-X=3hfo54aeP%RKqxGVkfkb%oTy7a3O){B6(almjEo zHrXXdexIsUn!nVp{#(Tg?x6p1R$n78XBbmUHWQj{lVGQ6Wu)SCQL%~dT#S0Uy=ngT z_{bNB8|IFGYq|ZO&-Ro*HXJ;Tk9zZ74k*vKbj8~`60hH7I#a;*R4iaVX+?D#OwFTg?d9pZ5nOUzv{RXhm!P)0(m{-SgqgFQT{D+0Ap!Zc@_aTI(fR7J5@d5wa-T4hY=M@OJ)M(&SsH_b9 zJig?GB}dveybTTxPC2x`eC$m>wxl@4^dRa=LMHDf@Ui8>pN{gkLv=7drX6j1dGbHL zmPxr=FDRnO0uJ2mdbARwz{b`x5_AeFq{(B`>)8cm7Wr8=9_#p@Elo4WwBufi$a>f9)WD!?N#R zzoK(C;7f1NEk3^JW6R_Vy9R?mJS@R$aQPF+O}6*;S!FBr7PuW5_z)510Fn^?t5dX! zAzT-2h`A^~`;^Y-KYv_&#jiDKCHTFQx{B(IkL}cpvp;f5faSuYs`c^Q}BaTFI-)nHusl84%3V4d3! zG`k8Kz5aBC{`@UTD!|@#U_oHD{?Pz!sZtarJ61PJ-O5s%-uuzASi*q&$17K_bfk_V z9u;uVDNK0te3bb+o&0}aZ84^7w|*21McQCY`G8S%zlR51Uc8ZqqNt@d<*3dh4Yk3> z+w!yLdJQj)Dnz{pp5bfxZ6Mw&zYS7gtzvJU?>;d;c;g8Ob8m`y{6AiSBO8M3WL8eC zYOPpTt7fGm+>V7G{@b*GD`hR1_kV)Kx+ZQu`U$KojC)-u{4p+rN)@7;;Nz`?i(vA zGvf~JJ*wiogztZ-S6_%Z^*3vf|MEgADFu9K<}mnFs~newi25O_XW06=Auq?>)EKYx zP(zg65)sIBNOwMjpFN3T;POrJq}N~y{tZ(&6gZiGX?C%iJxRq0xmLqwc4%AwBo1Tz zDU#tdMaaKa(BHTf|NNB)w@*?H+jNGjmbU0ds-Ke>Js0&O{>%4{ zL&~U8Zwfdd)7bMjA$LYkN9zx@#U7Q4wP`Y8PEOU1(fJihMrgSiV1J+w(mB^5$c*Fujt6B=JtZCDSQ*rcarFnOSa;-uB`*G_-v_=~2Y8-_+7ud4-CSWUP|Z~rwG^hK zW(gHn`c7NwQT>)h0TXmFG*bNk%piiWhsVQUxvz+k#Q8MO`<@9(e2i93` zR(Mlb(QSLDXsak;Ve5c@$iyh-PTYqq)A`?Mqu3dzC}u27?Et7I%RIR1aIGrl0t zkXSPY5&qnytZ?YNA{H8mk_Vsl-(#8nz7SrwQeFv(*figXQ>qc8I;p0;7)>>kbm1>$ zZ~wWHvL*l?s?@`YljEQ8dlo^#pw!14`=3Ys|9MmY@83#S16GpJ=FC%#f5N5e0@;HR z{-1HF>;MC-exfNi?Jwq5|MBJG0i>yZ=bu5EMgb7Zr5dIx!txI`7uOklZ1JDL#|qC# z$ac5{m&gBLqvkT{KEcou{H=IM2Ij(ze0KOFzhuvDKsK;f`x+OUiG zFH{--?*i4rgCFMpXSg-3O~Au~z-!~E{{9s%owakRPzLZPo^WwxxE&__y#xREqn~;3 z;$s%vb*R-838l9;IA>^xv*&}FOCLS@+e_}X%hjNkPD9PR(4woXG|-`T%>9a@8x{5y zXSnx7bOdc-h{@A3e8#^_YeD2W?262 zkpDNA>gU{x;w%=?QFzVbf%4>vgjM@jkD#gyE;+~SJ{0wJS1W=eTh1+f`0%awoP}?B zONV#Z?{KQ2&f&;^5ah%Ydp+*Zy9k0C`=5`}WRMgtG1N+D-$S~>x`j(@s=^~~K*mBW zh~AHs=q#-l26r9erk%vXZ)YghiWykK-+zKSxxdA7cwCCCW_O9X90kBvN-;4H-xqU- z5cVlrc6FhjEw{K|2X=Vu&%f%Z`}|2dOl_rZKu5ObTL*g-JsI2N*M(O*V^`VMp}@o$ zIF6D2{S{G2HAXKdv~6aeIs4Q3(QgiKBGrG)rZ(`nYvm2&5FlMbq)Qw26 zfx!a$$H<4}0DyB3T>B(FMZu9IBvN@lze-$Zu^bam_X?Kce$nwaZY1~C+4UO{i|DsccsKr}2&T6@s zr8%Cz9NjV+CHUR}A`3{YmuMgN^~W-p)GJmj9XqU+tW209w?<@L=&CjDsoc`0TN%9g>WX+WRiRj^ZWesJ)Gdxwusm(7UM~V>D_W+7SFUNc1 z`>2$`B|rl*HPG-?SUb6|?ovtD5p$t0st|55=0-T0{e zNMaUL5)NJk!+Qvr-r0?4nxcAK^QfgTqdZCGzrX(fwqTf_T$%!IS_-7MYkjtblr^q) zI<*_I(-~rJklju#>|iP4ueco55+6-9n?_m6S`iR@dIKWc*WVp`6EKZiGV{8J`Uo9` zO_5wL6y+Bv@3{Tno8dn~f&b?Lb?5VMQlZ5m2FtOK+*uq`=TL;NMRP$|T1?8CjyxGC za}cvCdZ`Kq-J4~u&?T)OC=5=^%;aXstkWAp-HZ2EYY;1Q?xvgsTU6%p-v=E@pC`Ep zW-qyRJowPOsTFixn)x$#IXP`pi$IA*H(F4@{-pomdKr(m2eIDuaiFmlTsVIQ1v?7x z>Fn>0e~BZl&hnGOnFK;8c|SS5>#A`5+lR!tiz?TzfT=^Y2322e&EZ-j0g!W;tF?|KC>5e_d-?qF2DEIDoCkok6caz0KCC z)Yzoq(O-UIKfp&zTV6e@AKC&ml{QE&1g+Fo_?^;af3h1Y&#d?QLykpf!LS^%W?EOzlj+y> z`wk(0^V(Ek?p)ZhVLdDOUlj*ns$c&Nriz8|#OK8_CH7F0m_4EulF9NpPq!wRC{L8e ze#xCS!ATbR=dMrx`Ak(osC@AF$~9IFVD0%kn(7KuLg*QqYW0C%QuS!s>^!T(<|dNa z<=xv_s^8I6od8Xh;eTWq-$)bu_c|h3-e=k(#2K1u%u88aJvJ^*M;Uaa4&|BpnO%^H zvANrcPKnL339MSg=T*HKS&QK0#X-@xDF4<{e7(j4+D%6%XA&k+z>=yTcdgYT6$!@u zrp|T7rV69u|67={FEyNJ|6cQ15ATdkRo@##a!2PGMaz@V#OJB0?y9IHNcGjj%>q9Q z{++hYFXtz-K)UcV_20b`3j!(NQ;l7GeU;?M4a{omL4>x*aIEx$m}hk2C^UfH>Db;`3g+2iKF z+a?P*Ysn-2)g~i8>$kBJpS?I1^v%CV4rKlcS}7rDX3)4Z`ULi%w0UgM8Pn;s)^gDQ z-2(d3srTiX>_zO*CmC~1rZYOM^aqk+^k);lgH59T7eb#Vr6*pZki+eNk#6*v=l5Ol zFJjdH`rs!{-3yT%og4!B(94Vio>Jr1ktcujKjml+cF|Ic<;zT1`XvvZnplC5wE2J0 ztN!=1{V&^Q?B?%Z(EaQS9vhld;1NF21@)b|8IB$I)Du~46O8VN<=s#|9)cta3kO-G z--#Es%6UVSPov^k$>b>0E_A<1nl_=_A2+s6B0n?sEP~XC4t0OoN5?9=n2Q4HsqJ7s z*0Qh06IW9pzvJnrB-tO{o9FJ5y%En?Q{G-u3<>DiP6VTj{=<&Gt(ktO%2s_RJuROJ zFJT?Ln_|#IN=K{F6y2SV1ps}pNvm&vQrxf4C;#RR<<&O}buF4vDanFVn^8pzUKxI? z#GSp}?%4R47_NMJSc*WV5>-4PQSEOg?i}}{y*29nGmkA`R309+kQwL`y%G~kW3gL; z{CD6U3{OWO;l`p^f37HRbh(vzdRS z9vkHejMxN~++0e$;JY@}b)7`J$ng6>m} z;n*G8#JDsS64dpVo)>1ZJ*I$S0_t~W6t_gJC$o(eSEtRLto`g$KZP;xB=C3hbtFPb zmOC>~d!p+}PT~W6c7pRNG(-Qc?ru4q}KUZ1**6T%>u9aXles+wQ)m0P&2lTBz`f1A)qKa)|1^GCCsNca%58n5ci3}2 zDZ0XWSV1#WLK}T_0pCN_pHQ5l?*W-IsVDj#9`pLIoPeJa&VzAp;pC~7?fh#|mfeXR z^2^42iVQ+IDiS8pW6oP*CknPUk2}gFPnD-|U@G|XP|1VPqukD|sc1SwE!>B_@Cs|` zH#1=uqn$weh(UevIauW$?%ok@Jc<#XrJb85^yZ;sWUQxVZFRihZFH}U#f9_Vt?Veg zdF!x^o_o3t&C=pxr#kL^j1OcC-?dv7ZIE2eO13>`NM+fF_V-H2d~ncH z7yMBo5Hi@4aFx}64 z(yMK(KwV5^>4&+5ui-rC&dqu90NXu=677&am&Sq$hW?w~5}!U05V*ky6>j*U(3TOU zGM3)dnkc!KNs<6*fj{kP4FS;!e*ecI!XN7d#Dp~Ua*{uIEq`*g@^ zN@%7C+R^S}2VWkXRCVrj(hRe4aw;nryJ%OXmNWkO-6DPdsvMnMhIN=^#;dhomap|m zth?M2U-9qrvD6Sh9lFgwn?0Fk+$glIZL5VS7hsAc23zg!*;Y#yk#~WZSY5NGo3YSQ zh}cM5oA&t(TD?r>@(ZbU3rg^+pI+d7z9DAy1N27yJ&u~)%D@h(#haZS;pO2k zy6Mx?ZnvXuKpmSpTrZVhLQEzBV-G7Bckje}JHcHQB4=XJ)f)+>#g?loDk~N%UO-Zc zxN1};`=kwDeW(cRF#M)g6wtgsvu;_~2B1%?#hMmFL|c!58OiWV7q?q1Biou&93(V+ zuWAP0R%(bs41}E)S0^W|YQP|FR@RrR0n1BEqDG0S{Z<}&j=(IW)tG$drJsV?8|(7R zm@0!B<7#Y@Y-D`OttG2l*~b!FPSAyMA_-MPfYOuI1mwa=TI(yUGzfdJ5ll0W3X4rD z4TKz~m``~OSuyKFjE)Q6g;nedx0txF-+nbQ2Yc%?T|axRX5DvDO-*Y~0m8nR^dWW) z(nY&ySk*c<0~ZPPd43w0>)9W6D*6>A<;P>{FWfB}6&oQUKct@2P+>6O`%#=Ax*Rt< zG<30v8{QJbVeDRFOgqJ)RGv4XhC4ZFfw-z<)(#A>i zXgB`Bb_bRDVyAVxm~5uoH!YF%s_T6|jc1nh%=*Rw9Yo!i3+TA2E?!mt>1z8#X^A?w zV=Mb1G4AGk6)ANGkN)@94~^%@S%vw!Vl$Ly+`|-qYB0oIj}hgZ{cLM_DH`6XU~3rx zFHT^WcTv-;xYy4YgHwAxiB6zl>vY==4)csLTK$!uEzY+jl^9a1s(JMqE0bBHwk%sa zj+BKbM*h&kPP}1fGJ%X$iqNIKv&$qU#^F68)2>w8H=T|zaW*R`xLa@2`M5vZ{!;g$ z`x@-fEPb5PN|)h`z8*J-n_{Nx)ubHToXbvBZkpKN82CX4n(VINhg{2|HVnoyPKK-k&c6ZJcB-N@OA$KPg-C=y?wSb)ytJT$ zF7uT?@S?$;vx(m$28^H&j|p$ABcg)$>FOcjP*DIy=@FZ1%m$KqSgphzkeue~6#&ia)Dyt6CqR{zfu!2d29 zfc+0H*WwVV+1bejJk2|Qwxh9+8nL^&I+eubu8C$o!(N|;67 z9iq$8?K!0had!hc1l4THG*U<=B%@TkrelEH*|lk?zjLSOaVNfrua1}ZMWITTN+?Th zoW3qFkPKMjc0#Nq)jAEEXwbS93NYD%4}B+jXMf#uiU&7+XI(gH2$MQ_iG5-GZdlav z#J>F^lAth|s$VwP?2ie*!U`8G+;Y1oV=?-ZXtA0vgL>S&iD=bXCkL>!KJwNpKkY$q z9;r)ZZu#v+P+>+FLzrIW>}@o_{YPE;oi=3_hBOW)Cd(*EUlkQhyzB%BC)Kq|r$3F) znVZiqf~`5j1Ur<39u>gSFNn+yP+7D>Z?oOlSrSaA?h?r!517ONQ*G#$rL}5FV=;9S zchMPTrltYhqMD{0>cS8HJP(g#7W}fq zT@0+oznU^Iw*)zE_N!a!%1KIDHo2*Kk_pcR`S}RM#I~k2h~Vb90pH!Vyhhi&g2_@1+^}`>Iww1<)I7u6vtFsb z<@x6IJGUid?ZBvlai#6j*Y`scM49UG#cH&O`5t4o(?xAR`={b>7EMgI#iqmq1!B-y2T!KZNf^C z27@=+jDo^hoG0*@veUu2IW0+5Bl|>Zu^XpK(ERCjVu|WAupxJb0Q#uS0 z4ct!}GW`W*XEJv31dC8R@yo{AYk}h4Qihq8CTpmYt%FJP@v=n#F@n{b?O!d3HEur? zA2&ZR?KZp)jjvZ+Lv-7vI?s=Hf%4uxt{Y8>CB|^%)b2i-W;`av0DHmgP@>#t)MdU= zh8Ai6979}vUh_4x3p2@|Yo5O7aZ;#K=xgrb6B(n4$*F0!>Bmm**JH!Px_i>&-sFrU z>71J6@_c^nyRmY(oZ()7jd2fAAyhKp0^*IIx{1s?V?Fe?CKY2D)CwjEsT?$mR;tZK zTrRgcqqfKEBa*;zBUPmwY!!cPN0d%3=~FTD&i4Yk9EigAOv(e{G9}*5&OQ2L;!Y8l z9O2Xrea0Jde(c)n_J7?Rp#oqe@|@g%f}pTLSKgD>HC+ETQU~@Up`yz>bdkOFCTjHokbet zlD>$1|M|S|3~2hGJvUqZLO5n4Hdy83<#360d#$Zyv_C&;0=I)g_#2E0NN_u33_cLs zsH@ySZ%K1^&{joE*G>ejJybgCB{x;1FZ1wl9JdYe7=ka)3}uj@^tXkA z#Ed9B$+F1gIF%xkOYw$7gz$t1DzLUYES@`Uv|s3?q=!JEPI8rXYr3e6{&}&A{mJ@$ z1T%V9zp56%l1`A#j<8#9E88b8@t$9e@Y}UpC4{z=YI~J?wPLhj^Z@QTsqG<*3y4}5 z>j&0bYo4d%ON@KX#IyG9J6Q=9jPJ)vzk3Xo%Pxmz)&n1V*OL=j6R%x7B}z?#ij~1* z4JreVP({0zN!<275y&4YXN3|uR#~i?t&4-uf9`i;(hERt=!7$^9j|d)Cu`8V|72c8 z7Nq9)OHtj>iG+ZeT3FO+(%b{n4CV@x$U})j9FLW_j(C}_ETQsNm=&6?4JwYG;rX%K)~?z(h65X!tvm-SIi*t z)cpG!ObMPjR)iFPLz_3A{=+}_#I(^B%~Dg{dp@uvl~JO7sWB=_KAzBGauxBNjlez$ zt1?EI;c1?8WcR~A4G4dep1T5QZb*TjAb z(vTrEA|#LQST|Sv9u68#2X?5$7;4>xlxfEL=hU4yDlDKlH1cpB=x35EWqUIuS+Eh- z5omX#gN*b0Xb?Ad=+sc_Cpr%5Esh~W-|T`NBLnG2CNc}9%Fw6$WUCT|ZOU(4?5yxD zQ!`IKWKKSnSx{y|aA)?VVdz(8U`bhK=nk3hSt_-CZRe;A7af2M?3BP zJ3ZW*@j_<^A_C*RCiRsbbQkD8>@QiHct7LE?UV~(42L#l>R)}7d;+>Zv7=!${PyE=T(={G`uE1 zX70>YU8bo1;HX6+$_u8Cn`)T6y&u2r&kg?EFR|IkFO@1ocwfT@04;Z%P9^sYyyxC1 zs-}fBnal@=m;8%BWGEU+zbVn-+q0d*t4X1c6Y*Vo2;G|hdAgfL4ySki@}w_&rG++9 z-KVwiJjU&i{fL}6?xx&~1>@cTVcgX9bSM0&coC|Nlii}2WvjZ$NgSdbX(zleB1KC^o9w{%ipsz5R^lZF(cjEy{U z;%WRB$BZx4O+9|2_P%2U%c?Fe6{FMu2uNMjF6CDS@~sJjGIO}G#n0;;qO&hy;(tDA zd+s8oViqgt!M%gbcp0=sz`p|h8jLK8uB@q_t9ivu;XyXS!RNdCatBRio`^j}_lmx! z5`gGM`k5JCVJ&J?w~tv6+di>4cGah26TCr&I}Gd?ylN6v^TZon?Ta zVQGgp1Og-wwMugR&XN6je=CW*Ix9?hA7mDGl57RP51PM2r0qR>*de$RL&qk#fK>_#GAfrV$a=$7TO$?7UeO2K>P9mMWwd`Lz;dOTfkym6)HT{;ve2l^ZPULcv~ zDbwmO#29f~%siOY!?7faFaTTHq6j}nE?z>al*NiE<3s;b?Rg2^cuhvP!YYzaztC2d zU~Mgj;TXj985T$>2)OlBNme1FFUTSIsXUWe`Gh2I1A(%Xtg%|mm zeEW7NSI>4|(SNalN`}M^8Ml1zP6UPvhWflOIBHtwh0DWJzw85(va9r20qGzLhI7k0 zpm)=;Vz=nrA@`+W$y23-vS(I2m67Jt!R{3{+mDl96mqPWk=hKeZRjUg z=g99S#6)MXaHERj#5ks`c!m+!jd4TK>h*h2JQOLE>Gxn-|K{G$(8~K^Zz}>iwvyJS z1e%XVXqCA~id1Xx@s}h*OivGWt@<)v@a+04HXumgo~ta=4SR9k?rU8`i>ix`+Tjy^ zpO>U}r9<_aP&aSLA*FZg+P9p!)a~Ecmh3R>Jr5GR;{O+a!Qpk#*>OEoN$n6oB>Ak4p2n6nj&ieQ5#Lv6ja^8F(9y z3Ozlwzi%r+sN1t}Uzj3_4B@3C!sk9UxUY4pX!jmuLjA?Exp3IqeM0fR>o+0T5+#cI zKVs;q7QQXO|w-7xI(r9@t1RuZ*0)8TnTpK6{3beyP+Bc+$h znqipRg#B@JM);ch>j&vS`1gr0A8xfWEsQvR5V?5@W9n_*aIZ3}(d)ws5^ay zfeoZN2~gAJ)WQ~-(eVA(SA18PIjivR`mUwepOkyd|GL#e)xbxZT`NTWd_5V~6Bges zFWaix11sc703+}GTfP=*Z@UV;)eMO1UwRnZZ*(1XGs%%pK)_gk7T1i7`K5h;>mh6C z!wP&IY)-vUEi-)bJ_OQ0_$dXnbLhLv)<^Ra_dPho-;GdcLdFmpx z*r9H&px<7IMjT2M_c8$|QonTQFS8~bL5=qL(+ewsMDdR<+nb;K1!0=f-Pc~=APai< z-lu)czQnW+h3|vACBmJ2jfQ$pBa96uZNl_Sd=_u*97oQchaDmeP2E==UA}y|tvY!R za|W-HZYa4JU1k)^>UwAN_TFQ?2x6NzaB$m_tM*3w-TL10ay6_Ya-=7EV&-xAcOvV& zLjF)A#j6Xm8%F&n+^%_r+^p-GndpZeaU3?DtMw42^bOJ6jJ(VCkkqS{uw=Uc2{?xL zR$k#pMAOf<-JN4TG_-+y`t-_bwLM=x-%|>G*|7X;qUu$43qxQ8F*|>Y@A{+B%oGIn zTeM!%$gKf2n=G9$*ZrNDD&?J3n#?*#beN7@#P^NL@ysr`HX2Lck|E*U{guEtw+aU( zWQ|utCijm(0&M#+59`o+M$wo)_h`Bxc#T&$yLzZl=H^XW7$o)Q!lNS5{G#qciirlO zy=S6e$yPnW*6U!HFF!RbLBfJ>K9|M9pKu6fCS`)@UBmMEK7A|GyD;4g zDc414`W@`UlFc5^!aTNkU~ZGc0ug-|--rtSYWh)uH2G*2&W1$i^wNe0)%<0sGYp{k8kv|$qn>0DgYDCA-B@JraO_JE7mWRV7V%d>Jr{{vR)+W7u?G|61 zy641ymde=9KH8g%{187Am?FmP$cOq_85~v3RS37e0<9zNMe)uvuFmAK4xiv=%luE{ z+D*Mi1T6G{-1-}~Ia{7`JJlMe=t~VIKy1wCuQUbd*oA$eu9du`#RBEGOy4*;cj0deI!U@4+`S7gw(8aOU?M-!MrcWmU zGvSP)Y^iH1MI2mKo;(^Ukj!~5rABG7i<&}M1mcaXQ=fYjEtM2IPlH;T^*X|N?|3MW zyn3aD=Pz{SUYE!+n}85%vQyh6HWkn=I|tl026Qp}FBVdkP$7X6-n)n<(^s7o_}+#4 zRgMJ|6`0gBKh4VV7X_?THJlGwq5=ZWYljPJR<*iEZnqQjZlF8K%%qZ&32iZmL=Wf_FZw|-idZ=vIfj)yg z=o_i>IV)WkJL%(&>2~3l=q8UR9pW7)>|!&hd)_mCf0=5$dc{n!@s*>=YNJdTXZfMYPlwLcN^{4+Z5_G(|S=S&vAkHY-Boh$^d zM3I}7g7%PZ$9bo1dfBFi{e`(oKG#E`WUfZxq+jCUwkr>wdJQ#YXtaxk9v#{DcSN!` z+ScAyi+3nl(9gK3LwtCT%E+-v@g?0I-%nE|h-)T@xnd!P6}SKj~DdU-c!^cfY| zJ`+SMcle6zqiI?>KhWd=aP|SaAzAh3{1Y`E#|E8+$+~N6+EU4^OupFH)(rmpKeN{0 z2JyaQtIMhi-kl+=ZuhB*B7XfqewB6IiyKn5M<3GMZcsm2dT(9-nY@5M$YrG{O!O$m zjU`aNNvC4l4&yUH;(&fL@&D6rA{*cq17Z_IoKu9#{CQ{ciuSPm>PE0Hd%_v%$e7jz z-8u)lOG3;`n>M-DDXKK3{AD)bnFwdblybxcfaq;cR#|QgS>c0)$<^mFi_7^F||ZYvb)H*wg(bLRoj?CD#(n_2nc}kt<%(tqAo2 zA8;Drgi>9EJNdO2eRA<1acxqkC$f8$&xL{A$~Yv0|LbAqru+wTHMa-L!ya&kT<5?x z4Fv2PgPaGt`?jvRhtpq5yv>Nu3YFH_ukB9VpHdZp9JEHPDv^NkMjoB_s#$JDC7-6B zG``b}6Y)Q`+h2D!@?1=>aFTM$R_RxWe`F5$=A?8^SMzd{=WN+ylhYioMzX2exPI-( zdK?(URP=tl3K9H8?NzZ7ZbM#ARTDiUN^uArw%xH9JrgJm%K`Fs8#*TbYn2oW8mM z^7?$nasH)8;mIoTYCl}~<=CA<*Wpe7)ZHRoWo_;xyTvCZ{7I%1WU0XX!%#|Ki_sy` z1K#oDcE}^+v$a{_wJCo)eJvQ<2j*WMXbP(0wdd#ca;w3-F}IlqPS&$)hq_xl z#C!A-N~QOGie6^0pP<+BOZXO2m27hBiYKJ?49!tJvA;?6(jA){FH!bD$~n`aIkan- zi&m}%SKV=O(Ar;0Rjp0uuJF}nowz@Zfzk;`c@u+F8 zfs`rA_#xM4R(o6X_S>Pw^UI*K43Y9<+g&;}XINfyFY5I*m#vGb*JpG?57^}x#E-nB zEpEoo&~553>-MXoCUbqQ2Va$*%yXuI>;UVOj~clIdPojvDc0k4U91lnJw%@#s#i7C zz-=$BatDWS<0g&|MTWXMPwd&j=8D+Exq$5#lV(QP0Y4V#=IuyO-*EZmYy-D-TQ0i#Gy-mbcyilp{ zy#|dOW*4pfy`i=dOVDZVFZ^VT^p@!cCOoHm1Wo?cz*<%D8$X!(&#Y`KP1;hkY7i9- zFF$6Qm$c2e)=K2m*W-Y5pME8?PN>L^MyY zyDirk(4jdp#k`uk)m6x!WYo5OgGv8;K8XH`&t)!~_)dt}l)NvX=KpAmJ~=9B6x%PM zjMwX)sL3q|f<+XB+Sh_*V@~xmDbj zB~d1XartQBsC%pNF8T=cPVmXH!70*~_L`DA zctU?@4$uJjO`4sy1(Y}p?Vf17m?RsqySLio8yOz|{gem02S^zvHD(3kdp#F&{rJ*c zyI$Ga&LmbCfYoWanP0pJa)0~kAAHRjwxp9qgbbIJ-&!orlr~w!wv*}?b}g%qaUxpY zxG^y^igDjw1%V8`3zCat!^P9Un%e&$86Uw<-MM+Qw@$W~Fy2GGQe7LqG};VV^>rL! z6OJEiHN9>K8R&n}B)Xqtxr;oj7V6tH->w3EJyAg9Vvt8@?tgs`irlu4w;ofofw`_B zym|=GTxeE@;rBHO#G`lWM|5iX`U;KBu8IDI)l8|G#SeJL3B!^w(^AB?59i%0G-i(D zK4Q0|JU%4%C%W>{-+Om6

MilP0`2!9({LInNeae09-bR3fzTuGAfxm!DWpl(yYD z^S-^Za=s7JCJfWW9ofnw!}xGReVK)K>J;@5g<2$*1+ow()A{9*qtOj}{SIHBr!>hiYGc|O(dZmlHCCrmceO;sT?I*2Zu@0;> zYSF*VS3eju`;pMo3Z{Kmi@bP3`qB1EO%-##>p=5cp!PX6tZ5Bm-Exj-5q3+i zJOL1}SD?^zJ9y~m!WztVPbTm@_wPKF2Ye6C)ihLpEUI!~Y7xsjzw%x`bE0y{sqBRR z)z(TzRK@S>_pL8>0&9FhEG1=a|Lwk(r&WbBJ z^pLf8#d>u?CSMs8AkIUaLqsn?#-{2Ge@{Lmc^uQ&TolldZ{_`g-g=zP6-O)+k(siNYSVIgck)z-b z@1ZR1kCN}%mL$ElfPQD6e8d0q9;Uul(09FV5LtF>#TS2gU06;c16X#29;HLStb7;d zFfeDZEBpmlxWM%V+r$NQP3@+LZYn-WD~5NxQeI!OhngLUH051zEz01rRnIOV_8_!- z4M*;Md^?+wreZSCCSXQ7ZnG|iWRR1zG1c~MR&;{84|VU1dRCS^>DtXofT8~ahT@7& zlk{0xR!uVbfo^Go-zV3ny{Xj|0iEv>gGg*w0}P#fw6JTVXnku{^)nnrbHn9mRLZsO z;;E>{s6=+|utw@VTIJ@cg!(6Txp&0OE=DtiQBswa&_GL>TZR!lMA66D-;{JiC7xTg zF;(sGp`L3hgkMwE)J#-Q6%u*P1Zx8A9kI=UzJe(mr~I-l&D49Kh&MLP1_P))BAis~ z@Ny=INksGnaN7q(brUQVi+SRw)8tdLCZjqk7&|U@rmauv*NK_>1^@2t(Y+#2UmVcE7nE)eBFAjaJQ^l5)xg@Wim%zMZ-s|Sv~EiD6&~6 za5Qb%M=0~3W}a|0tZ*xzBCL#s5(cueXM~5;s%NX$kxDOLmRe6MWsf74PjB}(?Zk0> z*%}`Z7WgB9Z#IbrNUMey(89RHv48PaG!GAq@or0i!*JWTG*d7`>U6u(dK&yK(-f{X zrzE?z=oFLg~DQIQcAHVOpPGGVvVd^%mQP!du zKW>sZ=wMko@Z>Bf!3D~IS#G8S{K7k1WP`zzh9`k-8Jm0P`<`lbqXl_>v&pw}UK}gT z0e~f%AyvpRF11%y1dqoffBn5HfSDQEr(X}S$=xU)aM=~l78)ItFz{} zlPz>@q@SGkMor>$wY(|N{C+V7qNeJ{@-gi43DTtngEgghUD!q{V~|~v$(=DVI*k!v zROSM7zB}3(erK^$xBAl zOIHq={ZS%gQouFG-FbWUw~t|(5M5n4zn{qjOU#jfdLX0AUgr>ik(^=Z3^=v9tqu*f zcZW9=8QtDL^gNb>2P+Axt-Tz)7=64xHi?kL>kj@B2WNQrMTd7|W^!8BY=Xh2f`)7b zp1Dz}=noSrL_O=B3e-I8xOg6sgu%q@o_aK)@z0tC)yDby~GjFn{r8S6)8mc z_%vTOSjR2D+v(a>@8GGl=-~PG!m9zW*X$|WN2b5CNW!#8U)o=?CB4D{hM;P`eS178 zor)NL!S9dgD>FoBSe@QC^ur%>=+}9@raB}w5dIWk4;Wjs>~X@YA3aqr+D1w)JR5gR zoDK-)8^lEy97>GpoYqWY;QKKxSg~)Q)~eg$QG_Z@xK$|?d&~4DM6X7;ro|KM^RSGX zn3cdSK1op>jtodNQ@AkPg2h_9^{P@3#ipqg>36`HIDz=FxoCbEP6uM$V+e95`&{VjRUKw!&~ zgh~Am=qDaxf5G)0X>HIQ7Ndksm+NX*{|5Ehg;94QJ}3|T)M9CKE{ozCsOA+ zzU3BE2hni;vvtg%FP})O&NXZ;NGrZxOhuG8Ortq4%sY!MWiEx+?0@KO!M!y{2M(y0 zjd=tG?7V}GfnH=vWLBt1Q|dNNI<(vx3bj%p0X6wgM3|lHW0(*m z3Nz}fDdP6!1(vICeZe+%A-2Ee#o~2qQ?C7WB>6Sg^~>lKu0cM>Qpyt4)?!O3C28_s ziOMMM)P%HZA~ z8Wv9l!(I~Has0!QaeTs7i~9C*S6LG)>MK_cfsICD)dzt00G8zJm-8KBKJs%*g&MWJ zc=WFNaF2|0HmYt|pO^}?4NNQw86zf*_O&!w#JCO5iq-qO3zq3a)|FE6p83tjX4Uq* z4JQ0UP1N~<4>!oHRuxX7wt+I}Heb_zfVDWOba>-I8>I{a#>8-2HGy}#820T6hjM$m zsQ2NKz&4nLZtd|ECrP*$M;wV>$HW{H7;LysPcS;QBX1JEvb8aD9)30lNR`aKLpgTe zpAoJ;aCZ#5BGbc;WWKH6Q7H#~P5oyI&57F0AD9^GB1nfZ4vkqIP96elE?%%o%=4=_ z9(hs!SjN-X2>}!yXp`fqR3&gUk~P%_+G7=HpAYvZNsUjYooS75-jIc^$bjCh=#IULWO*o`1L*}wQBkgI@CNcZd3q!G2z77+(MG-hMO zienuHVWRaq*|$#5s({lr6HGq6#>`0IYRF7wTMS!cm=7`| zfMCAwioIr^+)VC$TFx|caIhO`(N*;-ccB@!7c0@Q$ywba%Cd`IHtmh7&2O}Igowdw z(mak%iz(_oj_dbgEs=;K_TkrcG zQ}6NDQgKIeTcSe28dMu$ zH=h=4^ZU<=+k05=ZiQ3zBE)R|$~DEUMGdYgLRoVzi2P-O~-+rH^{LHB+)?`1&3saKs&y6XVqJ zpdnnMQP(1lxfCf*$f7=U#^GC>Kz+ve^w}=eim{Q@>*lGTCXC-tGMpB2Z$P_0_NIDD z;)+MjZ>jJp)mA!Ct1@FROA*YGQHvwZkIA;U-HOMg}X}}R`02-DJr$B!DL!{6u3M3*Z)#{Ep{p!vlhQC|DIcXPp0pHnJaeMm)KwYS?m5H20dpmItnfc?9~SiWfr zGdASAjDzvb8*OAjJE7zZgn7lY7??xxy%VQ$n9W=EFG9Pi$va3`nb@TJ+Q4|>FPm;j!@#$XWKMIu;1B_zTsjh6u)cG+!npbSO_ zF6qmb`vMDoKc!_`Zud3lR2{-WWMyHD1)n>mA4?^=T1C4mD2{t&{A%VFjY@2=dYXFx zW9V6knX`!%3p;@sFfk8q-GQ$@ScA=-ZKcKclYBG*Ls9<5F|L+qQtnb8eN_V*XpI@*fN z3Pbkw{S}XgvAOfQfK@_eTt--h&p?1{-Pg zu|=lDAsiVduKz^fw4)4xOX)dWBJr=aJ~_Cp5v8#y20NS*kV+1V0x5>8XJ_$N^W7)s z^kkjY-)Ff4E(1s{VP)*7S3kVIsx_L_l78Jlvu5H@Zg7RTVC4h*j;rx9nfRjR9@+f)3s2 z2}wUa3+cLW1?27OsPWrT#;nG3Po{aTwIik;TE$5O?G{ph1PX^ItW)d7&)H{uPTlcy z>&Y12ZgiojgXFqL>S5;%{7NPHhW@hP3SgF$p>QU7j~$Lh_tV`siA&y#f+m`ZkH(%~ zV)E?qOD-T>o0mBG_A$>6&x9R7+5_RDT;R5Wd<~Z&kYJNKtu1!~19@{~;Yf?71iB$) z%~zwS4=!7dh5o+BmYEvBT$Md)B@Zw0X7XIT zRd=5&+o~7EA`XzPlv{6J4wp~!x~%wxs3xqRis&~SN!=p+oJK|wZNfq~07lo^s{~m_ z?T0Eho?k^JTP?Aqw_v3zS|6-h&%Y7Q!0D*ef^#ihugwpwqju6dC2*{cNX4x*CsH4f zHiR6a_#B(TMtms@q>kF1@VfJr5($2O`{xRUN+!D)aOgFiH<)rD91apOb!6&0kd{o6 z{65pVTe$q{=WnvP)~M<96VKiYcQccTo>buxVpUFEd$`51ij-1_&`sSzVNQ42ITJNc>D-&epy#~N1Y@G|va>8? zK3zQ8fHzI~g$so`l$GhS1O_-aOfiTKK}+cIzu}49{ohqJ89NU(oxHI&xmR6j2Z!f; zu*&$_qo(z|AJMl@gJ!lZh*o_?q&u}AdENHpi!XV?j0Bdq{8^D^LyJR;20}VTa3?rP z)j>z0y(*cho6vl90?SToHY}Yq-6sM~%AY7lxKx$qPi~Bx^NmB>jV;EzEO#&?wJJKN zRqeYWol~=MnNigftcKCAI{$$n5+xg^@!^x5EX8RMPE`$R^@l>KqFbQtCr1HQ( znRnBf`B+EM4(AYZ4?V)pB;P`KXPL+@Hc0OR%Dz00*u{@94`FNE*bj(6F)$*(Sds`N z=-t&&SB}r+PDuIjbBnF;>H5CV4yE?jaT-RCNXxBZ-{WEn_>N1&e@px@sBZ~myaLQz%am`v~3rZ^&F#@Cz z>w?d>q=v>YCtYa$s5KSPl8zk))RnJbVRYC`9t_7*HU@4wDoc>3)#2&k=- zC}*pOzh!>`(vrY$-xi_vsw6jw!i^^{MhmDAvo0qw@2okBhc^1Pc-Mo@O?s_Ni<|*N zRn?cG$_o3r*ZCYBpp$4UF{lYzEJhO@G~`WcYon#h#r*vj^Ujo_0!-blp_P2q0V>#< zZT`ykVMvo{c;mW3zh)0SaSKd=ip&R9P8qZ1%`?cIoYnO9x-~@!w&RWQX|6-{eLlrh zGAv_C=INkjuDRGZ#ATpB+cLdH7GvkHBQMDdD>i6N$--m4?apU&tE{z$k8Pgj-3Kse8*?`3o2I=++9zAkIdbixVp!D89^m zrP>;DHI4eV+C>H@Ew4x4mNYygOC=UVFGRR3ZNAMaKSK5YE5B@_HWO@xtqyccd{u(= zcr_;6Jc_XL@sv07x5U}h)S?Q)m|ZNV12Hs_t|0}!TC+G{x^WFf0LN9t z?89*jI*Ly{VI8rO-Vn)Svxbj#I7Z*a-BWV%BND(b)X zpqyJ@D=J6wO87Q?&9?HV&=*d5KoEeo>o{U-v-2}Jc+{v(;k|h42yw~n>oC0(p_l9} znquhWvJN>d3TS^u)8dblkT}>g(i`aG9}FK@)`wC+`Dy*+2xy2mfQGmxxmryYebVm- zveD{F`|eBDMt4?M1y$%}K^vyT3u%5}wE*x&~0TH0q+cS^`qfhJGv&whBkmyG#cd3(YnCf0){ye4j zv`%2j#GK=jB$+$xFqdP>xNmQi#)KnTkUt%t_4be1&npHxR%n(BE)bU13cQt~>f+S-FSWEJb4v@5Ay$HPy)e+&y}$RFbv znF;?NYu_2w)Yf);R1^Uzih$BVigZPKuhK#3geDTCgd)9ziWEUgKtQ@EMIfQ~76lcM z5~PF@0w|qOq<6TBbKmp5_dR!f_jt~Ce>jF2gY4|R_IlQu&-2VR=Zf%${(P%N$yJn= zVTsA|!VY2dYOq5iST)fmbEh4N29f3Ty+}=jIm*x(^y+LQ%)LhpV#KG#bSx|HoDV&} zzC~`?VKjlJZX&m{GoIk|j?y3WFBWeDgJyA>*<0XJwKX&nKu1R25CLIv(edrCkh(d2 z^xc-J-DTE2C+plv)%3XW>h&i7?c2fINiS)yuPFC;+?yNLU^?RKPu_7mmOjGKn$!mr*!2pri<_MC#k6RJ;P-A`9UKM+piYU2 zqZUPV4v+O^r;wUrl~zq*_oL}z6S+Hi8QZAQw;6r6<@fx@Cwk&SV(D2MDzTqabe_LR z*Aic!5OmMrvt->ne;%CDr?el*3AJk%N~(4~lE9~$yI2UnFG7YDyfSTj-iseB-~@=I zP0&#jYbUoKM9Eu|X1LO{G{&<$LX29polC_wP7Rg}$=yx&R10m3v3bJERbFU@4^)($ z5Y`l{^^C&kib@{-CgSGaNkqwtQhmTJ3sE{^$~qlPTczJ4+#iVl^@a%E z30v5y5Xu1%>j=Zc!CGtQ7$0{w5wO#V^F*T=Yz%g*boK$5p&(s!S}+9cG7Sbx)>A8u zj&gQ4(9%k0sc^9A09DKQxV>0I;j=o;yS1l>pL%-U7RcZc^fRA8NdRK-9#^!p*qra- zFri%TkosGpZ-elY?t>NThxI~dkYO3N+*Wgrqc=}d39oYmZ#uu=?(`GrC{8pVz11T9 zUZ0Wr7kqty5{UTeiu4iqIc>Cj8~j7e;~rS+E$0qdbx?;n?#+L+D^n)oDPI6-X=sH{ zv!#nxpdMgtf4}7WucbS~mxJ3#jz@X|CE;5%o{jTV80#^22deGhbmo!Yd>QIci z4TyHm>4R2zmeMNXF3U!_Jk2!T;FPaTp`oGd+9AwtMDgz>!HIZ1VW%<8?PX~>iKSY1 zS5CcO`r#*XR6y#LOz~9Q=Gl$^61M@mSVX>7ZubV&nNiG^7=-B!Jf?)^;Gn{$f;#@H zdZFQ*i2>)GBOsTs_ioofiP3M-x9_dmMxn&v>+K4=1#pVRVNuDTmjBv-pMN) z{zXC8h-45TrEI|bp!lYwssXf6ikg~Q6`UrWo|{v%uqfWVCfh~p+Vj)(ezYU%%zb2+ z`o&Ks4@^l|(dJ@0GW#BdDz0;047n=FnSTh#Q1w3W?)j2l%U}U=Qa0%EyI)}Z|K9C- zr31uyhC6#c_Rxx0=<4;ev9lY*CnP8bDyV&b7@FOigwFq6Vo1Nargj|z#GQPrUz$~& z#X>0R96U$perY}US6fZa^VHug$o3Q}hk|$U|3?}KIA}QE`F@s&iu%*ztB%j)J`+T0 zj%@sYQE-}mgvPO^@ch?>MFwE}8?h+F|5zGo8X>@`F(oh&^Zh2!hl(WPUGR-StjLu9 z&oA84a@PL#npYuk!H_9c`so^`QYcH|q+R}cz zk;YLs=nN@~fW)K_*Zcm`L%NFde`hX$UE(6xBa~0~2y(?w%x*zo(u@8v=@CE!-_U>i zYDeluG!y~hWidiEr5h1Eq&gMnN|(@rI$_OiJa?X!k+pjL+6wSrNa4Y$rk21t&IqZ1 z#+r_abE*ZGd+%oD=aQ7(O_QR?>fQT}GQR;9#(O#9brLpNS)KKV7g;&K zio5<3dG=Q-%(o)aA3kf(hO$J^%f~aj5nQYPkGJxdZ{jqQslE>Km)nhl+TgZ;2p^Ca zeAZ0`-*C%qtF^*JxQE3?SwThqfq3KtJjG7}_#eR!F3YBOS^O0=L+MnDkCXCWT71NF zzeVP>(`&&wBhm%-fE#1rSRDoeC>XpPzfdju)1MS(KLNr{(gDwMjOC}V0;h;{d5(xB zfBcdBv;tQ8aMl{#&JI+R913~Fj{J| zXjp%^dfvZnoC?s8K0iCJuV4BbvHE4UfnFj$8_`wYM=2d$NzjUs=cI=*Ov5R6YiXZyGdx?JStA9xQnP55f!;g{eM~pJ)QESW|c}jfWccK;5 zz{}+FoPRSYPM1nG=6etbtrzuZ&6G8b=@H6o)2Ecx%^@`>=ZX?p>$=ylJamKhXO!$4 zDmb8M<*0fEefKMjZa$2-_O0;U}^Z@KM$>d2i1Bv|0?qLC(Gne-@FJ8q`wLPzQum9S+n zMlYX}{iQ6$pOq({vQbA|Rq9FEjS))QuHv2WeZwm?c{&x%b%A}s1$f|oTe8skfIv!) z5~7lYMyih?Z*n=F14{*wQE$7MqviZ91)FF0<__OS3(iUZ&%9M zfg_77HGxz7dPl>Y!Azc^j?N8JNe=CKSIP^*(jV?C14wudNd^CWNMxu~4g4Ig)gcQa z$L#iNbO%ZccqQjGb*_OjgLsbPFPu60&mskds>B%}_Mq6#_eGlLI^M8-G4nt@6Z~pw z(yYEBe^CU&Me$sRDT>`(8A>TXenkmmgnYSFbG&;5xn5^1(JXzJcDlQC+Hh;cQeAkKvn(Dv{^==y<>Q-bBE&G5 z1=j);N{P#fSn?q((^uDWU&}UM#V^}k6E}feF;p^4ePA#>2`lAxvwx$1Xy^&0)D(F- z?H4txI+Y@;-r5N4FmUV8wP~q8tw6u>F~a0csns2mq3SfmVs*G<*D^1cA=UI%p65#% zYe3O9OW!?j4;q75v1Z>&T#S?#oA6E{@0ahyX+hSKdAlb>7ZR9V?T*>#ddvj3z`t zV5p6@7gO?!$WN6owx8kgSR#ni5;HlulVQr*ZaS{r*UV#+|EtjO-}mb1eO5chN8_rA z;+Orbf&fRt_^m-=_B10>Mtr@b@}(moTsQ&20+sY}G}0uSjWJ)a z9(ovW>`wcCJ=b4yt*{kOD3uHeqM7lXNfhN3j)g2~q#q|;*TdqF{aV{VDi(U{d8187 zK@9y8`Gt5z-8Pn@kJ5X8->~Ypr%2vOq8lzRZb%NsZjFr@#D(BZ_g=nZlvx078t6uZ zMEQ1-!v$Xrck0Ttu>V35e|i6ZJh9yRshNh?ptUrvoD}R69S78i3M2y+T=6oFWxCf1 z@%IJMneQDCAX?gsZ@HDDLLdg0#RVUk5KWg8cfeKpqW-}h3SJ~oY}-zGWuQ>)@6d`D z0p1p*UFkRe!RCcc0;!D?-f!LcSK{kWi@^KK0N)6=bjkmN?+#Z3WanZ!l;9om4+bC_ zmUd~ZHf13N@tY<*@U-QV8v&JZ{#f&44_mOI5i_--{H7%nVkYZ~|OQ2piq z-Mev?01kVe67tL6`1gb_bprYHcy%%7>fd+g`Ryq!@P{+I(M3=23med%{^Y3>5IA11 z_LTM&{Uf^m#>*av0CSVpYL@vQeAm$w3|9>j-_h_7@b#O!U~UdwyhHd8zWV@sg*l?p z$y{fg^dE$yFl#9((3WF(-&d}jAA9~EOtN^b4|DEWaNEyKECtChdr%m<$iTT3__^cn zZzKA;%-6JwrL(6YR7(6?Ik7k^s1X-*=plOvL+js9hA7?#ozcOF)n1`h*gmz@I1&Hs z`W$jaiJydluocKvsWGHIEIE2Zk-$jI*tKcx zGrO5kK}nei&$Z{~KIQx0wi^4?=0xCODn)f<|H+Hum?UB`y$t1fj`%qB-~xbuT!zfz z092go$Yg*mdGJWw(x-Yl*ObTz&YGU>Fts=bAs1IT#hJ=Onah8FQVVlUPQNh! zXpMZ4{`L&8>{v>8brm>RO+G+nK78E7p;P_Cn%$LRq&SHF(se@hBV7lDwljL9Bg8k- z9FQ`g;-5vcKd9Ub@?CM0B0$CgyWCTnA;)Wryl$^Ld=x*TX}PyodJ|m zTYD`x$w0H(YeZ1KJHxe3MZJ&N?bdUI{X<~g26n6VppC-sQ%@!Yigb-S-)?>`m$0dG zjNh7RRulQ9%I<$I8*wksdge9@5ep@Z{lN4MPpInZ>LG8rIjB3_dI?O)JfVSv9h7&q zzXF|w*s8?T#kO2iZYEO}D5c!?fyQ)f{T&C#V+?dn^c$Eo5kr7Kn6mDu|nmvamhI{LLO|ydl_NIh$i4}j^P=Dp)8`h^!Iy#GmPx!dZ*+`((!i}!>?h7biQ8g_M(Wk&pgYeW& zV^<}dUBzIUjf|C$?SYY^h(X*DJG-FthK>oFJG)+aPE83)XnjWCBXBt8KZo|;yT*V2 zKe;{<1i$$WJq^yzMd`M>W4_8ti|@Q({N>DE#vT~At?a_#LC9$XvI zSKc;BgbP2RN4!kGw0e7i8!*|$cR7tOkGK@FBwwX59gL&N?@FkCs@*4TGY2i5qW=fD zMfLrMmmjj?lLd_+gc8OE@czF3jKX%AB39s*b90hbL1gRHPQ^fx%y=+P1Bh2X#1M?I z;caUAo&t~Dw<@B4d##aMrtU3lmp$N6H7^i2CvxdkW#vmg1GpXn{A$((_?9#z*lAES z4GL;-pewDot?_{=?n)7>8$96ti5`iA>cTBGqD3bIF|vR1qTilBoA+jwrkNaRAC8bU z?(4h5#wV-=q7BrY2cO4jF@wd7%?l`zxBxAc_=jBl{P6;GFDtyRafhpn!e#!!{#8x% z6g_;{_S!6Ai_FH#%f9h-WYI` zNQ`WsF`v-YQ-_$^+smCjgW5f!RU$J~Vw{+~1EZsY^IiBA^^rft>+s!Ee~igz*}xk^ z2)qIl3X_Ry^c;3^bzIbHJ@vu9cTra4g}535_&HFS2j(B_rr@74uq!6wr^x^BaxLL`#C)CVfN{vP`N;KdaeA75|YyxJ=Ysz&;3VV*h^BLpvwj(2%LwE2d- zVARpt``lO@^?m-5{2Pa}CVlt(2=~>JUU2-%;e!7&9^b431Q+t?a!7kY9&0&~1E?!~ z4Wtr|Ff(JDq6>PoEUZr!TV7LR3S^{nG})dn*;pY{&kMb5G%oMut_W;VU2xuG< zmJ|X1W>NjVelW}V%yo%alY{#?!P&_okEE`RBZK2JBaw2#7d>t+b7yEs8nkw4{#r-- zkB#<2^{F$4PatThxMqRt9%ck63Qvm_pJ~uHe^S_PAPT+kcLL_=vL47qe%6E5%+#?C zlw!|)@1A;hun>U*8in7EO?+%RK|&oAYA4{r@=`{<0QU%>#0)kDXvn#$Z8A(AzD=zXJ0oVZHpZ?jPg- z--XeC1fClI={tG~4v@RP1BIe<(dO}|ei*tI)Y`;<%5MIjADKITA4!VSk<@?I?)s)o zLl+oLXn*Z&QTto(gstv$2+y-d(6>daQ;3rZd8w&`XMKU<-P54%XgR+jMOm}jYmzGD zvan!%{{MMTe;UO%+o#SK7LwrZ###yBQ*u$($??(3@rI&`pJ>{8E_rUaj_T2Y}z-Dq$Qc?e*ECq`p!Q~@qmP$kUQ5Cg4#FJQ7s^C6d6-F{;Fi?5uq`t+5v-kH8I(S0HEgpJm;;NI$&@kt^-1_Rxjk_kl{d@r{j%UByU4=SYb!<8gy^WgZfF z;W?u3t-U*5wgo3?kzge7i59o4=7MS%?k(V|zmRoMC|NW<$PBP4yohybTWNyUH0@Lv z!Ei7wkR2zbpmLO`=Z<(b=6d2oXY2Ql*fa6&z28+d`l(+W$Zz3wCOTf)qa@m{iS1I@ z50zC^G&k`E>3ys0#;x`KE4Roa?K*p$*;-@7>mZkt3W%cQ6Ov<8b|$SY>IQe9V@d5O$14O&l^%hejk z)1mP@Jzb^8krEKHWwyEl&r5WMX7_IPuO4fwYdrf{S9<2MgkUNrkuiB`K_8O2Hmp<5 zhBgNWs|cGG|_ZhHlqb++gQ8bgYRgxz4v${+5thHeiZ9MRd-^zjn*7C547f zh<-VxG0d>qkYX>~r8$nsGGM7u1KAQV`CUaE&#P}P*Sej};!gT{X8~n9$f@)8dQg^B zM}4x0voX^eBK7sH_0o4b@kw>dtj-hTlAI~%AD`B;zI={LO5%U#+{jZL$kWh2+_suv z!(lgGt;i{U{E~#bL2~L>w#WCLXUi_YY38~UDq&DJR zyHQr-9DT(c|Ith@kOjrVsV#h#EKKU{vTgf2=FC{@mL+`l9k5?97g-OEf_N?#Q#mes zeNPnCI12k#gvCzzM4QWnjMMIV)dXH(Vmnw0j%z5w@F%~z+R5pHa^Oxoq3-t|ww`=2 z;xb?Q`it|je1C8TZ-3CyH;L$XIx?n$i%>%>mvX(%Luq4m^+>bZ`^U!NM)qU<^j2A{m<#^-ox5MvPMQWxN@7B3vKoz! zcMh-FE?Vm}v>yiV8;RjxKmZ>g9Pn1knceP2`SrbbF_CD72Ewm)S@0=$iiCAk%j8s4 z(w4GQT)Wu5d0STf{_zF07%6X!*!vKnr8qvW>jhVC$xm=YCB?~ss;$H2i|2y3HzR^lf6j4pw-58L|5uHo7o0A=Y;`pF4H)K1 z=%-Nr^%l*Xavp3Yn4Pty)|w7%iPZPT+#4~H8po1-S62{W+XEq@o&G2OUs8OZ7kmiF zEBIu_5Dnt4kO1EKtewQ%H*52!ne|fpUUf@{Lfuh^pHCvOD2TKUXCyp#6XEugotW)D~6(Y4{LwH9FITU~m*-CmTdR#6_VoleTDulB$c z9D7zZYONpb>+742n9`v+;#F}-07?YSM~63H3CEYN`QnxbAy#62;`-Gk96+kK$7$j1 z`Slj-j}C1N^-FA!#2}c+vvyOxEbCwB?>Le^{R(n#dQ0EgppCgRa~|Z<>sQ53)=fX# zx`n^6OFg>oelWAX7hWRSpAoQ~>vouOBV$WR0I=v3!R};2QD;^1sBf)(CFUXXJ?`Tl zSJu*)SJQ3t)H_DYiCa7&P_n17j z4;Ahi-q~2Fb26*5n3a*$`jlRR8zo!i(DJK#CFfd3XszO#LQ`xRy>gf z?ewEvzWIYhVFik!?AU$GCDveY7FKXMIg37Co{%&dM|jB%^N!E1YAhO00&NAJ4$Tjm zsLYC!4bb}Ux{?ruhB-nzZRPAFxx-^O__U~|Dl0eb^2-eNr-X|ZI~;E97U@hRFi0%l zWT^M3vJe*9og1)}(t};pZhdUv6pM3DK$z-nn@CQzbmsaNjS=T-*-?y)k(_Emke54Z=)jBWsKFDQ(bROq+LV;_ z_NYt5C3;MW-0Bc!nJ$4bZnUCFVdBy3 z!otEyxK0MWQm<%)NmJi``Xf;XwrI_&wO7~X%u&urUdw8IK|CfguiG@zFbe6YG3|ZN zlK}2?09F?Dn0+B9iz#xSt5j5974r&xU+nE6oj$4AswF#1f6Wb=NeO3n88?G|4Jp`o+-hPQ_l$hHhtxwFZwFg*f-fH@J?r1y_s9(vv*gT z7Ow2=S9mWM%<$@+-&55it&^Yw36KZKq(i+c{6&*{+P28_27dlzBG-)nVUU*LWH0WS zvy*rZxmDmDgeT&{S2Lg&cv46!lz3RetNNZeLTc{MO34~TCOLVC zOGbJt=<>oS1e}tn-0xi;62AxG+W@OiEG@BFg+u6G)h4RbGWd|AlUl%So5cJ*C~D#S zms!t|iLw1Kb3e&sVQO59x2ckPwGfP+KwwFDHj=+a>BN*7A&p3f zLPeTtbZ-!R)e)b&LirxHaJ|`n>OzXJb-icSk)(Gu5$-(Cd;be5R2h1Ti3g<8jV<@w zK8_9wetRBqvg_nFutz&Pt=h(qg93z;;$Q4L|D7#~+3mw>vZ$q>I`tgiMeGScPVF%` z|FA6;ywCcvsn-1C&k#F^WkgG1^XxP3+4L#x z&9o6&$?QL(h0dv>n~!X=J`%QFl_EX&9va@z;+pWNdu9nfq%YPwhO+&N6(E#7*l&`8 z4&TSfFrl_050B=A?EBt^(z|~ZpOrjRP7#&d?ftf9n=Y{2eeQ}^|FM8<5SI7@HgMlP zTX8M}dZHK;;TN5shMx1Dk|k|$*{T@#ACm4yzY5XvY04Cyu?*Hs)EN&l5OQ=9Wyn8i z{qb544HuF0sBA#)$p{YOlBbXGWB#;125%pv5)wfwou^(#+p+-B?H}hirePaDBN#Tl zm^4sy7s$jv5p0;&H6Uk{PkIt`Cj89}U$2^a_oE~I7NuvLXMkXVnPu>IwQsj7t1okA zEYx|e_!|Ebj;y};i4K4Z8rr*zw{~yUIc&azZzSA)vU|ktwnIvjg3$e0ql@RCGnasb zF$6*``5QR_>ZjNt5Xb=D+!mHM`&VAi7l@hVdj>AJe#`tJzzd&n*&n@;)uchP;G-m} zrWR}Q)UdVtBxt<`ky<%i;WCj%sHT25)j)VJ7TdhxSYdRU)*kUkvo~l^+7B0$4RrLp z(t-_P(~v_i{ZisnFCXm^z@^O$AbWmegzNpEO47xJE;df|TJ`wNE99uxWLuBnY2zg} ze(-30ZVOv+-kaLtTK|?N;J;tLwFKiB{jstfRL&wx&P6~(b^t+{?*YbV+dLCbY28Q=LJb6*!|%vKO8 zro9d&tIgYH1L*tnK{E#E=95_-X%-#a&Zi3g@*WQf=_vFQ*eu zdZ+36;}M^!|2}2Y`Zx@oCU>F_8~xsv;b8X8NVIr<*yUwlixk^>GF4uWpuwkPe#rb1 zkYWlCQjrL$=AB1}CTP8v5n7UU-*?G7yF1+bJ<~Jrrm`#{MBbEV4?zCNQ%d#j4Cs2sJ4vc>kH+7^R`wwjNifS`H+1e{*~gR8vngS=JMt$@`(U>M%1d`ocYS_ zpK^7x+nk6AxfPEurT27od27sq@;W+R%?QG{pCj^t8d6x)Rf*^S8=1xC^{u@xS5H&M zi*$Zn=!DMbkmN$m;o-&K80-36eZ09|qacr@#Xnad_s&SFVn3Qo1;P!fgJpG+0)*Ns z?DI*y6ZY#y-pbF2pQLe|4=&zxjIE51PvIbK5KiO>gs5rLP}T~e_?!NKwJ@p#R$clmHv0D#o$aFb-gLjefIbF?WD2116i~YzDTD_DL?)7wbOXz zea6N?(?I=mF3C8L*qod^zaGmXXqX`tX0dV3GAO~;EGKdCBJddLPR`^max=4FAA|zy ziYUWW>63N3*1`jaTRUa`&M`_fRRZJ8>uq^I7B?+9!@EuIe~@(~?7zMJ;y`N)Q(pL0 zC2QSsp;B*0RWU=RX|7Vx$F9oCR_^(E?+150+`-+Aw|+aDQ6CJ{pI~Tdj+34YDv7{4 z{C=-|enx$0wAz68y|*Fl`?#O;<`5h4Mp~cYwBf$&BpM4(_fM-8b_e>^Cn>kRB@8^! z_0wM?2ED8^`hnFzTg`H>8mJjr6^<}HFkl~AT-wjb(OL~X1)Ux~wbQqdzC_1FSMhz)L5TYQn@!d>{ZF6kU?(7|t8V=)(1CSUb6ie?%TtI<2 z4L$yTj5JWTjP;$5pkyx!I@jSeG+tQFu)nwJ!gz5W^RDJ$h4TPJfs+mEOAO!q=;QI7%kADLZSG zUaXt1oi}}S5c|@9m2@uiUr5#rW(EfCINf)IAaxmCVmMZ^=yI`??2F~ERIAyZ${BzG zrT)@%QYhuome|v<&>!qlw|7j#E-l@&4|kd$cJhqnEhM>c5SfeTUucukTyWl!~kj!Ug0|OpCuOPQ0s?Dz0Y)v@WTl zt61&ria=4#rdy$DGd)&z{kAB{5lU0RyRajs2U;(h4h zx?~FhQg>QkvYj**Ws$HB>Rz*@cnJi>~rMkuzWx%tJbZ8l^ z!^(s}PeQ^av2DTYnVQGPbg-kABIh;z$>5F8`OuY#I|!!}@$Z*L?B^_cg6b#9v{%O( zvMx!^LebmCM%=`#G*r$>2QGDAQ=QvZq-WYG(VLpclgz*mjze<(71T(?1lyZ)oBqyS zPD2oDNpGA_X89|P&qs2QmEKpL%oiTR1)s#4@ zUulLp6v(kYYv0ERzdZbzVPt~(ZZYJ)Iilsvun`G;{nlzmn2*_~^(2Eg`0%(wSW~h6 zT`|h?0+XA*Zv%V4X=|9IUDSSM|yi-H+2UMQoJ$D9Vm6x0@C6fypIddh#_+dtZ_&o3W^<01w~BuM>*14 zusHEd>e!KKrsl*oCKO)W?4)Ts@nc?LZiDneuX%aE$QAG8+9Fdwk>?0DiHJtl;1^PN zX8GrC(q3%(sjhc_`0(*d%o1_h_I6q91Sd#+%8igil<4MmeXixnh5p1|{QE#!Mhq-J z`(e|N8*Q4y0*e+8IqW9}2YMVVH?$=>aW>pfWY|dNPNo*3uD0}N0n79geoEA#u@}zW za-nAKH?&Os`XAZ%k)P~f2ZGZw)_-VNmBu3j-Ee-}iHdjWSEcx>9}N=w&ZMZce6b(aSIl2Y zdcXRnca@}RZd3l8Hx}0Wv>bg*Sl57fz>*L23`sb=th1dVASuZ*q$UX?;m*lHxw9*Ra&9O3H7i z+t3^DCE3n3_p&mns(gQdD*<6c>KA_O=t{SPwPw05h*)A;`1Y(Fa(gcuTT(OIC2WwQ zbG*uqahtcK-5mT-LaSV8%p@Vx=cf#m@R{hgLu8x0ae9y{`?-|6t16_fcwZqwa`W^% zixRMgAd$@4RYRBwDhgdYPpl{3&|Faxdy}+5nQ2CGE7*@YGmJuWt@2qZ`dCG{2Xo>vu|1={Ot zrkv}D*ZInwxA;1Pe@S4=-97#Lzp9E=j5pUifm?}9>!ENtSBacDhFW||frfV5j^A9< zX4($aK!s9<5AwD5?#l%31ox1^xrHR?%t-($Fh*^U4^maXPo%L7a(J0N!$wL(x44nDgH4nnSomK~Hm2oS%tXM^(*v zBko4V;e4@vRbcg#hMC>S}?V7V2cR ze&s|eEiH|>!Pd+tG~Z>3a;G!C@qA{pDvLV$$xR+`T%DG9tkx=Um=P2kjJFwugia&E z`{%v3#iqw=gYQ1mTxlfFupRR+NwdULTyh)53K{!8C4$=y#+un!6n(6|{rxeLo4x=S zypd={^~zJ5)Zcrwz(2=aNw%Wf^gNU5X^LIYvL9iaZm=*cwHX(my10N&lQpvN-M0ec z{?iWR*iwXoJaBH?)jPXyBIKug15u!KnzFf^oVoI^$~n;QR?nGIB3TYwrdMfGtg)OM z%Q70@f6}3oM&X%$s%xfiKC=8~Vg`w=jP=P$&J5@+>_dfGT`iqi$(F7u$)*Pg+23h`|NuII-ZW=6_k$cbO~xd zys%Y{Fw+9$)fh!UQ8J+zNls$5k6sjuOchq|&`iG6pA1jn633;z=5Aex&$P$jhpN6L zrWV$sCPd`Vrm3eN(R#RWOJz0Ru(pBsMTDp%64lA z;+Lb36;M~ZEP0CZc;Rnz>6V@G!h`9yS@@le%{rq~f8rm;A}j)=ZN;LN&%7k@KX`Hr z_B?;y7Ops<-zZwK?S9PxIufsmJBqY=okDgsp6%RMQ!AtNE1$!UzN?{kJzUr>ZyPrAdLg7~!5h<(D$E5;7=R5NCGnsmW zab*`YtL*2ET2U)`gYT*$J$U)x@=)(8UFm9r!2Nn`tHL{~3?qP3w-0F@GWI)T4drxJ ztDaTCa&yFXABV)a8f{{>BvL%Pr9Hy=CA5k-U|Z9@n75wAn~OE!9t)%ITGS`En?Y!7 zi|oJ}S)dtH?`kYWvOjV4ctE60i|mXBECj!wD9^I|=H2hmP1_t>6MBK!lM#7U8uVLk zYwex3ujiN=XRc$5CRS#RwCTSe-sm2GFN>}cL^jyBAN+tl8+?E}dNju!Oz1m%hX;PP z1++USg7&VbNNdMhR~jt;cO9M&?pb*tt@-JwZKa z%|HOtkgE(65Hv;=-7qkUnSOw#SrGPM43zkphL$N;sPlR((ia4-eFGN^pLO5K@H)P! zH-j}r4mU}Ux&dV~)ShUvpX-26oN4y{T2~@B$Ku zB~1adpN&)jvRXFy6^BELVGe>T3`&N8COqLj^?CNBV#oCEvV;fRKhwt)RF2CrL&X*> zMw!7cd0&fSAw%x9AWepr9JK_Ws}X*4;TVuk2m!BAR|P2_%MmYG`L2S|p5>iIUQU{< z_ML{4wRScxvnAy02!8ZwyakGPVCm&V`Q(HdD=PN*%d24?$>y*({^s>HyPAoeHnIY* zv^0p*af{Us%zXQEk*Hd>-TY4iXDS?P8e?bM!%#-pA`C1m?Lx{u_i2aspaP_yXz|T* z>UgCHEq+i1azSk=JgaR}<9Xy8iQ_5n4C1tzXipay&Y4hrCLOMAl*81Jy=Ljqy64vyV zTtFqOrfoBfncq*QysmV-bR;@mlNJ0prfT(Rct_>|<0PW3{@x(q6z|IjQw1gSSzN`l zWVjmPw%=4BNC4*HSUqt;uK8HF?o@0yvtGK6G@hu?AXFe9+ipJf(sd^ zFvYzP5Pe&*T>ZdD9{U&Zs{J!^>PAk{wEQYZ6GnA)T| zr|HTKfr=y^Vpf!0OSzYgRl^k*U&8)_(c*|kN7u}kfrn2^OOau)sunNs=*ZIAo>P12 zgOV=q)!p*dapRtafsMOrQ5dJMlFJd;-w{7`q|B=yLBFYT_7UpRio*DpB|Vb3WHn3A ze$AGLGUR71b0u)JU)s1Mw)v4BS3E&wYvvIu=(0V5ss5ss)-iIU zq(Ilx5ytvUTubH`1cks+#bq_zpdpQm-mi*}QBf`tN!uB5>^OPUY@3B}j?Tq%9U+>8`@X5|6> zh!1}!ky`k*S!11QQV>ecP}|tJx|?^a$tGA$%{$r~_$w~8L|ESzdgIYI0uJ6Xd?hc# zTd{_QTT2IQ7$Rq0l9W6SQ%Nm)SHS4kRWK)Ey%ef?=Hn@_4I$%31q6agyOz4(Z(PMX zLD1`5GqGUhX8(s4K+M)C=oMTK8nef^**(!eXLDKu+H2gGI#4oI)2A>AaVDQ|ZK5O? z=*{+vf`GOj4z4wB>E5<8hDk?@yd@_qeHiFKYR zV_<}_-Pq|Iw{$n!^Y&~W%Snf90RH6!K*)kXm@s|Ijs(KBwSrd(bz<~vHIKiazdnS{ zya^nzT6kQN_DL(2S!SA>x5wVCuZ~SpTF#L1+P-UubjewbcJtbDBt9ZrcNF4*H`_i0 zCo;F;g@a*?H%9$()W^SlF|3|2rxF{I8hc#s+n)V)yF;?1qtY^{Jgjc@V@!80WUY|q`8S8xpPuE)?Bg2Z7hR>;%HEjo_&sQ{lg~r5u{d^%X!dTsEBg*RJ zGfH1*TsEweH2ye!m}`^LMzkZzeh~a^RI6Fq$nqw_c3I$A1Fu>_WJh8w|p}}+~y!9 zmzvPyl}L!B@4km}5zooqPc|-#s*#Z-%q>MfOW|7%6ba1biUtdzjlS+PiMEVh+fjz0 z!`Dk~vIhtlRvY$+Ie%WQH*eKW@x-fTbZK&pHHsr1y4hX4rTeCIDh8)Xv6tRkFoQ+Q z#;XAVsD)M3PLSYk+zqL~Y@QdytZlGanJksnW;J3=v1`3hKwhHU5Rjt+Y^|dH5)#Rs z6;8kt8|gP1SAYAgeIjVBOcRKu&fRNRzSI7ECQK5aX!2g2VsDFv(VN@*u0)<8MK{89 zsBpH<;q!Va3wTjMlmiEVc9rqiW>}kr;hVx*A`xqi16EsGT2zXj-tDHX0Z*Qc4}MVl zje)Eljir0hR-M}gWs}|=Z*=s>!m1UPWL$ub=HM&bL2WYd3=^o^7AcA>@;9rr@eUoc zv*uouwH>J9cs-(d<%r>`-xx>?RvW7kqyF=aWeDs9VcARM((6A+3`==b!KNS)Lxl5R zrAj$?>@gBJU;M=UKE+-e(UdaEyK2Gvbx?As@CHSnQC71+ny5=WsJ?4}JiV&$H+)kb z(n>ofJ$NMAO7>*#SXys9U`-9CiIAT@WRIGzQ|VG<$lF@NT9QdGD#64zOC~sV;y?Rt zun!*I4bN_kCBo77pXP+fFvnm^<^4+q4NidPj?UZ*@5&U%5kr~mS_Zgg>2XfD)WP*( zX;D*ij3TcnA&&_bK<}O2x1jHo%h@K@kOeSze1C00MbFt^DYI9ZypafLUtHhVnVP}y zphfoT9+D><-U}#?Mrw3Nhd2M{W0efu^n@5(A<~! z5h0C8Lzkpy;yk&-jbYVa0EcKLh=J{0kU6Y>)R)JmM-LT7mQe3RtL_y$tIH{=clLA8 zNM*n~L~5hzS&o-W&Zkrt2A$#01n{vYn@+%f;pJ}F?9;P`enV}fWKjzvQ&t!g3YLxy+Ozr^s2(*Tgy2PDTrN5#){WAyOCPLEFaE15dwbTSXPhSlxO!#-&msO z@>;#iI}WX-L1N2TnHl-Hxh2)Pu_0c{OjlZG8>+isy6v%z& zF3NvXQZ+5iAXakfti5$1X}Ab7^0<8OdYPN=Pf^-ho~6ZMuqxBe2ClszMB1kb!T4=s zFB#tQVrnzbHCAljH*a=r_4A$I#v`l%#c@4ttihONQ&jV!NpQ6t4;Y=oVdTlrA%9~O zkI-=Nx50O<3Y#m;z@utAUGr5UxN_{6ZwNxb*mhZZ9pn^@w;qSr;^e2f@)YWi?)-S4 zfKKW$_a>7JnPX~dJ4{VhHuSU!{Gfc=GT9E^#B{E=x#)R(Bk03^EtoTR;M<`2rMYeX zrXI}g4J?{+=F9zj2`lJPG+q?9qtN#}Zi}9XwMc;-)D8;?;h*(6$7<{4W}9U6L=fRFkV~*)hx7aqzGjv2W#SlUM!)IA4YGJX2w9@9n*>c6Zk@ZS&~hThXmX;i#ah*DB~ntD&oE9w@e3TBXS%o4m$p(? zs9V1ixSibq1)S3r{yj92ZM(MQ&iZC(F&k@y8P%PgJzmpvPPD9FR)fYiorLCW_nyXa zh9q{uD5UeHyxpJ%=-q^ZNgE6bzI%%aJLx0-TUc{4@pT{DrgD$}90p@x1{ZOJr1-G08vaM=9SP6^S>5k0lX(DDJJ&+DbSlAR%TphL2Qb$@c&(62q0 zRF4uN4YYXh3=a8R*EqX#fCLD&Y}qTD=brse;*P}j+5xnqMG75feD)xdLBX()Rtc2C zOOT5-EA~6I9&b)7XWmAdoiC2bh^6fSY$=i6dA&!EUf1*mFe>VTZ^GM@tPS+*)o)aL z8X5iHZn>l}NT@{_)^S{HlwY4kCw9#G%PD>w-E5c-*x1MpYIU^D0y9bCXE#k&d|fcQ zbo*QH5=a2bpW*j?(~hxFylu#Zkg7T!&cp|$m z2_kT_q_=Pl(qYb159>!eqNEAc11T*;Dcc1SIKI*_H90x;$8ER*pY!N6ks3^u!cVM# zEWXhe`5KX!Fl7(W$Cf-JX+NyrdfrwqIO@aKnNEcJ;a2`?dMl>0(8WM;DCS=TS8$=M zk+ux4;*G~ogDf>qwrux)v`!wlpBO#`D?@jhNMzVs942sob%8$ZmktR#6v+X`_u!+& zSF1CaqGK49Nz+PCey%sFDL(Qg;0`7O$+ol4+P~l|^?C8h$VBBl?)AJqn050NPY5PK zB-|U0NE(T^sEMhtEFc=Rul4;%=nkD)8q^L}CTXs`YVRE&YCqfzheDN0YSjQ+ucIA% znn-W(jGsIfap=`QmtR&1Py!bqW5R9U9}InH5N%xVYK<3lDQ?gJ%P*en6b%rkj7XMP z)R|>Ao{0Dl`bsY!-tQBv$v90qFN1h{9h#|U_Zfn`TVTMud@nO*XmJ3NTQ7(#1l9@1 zud&5j`u)-iTf|hv7W@{N3J78? zZ7!&X3NI3*6|3SmmGjE0WCE!Q>^(Qrzi6=)$+xPeAsxzB9#@h@ZvK@2l%X{Th$pEJ z785eNX)j3I4s2PG)B6BQP7@6v2uoytQypsHo{-OOb2rMVs_`5vE24K_tlM@N7!r{6 zQ_0gzog5iIZ3GYB=k(ogG1Qdvi6L69#t)AaKBB9Ze#!uNv1tx% zA^oncptdhplq^o`m|Gu~GZ!cQn8L{xaOu@Ao^YMKxQrt>~HTCz8UZ_}_>D=mD}XS3tPk`c>=QgHPB6p9y(G!(QDwXNd4 zE~=wWa&$i&_Mmp}%yRCx9xZluX|2UaL*#U(jU5DGB98H-BqY$08j>8lg)gPIwN)Z@ z-1e*DX8ottAvlkMH0#+riI?70p)%80>CDd9THcLZa@&}+YlSJF#L3-iH#X;_gGg6v zKQgbI9>pRAJ{iXpoOwh#6IPvY;{Rg0dUeu6h1hiA3rMwSDI~WV@An~WU?Y{TAqA`f zv7C;%?)HxzrnkKHuZU3E^Zt{W~-~X zGwN$bI%y3DxEr&bR*%BJKKV!}i31h$_JkeW;`1vRq>osHfa7JqY;YE<|7-OE&`62) zL8C!&%@?1WkLx#PIqEI!1xuSEj~$kh(S1?;?V$P%;Un?wpA19(XW!b!HbPQ`V3+NE z2AX{hWv14J6pqxgVf-?&KXkI?o|2cD=v=$VM4j1_G=g^;AbXX55-E zt+2-GjGguE&VZqSlPxhGvBJc>svnirO2LFC3H8VO_}GF|0!xG6vnYpr`R{;QTI%H0 z_AGd|y$CJyutcKd_j3BRTgJNGJE;v+G&CLh8+*GS_16c9KdqU$>;#nY!)BJ5n)l59 z7j17H7iHJ>dtWAk5{ihFAP7iHH;90UluEZqGjvLeC@I~I(hUPchl;|GLwAS_ATbO* z3`6Y2b;ol**WS;&@!FsFKgZ7u=XtKR&b5yC9p9t*q>z1ss=n;)egDnxf&i z{-{|RK(AvIUytacre|{fKo2NtGuAtvY{aWe4_g?dTLhgYy&p=`zDN>Ski!nBC;1K$ zx+Rs@yI<*C1FYlEy*!&A=Hjd+DRnY*(o#3L>tUDXII@2ISiKB+J%eu5Ox4 zu82G|3REv#!-?@(j!b#{kz>DYMuFQu>g9A@@FjeCYRm9I+MLZ(Jf&KX0%^TN^3G#; zjn}JKU)I>x_@_GdKEc>S#`R&%kcb(_Z<~36VIMF2-<9Tn_)Xk<79)i;aRr>a_Tlk# ze>jy!a_4s@FJr-yCwc~CMxJ^@n!K7H@rfX}wRQXJAF=3F$P;MVME`vIO1>z8$t8It zrkg1#Ix5XF?v@HK8J1^dl*}-8LpcgxklZe*tTyurfu>#jCm2&^V{YHYMAds)&vS=5 zxP7}JA^4=LVlI`H-x883clliWX_Bk)mVI_9nP&$t?P0%f=>RiNWyW18_h>7|iPfKo zlCy#MHnLc=s{AyC_w}NrbV@*{D^+<5vf7gC>S9mDSA&nn&f+6<&?dWVg5*7cl1~N0 ze5h)W@NC@Q_unhrrquBpoXKSeH{{_+gbA@@#q2Jzu=X*Ri4 zpZbV^OKvMO3SbON=Ox_{0LGuLYX}0m>l@_;I3i&E&% z)M)j2=4jj=Pe2+2_6O}H+^H7wXI71LUiFCXVs+G7D$}PgQ*m7h+L({}cQx>8{o#Ka zR3D$HyG$ET%~JUjNldA2Pfs?DtNHkJs=Y~{TOK4Mtgn7BhYKKdGC2ZLZjbMd{h$ri zuo}s@L~cv=x2;~o>Tf)wh(`+BNuyTv{XXfFIE_VhH0=B0cFt(2vRUqK9R%EgBQ4(m z9>=YPBQ~m@*2{G^ZsmnMd9}w%nQ>{F6s?yDD|6oasMOuj89;M;|9pnteH@nJQN8RA zdFTP`Lef6{SK`;AjN2@(%pQ5GC1J=BT7>CKJtyrRnb}G153*52G$oz0dwK_v?*o!| zeFj5@)=3&XdNV}3wuVkNvn4C}zD?zNx91bPjcsp*oT2RVbM>E9pYKmAbMx#FQpm8P z5pDHj>uOfKs2W8i7i%>uD0na(jz<}fl~Jk{#>BA{xbUo%=9ir#ea$+dbzj78$n32Q z1=Euf^cNb|5CKqv%9jK`qVyUl%yu1oImHNaS==`*BZ7Ahe#Q`Y0_)hLG%O!=zEC$NFqx$$U<(^07(0AGQ0?ML64fy{Fyg^e+Yri+~Q% zC|gO{5NN7C#=Xf>M>s3fwOt~-X!Th*K9{VV-`>0i9PWxtKG=dLo#oN3xA3^6wVx2% zI1lX^D>TqA@vr5Rg-`qGh_CyxOBH>glk$g|7)Moz8@m%ItkOo~ z^6u33Y~L{!=AxM=qF?o(Z}E4Qa2wqA`q|vC@oaLM*3$h)q_pgXU+dLA(>m@Tn$}v{ z;Hg-(kPQ0vh!P*1rPk~r*ojzAD{mK0D{t{m=Rl~I6&8BTy8U7sGQ}UMM|q!L{f2jR zv{m7)l+JgXYKm2hm5bM`@vSZ`RW9;)+RE(7Ds%=KNl&0mL+0zj}d@fblFqzlX|5f9{`%G-Ak}y>merF=K?(3xJxT|H`gI}qd% z8-6ZxyJ@MbOwT_`V3;-+VFH$`f4Gpw!Okr2PUH=sfOJdVYOUE?Xh#R2d?&D3*`~JI zzYYvlr*~jWcbwW_7HMpGhW2%pcMxAsV>6)6f&=4(Os@eRsRujZvd=znYSB~U>(ZLF z)Bs-%>I|~|mrfOw;y8=$x?GA14Ixal1_|MdX)4}n+cZk={VpnfH=Nb?XS$swho73W7<$;hbF@#I%i?~gX z13A{OvI^hhe$Unew!yhlXsQJ-#{HcJovR%cDBFqFu1RlTv&Oz}UysWPy%n(AK5(6K zMQc<&)G0qW}r_)FV|>_poa9rh1U5foF@5=$a29>tw7EZ*)i+Oc5=)+DT3!2{-jLj zx`&|?aW#63alj1wr7_{OM030v@x$LFu?>wPOD2XuiFeb)QT=i+dZZ=z z&LXY?#m|2Gpc)@<`t+qd0o6-?mcwV(12C?-C9JbZ!?VO{@WGGH1uWF@I}d55Ld=NG zg#6&G5=A43p`xnXReEBe6@&Pe+!vWuQ{mtsJk76VI}9#z_oM_#4V%UXIVm8i%fzvrmsQYfI2_yQrdk+jNg#iDW{+aD2~G$5`m}k zC#PWex(w0&(P`cyNMj#1iA|Wj52SqKMY<^1Cpy5esxT2y$nFR^WZddbY)EC{|HA`R zsfNl&i+Z!Gm3^i%&WQCj>v1M>9P4M6kC12(S!Mq#wdlVg4*r`e;-U2^WjE4As%MnSlPqeU_KmtuiB z6s99kVs^1=VEaN=nJbY7S5dQ`^Du`R+(ky~FNBo;`6Hbx7#JzGxA2Nt-d>RYAi8uF zrk5%57T%#44MO220`pU6uf+$TgRiIf1tkEFo~0t&1F*ozpmQ+5?t{X6n{XZF#>%CP znjZ##3qADY@}E-&4yo`4&?ezuhzWdp=7q41-(ouapBNJ_J+IPp^`>ymdhaGJ>8y=4 zC4j1-yu64rsUZJrWI9Pf+3V2VAiWv=8>S#gdH;d)sE8kmBS>$RlZ5%h8Em0{eW2qZC3+y!;Wx6oH*{ z+&!n9cY$_6%`NXxCHA_9f5K*NF#aIT2&NH?T+Ar}5sN$-r7p4mw!!>+J^fF6kafbJ z>uegIp8Q(ePSw8LuL1^J50Sg+<1pNM@XMS~c=4m|*PAL2T`(GnYbQ^5hiJ4!ga z@Xx;2{rgr(0v`gEUNY!1{Q@lSo6p|DpTGQdmg1@ZPEZ-M1&3q1LqQsy<0(T*_4;^A z4!xs8)CaqbB>wql!eZe`U;BU4*Gu0F6Va!PzA-#JR}y4>irV7Y1hjcH zpv~_B+Wb1x-S-b4p_L-dxL#f$JLf6&yv|@jr-E&)3lT6%5cG=N6HT+rD!`sUMwR~r z%^&+LdTr4yeZ1SmtTM$~fNJa;V&kdVVz)4_`7H1FM!Q=EQZXtFYH$#{m*8b+K(;jZ z;4I0ezq~9iDlc6u{k-N==m9$GfNU?JimxOnmFZlIq1W-7eMKolR{HkZvK*%GG{*$; zPyFEkHTDY2xGkuS%-}#tPd?%DMc>Y{{Qb53Fms*Y@XmqKBJLz!;A1cJD0e28-m(5- z)jvq?IZ`HuPa7Z3##&y=Vd0K}%3EB~&K`Ofi7JHW@<0nh8o$=O$mQSvs`ivf-f-4O zO;$N4rA_ZYm%_i-+W%|=fUj7wXAVcUa2|bAli2H8Pr<~S>OB? zaStJYq%O-zsQC|)yLJ&hS8NNTs-ubA?E1SXw&zHa-yZje)7Se*wp4NkO=507)g5mu z44{6Z-~_0FnldA!GP20qZX>|+)nQ}6D=B;VjE#Z3tE$`1B+f30zuMn9W~8}#VC--^ z?@93TZLScrzp;YF&fkrR(>Ffm;MBjrjpSO@iW#^C#pO!m-f*nPzY8HlZX_T~Oj`{n z!swuQ15H`yO!TV&K>fZRg>XJ#J~H4bAV-Urp>WAb@pm?V z9}#KYHEG#DT5=;4-5}A$V^%QGac&<7Pk*ey&l(j@xXwlJv8^~Z{Nd1 zZ?gMcBq>iSb_w`jQXg-ne0Heaswh4B2fO`};`-Qnmh=nech)^j{A~2P)eCd4NclL+ z!l|JXX@5ZRnO7wTwQflPzjZ7S!h$W z>kDKGSDZiG%0yG7+8>@QKSBbf5vyin3Y>2TWiybMAy;?_|Hjm-eFo|Ww_<%jl1&)S zo&>MiI6huP>xCEG@2r&shk*>N!~RO0br;~a+Y;kN>z_kH7wzqu&j88z>%koP==_{@ z1@B$9x7O<7;O+%hCy3|*F=@Rl)lpkyQPTzs!%;Ap8ZX>5wDMyQ`(HN3vwX}heZ%~L zTHM(>FiI68n+SKF&Ib^fUqpB1?ikbl=ZSH)jmfW``K6{zDI0HDmXwL0ojX2qi=bnD z-umx6yUzK!z6x<>m0*(w?uF4^x}empHbs)ZaZeu10ERR({leh)cey{#!??hY_rmJV zB=Pyni0>)`o3p7Qr;+Y&tTHP@@M9E})0wi>f0>o`xGA_x{pF6%@^Ppc{CGle zk>D&}{>zFT5(OUL?t1*z+rQk=Sw7}_gCE1}y2;M+<-eSX`EI}@UY+Jxxb$17z<=ES zGaUFaWHyoQFHdupkI&G+q8)9}?Y#Q?eNY}|?g963w3%D;FHdupkC`(d@>uFt6HET? z-&Xqn!EE~xX#!N?mwT#Z-P7@?^GXOP~|mf zX?&K1+h5*zKQ+<~>=f_TS}k$*jw=lzeFDM9`BJ}p%Rx1@3~ zM)TM;?vbmF#`a7<&0j8ihL7OcHcY}=MWgPTWYm~Aq7W>8Y(pUK;r>gA`f)WzX=UtP z%x;Ex@YpW3G2R*e-e11rSHcJg>Y@AHk`<5I&ALQ#SAWeROZXSGMwPJOBB!|az*AiN zN9Z5W(zOTBW*N=%<1mWV?}LAXWBmCR>BhUrk}FWMMI!`F*upPdIf0tL`|)J^ zrQP`fXlJ{|mGO&_{$Fljv+{$xXNNwovE3f!J#C7)!h#SXUJa4H%cM4_CG07;1 zE>;kVO{FXoxa1F?vw~ATt}eO@kws<(L@Ird$RRoUZ*)nFwHwR*nV$iu{p)bl(XqX$i7J_}USk5C<4{V0dZg@Ar7PoVG9ypn2d0nUMG6DR z6c?<PK({Ow&g#Ouh}ofsA|_<=5s$wYylnqlkoLmQA7INocE$l! zh$(AzS!D$kw?cYcaR?m5x!*vpj1NfzZofLAu!%ajCQCHeRb8E&T#N-Y$_mcCWAXdm zbN=Lc9Wrc@x^^_pl@0@81x5~ztYTK^Y+=aSwk3(SVb-oqQS;c%q9D+32}bGo?9rFV zSS_-sP-Lr%4ST*62SL|Hbs-hG+}WJu{~Ud~+SO7I)eAZv9QWd&X-csV7gcPmCR2TT|My!vJySW2avc+rgP|V;i(x^^#C!bDpqj^NU}J6v zt#Qg{2NcD-q%xfRQpjik&XkV=)Mh`bZ#VyQ)Xz3gR{Ea-TeypaEhyFOExh^7{-Mw6 z!Nn*BTWKDD_+3?{af3zc?#P^!!JG%TADlC9h~q!cPri{tOp3htb^t0>;oQkuh{YGa z@Oyjz$xE=eZV>zIE^vXsWS#7kE>I)D)no*Wenx{8pqzOc(Gk3O1d6HIwKcy=Q(%-b zjlZ6+vy>W_aLY2mdxW3i@ArEP<1hwTet~G8Av!3&CGJQ~CLFtco%a;gPD@^0*+vK! zn^Pn1&E=>TPWat-Ymbc@MgXdPN|3ABylRBG_0sPRZN4!ua9aht@#&Y?Bmc=12S$Ep z#-hpPDDx6xc=y-tPA>TKi&j#ZkY1+cSar3l=8Lhv_eeu_z0g1NXl30=yvVe^j z^z{2I{_;uBrTh>*C+XhbGB!65H$kwz8GSK|^!0HJg-m)QyWFE3e8snSuM9o=j3%Y% zbG9Kwe6|0*Q|{RPbR;mTK)j3a0c&cH@X1R`z};^fRE1sGxSCl830~yd0y1pLA)h@q8~jL_ zl9BnhJcfO|KQ9G>viM>xWbPcs+!^Up;U1cs8BRSJ2r?{;)F_#f4+>IW>pGbw&I$xkO*>U5%? zf!yGmw#Zm8^{I!GQ0tEKpbS5E=^KrRTY_1SuII$qZ#9_8Z}@YzL1Xaq2r&5ny2Th@ zT?wBPb?nMEMvQsg_j42!(;VpW|Ms_6KE8kZ9cs0x2{l?~XVE*TvDV_&eDpnqk)tTe zWU(f`n+cV@K;+NZpxypdr4bn@{{m|1o#XwA#=36sOSElijl~4y1}jU*a7pK0u^COa zWsP{znx>`*nBn6z`k+*=LEi(4ll>z+?D}ei*tLe8aTSl9nc=}UqOSZ?38lX z$31EHX=P-n(H?4^o$>q>ds*Sroua~u(ef0=JX!K20V6GSeKzr#avPOp_imTCy#fV1 z)w@BB_Q&kl{Uc54YMUM^n~bK*!Z;TjV}(3S0F0<)y zXHIWy;4zN6qr2N-ujbq13M@%C^g9qD4_x}Wjm>^;Kx#SB2;;Mza#qkwhn&?c9AfZ$ z?GKkt5$t4XU*{~+V2^j=tk)-^^_aM&{(3tn*zshaO;I^FOzfzQOTI+_tS`XEY4_J) z4Q=*Tz2$?|6H7~zXnvTy_TaEL-w2s}G0OAKiJ|2f6w>1lx2ab^d=wPgE?K22Ad&Go zh~nn)T{k3J=p*fovK6oH&67x#AA0%cNL3}xWSle|6|)=Gm%m6dYL$DsRNBOfB1M0B zrCN8`n&KTqjg8XMyOb=~MQ;LeFLJK<f??BSj|xQB%_O6% zn_Q#rwuc3YVBn8oK3j9TC5!&uffrn-V1_0MI@5-HzSUy8a2tHXd1Pg2e0<3SvzWw; zUxuQOQuFbl?@tVFVE}>-b-R6Z#*Ipj4#3quxmO~qi~xCESrT(ucyV?K)U?-aZt=Qx zF<=bPdOwo{ePfuI*kZatLh?Kq+@i<2d#iywn5I!QosuFlZ`P`=v>cw2LxT*3)cGZ$ruMGtP8OHQ;I6CY~EvnMYJ^BwMV z<=6z;h}pQ<8#$gWvk-mUJH(@^jpvO=xXTLf6i{ocM z>G>5ZyF9~g7$`BiT7>H(MZ{gE&~_jk{&CW3ijL5)w_$G2aF)`Wztx>)`Sx>-t~VYH zkD}|O@k71&S1!qi>!DERO|gzHJI+8N(9q3R8Fwh`+c6js?yy(X;II``lJWQj3 zI;L&he(QxB4jidvlao|KZC*R$iT9I`zG!G3Gkc#)%q7p?^(#vPT;5!7d2O_3%vauQkm%<& z-o08-s%E&K!k&E4_{6dx&#p_KD251^`pYu(8oi*!fX0>xdU2T)k~gf3C;wQvxf|Dc zk&0n4$2i^x6JTzkqnyr%swm4-a^p#B2b{*I(vC|UStg(snrM8Se45_fT`BFz zf(jtb3apO=j*?#6f93C$fjT)ZyzOdBMo44NqhJJ3`aBo=4e}# z^&VSKMnmG>upIRD9JRTR=sGll+HuIDmtKB|M&}Z33(amh4SdAEVrCUbYoCo=T$H8B z=za{OK0`>ovsh_|yq5|=tJ#l%N<{N<=4glV0BYa(54Gj4$A$aSZu%T$O&f2VN{p3- zRFoyl8ZGjj=*dE+r0);U`IrgQukwK% z9<}+38zFZBluYten|xWtd4f`Bn=+~UB<~dF5 zL=s(itoAF#j8)rApu4QkK$EK43;?{WFkx&bGIIXi>=f<`uQzdrE^(D3OHHuuYG)E{ zHhA;Vig9?}Wx0s3d6nxVGOq9!R`a_FOr1N1xx!AAUcXvQMw@Y>I2dem5R=g*S|(|k zHiO1=MYX5j75DI%!88093jj^I>llTYy2NCkV*IuStOI8fVG1YLjI4T4qaPX;@A?ahBpuuvF&*GRLn42@?(ShQI-O1CZy|RX@WZ3+=(z&l#xh zI!+p&uu+VMm6W}~rwiU!ypD{#2l>K<4wSc^o`JQ`t*C z10Q|8)Y%4kc$9XPT4EEediIW-l&uAPJYK(J4w@>r;ac_>1I3Ud)w351E?82KO{`kA z0#><-#}U4RW;?b0k7vsbm>;YxFrD>)uP#uZX-XD8LmyHrM5pEby09%p`v=WWv$(ll zvF3AX^B9JN3WREKEA!6ns_ER|FItB5MJ@)So9?I8??iLzd&)C!?{?tII_)HVQNp|B za|}6^!Wx4MGY$z|6Z}PKgQ*_9`~y&RPjktU$1nWhi`rwg9cngQp1p5#qdi<*OHKH@ zOQ1YX#aOcBC0Eo++zYK*4W3HJd(1Ua$i$UeieA3bQ*n*DC=;0TPNQv{@DFg#QY?4O`4@6(YMO! zCYfD)gQ7YrI@;d!_;tFH+XI(bKe^LmG1%2A&t|^u(YRKv!4{}j^l1^oqZfF=9aP+c zH(IK1BOX!bu5_==fpi-peBf(Vqd}s55>f7I<5w(bIKH@4YGi9HA2E+9J1)Kj>iVe! ziemu#TwAi{dd;^9msvE}jc=AHx7}2#6JuY>oAscgdk!kg2#GC%Z`FpZCu%UwiWMbZ543jf4%U?OshPZ2t1H?_F9* z&e%IENlt6?Gza^xueH6_vu|oeM*Wl_|RBehG`ZA*n zm=5PE8f=@!t`FLO(vVh;xDIF6YSQx&BvUs(+)HEE7n`LZuj}u-DC%i5t9d|cFEiwH zbhN~^)z(Gq8Gve>Y=)Yj_?rwsRN%!eJ`Qg~CklXk))Cpqo2@<>p3c3V*3ho^%4aWh zT8XS0@0!G8*NGC}_j@aR-yj0mY4U|7+UAW^j}|{^lLQHz`@~wBprMb9*)g`V2~t8V zyme1i*i}$P7a1O26h^nzE$I`V(9NaeX*t;(dQEbkz;jf)OsiQdJ@s`_Wf@h9pv}(O zYPf{1UsZ^oqquqHVu|<>zt+JLdbZ1XJGCc`zqN2`W%*fk*3#O9F*Akz5AK0lhd~Sd zQ~^RypS}K+ts;CU2;-QALRK4gAZK!Kz%Ap;K(;(KkZY|O@HC|tF@2$kDUQ%v-PM7@ ztF7S@veo?CE?ftm)(2&S$ia>>c|UwPIo+xddtCT*G3(cg^bCvnDI2tkhjKISz&Nj9 z_6-A&ToX9~qr*6a`{ZX#P03)pM*w{ps#IvEN}G+s;ma>L=c2iHW#h@-_E!52I&DcQ zO$WAo-+PbxzIe^-G({F#GseJEFQglfYE3qS=4j)a1GE0i@d;G_NLKHXV$?laDO~qtYdWq= ztGIz7ZSDQCo>BQ3xyPeu#x{ME^_rG21#b6VG{5|wm$zyzSu7JSJ2*W8?B#WglFe+} zd17!bTuK7Fg{7Ob9pR0?5XjltoN#y=cprK{braf;8-nb z1(xi=ok(R$V~g7GBt1^Zum{^G!b{^>vr^EL%&fE{c$h_;Ed#C=QweoK?rhse2ILkN zd16s{Wyl`QJ1&CScf|=sxD15a2W`<757D)xTtV8)n0QDLQ7c9;4uTONvxY#wLH7Q6 zU@q6i2FR<3l{B)Jct4x%vTd2OR-tvZYL_&%g9Vr#1sqwYb3 z`Er3sMB^awvoZ38DQHj8o{-+8$@h(>?iY5aab1?J&ML^Wt}D8)L~UfCZ#%;ujN3$<8@XBabz`1* zMsL}BG;@>1{3rud7QQg>b@)W45g~BGX8SsGV0O8`%|cgQ%7k!8QfThvRlq!I`wsUG z-*S_*q339!kJkx}ru(D8-Y?LwMUKhjQCFC1m?$_2BqKNS-D#mkP&YIz^cwd$n ztT9w_^{^`-ff_{8L0j*fT$VzPX;eyjJ<~YUFgSYQxhJtq)X{4@D_?OF~J4_~oz%5kngE5?mwk7h(>v|u!PTxlbw z!0fJ-J}q7vdRTnfxaON9Vyw$#dSU~e7;yZDYUdU1xwhOhLoF_ znRUIz@+w`L)l9Qm!4Zi)-COYuBGVZz$5a*2CR?qx=!}B$dEvziH*6-{;=3=8$Mv#| z1BguLQM|i`v*loErFv35@Ub+?4~h^oPOPbJ6S;YZtCCqJ3tNnz)IZJg(9VoKtL?ol z5P7$?m&bSXGx@eZMO-tTQ+XlX7NBEBTN?VjOnY4P5G`mCw9A_tuG4=!StbDumu*(5 zn~iXtGNm229QBDFtx77^tCpGZT@qeuCA>gH&FYQ0W1YqT__zLT5i@RCP8qP|o#*Yz zDwmQ;pq#;a?UeAdJUWi@e={zF>DW~F#2TfXNwq(t2l;5B~y!- z6KfRReX_=)(gIH_4GfPywCQBK^Elu=1Fn4nEw-;`Ig({q+^XS;tOIo6PW3E*Riz(F z(w=*t{3;4(b^z4N9jnCHVyU1Ct4S(It$VbHzz*V{n^+p&)y{?5H5WnclmL<-DWnaT z+}Re@6%Sf3jIs|XEO~wHAeV3FoFVuLf)V<;%I@vk(XZZXil=pli$?`c=;>;9~1R9=BxhXZ1Eh?-$NHW7nP_= zJ_dta2Ak=m)7aoeBMh(K7(8dpi{wXm5b=2nT0*s&)jp-IWWI#A>RqPaw`4y_Y3bhp zjbJW@mJn0NCQ4#oa*^vvXgE4Hs&}G{<@Hkt`fK#ua$P#LoJI?4LKR6`pgG=4HjE5S ze#5dC%7LHX2rD@m7u^pc1>gl8uxZb{^!`jQ%B;!R=#}a;MN=w%0<9opg^AKI2t?D! z_@Lh7nYP)@YHJ2->>hr^AMNZUQz%~A*;=KwH{;z*Up4s-{eA;mpGq`5md_gG1;Sq? zR&YX|O5`UtwDbATdyEEN2exdH#kd50w+z+kF{1R<+UI7eIRA4xNuGyFb0@`aJZQfY z9`yTq01&;ZGrfB1Q@M1G)yezmxbU7wUo zQhZ*pFyz@TzOX2282#aL+{wbGQi=flBuqrv2gjoK?HMmAxxRPVH8JEq#|mhAdd?PS zmJslW$@yk%CRX*Q&O|)`z)Sqo{tYpLStLO19#$EN+_b6jF}qc&4bgtg-6lDDrtEn+2-viEZ>Wu*it<^YzFe5H#bqalzf?hK{OOV z=(Dr80S!^V8@9H8pg?MRz%?k=gLlXE?b?93WF7}NA})MtPkZgBzTh+*lCy3*AE0gCb_cTuCn}|gXfw6oJ}o&m zpoO1ZzT=gehcY5ft!mBP^Be4~)6l6RXo(oN=^yC;eZTsiUx?WIboa+L7sWhyjoQ~- z?tcn7m?xgPNBPW^i#gq+pbAwR*3dB#-WV~FKR0LByq`hFI%3X&AbVA#k{K5WJ73|s zJYp$3ivNlebz{u2XNLETADv|Hj1u=3x#+5~CH>y#jxkb4A(Y7Lj;pE2@V?daJKI9r>X zxMA^QH+xOo&dkR$YVMsXt?8JF_0q>Q+QOsFeTKX~u?ZPXh?%f@iG}W>9N-6xRGfMN z>O>e!SANvq5bSIJcY~o z{1J0R?bE7(O3x%goJ!Fnmr|_$V6`{-Y9wG8oZD<)r?r_j7SC6YBNn!*#oZinr5`P@ zzd?DXU})ydm3zQvqKlbz|8n!T*eE^&=2uh7l=D)T#%8U>%jAmM!$tQ`h>IM^&C0XGYGdEFF;t|ccjnd-Nlw;PYTi&Li#xkkVSfa^@YjST&I~+SYzGvGF z()NbzC@g95mPv8s@ zwA-d0A(+ogG#9Ous?M7p?^n@DQc?KcU?Fr;I?1{B4$Dv!)9zU+b5O_jqs=21^vWI? zby{^X*H(RAlogmp>Y~$fd{z~0=qyiWO-b&SHiDEs>^ufQ!8&u4b;j@uE<$6S+ ze7nwR)PQHPSw4EO52p#gI$9Q|fDl$QLmW<@AO4Is9TmTiBcg<=zX5r?&&nji0ux{D zW+P<{C6<=^<`W@|H8xx-x?dU%O|WQM&&lJ%fl5Pl65$q4NlTdLu%wW7ozlI?^krc; zB#{*INtDi*pix^xyTOWD>JVG1&&=*Xqio7Pr&$}~aGM<4sJpk>G{nGq{EdD7E%S5u{i?F()O97UQOHEt!lAkDI=MzBlG zJ}D1KF_+DVXLfxxf)L{EQJUci#l_S`mf#=^4)C20)rc5j9oS?Cq5lT9u@zX!3Lr4D z3?Iqr57I%8>JvD$=_I{R>TVVr7>PqxM{Yd{E_iLnB`cePQi9lAA}_1&8q8IXfq6J0 z2cRyVMH5z>ormw-fxO&9+afb2n3#t94xe%&5#T&teFUw_i zE)Yd^ohUwY1Dk?wkE<+lxG16P!hBiyn$GfZ^M#1$rUTknyYisr&++WS@Di1tlYX9;LY5hZkQd;lDIJ||z)4t)9#4@;a?D!x_&0KS9qN9+dNqR7$5MD7T? z)(_Df&q4bP6uRIom5TgCg}%^Yq5y#{#pj^(2#g=Qy46$clV?%ds8JTyWmw#0hi$igz6DcXG&)X=v7-L>ovqso*vfC#Mkh4c=+s&?n-9cRnncK9Npp45{ zq#(7C^X)4vT$CpfPS$grD#bFJ*U)Od_?gW^OIiItcF&>*0jcB>8_*n~J~y9EteelX6;l|nLJUFsCI zlVDLGM?}n9&2Val`@jbu9F1CT9fXpK+eC>{My|n*)}e!(i_&B^qK^TKbe@nNZ7$JY zW!~bS=1?K9PT`q^ua(ep@_03m%+zh7Bx8q1-IRBLN@n#&CF*!n)8kRLYo_4h8y%sI zAp9JwOuYnNxns>_KFjN)>QiyWD0i+@Nrlr$7q5YIgE|K;<>{LD9;Jzk0$4fX<|XW6 zs3Kye_j9vp<<;JbqyI{C`Ik{U_f~T?Ustx<%<|q`04lD*( zVI!8|uBBR_FUQdaA$Ds}zE^AdR|CS2=kvvDY`W1DGRi}WOEp&CU$}#GQ+mPPn5`g% zqu##xVy~`T2XHfbH>;}n>UNSni>{$2FGQ2cj1Xjz+BS?8n3bIS{5l#u6o0knK%2-Zx z!lUtd6_>!tLD)efsDIz}I|OV3rSv66!^S5zKJDtp@-R9mugkWl$MV3Xt(pQp$)i!b zv>(-XY784}?FvA-a8gT>IkTR&UPgl-9&wDVxLa%hA=N5h@%N*1QE)owwA|=H#>S=X zpN`@?-xWzW>Qr5p^-z_~0dxb@z&}Gbvei z6*8;A0^oD$6y-SxiJ^YbGj~zxW3{P5XDGXYFOHXK&^2<<9AX1R7!QFY%)08Od_^~I zOIv$$z9C)NNA-DS*N^RczA5&Mk8m%`U&nMGA)jjtdxuOTi}C42Z^Ej%%f}~lL~C&0 zwigqB%x5ipY1dK@nl^UU_4hNj6XUWPRu(V)2< zQcoxLdG{!$qby0#3GLL_P+%|8cX5PO7fihJP`7vuyt76}d*|m#!=ze~J|`xkWnx<0 z1Kp(pb%H2n0#&*J?HS5;OsTk*pfsYeJlnmJ21_v`Kh$ryk zhTXB})u@UXenE_&TilLR;I)|Pz1uHoW?q1Vo##^IJR5 z9H+Z9mbsr;j5NZ`Q=9iZ+x6$v&e1x2v9O#djsv|`P7ZB3C+?GiYy>tf3mtqgldte; zbW<^a=1lsfe9iMP3K@-j;ENgBHagaJ@Z9vA0^O8NcgB`Xmrk<_H6y@|xrhX+kjJVi zghk{X8D-(|(S#6I=WeSRc}f_HWtlJqo~wSfi>1Jpz*tOZp70Ibzvt6ZL9Rt{x4)Re`?%Pk8 zck)IXHbNYt)6#UubBynVUIUGx=kg3WZA7g}oj%;T&x4klw-sx7L`!H(Ys&fr@^EbF zYRjla#H%I+^uEF5PKqb?OG8567P+P#{%W z-FIM4=bE%`Xv!-)UT<)lT2LO_{dtl?M?sOKL2F0i{vq#c+0wo1q9FAV8>kd#t6%RN zdh8b*ba!O^Z5{7Ift+nk^|aql?kq%w&qy+#&0TYY{aFI(rQT!dbZ_g_VV@sH%y3TA zljqYfq>wd+-ikh0heDSlz$pEGbrC*KJiXRE2^@6(?O-=Ua~R~cj-eBBYZI@mQ#0dz zYo~cwz5JHalS6+ugGdnn>|0qm#vY-T%4BC}o%=hxK?l;u&~7|~8%^OZ^v!1~gnHO? zGap3<{dBa^!|aG+Y)yUOSkFS>*_vps%Ji<->0VGV!LS~PrV(j0);-hcIZ$5owl`d$ zDH5UtV1W=-p+KtS4JU;0S1HE4ewY-=`1>eikEy~fI7kq<_9jo>SLtoo7l@(92-{Q$ zoF7K(`rVd6jI3K#5(3GlT9)AH6Obl_AOF!DfWx#PhS)~`$H;D!^>(* zfbc`r`4r$+V6OF>BSEliqe^yNMk7w*)UH|Dn_=CLGPZK^MNJHkG!eXiG-5hr znsF2nDX@r8tFj)PxmX(t;%c%?9}c1{E-k>n)5y36zTFi&Feneh$6LjX)w^8Un%E{5 zl3IYT{4`9KjM*$GI4tQ(KOz>03m}dR5N5JA{O*~FOCHZ{(N7X|OkY1bz7P>>8oDS) zNZ)`)%;0F4j`k#{6z?8N6yKd3HF*8`HG8$P;7>1A{#ti72yR)fEl8tpL{@qX1hy;Q z)@exdw~WW-3~vlTnoi^r1$L#EF5J+m*sq-vKa=1C^wsoAnB&I2P0);-S z!S{=(+tgz-DM2jvxArje1)-)@MhYDp^@THowc>8PN>vT!exvS=PXxM<;v1}Xt8i2xn1bxg)i8Q1&Ut1aOTJYP{ z6vgcYh$dRp$d<+c{cx~0(rdjI`)It;GHY;Z;@yLU(adYIW#ta7bCZtMP@U74uT?8AzM8){*8$>il>T(vr=Fds5-SO^B1C^ z2eE60Vv#yT));ex;{(9JHYOC5H%k=HwYmA$= zH-qmCgKstePNDDOSN*7ZBU=XHK{dbL2N`0O2^O?hZVPy2JFic4t>17#0bm`9Bxkcx z!7hQnNJEB@zD%b=?M|wF81K`i*?foQf_F`A^Q08n=?CKtTOD|1!t>7az*l{M5om6C z^5c${Hi|Hl+2#c9sq8qpS@qFuFsY$)3?F#~(3H*!x z7uGTL4B^7S+^G#5E(0|Oepnj&mQ}Ym`jPC|Bpi_-s3M>~wuf)w-x659K0IGL=QX;C-CX zi>H6Tr+Rvj0)z5yO*2+DPNfnC;?A;RBa&Y(0qG2CPzyrX6jp!0sq(pR@S`;|PjP#-( zswLKFA{K6jIF6i`djc{X?h{j@puwX*u=9qd?;WtDzzge|6cZa{yIj+Kbe`9`hYF+% zOoKk*1zUSX5yGem6*iJl6L(Bl9#W2%3lp6%s}?S@r)W7`ZQT9L`uV0Ah1)##G;*O4 zhLZeoB~PF2vgCtfR+Wt*iQ7QBe=zR(X*dK{?|?wLg&uSx4(H9?myP?#6&DebUe(ukaKS?OfwX*y6Y0jB2WpCOu61gB4A!OyMw4g~?T&h#o?Nkh< z+gjyPid}9|bUGmZXUrk(sHErJk4phM&r0-ag+)%&2a^D|{} z9A*EHBG07bRla_bX3;4tTJ#Kre3e>Q`1;8>Z+aO;21Sbx#4QfI?K(NHe@>IJxrj0c zLmj>>80UNjf==KNyX<^!RgTm@SXGjw31du#!M9=pIcRx0jGC|b<8)G}&x6Jy1BxIeDO|<=>?pLjn%C_hN!Rqm^&40R7 zpN4n;9X#kBAHnPc->C9nGE65-zX-Z|1G`;hli{-;;DuejH+{3|7~X|0FVxb+h>YN$ zvBYQh#Y^C&t5QUQ#qJhJ=jdet++1s&7M({@s=)&nD+J2)nNl=*6O@WT?IAaitllS}Dp!4yiwaGQzT99Te81K@tdp0tYMPwsRLrQ5V5G-yx_7{7sBeR9=HSYoX6*6Q9} zgvbntFFaxUR9}=bfdV`6jI%GuJ8gZF7F^9W59T*O(A0gX-FV#5vnyfF&mY|mhJ`-3F(kd1q7r7q)Vk6=^7Ab zVCbQn;XTLQy;r^OdzabgIo|ifiyu7Z80NgL^ZK9vj^8!%G^qD|hH`FUoYG@!t(Z`dUVLjbd*-Ut`1OYJ?x>jKQ#aT7qAP0AiB)Yj=HYE(VaVqL+ zXE=z-G*#ZK<&$x}+N;pJ&%%5;F-u!?mEYmhNOb-q)R=;X#x;Dho52jS>XNY=@yr!e zrMVfOrYG8B>ABg)1~_f0q-KlS%|LQMcRSznP2$(N&eC#yt({Nqz+sI#P{+w8yr`o) z$DM!YL0bU>j$V@BXo(4j1SAv1uCoBuXQ z1i}r@&YRCFEaK0bsZm+obHpZ=YJW;6Y>9yz`d`4vwdmFxTt`GTX%1tsl8Ky*~`9^WT{)Xz`^4oYL zTGEh=6S4qX&gvku34@nk?P6$Ybun?NCUb(7vNI>y-n>#xEXPzWznHgSoA1#W68>zs z2uV}ZQS!M;V6Qszsh z9^9ixA3cXvjwW9kdd|r}&qw)AQPnMa0+3(7MSYM8 zWUEDx>!~J`M<7TgLOYvNH^(e=J)h~qw<`ADD!g}0P2&YA5HNY5Gc&QB|JpoWKg&sf z>GeUV=I$cWH2JKpif8V36a)7D1(gzUE z3hj+57H*$_u3bxub0}2e?K8~+2N{wv;k>imFO9wG9@wbcJ%w-C&qB&8oTzr&5v~MF z-UuLX5jymkjEyRKK57v?AH~G*`+O8SO?101R(DU9)baC6P=%Mv&$m2h*(p^F8u>pM z&_f$trx01^!*nN?6<${nq_rr#d}$?R^2A!CQwn8D~fia47uO~ZMYNNX`rV! zxjC743dJl<(q={I=j7CRrADV%@FdSZ>F*`Ag0bJ4`V91iFQHrA!`Wo09cCsR@<#>u zLARoH!tLF?v;>!c55~~Z(ZW9ZPfxbzYl`8S9b>B>hWXKPuLI?s#`t3YclRFi-SDZ< z8Q0j>o7IWtcPfjnQQJL#zaK!mj$sFe25LHr3!>`M!gQLw&Fljg3J%7*I-E;M@fFAP zZ|xfOXMx&ot|BD2(qJ7?eXv(I(p`E%V_vAN4^iDQdP-`n@>H}w-LOmJV8RM$gY@K0 zteh`uIDTU~7`C9(a7)5Yi`3m`s4bul(Y(m zjASF%=lUCcb^UaEed*6#ztYra!Y{o_Vv>b7yc`F*v$la(uUf;oB!EE9ym4>0T_~3d z(_?}0nkek_M5rn-MAn80Xk(3`!+JPgZxI!y%n-K^5|&Qu3vLA;M^uxN=qGZ*< zn8gUqEW>DKY50>_PSd2p&#=TkcnAEULI2W2B~AV?Vh_+0s$5`tdwDQDAJh=S#jVq6 z!NlS1-?FfdY80i~GQ@{!KK;EHfcgSJlkrAkfvjNy81KMMVyB}AgTi1Wpy^Z?Mu@3Q zXnb~O4^W#}N;)SlcP!uv6VsABKunDhRu|fZvvgEWj~eNt8_E*6Y!B6m@UIE(bQz!^ z9|E^gS6avPwWP9!oX7E-^glN90nn4e|ZlNce3x%jT&TtS%oe(2Rj~3~VlkH;4OxI(4eDlyY z>zl?r5J59|ED$euZ(%Ti4e|gGQuw_KyzaXngKJNud&QMd&|*dbuus>MXdWsE1~>p- zNf1}n$lDir-JL!K&z>+^*AN#zGtK$U;a<0{L$nA1Lc=lgMUX&6``hf zbrW%Rt?q3?a9pX+uGo4j!+bZ|AP2mJkL=YW$$L^#zNtL!)GNxilPiZdOMecS($Nud zeuFX)dfvz`3hDqU<9{fRKY#RhpFRo$7-mZ>?jg_%=tXz_#)S|MU4Vq)2S+12a1fZP zMtzLF^c?f+ia?2$a6-B{=vY`ZzhSYOU8ULG>+@UMc2?i7LsQ~c=xl*G0{~6c<4Oh2 z-^*7~)GHEm!)leMY4{%+|J}a-eMdcF$N7B(lE!aI7Cdh>1XtwokRjro=mXB5*tu&= z5l@~so|T)Y`A^g4fB9XH%5gg)UMNlow(@PAYQ?kB0HB2*i4Tn36((FSW*WDWoB+-z z_xx@tD)7xdBEw7uzKutwcVnfd(okJ%$k!7Yyll+JzO%#5F zx3kmiyJNcFT!ls!kTK=6iBKSh5x9BMrHJZe(pcuT4#Y98a&ra~sNU{MzHc!r6BUj5 zX;BB$xnDBs)*Y??#W1l{)$!)9*8vI$ebR*xPM`U1HhdbheWLuTkypRa_`L$1#+nxf zAKc+m3Q>tnY2uz+$(Cwz;$nVt)iRV)S?+Kd-tPr0m<&q|9}R_*xnhwx(i@tnte}iP z_}~^-Z}7e=J~bGKfSVfrjB4639IO`}Gs<55;<_chFF8i|3cnpQKNi_7l%Y+G@#&pZ zG252_@FqB73c&2-`efz4^lfBc%mO_Oh01pb)F7Xdl<%-cP;tRqeBW3b88^fweQ3gy zGF5AQ6%}Z~7xNF8?5^l>meKN@S~fqflRBo4KgK*R@P9JM>r|NWBF^+yquL4Hy-AM8 zgG-UN(g9zy%$h%7t)5db`f@CvRSjT^p3m_o?-9xO3h|&{k+@GBU7aENR5oVtADsI= zZ1;`m*i@(bcRypBwr4$tKTuV;;bTnG2yfFfLBeUvW-rd z6hZh&SsNWqZ)UpT@X+jcO;aU`w+CNDX46m33N$Q-&S0(>@4205zER7dU|e|z|Dt#G z9)me~jx)dk%WyRY`#2uPU$i?N+=F{Xy&(EVHnlEoxm?M>)gWUP2?EvE+KkVPKR4~j zOaJN(xjWb*IjEv5$bGnm<{$jTt+Yczn|g<|DXSh+9lj;EG>{WD4|avEC>~|_4=A66 z1w4le?S-coRjacYpg_>t!r3?efn=sTVSz@vvKy;>Wa74~5s@OS zxxw>7?Od2SXy5c(20al0#jw@NtGh*)6|R}+kfr{W{6Q(_SLyPcQ@VYJrl;uWOZTAd z{C1VYEJ6Q&w6RkX`{?@W}u{_dm$>_jd(X6KTT*_^u-nSA8&BHhBWzW|+<6emj^$-3fjDr*Z(Q zc&g}uC}zv9vVo&;(3by;r~eOsx@QH>owGOb)zIe?>RzU+kcJJ%gz3Any{ z3^6$OQWhm5%$7Bu0j(>e1H@?lKHQzq*YAk~XWeF!@f@>d53~UJSLzcmxYPf4Vt1Hh zI1;s=nEXi8eio@CQTxfB{09qnBx*-i?R)3y$g2J91pKc#lSiUK)m@Y> zXoQP`23P&suDUasctb7cetyiqjGzo;lT?sZ?B-vC`%DcL``@wp2x#y0q?}pF$9jUS z+CMXcWYsJyVtT+PcKFy0Fy134oW3koik1kLz`8RCQqx@ID3O>gMG*jSSaN!I)n{Y? zm)As8&|qot%CkMM1J{bbIjSF@LF5unmk5|!W2@h>F-lhBqg9b5a_D^*&h9c);Auiu z)^Pd?{KnoR7Ew(0+-Zx`b$#UnX#!J4XO5V+M6v0*31U*sKI|PX4Y#e>BDC0T4Jn-N zsqo968H~e_I^EQLdsV+~!gDqA4YOr0PDq-NaB1gLHE#GUs%3oPhy2gq?YD@vbKpX$ zc3L~TaYtpbtM=s*1pteo&v20Xk@E?1fB0Ce%3-$j=Wp&^a(~*?hDW2KcaSahcX$8c z5U9gIfX+~qE&q_%l_>i=C6a~#SKN3 zGX~KuMdX;=Riqu~9X)p@t!2AwR5SfwZ}7+K8VrLxi|%OR)8i~wgAuftENzSyDTM3U zh_??CDwblD6EaZ;sf^ZLMV2I8)?rJGmhuv(M~q|zHuCO1z8Z;%WF?t^WKE=l+q)AV zT6NU}F1xfij3gxl1921)0QNE2R+md4@!#=CL**Tbd%mS4YP{LUhfQf#RZ?!{7@%4dJN%96^G7ha6=lb6gL4T^{5Mpg(WU&JL00D$PD> z_h-s;TyLIOv031+?R;#;n!x|30y=~&rBi(4kIBGe(D&oLQ8$-A*-w1o*RJuxAI?fr zOv|z8e9c&^wM$;s<^<`$=iZ+V4ZUt%)^|$CadJ+z3p2Lhy852hvS9L8O$j)IZ*|q2 zH~W5FHRq+ls+#+|R7$7m%*LR(`>dkyep9`ZKkA6Te553`ZzpdRe$r(p!+Rpc+q7w~ zPl9qEHK4t9JQ`8Vb)Tq|lcFCJO;|{OZ)U`}^ns?d-xvEuU-s2iCy&U|?ow}qe zv~OO&mcOQPop!1{feZ}9o7h4$H8m>^Mws8^6G8jL5W_J zl>Rtu*bL>^bh+4Uj9pG>zxzwF{#fYp8k{W%O6=yam!Jn@^ye4e!M`|Uythtpnxfo}ORVpJ{H~?Hdr>K~^|fFOHbB7<#Uj79<9Nsmt@Zh0=Vtstw_vmS;2PVA0k4 z>{E2{$&qa857RRca@bGcRo=J9P~{{@NTH=_Yy7%KYr?k11iN6F9g<@I)FMgECMB_E znJwFBf7hq7!c6Tc=`ii(3En*GFC!1jthKDCJK1N;k>~Lx&7C&|H>LZADpND)wZR#` zY?2o|53ni%A|u;_I5So5M4Cdw>;{=^XA7+S$vL@Hb0JOSj6Z9_zu;nbDYP|EEeTB` zrmAL3aGuWz<)$n}4qUXVEeXwg%czJ#naem&RJ|3;Luj3VhR`E0*7 zanZk;{`i`S%gOl)iTw6bb^MoRMpbi%rVTX`YZcMvPwzL?pyfoh@YXgxhs5l*FK2l}qL(MeV5oA}&erL#HFCaZlL`Db7Wlc!iz=}JVHt6G z#|kQo8+_=FxlEHBpN;@sS>_H#SK#&DsgFl+^&v48Zr=5;KW`RSV$(5a$&_wY}dV-S>1xXJl6>*4l3oVrke_J650UR#B;wRT$PY zJ+SGTrJBASL^w*W$RIc})DvptvV$K;T<<~yv~{FE|CK}NKKWWGC ziYUER!DN=Y1l-L4yp`dABZ5Wqz3lMKtRb_HofmKFh|hBwKbY@vniFn>KrMA!6Zx|T zWB3V&IHIdnD)v@B+b_;Y#6sk;I*>xk6%$*1&l}_UYy!Bc%pX`Izwl4BI_F;@|5Hw zRQVFV;BLM9DJqq&PdxD)X66$cGU7 zNQg6^WqboUfcnA=y{BVctyL>_W_KnYI-1X3N(`cuteidLFBCMsRgX zM)sGgaLNd0g@Ukpx2t^C^A9d2{;o~#S;{-EpscFNDEN%a5XGDOJX+3+O`%Q%!m}=U z2pnDxjA`?E_vyQhWNcaIs<{M5;?NZRjApv*K=#1-#%LF4@+K{ z^U~C4J^mNw;HN(ksqAmwwt(Tsa(JdCphC6=PC#;eT8pceqqhd-s}(hzK3}5pTSb{D zM&$Dh)DvEfk7ZHW=A+>b(a1MY?qc5>dKiIY3z^g3Y7~1iKg@VOO*Uq0IK>0G0LYvq zU;W8q!jLq=-(;jDk0=3}kG;$!*;t~Vi}G|*$LpZ9tu@T+ukwz_;&iHiRf33&J(x%# z?apb^cQ)vT^cX58`i_lQ$u`B^JTJhCd(mt=dTUEiQXlRlWZ$P)boKED>BCo=4ix=!v|XfuI@&;C`*mq{T4rB zIe|%Ri%)6X+@>sAjrPHMH`op)8YXfeqxUq%u@TM;?WlW(R$UWyT+Zl#r)@AKso$>W!r0aJH$;lcLEnOdHrBbhy%L}mCQVLY)w3~2iQG!V-rc3Z<_E8UbNDe4{#`e_@qit)wM{I)=to+Q~+O>WHG>iOuTA$BlAgn ztG;?guEqP;D%C)V=GrTslUp2i>#u)2c4(9S?Bm?|lI0zY0`y|%UJHyOLyYUt?FBKJ`?x6pP(K?1(U8(V(dEC#Be zKMs6?dR3~bH|8}+*ZpdCn`T(H;JaQU*>Xm-*EHTEFJ6r*56`mLZG-sTKEq{qLyoQJ z{PocU>J{K7PULwbeMl3XZWPT^Yp!&%$iT`?(>U$Hz<`!2 zOHJTnXYdpWowvw*}&=S&%W;1jy?OO$`0Xa~|57vVhe^S?f;m0hIomebc zkg%wWL}l~Lee?+Q$<=bO0(s_Ap1z?^AjJw(L?n{P3!utBn=A|!`kfKB(v4dhEl`V9 zzR-`(Xvl`+m@wUR{y1${=X$C#v-hfL^^EVs59Z2Eg4zUBq_h$N0b@`%7a5n0m!U?x zd)*-xO9NqO?U0sGBCMQcU#heB(PNAvzPyLDzPb0T!yis7oL8GbnBHNm7}$Z1CIF#k zHd4Z#Q#niArZxA?lYVKlyFuaGua^Im$wwnDm^?)@M_)ei9EZLDF^jpSyiLM^B#TOo3?Su6C`-<2%E(rOin zshCD0y@G{zJu@ewU~*h%$Y5-w>8xGI}$pp%=8O;hqo{6XeGhYkreMd|(Y8lIQ3h5K(_x=z=X z(>SBwfD^*@a%Zvf$xLXe#hiSV!Vc^H$%dC{nh$Rj0WDgx$WQvpKb0{+6n?3jp{}NS zSG8#!x;esjhtYkiEir%{?GSY=jG6Q;IQF0<>O{R0-ft^QV4_z^N;caQ>mykOb1&W* zbs8(Cdki0bQ&lD5XOyc^D$stggv&k|{nB%;kmQz}-#Kwpi@5?q<#TJEDOSrKlBZxS z!u;!lyrZZbx0eZ(JCPb{JZ_Ex=9`=$UOus|L&eC8Na4*DgZ>=Wsa9v!#j1U`7%f(E zs_Q#Y$+SsrUznTYbVStN1H;pN_+xL!2kYfapEqVIvj$ww9j-8i?P!lWTKYS$jt8WL zjM~k~vj*ABDU&vId3e;5QzaAFOFTA~zzJcDbCI;pME1VX1>TvGQvOiSUv1Y5F zDi|lm&Uf1i;tzqYjL}=o&dyHw)2%^Yi=~Aw?=Eg>wZ@^Wn+A?22gz?F(3+v6}+&ABuEMZZvS$6t4bUt!-^Aodlj zE}6;9vmc+IaDa&pnK*o8t(lliT~(_P+Gt#6cTQvvC?@4&FxwuvMiJ6|;$Z7*8@p~- zO)n9436mxlVKkYsJ>Q19~Q zOG2(Q1l)2w>#croB*YSLdBdn&Hp2pHKuq2v@U)sX`L%vEopU7v?lpNo{X~@FvLo!% zOBmZV+ZU$ftFnjBRK1d*#-|1DI-=GKKbM4rylhu%c>y^V58rhpZI8UBN_1emxXiv# z$K<(s^Ti$&Wcz-_x=BMM;>1wrRdk-;U&@13^9Hx81xzK33h534X)04cNw<9{m)_0l zkR)tsJ4~5UuRPi4mbqaBXALS8Uo{`7n$^lcs1?6Jilbo!B%}444z+eXz!C7 zwQRIlp27}dEv?Xg-WW;$7T*)m?r3N^vYVMHJ^HvMtgNieV7ga0f;B4S=9iw3IhuG?bXP(0Aqn*{+@;lN<~R1G+?8H6C{L`oh~)6H?{BP{!bdao1Mx zcKc~Vws+)Voi$^c0=b3Q=&HkXAeJouNqITGDWUC$p$YPV>bur+eMH{mLabf{PF6<6 zbRjwJpih_VYK6S(qG;>Gt#6rXSnql?UWN^23Vq?pUW)gM=@3AygyyZ$?MGs{ z?XSA9vu_s^%DZf8S*%%5`H#As;x3;Yg}5^6wGH$PRV+^czV;VVA8~5vIAA7e9bU^N zBtu>Xaf4)fu?oy^ygZeRF|Lx=CvFtrVkW}I$M&=8lD6brYy<7ccRxL>Ft-I7kWji$ zPF}&I{+ZoS{(c4{<=v;%`mq%6CFc3L2rjzFSkDY455}CtK;bl>7Fh9if>|XB&}uoP z-fS6sE!MC#8_r#)PT=aKOF42!8G65TuwNZ8y82lekFu7Cc0XM%4&Pw!U&2ldBL|2bcVGs5Br3w!%qs$=5F}uZ9#FHkF4rQ2` z9!Zu!qGKr*uhinQMq$Ap;guE$b1WI|v6QM(gjj9VJYYS1*aJpGhDp%*K-7byW`h4t@S|pezpDoP(M%A% zvj=}zZEErhR9oD7rmL_u6SEeIXCE)Kz1M4-joSFk@g+|Yaj^(7YPNT#aOI>@_gRO< zkxO~j%b%xz??Va?)xdD-Cmz(SI($JpmPGETi}u%#S4_%$KyOp7TH%ei@=it1GMFu6 zQL+x0HADP@6#xzH&L}6KpoEt7>Oa(Nkj;nzFS73%xWH?|iEi-vk}BO#!8j>-_=pjm zzPU;V@@@KU&g^};>gpGu!HQn*@MzN5(9LNNOP{DZUaZ{R2m&o|SWPGJ4>0hMPZOnc zxdSXS}nWwLtl z&O+kA$;GT8YRk*-SMe|-rX@4APuy^}3J+#mmdiw z2MiUqo9Z)Qw!;y;(=-U%xeIcK4-SDaQbd3^_-KHW2Z47~ zFdQw3*$#^V=}V!Gp2Yv%r}z(AsgV_&Gqha>vmKUR0Hj~&W5ytD3U(!83(k4oRu7|A zFQUe5Kzh?+t#Qm4I3F}3=ofQ@9X_#(-k~WVy;b=-9%lY*uqHU?^7v@Xc6cOWKd8tf z5&J>jk3{STX*v?I@7)XcBP)i5leFH$d+Zo)jHI~egYPuSkwyF70XVW~KRN(MPUH7Z zAoY>c_yc AsyncIterator[UnitOfWork]: + async with unit_of_work() as uow: + yield uow + def get_task_service(uow: UnitOfWork = Depends(get_uow)) -> TaskService: return TaskService(uow) diff --git a/tasks/core/config.py b/tasks/core/config.py index ff3741e..fa201b3 100644 --- a/tasks/core/config.py +++ b/tasks/core/config.py @@ -47,7 +47,17 @@ class ConfigurationCORS(BaseModel): 'Authorization', 'Access-Control-Allow-Origin', ] - + +class ConfigurationKafka(BaseModel): + ######################### + # KAFKA # + ######################### + load_dotenv() + + BOOTSTRAP: str = os.getenv('KAFKA_BOOTSTRAP', 'kafka:9092') + TOPIC: str = os.getenv('KAFKA_TOPIC', 'task_events') + GROUP_ID: str = os.getenv('KAFKA_GROUP_ID', 'tasks_app_group') + class Setting(BaseSettings): # FASTAPI api_v1_prefix: str = '/api/v1' @@ -58,6 +68,9 @@ class Setting(BaseSettings): # CORS cors: ConfigurationCORS = ConfigurationCORS() + + # KAFKA + kafka: ConfigurationKafka = ConfigurationKafka() settings = Setting() \ No newline at end of file diff --git a/tasks/core/logger.py b/tasks/core/logger.py index a9f928f..50ceb4f 100644 --- a/tasks/core/logger.py +++ b/tasks/core/logger.py @@ -61,6 +61,10 @@ def format(self, record): '()': 'core.logger.ServiceNameFilter', 'service_name': 'tasks_microservice_uvicorn' }, + 'kafka': { + '()': 'core.logger.ServiceNameFilter', + 'service_name': 'tasks_microservice_kafka' + }, }, 'handlers': { 'console': { @@ -110,5 +114,29 @@ def format(self, record): 'propagate': False, 'filters': ['uvicorn'], }, + 'kafka_logger': { + 'handlers': ['console'], + 'level': 'INFO', + 'propagate': False, + 'filters': ['kafka'], + }, + 'aiokafka.cluster': { + 'handlers': ['console'], + 'level': 'INFO', + 'propagate': False, + 'filters': ['kafka'], + }, + 'aiokafka.consumer.subscription_state': { + 'handlers': ['console'], + 'level': 'INFO', + 'propagate': False, + 'filters': ['kafka'], + }, + 'aiokafka.consumer.group_coordinator': { + 'handlers': ['console'], + 'level': 'INFO', + 'propagate': False, + 'filters': ['kafka'], + }, }, } \ No newline at end of file diff --git a/tasks/infrastructure/database/uow.py b/tasks/infrastructure/database/uow.py index b022e2d..a7f8751 100644 --- a/tasks/infrastructure/database/uow.py +++ b/tasks/infrastructure/database/uow.py @@ -38,8 +38,3 @@ async def unit_of_work() -> AsyncIterator[UnitOfWork]: raise e finally: await uow.close() - - -async def get_uow() -> AsyncIterator[UnitOfWork]: - async with unit_of_work() as uow: - yield uow \ No newline at end of file diff --git a/tasks/poetry.lock b/tasks/poetry.lock index 1b3165b..408c93a 100644 --- a/tasks/poetry.lock +++ b/tasks/poetry.lock @@ -1,5 +1,58 @@ # This file is automatically @generated by Poetry 2.1.4 and should not be changed by hand. +[[package]] +name = "aiokafka" +version = "0.12.0" +description = "Kafka integration with asyncio" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "aiokafka-0.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da8938eac2153ca767ac0144283b3df7e74bb4c0abc0c9a722f3ae63cfbf3a42"}, + {file = "aiokafka-0.12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a5c827c8883cfe64bc49100de82862225714e1853432df69aba99f135969bb1b"}, + {file = "aiokafka-0.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea5710f7707ed12a7f8661ab38dfa80f5253a405de5ba228f457cc30404eb51"}, + {file = "aiokafka-0.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d87b1a45c57bbb1c17d1900a74739eada27e4f4a0b0932ab3c5a8cbae8bbfe1e"}, + {file = "aiokafka-0.12.0-cp310-cp310-win32.whl", hash = "sha256:1158e630664d9abc74d8a7673bc70dc10737ff758e1457bebc1c05890f29ce2c"}, + {file = "aiokafka-0.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:06f5889acf8e1a81d6e14adf035acb29afd1f5836447fa8fa23d3cbe8f7e8608"}, + {file = "aiokafka-0.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ddc5308c43d48af883667e2f950a0a9739ce2c9bfe69a0b55dc234f58b1b42d6"}, + {file = "aiokafka-0.12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff63689cafcd6dd642a15de75b7ae121071d6162cccba16d091bcb28b3886307"}, + {file = "aiokafka-0.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24633931e05a9dc80555a2f845572b6845d2dcb1af12de27837b8602b1b8bc74"}, + {file = "aiokafka-0.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42b2436c7c69384d210e9169fbfe339d9f49dbdcfddd8d51c79b9877de545e33"}, + {file = "aiokafka-0.12.0-cp311-cp311-win32.whl", hash = "sha256:90511a2c4cf5f343fc2190575041fbc70171654ab0dae64b3bbabd012613bfa7"}, + {file = "aiokafka-0.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:04c8ad27d04d6c53a1859687015a5f4e58b1eb221e8a7342d6c6b04430def53e"}, + {file = "aiokafka-0.12.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b01947553ff1120fa1cb1a05f2c3e5aa47a5378c720bafd09e6630ba18af02aa"}, + {file = "aiokafka-0.12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e3c8ec1c0606fa645462c7353dc3e4119cade20c4656efa2031682ffaad361c0"}, + {file = "aiokafka-0.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:577c1c48b240e9eba57b3d2d806fb3d023a575334fc3953f063179170cc8964f"}, + {file = "aiokafka-0.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b815b2e5fed9912f1231be6196547a367b9eb3380b487ff5942f0c73a3fb5c"}, + {file = "aiokafka-0.12.0-cp312-cp312-win32.whl", hash = "sha256:5a907abcdf02430df0829ac80f25b8bb849630300fa01365c76e0ae49306f512"}, + {file = "aiokafka-0.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:fdbd69ec70eea4a8dfaa5c35ff4852e90e1277fcc426b9380f0b499b77f13b16"}, + {file = "aiokafka-0.12.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f9e8ab97b935ca681a5f28cf22cf2b5112be86728876b3ec07e4ed5fc6c21f2d"}, + {file = "aiokafka-0.12.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ed991c120fe19fd9439f564201dd746c4839700ef270dd4c3ee6d4895f64fe83"}, + {file = "aiokafka-0.12.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c01abf9787b1c3f3af779ad8e76d5b74903f590593bc26f33ed48750503e7f7"}, + {file = "aiokafka-0.12.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08c84b3894d97fd02fcc8886f394000d0f5ce771fab5c498ea2b0dd2f6b46d5b"}, + {file = "aiokafka-0.12.0-cp313-cp313-win32.whl", hash = "sha256:63875fed922c8c7cf470d9b2a82e1b76b4a1baf2ae62e07486cf516fd09ff8f2"}, + {file = "aiokafka-0.12.0-cp313-cp313-win_amd64.whl", hash = "sha256:bdc0a83eb386d2384325d6571f8ef65b4cfa205f8d1c16d7863e8d10cacd995a"}, + {file = "aiokafka-0.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a9590554fae68ec80099beae5366f2494130535a1a3db0c4fa5ccb08f37f6e46"}, + {file = "aiokafka-0.12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c77f5953ff4b25c889aef26df1f28df66c58db7abb7f34ecbe48502e9a6d273"}, + {file = "aiokafka-0.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f96d7fd8fdb5f439f7e7860fd8ec37870265d0578475e82049bce60ab07ca045"}, + {file = "aiokafka-0.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8ddff02b1e981083dff6d1a80d4502e0e83e0e480faf1f881766ca6f23e8d22"}, + {file = "aiokafka-0.12.0-cp39-cp39-win32.whl", hash = "sha256:4aab2767dcc8923626d8d60c314f9ba633563249cff71750db5d70b6ec813da2"}, + {file = "aiokafka-0.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:7a57fda053acd1b88c87803ad0381a1d2a29d36ec561550d11ce9154972b8e23"}, + {file = "aiokafka-0.12.0.tar.gz", hash = "sha256:62423895b866f95b5ed8d88335295a37cc5403af64cb7cb0e234f88adc2dff94"}, +] + +[package.dependencies] +async-timeout = "*" +packaging = "*" +typing-extensions = ">=4.10.0" + +[package.extras] +all = ["cramjam (>=2.8.0)", "gssapi"] +gssapi = ["gssapi"] +lz4 = ["cramjam (>=2.8.0)"] +snappy = ["cramjam"] +zstd = ["cramjam"] + [[package]] name = "alembic" version = "1.16.5" @@ -51,6 +104,18 @@ sniffio = ">=1.1" [package.extras] trio = ["trio (>=0.26.1)"] +[[package]] +name = "async-timeout" +version = "5.0.1" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, + {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, +] + [[package]] name = "asyncpg" version = "0.30.0" @@ -1380,4 +1445,4 @@ files = [ [metadata] lock-version = "2.1" python-versions = ">=3.13" -content-hash = "9ac9a0b9e4f16343fead89749824dffe8cad8a1079a0cb80777004cbebeb3d2c" +content-hash = "9038dab5a7728f2acda5734399ba73f4bdbbbbe148a8ee01d16bd42c5277b50d" diff --git a/tasks/pyproject.toml b/tasks/pyproject.toml index 7733521..d80ae78 100644 --- a/tasks/pyproject.toml +++ b/tasks/pyproject.toml @@ -14,6 +14,7 @@ dependencies = [ "asyncpg (>=0.30.0,<0.31.0)", "alembic (>=1.16.5,<2.0.0)", "black (>=25.1.0,<26.0.0)", + "aiokafka (>=0.12.0,<0.13.0)", ] [tool.poetry] diff --git a/tasks/worker.py b/tasks/worker.py new file mode 100644 index 0000000..e44c860 --- /dev/null +++ b/tasks/worker.py @@ -0,0 +1,62 @@ +import asyncio, json +from aiokafka import AIOKafkaConsumer, TopicPartition +from api_v1.rest.tasks.dependencies import unit_of_work +from api_v1.rest.tasks.service import TaskService +from api_v1.rest.tasks.schemas import TaskCreate +from core.config import settings + +import logging.config +from core.logger import logger_config + +logging.config.dictConfig(logger_config) +logger = logging.getLogger('kafka_logger') + + +async def handle_message(msg, consumer): + try: + data = json.loads(msg.value.decode()) + except Exception as e: + logger.exception('Невалидный json', exc_info=e) + await consumer.commit({TopicPartition(msg.topic, msg.partition): msg.offset + 1}) + return + + if data.get('event') != 'TaskCreation': + await consumer.commit({TopicPartition(msg.topic, msg.partition): msg.offset + 1}) + return + + try: + task = TaskCreate.model_validate(data['task']) + except Exception as e: + logger.exception('Невалидный payload', exc_info=e) + await consumer.commit({TopicPartition(msg.topic, msg.partition): msg.offset + 1}) + return + + try: + async with unit_of_work() as uow: + svc = TaskService(uow) + await svc.create_task(task) + # Только подтверждаем offset если все успешно + await consumer.commit({TopicPartition(msg.topic, msg.partition): msg.offset + 1}) + except Exception as e: + logger.exception('Ошибка записи в базу данных', exc_info=e) + # Не подтверждаем offset если была ошибка обработки сообщения + # Таким образом сообщение будет повторно обработано + return + +async def run_consumer(): + consumer = AIOKafkaConsumer( + settings.kafka.TOPIC, + bootstrap_servers=settings.kafka.BOOTSTRAP, + group_id=settings.kafka.GROUP_ID, + enable_auto_commit=False, + auto_offset_reset='earliest' + ) + await consumer.start() + try: + async for msg in consumer: + await handle_message(msg, consumer) + finally: + await consumer.stop() + +if __name__ == '__main__': + asyncio.run(run_consumer()) From 5271beb340731f033caec447eb0a080e27276a3d Mon Sep 17 00:00:00 2001 From: Powermacintosh Date: Wed, 17 Sep 2025 12:25:23 +0300 Subject: [PATCH 2/9] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BE=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D1=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - добавлен exclude_unset для проксирования обновлений задач - обновлены типы (Не обязательно) --- gateway/infrastructure/external_service_facade.py | 2 +- tasks/api_v1/rest/tasks/service.py | 4 ++-- tasks/api_v1/rest/tasks/views.py | 7 ++++--- tasks/infrastructure/database/repositories/task.py | 4 ++-- 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/gateway/infrastructure/external_service_facade.py b/gateway/infrastructure/external_service_facade.py index b4bdb1f..c4f55d5 100644 --- a/gateway/infrastructure/external_service_facade.py +++ b/gateway/infrastructure/external_service_facade.py @@ -41,7 +41,7 @@ async def proxy_endpoint( elif method == 'patch': response = await client.patch( f'{self.base_url}/api/v1/{endpoint}', - json=data.model_dump(), + json=data.model_dump(exclude_unset=True), follow_redirects=True ) elif method == 'delete': diff --git a/tasks/api_v1/rest/tasks/service.py b/tasks/api_v1/rest/tasks/service.py index 1d94d0e..4cae7fb 100644 --- a/tasks/api_v1/rest/tasks/service.py +++ b/tasks/api_v1/rest/tasks/service.py @@ -40,7 +40,7 @@ async def get_tasks( async def update_task( self, - task: SchemaTask, + task: Task, task_update: TaskUpdate | TaskUpdatePartial, partial: bool = False, ) -> Optional[Task]: @@ -52,7 +52,7 @@ async def update_task( async def delete_task( self, - task: SchemaTask, + task: Task, ) -> None: return await self.uow.tasks.delete_task(task) \ No newline at end of file diff --git a/tasks/api_v1/rest/tasks/views.py b/tasks/api_v1/rest/tasks/views.py index 0f2eec5..f7e58de 100644 --- a/tasks/api_v1/rest/tasks/views.py +++ b/tasks/api_v1/rest/tasks/views.py @@ -2,6 +2,7 @@ from fastapi import APIRouter, Depends, status, Path from .dependencies import get_task_service, task_by_id from .service import TaskService +from infrastructure.database.models import Task from .schemas import ( TaskCreate, SchemaTask, @@ -54,7 +55,7 @@ async def get_task(task: SchemaTask = Depends(task_by_id)): @router.put('/{task_id}/', response_model=SchemaTask, status_code=status.HTTP_200_OK) async def update_task( task_update: TaskUpdate, - task: SchemaTask = Depends(task_by_id), + task: Task = Depends(task_by_id), service: TaskService = Depends(get_task_service), ): """ @@ -79,7 +80,7 @@ async def update_task( @router.patch('/{task_id}/', response_model=SchemaTask, status_code=status.HTTP_200_OK) async def update_partial_task( task_update: TaskUpdatePartial, - task: SchemaTask = Depends(task_by_id), + task: Task = Depends(task_by_id), service: TaskService = Depends(get_task_service), ): """ @@ -104,7 +105,7 @@ async def update_partial_task( @router.delete('/{task_id}/', status_code=status.HTTP_204_NO_CONTENT) async def delete_task( - task: SchemaTask = Depends(task_by_id), + task: Task = Depends(task_by_id), service: TaskService = Depends(get_task_service), ): """ diff --git a/tasks/infrastructure/database/repositories/task.py b/tasks/infrastructure/database/repositories/task.py index 20cb90d..d5f1282 100644 --- a/tasks/infrastructure/database/repositories/task.py +++ b/tasks/infrastructure/database/repositories/task.py @@ -91,7 +91,7 @@ async def create_task( async def update_task( self, - task: SchemaTask, + task: Task, task_update: TaskUpdate | TaskUpdatePartial, partial: bool = False, ) -> Optional[Task]: @@ -105,7 +105,7 @@ async def update_task( async def delete_task( self, - task: SchemaTask, + task: Task, ) -> None: await self.session.delete(task) await self.session.flush() From 70450bb1f5f121bc1fc65b2436f7c22ea51c9b7a Mon Sep 17 00:00:00 2001 From: Powermacintosh Date: Thu, 18 Sep 2025 09:34:03 +0300 Subject: [PATCH 3/9] =?UTF-8?q?docs:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=86=D0=B8=D1=8E=20=D0=BF=D0=BE=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?kafka?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавление документации по конфигурации kafka - Добавление kafka-ui --- docker-compose.yml | 16 ++ docs/kafka-configuration-ru.md | 329 +++++++++++++++++++++++++++++++++ tasks/worker.py | 6 +- 3 files changed, 350 insertions(+), 1 deletion(-) create mode 100644 docs/kafka-configuration-ru.md diff --git a/docker-compose.yml b/docker-compose.yml index e05cb2e..02b3e96 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -107,6 +107,7 @@ services: KAFKA_CFG_CONTROLLER_LISTENER_NAMES: "CONTROLLER" KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" KAFKA_CFG_INTER_BROKER_LISTENER_NAME: "PLAINTEXT" + KAFKA_CFG_LOG_RETENTION_HOURS: "72" # 3 дня ports: - "9092:9092" - "9093:9093" @@ -119,6 +120,21 @@ services: networks: - appnet + kafka-ui: + image: provectuslabs/kafka-ui:latest + container_name: kafka-ui + ports: + - "8088:8080" + environment: + KAFKA_CLUSTERS_0_NAME: local + KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:9092 + KAFKA_CLUSTERS_0_READONLY: "false" + depends_on: + kafka: + condition: service_healthy + networks: + - appnet + loki: image: grafana/loki:latest ports: diff --git a/docs/kafka-configuration-ru.md b/docs/kafka-configuration-ru.md new file mode 100644 index 0000000..59d3b61 --- /dev/null +++ b/docs/kafka-configuration-ru.md @@ -0,0 +1,329 @@ +# Руководство по настройке Apache Kafka (bitnami/kafka) + +Этот документ содержит полное руководство по настройке Apache Kafka с акцентом на режиме KRaft, используемом в данном проекте. + +## Содержание + +1. [Обзор режима KRaft](#обзор-режима-kraft) +2. [Основные настройки](#основные-настройки) +3. [Настройки хранения сообщений](#настройки-хранения-сообщений) +4. [Оптимизация производительности](#оптимизация-производительности) +5. [Мониторинг и обслуживание](#мониторинг-и-обслуживание) + +## Сравнение пакетов контейнеров (bitnami/kafka и apache/kafka) + +Основные отличия между `bitnami/kafka` и `apache/kafka`: + +1. **Базовый образ**: + + - `bitnami/kafka` использует минимальный образ на основе Debian + - `apache/kafka` использует образ на основе Ubuntu + +2. **Управление процессом**: + + - Bitnami использует `tini` для корректной обработки сигналов + - Apache Kafka использует скрипты обертки + +3. **Безопасность**: + + - Bitnami запускает Kafka от непривилегированного пользователя `1001` по умолчанию + - Apache Kafka может требовать настройки прав вручную + +4. **Переменные окружения**: + + - Bitnami использует префикс `KAFKA_` для всех настроек + - Apache Kafka может требовать ручного конфигурирования файлов + +5. **Версионирование**: + + - Bitnami выпускает обновления быстрее + - Apache Kafka обновляется реже, но официально + +6. **Дополнительные утилиты**: + + - Bitnami включает дополнительные скрипты для управления + - Apache Kafka предоставляет только базовый функционал + +7. **Размер образа**: + - `bitnami/kafka` обычно легче + - `apache/kafka` может быть больше из-за включенных зависимостей + +Для продакшена Bitnami часто предпочтительнее из-за лучшей безопасности и удобства настройки. + +## Обзор режима KRaft + +### Что такое KRaft? + +KRaft (Kafka Raft Metadata Mode) — это новый протокол консенсуса, который устраняет необходимость в ZooKeeper для Apache Kafka. Он был представлен для упрощения архитектуры Kafka и улучшения её масштабируемости. + +### Ключевые отличия от Kafka с ZooKeeper + +| Характеристика | Режим KRaft | Режим с ZooKeeper | +| ---------------------- | ------------------------------------------------------------- | ---------------------------------------------------------------- | +| **Архитектура** | Один тип процесса (брокер + контроллер) | Требуется отдельный ансамбль ZooKeeper | +| **Масштабируемость** | Лучшая обработка метаданных для больших кластеров | Может стать узким местом при большом количестве топиков/партиций | +| **Развертывание** | Более простое развертывание с меньшим количеством компонентов | Требует отдельного управления ZooKeeper | +| **Производительность** | Меньшая задержка операций с метаданными | Большая задержка из-за координации через ZooKeeper | +| **Зрелость** | Готово к продакшену начиная с Kafka 3.3 | Проверено временем, но сложнее в настройке | + +## Основные настройки + +### Идентификация брокера + +```yaml +KAFKA_BROKER_ID: 1 # Уникальный идентификатор брокера в кластере +KAFKA_CFG_NODE_ID: 1 # Идентификатор ноды в режиме KRaft +``` + +### Сеть и безопасность + +```yaml +KAFKA_CFG_LISTENERS: "CONTROLLER://:9093,PLAINTEXT://:9092" +KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT" +KAFKA_CFG_ADVERTISED_LISTENERS: "PLAINTEXT://kafka:9092" +KAFKA_CFG_CONTROLLER_LISTENER_NAMES: "CONTROLLER" +KAFKA_CFG_INTER_BROKER_LISTENER_NAME: "PLAINTEXT" +``` + +### Настройки KRaft + +```yaml +KAFKA_CFG_PROCESS_ROLES: "controller,broker" # Роли ноды в режиме KRaft +KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: "1@kafka:9093" # Формат: {id}@{хост}:{порт} +``` + +## Настройки хранения сообщений + +### Временное хранение + +```yaml +# Хранить сообщения 7 дней (по умолчанию) +KAFKA_CFG_LOG_RETENTION_HOURS: "168" +# Альтернатива в миллисекундах +# KAFKA_CFG_LOG_RETENTION_MS: "604800000" +``` + +### Ограничение по размеру + +```yaml +# Без ограничения по размеру +KAFKA_CFG_LOG_RETENTION_BYTES: "-1" +# Или установите лимит (например, 10 ГБ) +# KAFKA_CFG_LOG_RETENTION_BYTES: "10737418240" +``` + +### Управление сегментами логов + +```yaml +# Максимальный размер одного файла сегмента (1 ГБ) +KAFKA_CFG_LOG_SEGMENT_BYTES: "1073741824" + +# Максимальное время до создания нового сегмента (7 дней) +KAFKA_CFG_LOG_SEGMENT_MS: "604800000" + +# Как часто проверять сегменты для удаления (5 минут) +KAFKA_CFG_LOG_RETENTION_CHECK_INTERVAL_MS: "300000" +``` + +## Оптимизация производительности + +### Настройки памяти + +```yaml +# Размер кучи (настройте в зависимости от доступной памяти) +KAFKA_HEAP_OPTS: "-Xmx4G -Xms4G" + +# Прямая память для сетевых буферов +KAFKA_OPTS: "-XX:MaxDirectMemorySize=1G" +``` + +### Ввод-вывод и пропускная способность + +```yaml +# Количество потоков для обработки сетевых запросов +# Рекомендуемое значение: (количество ядер CPU * 2) + 1 +KAFKA_CFG_NUM_NETWORK_THREADS: "3" + +# Количество потоков для операций ввода-вывода +# Рекомендуемое значение: количество ядер * 2 +KAFKA_CFG_NUM_IO_THREADS: "8" + +# Количество потоков для репликации данных между брокерами +# Рекомендуемое значение: количество ядер / 2 +KAFKA_CFG_NUM_REPLICA_FETCHERS: "1" + +# Размер буфера сокета (в байтах) +KAFKA_CFG_SOCKET_RECEIVE_BUFFER_BYTES: "102400" + +# Максимальный размер запроса (в байтах) +KAFKA_CFG_MESSAGE_MAX_BYTES: "1048588" # 1 МБ + +# Максимальный размер пакета (в байтах) +KAFKA_CFG_SOCKET_REQUEST_MAX_BYTES: "104857600" # 100 МБ +``` + +### Оптимизация для высоконагруженных систем + +```yml +# Увеличиваем буферы для высоконагруженных систем +KAFKA_CFG_SOCKET_RECEIVE_BUFFER_BYTES: "1048576" # 1 МБ +KAFKA_CFG_SOCKET_SEND_BUFFER_BYTES: "1048576" # 1 МБ + +# Настройки для большого количества подключений +KAFKA_CFG_MAX_CONNECTIONS_PER_IP: "2147483647" +KAFKA_CFG_MAX_CONNECTIONS_PER_IP_OVERRIDES: "127.0.0.1:PLAINTEXT:100" +``` + +## Топик + +```yml +# Автоматическое создание топиков +KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" +``` + +### Что делает: + +- Если true (по умолчанию): Kafka автоматически создает топик при первой публикации сообщения в несуществующий топик. +- Если false: Kafka вернет ошибку при попытке отправить сообщение в несуществующий топик. + +### Плюсы включения (true): + +- Удобство разработки - не нужно создавать топики вручную +- Гибкость - приложения могут создавать топики "на лету" + +### Минусы включения: + +- Безопасность - любое приложение может создать топик +- Опечатки - можно случайно создать дубликат топика из-за опечатки в названии +- Неконтролируемый рост - может привести к созданию множества ненужных топиков + +### Рекомендации: + +- Для разработки: можно оставить true для удобства +- Для продакшена: лучше установить false и создавать топики вручную через: + +```bash +docker exec -it kafka kafka-topics.sh --create \ + --bootstrap-server localhost:9092 \ + --replication-factor 1 \ + --partitions 1 \ + --topic <ваш_топик> +``` + +## Мониторинг и обслуживание + +### Проверка работоспособности + +```yml +healthcheck: + test: + [ + "CMD", + "bash", + "-c", + "kafka-topics.sh --list --bootstrap-server localhost:9092", + ] + interval: 10s + timeout: 5s + retries: 6 + start_period: 20s +``` + +### Полезные команды + +#### Проверка настроек брокеров + +```bash +docker exec -it kafka bash -c "kafka-configs.sh --describe --all --bootstrap-server localhost:9092 --entity-type brokers" +``` + +#### Проверка конфигурации топика + +```bash +docker exec -it kafka kafka-configs.sh --describe --all --bootstrap-server localhost:9092 +``` + +#### Мониторинг групп потребителей + +```bash +docker exec -it kafka kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list +``` + +#### Проверка хранения сообщений + +```bash +docker exec -it kafka kafka-log-dirs.sh --bootstrap-server localhost:9092 --describe --topic-list ваш-топик +``` + +#### Проверка загрузки потоков + +```bash +docker exec -it kafka kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.server:type=KafkaRequestHandlerPool,name=RequestHandlerAvgIdlePercent --jmx-url service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi +``` + +### Проверка очереди запросов + +```bash +docker exec -it kafka kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.network:type=RequestChannel,name=RequestQueueSize --jmx-url service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi +``` + +### Текущие настройки ретеншена + +```bash +docker exec -it kafka kafka-configs.sh --describe --bootstrap-server localhost:9092 --entity-type brokers --entity-default +``` + +## Скрипты + +### Удаление записей + +#### Инструмент для принудительного удаления записей из топиков Kafka + +```bash +# Создаем JSON-файл с указанием топика и оффсета, до которого нужно удалить записи +cat > delete-records.json << 'EOF' +{ + "partitions": [ + { + "topic": "your_topic_name", + "partition": 0, + "offset": 100 # Удалить все сообщения до этого оффсета (не включительно) + } + ], + "version": 1 +} +EOF +``` + +#### Запускаем удаление записей + +```bash +docker exec -it kafka kafka-delete-records.sh \ + --bootstrap-server localhost:9092 \ + --offset-json-file delete-records.json +``` + +## Рекомендации + +1. **Для продакшена**: + + - Используйте минимум 3 ноды для отказоустойчивости + - Установите подходящую политику хранения в зависимости от доступного места + - Мониторьте использование диска и отставание потребителей + +2. **Для разработки**: + + - Установите меньшее время хранения для экономии места + - Включите автоматическое создание топиков для удобства + - Используйте незащищенный протокол (PLAINTEXT) только в разработке + +3. **Для KRaft**: + - Убедитесь в правильности настройки `node.id` и `process.roles` + - Следите за состоянием контроллера в режиме KRaft + - Контролируйте рост лога метаданных + +## Ссылки + +- [Документация Apache Kafka](https://kafka.apache.org/documentation/) +- [Документация по KRaft](https://cwiki.apache.org/confluence/display/KAFKA/KIP-500%3A+Replace+ZooKeeper+with+a+Self-Managed+Metadata+Quorum) +- [Настройка Kafka](https://kafka.apache.org/documentation/#configuration) diff --git a/tasks/worker.py b/tasks/worker.py index e44c860..6f70e88 100644 --- a/tasks/worker.py +++ b/tasks/worker.py @@ -3,6 +3,8 @@ from api_v1.rest.tasks.dependencies import unit_of_work from api_v1.rest.tasks.service import TaskService from api_v1.rest.tasks.schemas import TaskCreate +from datetime import datetime + from core.config import settings import logging.config @@ -49,11 +51,13 @@ async def run_consumer(): bootstrap_servers=settings.kafka.BOOTSTRAP, group_id=settings.kafka.GROUP_ID, enable_auto_commit=False, - auto_offset_reset='earliest' + auto_offset_reset='earliest' # начать с самого старого сообщения ) await consumer.start() try: async for msg in consumer: + logger.info('Сообщение от %s: %s...' % (datetime.fromtimestamp(msg.timestamp/1000), msg.value[:100])) + logger.info('Сообщение содержит - топик: %s, партиция: %s, offset: %s, ключ: %s, значение: %s, время: %s', msg.topic, msg.partition, msg.offset, msg.key, msg.value, msg.timestamp) await handle_message(msg, consumer) finally: await consumer.stop() From b5994fa872a13f5e1e92a3ae07ac6c111d033461 Mon Sep 17 00:00:00 2001 From: Powermacintosh Date: Thu, 18 Sep 2025 18:27:44 +0300 Subject: [PATCH 4/9] =?UTF-8?q?test:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20=D0=B8=20=D0=B4=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B8=D0=BD=D1=84=D1=80=D0=B0=D1=81=D1=82=D1=80?= =?UTF-8?q?=D1=83=D0=BA=D1=82=D1=83=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавление тестов для kafka. - Улучшение инфраструктуры. - Добавление locust для нагрузочного тестирования. --- .env.test | 6 + docker-compose.test.yml | 47 + docker-compose.yml | 19 + gateway/api_v1/rest/tasks/dependencies.py | 5 + gateway/api_v1/rest/tasks/views.py | 9 +- gateway/core/config.py | 6 +- gateway/infrastructure/kafka/entry.py | 33 - gateway/infrastructure/kafka/producer.py | 41 +- gateway/locustfile.py | 12 + gateway/main.py | 2 +- gateway/poetry.lock | 1428 ++++++++++++++++++++- gateway/pyproject.toml | 13 +- tasks/.env.test | 8 +- tasks/api_v1/rest/tasks/dependencies.py | 5 + tasks/api_v1/rest/tasks/views.py | 34 +- tasks/core/config.py | 11 +- tasks/infrastructure/kafka/producer.py | 38 + tasks/main.py | 5 +- tasks/tests/conftest.py | 30 +- tasks/tests/integration/test_kafka.py | 62 + 20 files changed, 1740 insertions(+), 74 deletions(-) create mode 100644 gateway/api_v1/rest/tasks/dependencies.py delete mode 100644 gateway/infrastructure/kafka/entry.py create mode 100644 gateway/locustfile.py create mode 100644 tasks/infrastructure/kafka/producer.py create mode 100644 tasks/tests/integration/test_kafka.py diff --git a/.env.test b/.env.test index fb58e84..82c8cd7 100644 --- a/.env.test +++ b/.env.test @@ -12,6 +12,12 @@ TASKS_DB_HOST = db_tasks_app_test TASKS_DB_PORT = 5432 TASKS_DB_NAME = tasks_app_test +# Kafka +KAFKA_BOOTSTRAP = kafka_test:9092 +KAFKA_TOPIC = task_events_test +KAFKA_GROUP_ID = tasks_app_group_test +KAFKA_CLIENT_ID = tasks_app_test + # Loki LOKI_PORT=3100 diff --git a/docker-compose.test.yml b/docker-compose.test.yml index 8ab8eda..8333f6b 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -18,6 +18,28 @@ services: depends_on: db_tasks_app_test: condition: service_healthy + kafka_test: + condition: service_healthy + + tasks_app_worker_test: + build: + context: tasks/ + container_name: tasks_app_worker_test + env_file: + - ./tasks/.env.test + environment: + SERVICE_NAME: tasks_app_test + KAFKA_BOOTSTRAP: kafka_test:9092 + KAFKA_GROUP_ID: tasks_app_group_test + entrypoint: ["sh", "-c"] + command: + - | + python worker.py + depends_on: + db_tasks_app_test: + condition: service_healthy + kafka_test: + condition: service_healthy db_tasks_app_test: image: postgres:17 @@ -38,5 +60,30 @@ services: timeout: 5s retries: 5 + kafka_test: + image: bitnami/kafka:latest + container_name: kafka_test + environment: + KAFKA_BROKER_ID: 1 + KAFKA_CFG_NODE_ID: 1 + KAFKA_CFG_PROCESS_ROLES: "controller,broker" + KAFKA_CFG_CONTROLLER_QUORUM_VOTERS: "1@kafka_test:9093" + KAFKA_CFG_LISTENERS: "CONTROLLER://:9093,PLAINTEXT://:9092" + KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: "CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT" + KAFKA_CFG_ADVERTISED_LISTENERS: "PLAINTEXT://kafka_test:9092" + KAFKA_CFG_CONTROLLER_LISTENER_NAMES: "CONTROLLER" + KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" + KAFKA_CFG_INTER_BROKER_LISTENER_NAME: "PLAINTEXT" + KAFKA_CFG_LOG_RETENTION_HOURS: "72" # 3 дня + ports: + - "9092:9092" + - "9093:9093" + healthcheck: + test: ["CMD", "bash", "-c", "kafka-topics.sh --list --bootstrap-server localhost:9092"] + interval: 10s + timeout: 5s + retries: 6 + start_period: 20s + volumes: db_tasks_app_test: diff --git a/docker-compose.yml b/docker-compose.yml index 02b3e96..9356950 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,6 +20,25 @@ services: condition: service_started kafka: condition: service_healthy + + locust_gateway: + build: + context: gateway/ + container_name: locust_gateway + env_file: + - ./gateway/.env + ports: + - "8089:8089" + networks: + - appnet + entrypoint: ["sh", "-c"] + command: + - | + poetry run locust -f locustfile.py \ + --host http://gateway_app:${GATEWAY_PORT} + depends_on: + gateway_app: + condition: service_started tasks_app: build: diff --git a/gateway/api_v1/rest/tasks/dependencies.py b/gateway/api_v1/rest/tasks/dependencies.py new file mode 100644 index 0000000..6fa24d7 --- /dev/null +++ b/gateway/api_v1/rest/tasks/dependencies.py @@ -0,0 +1,5 @@ +from aiokafka import AIOKafkaProducer + +async def get_producer() -> AIOKafkaProducer: + from main import app # Ленивый импорт + return app.state.kafka_producer diff --git a/gateway/api_v1/rest/tasks/views.py b/gateway/api_v1/rest/tasks/views.py index 1635020..212f87e 100644 --- a/gateway/api_v1/rest/tasks/views.py +++ b/gateway/api_v1/rest/tasks/views.py @@ -1,4 +1,4 @@ -from fastapi import APIRouter,Query, status, Path +from fastapi import APIRouter,Query, status, Path, Depends from typing import Annotated from .schemas import ( SchemaTask, @@ -9,7 +9,7 @@ TaskFilters ) from infrastructure.tasks_facade import task_facade -from infrastructure.kafka.producer import producer +from .dependencies import AIOKafkaProducer, get_producer from core.config import settings import logging.config @@ -177,7 +177,10 @@ async def get_list_tasks( ) @router_worker.post('/create_event', status_code=status.HTTP_201_CREATED) -async def send_task_creation_event(task: TaskCreate): +async def send_task_creation_event( + task: TaskCreate, + producer: AIOKafkaProducer = Depends(get_producer) +): event = { 'event': 'TaskCreation', 'task': task.model_dump() diff --git a/gateway/core/config.py b/gateway/core/config.py index 5ce1376..f888324 100644 --- a/gateway/core/config.py +++ b/gateway/core/config.py @@ -26,7 +26,6 @@ class ConfigurationCORS(BaseModel): 'Access-Control-Allow-Origin', ] - class ConfigurationKafka(BaseModel): ######################### # KAFKA # @@ -35,8 +34,13 @@ class ConfigurationKafka(BaseModel): CLIENT_ID: str = os.getenv('KAFKA_CLIENT_ID', 'gateway_app') TOPIC: str = os.getenv('KAFKA_TOPIC', 'task_events') GROUP_ID: str = os.getenv('KAFKA_GROUP_ID', 'gateway_app_group') + STARTUP_RETRIES: int = os.getenv('KAFKA_STARTUP_RETRIES', 3) + RETRY_BACKOFF: float = os.getenv('KAFKA_RETRY_BACKOFF', 1.0) class Setting(BaseSettings): + # ENV + MODE: str = os.getenv('MODE', 'development') + # FASTAPI api_v1_prefix: str = '/api/v1' api_v1_port: int = os.getenv('GATEWAY_PORT', 5000) diff --git a/gateway/infrastructure/kafka/entry.py b/gateway/infrastructure/kafka/entry.py deleted file mode 100644 index 1b076a1..0000000 --- a/gateway/infrastructure/kafka/entry.py +++ /dev/null @@ -1,33 +0,0 @@ -import asyncio -from fastapi import FastAPI -from typing import AsyncGenerator -from contextlib import asynccontextmanager -from infrastructure.kafka.producer import producer - -STARTUP_RETRIES = 3 -RETRY_BACKOFF = 1.0 - -async def _start_producer_with_retries(): - last_exc = None - for i in range(1, STARTUP_RETRIES + 1): - try: - await producer.start() - return - except Exception as exc: - last_exc = exc - await asyncio.sleep(RETRY_BACKOFF * i) - raise last_exc - -@asynccontextmanager -async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]: - # startup - await _start_producer_with_retries() - app.state.kafka_producer_available = True - try: - yield - finally: - # shutdown - try: - await producer.stop() - except Exception: - pass \ No newline at end of file diff --git a/gateway/infrastructure/kafka/producer.py b/gateway/infrastructure/kafka/producer.py index effd7f2..7978495 100644 --- a/gateway/infrastructure/kafka/producer.py +++ b/gateway/infrastructure/kafka/producer.py @@ -1,9 +1,38 @@ -import json +import asyncio, json +from fastapi import FastAPI +from typing import AsyncGenerator +from contextlib import asynccontextmanager from aiokafka import AIOKafkaProducer from core.config import settings -producer = AIOKafkaProducer( - bootstrap_servers=settings.kafka.BOOTSTRAP, - client_id=settings.kafka.CLIENT_ID, - value_serializer=lambda v: json.dumps(v).encode('utf-8'), -) \ No newline at end of file + +async def _start_producer_with_retries(producer: AIOKafkaProducer): + last_exc = None + for i in range(1, settings.kafka.STARTUP_RETRIES + 1): + try: + await producer.start() + return + except Exception as exc: + last_exc = exc + await asyncio.sleep(settings.kafka.RETRY_BACKOFF * i) + raise last_exc + +@asynccontextmanager +async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]: + producer = AIOKafkaProducer( + bootstrap_servers=settings.kafka.BOOTSTRAP, + client_id=settings.kafka.CLIENT_ID, + value_serializer=lambda v: json.dumps(v).encode('utf-8'), + ) + # startup + await _start_producer_with_retries(producer) + app.state.kafka_producer = producer + app.state.kafka_producer_available = True + try: + yield + finally: + # shutdown + try: + await producer.stop() + except Exception: + pass \ No newline at end of file diff --git a/gateway/locustfile.py b/gateway/locustfile.py new file mode 100644 index 0000000..61a6172 --- /dev/null +++ b/gateway/locustfile.py @@ -0,0 +1,12 @@ +from locust import FastHttpUser, task, between +# from core.config import settings + +class UserBehavior(FastHttpUser): + wait_time = between(1, 2) + + @task + def create_task_event(self): + self.client.post('/api/v1/task/create_event', json={ + 'title': 'Create Task', + 'description': None, + }) diff --git a/gateway/main.py b/gateway/main.py index 40d2c9d..467df74 100644 --- a/gateway/main.py +++ b/gateway/main.py @@ -6,7 +6,7 @@ from fastapi.openapi.docs import get_swagger_ui_html from core.config import settings from api_v1.rest import router as router_v1 -from infrastructure.kafka.entry import lifespan +from infrastructure.kafka.producer import lifespan import logging.config from core.logger import logger_config diff --git a/gateway/poetry.lock b/gateway/poetry.lock index 3b31a00..ff98475 100644 --- a/gateway/poetry.lock +++ b/gateway/poetry.lock @@ -96,13 +96,371 @@ files = [ {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, ] +[[package]] +name = "bidict" +version = "0.23.1" +description = "The bidirectional mapping library for Python." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "bidict-0.23.1-py3-none-any.whl", hash = "sha256:5dae8d4d79b552a71cbabc7deb25dfe8ce710b17ff41711e13010ead2abfc3e5"}, + {file = "bidict-0.23.1.tar.gz", hash = "sha256:03069d763bc387bbd20e7d49914e75fc4132a41937fa3405417e1a5a2d006d71"}, +] + +[[package]] +name = "blinker" +version = "1.9.0" +description = "Fast, simple object-to-object and broadcast signaling" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc"}, + {file = "blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf"}, +] + +[[package]] +name = "brotli" +version = "1.1.0" +description = "Python bindings for the Brotli compression library" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1140c64812cb9b06c922e77f1c26a75ec5e3f0fb2bf92cc8c58720dec276752"}, + {file = "Brotli-1.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c8fd5270e906eef71d4a8d19b7c6a43760c6abcfcc10c9101d14eb2357418de9"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ae56aca0402a0f9a3431cddda62ad71666ca9d4dc3a10a142b9dce2e3c0cda3"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43ce1b9935bfa1ede40028054d7f48b5469cd02733a365eec8a329ffd342915d"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:7c4855522edb2e6ae7fdb58e07c3ba9111e7621a8956f481c68d5d979c93032e"}, + {file = "Brotli-1.1.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:38025d9f30cf4634f8309c6874ef871b841eb3c347e90b0851f63d1ded5212da"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e6a904cb26bfefc2f0a6f240bdf5233be78cd2488900a2f846f3c3ac8489ab80"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a37b8f0391212d29b3a91a799c8e4a2855e0576911cdfb2515487e30e322253d"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e84799f09591700a4154154cab9787452925578841a94321d5ee8fb9a9a328f0"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f66b5337fa213f1da0d9000bc8dc0cb5b896b726eefd9c6046f699b169c41b9e"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:5dab0844f2cf82be357a0eb11a9087f70c5430b2c241493fc122bb6f2bb0917c"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e4fe605b917c70283db7dfe5ada75e04561479075761a0b3866c081d035b01c1"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:1e9a65b5736232e7a7f91ff3d02277f11d339bf34099a56cdab6a8b3410a02b2"}, + {file = "Brotli-1.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:58d4b711689366d4a03ac7957ab8c28890415e267f9b6589969e74b6e42225ec"}, + {file = "Brotli-1.1.0-cp310-cp310-win32.whl", hash = "sha256:be36e3d172dc816333f33520154d708a2657ea63762ec16b62ece02ab5e4daf2"}, + {file = "Brotli-1.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:0c6244521dda65ea562d5a69b9a26120769b7a9fb3db2fe9545935ed6735b128"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a3daabb76a78f829cafc365531c972016e4aa8d5b4bf60660ad8ecee19df7ccc"}, + {file = "Brotli-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c8146669223164fc87a7e3de9f81e9423c67a79d6b3447994dfb9c95da16e2d6"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30924eb4c57903d5a7526b08ef4a584acc22ab1ffa085faceb521521d2de32dd"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ceb64bbc6eac5a140ca649003756940f8d6a7c444a68af170b3187623b43bebf"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a469274ad18dc0e4d316eefa616d1d0c2ff9da369af19fa6f3daa4f09671fd61"}, + {file = "Brotli-1.1.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:524f35912131cc2cabb00edfd8d573b07f2d9f21fa824bd3fb19725a9cf06327"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5b3cc074004d968722f51e550b41a27be656ec48f8afaeeb45ebf65b561481dd"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:19c116e796420b0cee3da1ccec3b764ed2952ccfcc298b55a10e5610ad7885f9"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:510b5b1bfbe20e1a7b3baf5fed9e9451873559a976c1a78eebaa3b86c57b4265"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a1fd8a29719ccce974d523580987b7f8229aeace506952fa9ce1d53a033873c8"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c247dd99d39e0338a604f8c2b3bc7061d5c2e9e2ac7ba9cc1be5a69cb6cd832f"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1b2c248cd517c222d89e74669a4adfa5577e06ab68771a529060cf5a156e9757"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:2a24c50840d89ded6c9a8fdc7b6ed3692ed4e86f1c4a4a938e1e92def92933e0"}, + {file = "Brotli-1.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f31859074d57b4639318523d6ffdca586ace54271a73ad23ad021acd807eb14b"}, + {file = "Brotli-1.1.0-cp311-cp311-win32.whl", hash = "sha256:39da8adedf6942d76dc3e46653e52df937a3c4d6d18fdc94a7c29d263b1f5b50"}, + {file = "Brotli-1.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:aac0411d20e345dc0920bdec5548e438e999ff68d77564d5e9463a7ca9d3e7b1"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:32d95b80260d79926f5fab3c41701dbb818fde1c9da590e77e571eefd14abe28"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b760c65308ff1e462f65d69c12e4ae085cff3b332d894637f6273a12a482d09f"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:316cc9b17edf613ac76b1f1f305d2a748f1b976b033b049a6ecdfd5612c70409"}, + {file = "Brotli-1.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:caf9ee9a5775f3111642d33b86237b05808dafcd6268faa492250e9b78046eb2"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70051525001750221daa10907c77830bc889cb6d865cc0b813d9db7fefc21451"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7f4bf76817c14aa98cc6697ac02f3972cb8c3da93e9ef16b9c66573a68014f91"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0c5516f0aed654134a2fc936325cc2e642f8a0e096d075209672eb321cff408"}, + {file = "Brotli-1.1.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c3020404e0b5eefd7c9485ccf8393cfb75ec38ce75586e046573c9dc29967a0"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4ed11165dd45ce798d99a136808a794a748d5dc38511303239d4e2363c0695dc"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4093c631e96fdd49e0377a9c167bfd75b6d0bad2ace734c6eb20b348bc3ea180"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:7e4c4629ddad63006efa0ef968c8e4751c5868ff0b1c5c40f76524e894c50248"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:861bf317735688269936f755fa136a99d1ed526883859f86e41a5d43c61d8966"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:87a3044c3a35055527ac75e419dfa9f4f3667a1e887ee80360589eb8c90aabb9"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c5529b34c1c9d937168297f2c1fde7ebe9ebdd5e121297ff9c043bdb2ae3d6fb"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ca63e1890ede90b2e4454f9a65135a4d387a4585ff8282bb72964fab893f2111"}, + {file = "Brotli-1.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e79e6520141d792237c70bcd7a3b122d00f2613769ae0cb61c52e89fd3443839"}, + {file = "Brotli-1.1.0-cp312-cp312-win32.whl", hash = "sha256:5f4d5ea15c9382135076d2fb28dde923352fe02951e66935a9efaac8f10e81b0"}, + {file = "Brotli-1.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:906bc3a79de8c4ae5b86d3d75a8b77e44404b0f4261714306e3ad248d8ab0951"}, + {file = "Brotli-1.1.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8bf32b98b75c13ec7cf774164172683d6e7891088f6316e54425fde1efc276d5"}, + {file = "Brotli-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7bc37c4d6b87fb1017ea28c9508b36bbcb0c3d18b4260fcdf08b200c74a6aee8"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c0ef38c7a7014ffac184db9e04debe495d317cc9c6fb10071f7fefd93100a4f"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91d7cc2a76b5567591d12c01f019dd7afce6ba8cba6571187e21e2fc418ae648"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a93dde851926f4f2678e704fadeb39e16c35d8baebd5252c9fd94ce8ce68c4a0"}, + {file = "Brotli-1.1.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f0db75f47be8b8abc8d9e31bc7aad0547ca26f24a54e6fd10231d623f183d089"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6967ced6730aed543b8673008b5a391c3b1076d834ca438bbd70635c73775368"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7eedaa5d036d9336c95915035fb57422054014ebdeb6f3b42eac809928e40d0c"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d487f5432bf35b60ed625d7e1b448e2dc855422e87469e3f450aa5552b0eb284"}, + {file = "Brotli-1.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:832436e59afb93e1836081a20f324cb185836c617659b07b129141a8426973c7"}, + {file = "Brotli-1.1.0-cp313-cp313-win32.whl", hash = "sha256:43395e90523f9c23a3d5bdf004733246fba087f2948f87ab28015f12359ca6a0"}, + {file = "Brotli-1.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:9011560a466d2eb3f5a6e4929cf4a09be405c64154e12df0dd72713f6500e32b"}, + {file = "Brotli-1.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:a090ca607cbb6a34b0391776f0cb48062081f5f60ddcce5d11838e67a01928d1"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2de9d02f5bda03d27ede52e8cfe7b865b066fa49258cbab568720aa5be80a47d"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2333e30a5e00fe0fe55903c8832e08ee9c3b1382aacf4db26664a16528d51b4b"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d4a848d1837973bf0f4b5e54e3bec977d99be36a7895c61abb659301b02c112"}, + {file = "Brotli-1.1.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fdc3ff3bfccdc6b9cc7c342c03aa2400683f0cb891d46e94b64a197910dc4064"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:5eeb539606f18a0b232d4ba45adccde4125592f3f636a6182b4a8a436548b914"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:fd5f17ff8f14003595ab414e45fce13d073e0762394f957182e69035c9f3d7c2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:069a121ac97412d1fe506da790b3e69f52254b9df4eb665cd42460c837193354"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e93dfc1a1165e385cc8239fab7c036fb2cd8093728cbd85097b284d7b99249a2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:aea440a510e14e818e67bfc4027880e2fb500c2ccb20ab21c7a7c8b5b4703d75"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_i686.whl", hash = "sha256:6974f52a02321b36847cd19d1b8e381bf39939c21efd6ee2fc13a28b0d99348c"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:a7e53012d2853a07a4a79c00643832161a910674a893d296c9f1259859a289d2"}, + {file = "Brotli-1.1.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:d7702622a8b40c49bffb46e1e3ba2e81268d5c04a34f460978c6b5517a34dd52"}, + {file = "Brotli-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:a599669fd7c47233438a56936988a2478685e74854088ef5293802123b5b2460"}, + {file = "Brotli-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:d143fd47fad1db3d7c27a1b1d66162e855b5d50a89666af46e1679c496e8e579"}, + {file = "Brotli-1.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:11d00ed0a83fa22d29bc6b64ef636c4552ebafcef57154b4ddd132f5638fbd1c"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f733d788519c7e3e71f0855c96618720f5d3d60c3cb829d8bbb722dddce37985"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:929811df5462e182b13920da56c6e0284af407d1de637d8e536c5cd00a7daf60"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b63b949ff929fbc2d6d3ce0e924c9b93c9785d877a21a1b678877ffbbc4423a"}, + {file = "Brotli-1.1.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:d192f0f30804e55db0d0e0a35d83a9fead0e9a359a9ed0285dbacea60cc10a84"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f296c40e23065d0d6650c4aefe7470d2a25fffda489bcc3eb66083f3ac9f6643"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:919e32f147ae93a09fe064d77d5ebf4e35502a8df75c29fb05788528e330fe74"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:23032ae55523cc7bccb4f6a0bf368cd25ad9bcdcc1990b64a647e7bbcce9cb5b"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:224e57f6eac61cc449f498cc5f0e1725ba2071a3d4f48d5d9dffba42db196438"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:cb1dac1770878ade83f2ccdf7d25e494f05c9165f5246b46a621cc849341dc01"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:3ee8a80d67a4334482d9712b8e83ca6b1d9bc7e351931252ebef5d8f7335a547"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:5e55da2c8724191e5b557f8e18943b1b4839b8efc3ef60d65985bcf6f587dd38"}, + {file = "Brotli-1.1.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:d342778ef319e1026af243ed0a07c97acf3bad33b9f29e7ae6a1f68fd083e90c"}, + {file = "Brotli-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:587ca6d3cef6e4e868102672d3bd9dc9698c309ba56d41c2b9c85bbb903cdb95"}, + {file = "Brotli-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2954c1c23f81c2eaf0b0717d9380bd348578a94161a65b3a2afc62c86467dd68"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:efa8b278894b14d6da122a72fefcebc28445f2d3f880ac59d46c90f4c13be9a3"}, + {file = "Brotli-1.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:03d20af184290887bdea3f0f78c4f737d126c74dc2f3ccadf07e54ceca3bf208"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6172447e1b368dcbc458925e5ddaf9113477b0ed542df258d84fa28fc45ceea7"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a743e5a28af5f70f9c080380a5f908d4d21d40e8f0e0c8901604d15cfa9ba751"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0541e747cce78e24ea12d69176f6a7ddb690e62c425e01d31cc065e69ce55b48"}, + {file = "Brotli-1.1.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cdbc1fc1bc0bff1cef838eafe581b55bfbffaed4ed0318b724d0b71d4d377619"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:890b5a14ce214389b2cc36ce82f3093f96f4cc730c1cffdbefff77a7c71f2a97"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ab4fbee0b2d9098c74f3057b2bc055a8bd92ccf02f65944a241b4349229185a"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:141bd4d93984070e097521ed07e2575b46f817d08f9fa42b16b9b5f27b5ac088"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fce1473f3ccc4187f75b4690cfc922628aed4d3dd013d047f95a9b3919a86596"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d2b35ca2c7f81d173d2fadc2f4f31e88cc5f7a39ae5b6db5513cf3383b0e0ec7"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:af6fa6817889314555aede9a919612b23739395ce767fe7fcbea9a80bf140fe5"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:2feb1d960f760a575dbc5ab3b1c00504b24caaf6986e2dc2b01c09c87866a943"}, + {file = "Brotli-1.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:4410f84b33374409552ac9b6903507cdb31cd30d2501fc5ca13d18f73548444a"}, + {file = "Brotli-1.1.0-cp38-cp38-win32.whl", hash = "sha256:db85ecf4e609a48f4b29055f1e144231b90edc90af7481aa731ba2d059226b1b"}, + {file = "Brotli-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:3d7954194c36e304e1523f55d7042c59dc53ec20dd4e9ea9d151f1b62b4415c0"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5fb2ce4b8045c78ebbc7b8f3c15062e435d47e7393cc57c25115cfd49883747a"}, + {file = "Brotli-1.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7905193081db9bfa73b1219140b3d315831cbff0d8941f22da695832f0dd188f"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a77def80806c421b4b0af06f45d65a136e7ac0bdca3c09d9e2ea4e515367c7e9"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dadd1314583ec0bf2d1379f7008ad627cd6336625d6679cf2f8e67081b83acf"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:901032ff242d479a0efa956d853d16875d42157f98951c0230f69e69f9c09bac"}, + {file = "Brotli-1.1.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:22fc2a8549ffe699bfba2256ab2ed0421a7b8fadff114a3d201794e45a9ff578"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ae15b066e5ad21366600ebec29a7ccbc86812ed267e4b28e860b8ca16a2bc474"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:949f3b7c29912693cee0afcf09acd6ebc04c57af949d9bf77d6101ebb61e388c"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:89f4988c7203739d48c6f806f1e87a1d96e0806d44f0fba61dba81392c9e474d"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:de6551e370ef19f8de1807d0a9aa2cdfdce2e85ce88b122fe9f6b2b076837e59"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0737ddb3068957cf1b054899b0883830bb1fec522ec76b1098f9b6e0f02d9419"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4f3607b129417e111e30637af1b56f24f7a49e64763253bbc275c75fa887d4b2"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:6c6e0c425f22c1c719c42670d561ad682f7bfeeef918edea971a79ac5252437f"}, + {file = "Brotli-1.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:494994f807ba0b92092a163a0a283961369a65f6cbe01e8891132b7a320e61eb"}, + {file = "Brotli-1.1.0-cp39-cp39-win32.whl", hash = "sha256:f0d8a7a6b5983c2496e364b969f0e526647a06b075d034f3297dc66f3b360c64"}, + {file = "Brotli-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:cdad5b9014d83ca68c25d2e9444e28e967ef16e80f6b436918c700c117a85467"}, + {file = "Brotli-1.1.0.tar.gz", hash = "sha256:81de08ac11bcb85841e440c13611c00b67d3bf82698314928d0b676362546724"}, +] + +[[package]] +name = "certifi" +version = "2025.8.3" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "certifi-2025.8.3-py3-none-any.whl", hash = "sha256:f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5"}, + {file = "certifi-2025.8.3.tar.gz", hash = "sha256:e564105f78ded564e3ae7c923924435e1daa7463faeab5bb932bc53ffae63407"}, +] + +[[package]] +name = "cffi" +version = "2.0.0" +description = "Foreign Function Interface for Python calling C code." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\" or implementation_name == \"pypy\"" +files = [ + {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, + {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4"}, + {file = "cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5"}, + {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb"}, + {file = "cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a"}, + {file = "cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739"}, + {file = "cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe"}, + {file = "cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664"}, + {file = "cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414"}, + {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743"}, + {file = "cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5"}, + {file = "cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5"}, + {file = "cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d"}, + {file = "cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d"}, + {file = "cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037"}, + {file = "cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba"}, + {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94"}, + {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187"}, + {file = "cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18"}, + {file = "cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5"}, + {file = "cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6"}, + {file = "cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb"}, + {file = "cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3"}, + {file = "cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26"}, + {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c"}, + {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b"}, + {file = "cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27"}, + {file = "cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75"}, + {file = "cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91"}, + {file = "cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5"}, + {file = "cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef"}, + {file = "cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775"}, + {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205"}, + {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1"}, + {file = "cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f"}, + {file = "cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25"}, + {file = "cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad"}, + {file = "cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9"}, + {file = "cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc"}, + {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592"}, + {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512"}, + {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4"}, + {file = "cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e"}, + {file = "cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6"}, + {file = "cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9"}, + {file = "cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf"}, + {file = "cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f"}, + {file = "cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65"}, + {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322"}, + {file = "cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a"}, + {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, + {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, +] + +[package.dependencies] +pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} + +[[package]] +name = "charset-normalizer" +version = "3.4.3" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "charset_normalizer-3.4.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb7f67a1bfa6e40b438170ebdc8158b78dc465a5a67b6dde178a46987b244a72"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cc9370a2da1ac13f0153780040f465839e6cccb4a1e44810124b4e22483c93fe"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:07a0eae9e2787b586e129fdcbe1af6997f8d0e5abaa0bc98c0e20e124d67e601"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:74d77e25adda8581ffc1c720f1c81ca082921329452eba58b16233ab1842141c"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d0e909868420b7049dafd3a31d45125b31143eec59235311fc4c57ea26a4acd2"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c6f162aabe9a91a309510d74eeb6507fab5fff92337a15acbe77753d88d9dcf0"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4ca4c094de7771a98d7fbd67d9e5dbf1eb73efa4f744a730437d8a3a5cf994f0"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:02425242e96bcf29a49711b0ca9f37e451da7c70562bc10e8ed992a5a7a25cc0"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:78deba4d8f9590fe4dae384aeff04082510a709957e968753ff3c48399f6f92a"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-win32.whl", hash = "sha256:d79c198e27580c8e958906f803e63cddb77653731be08851c7df0b1a14a8fc0f"}, + {file = "charset_normalizer-3.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:c6e490913a46fa054e03699c70019ab869e990270597018cef1d8562132c2669"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b256ee2e749283ef3ddcff51a675ff43798d92d746d1a6e4631bf8c707d22d0b"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:13faeacfe61784e2559e690fc53fa4c5ae97c6fcedb8eb6fb8d0a15b475d2c64"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:00237675befef519d9af72169d8604a067d92755e84fe76492fef5441db05b91"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:585f3b2a80fbd26b048a0be90c5aae8f06605d3c92615911c3a2b03a8a3b796f"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e78314bdc32fa80696f72fa16dc61168fda4d6a0c014e0380f9d02f0e5d8a07"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:96b2b3d1a83ad55310de8c7b4a2d04d9277d5591f40761274856635acc5fcb30"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:939578d9d8fd4299220161fdd76e86c6a251987476f5243e8864a7844476ba14"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:fd10de089bcdcd1be95a2f73dbe6254798ec1bda9f450d5828c96f93e2536b9c"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1e8ac75d72fa3775e0b7cb7e4629cec13b7514d928d15ef8ea06bca03ef01cae"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-win32.whl", hash = "sha256:6cf8fd4c04756b6b60146d98cd8a77d0cdae0e1ca20329da2ac85eed779b6849"}, + {file = "charset_normalizer-3.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:31a9a6f775f9bcd865d88ee350f0ffb0e25936a7f930ca98995c05abf1faf21c"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e28e334d3ff134e88989d90ba04b47d84382a828c061d0d1027b1b12a62b39b1"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cacf8f7297b0c4fcb74227692ca46b4a5852f8f4f24b3c766dd94a1075c4884"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c6fd51128a41297f5409deab284fecbe5305ebd7e5a1f959bee1c054622b7018"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3cfb2aad70f2c6debfbcb717f23b7eb55febc0bb23dcffc0f076009da10c6392"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1606f4a55c0fd363d754049cdf400175ee96c992b1f8018b993941f221221c5f"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:027b776c26d38b7f15b26a5da1044f376455fb3766df8fc38563b4efbc515154"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:42e5088973e56e31e4fa58eb6bd709e42fc03799c11c42929592889a2e54c491"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:cc34f233c9e71701040d772aa7490318673aa7164a0efe3172b2981218c26d93"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:320e8e66157cc4e247d9ddca8e21f427efc7a04bbd0ac8a9faf56583fa543f9f"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-win32.whl", hash = "sha256:fb6fecfd65564f208cbf0fba07f107fb661bcd1a7c389edbced3f7a493f70e37"}, + {file = "charset_normalizer-3.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:86df271bf921c2ee3818f0522e9a5b8092ca2ad8b065ece5d7d9d0e9f4849bcc"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41d1fc408ff5fdfb910200ec0e74abc40387bccb3252f3f27c0676731df2b2c8"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1bb60174149316da1c35fa5233681f7c0f9f514509b8e399ab70fea5f17e45c9"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:30d006f98569de3459c2fc1f2acde170b7b2bd265dc1943e87e1a4efe1b67c31"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:416175faf02e4b0810f1f38bcb54682878a4af94059a1cd63b8747244420801f"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6aab0f181c486f973bc7262a97f5aca3ee7e1437011ef0c2ec04b5a11d16c927"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabf8315679312cfa71302f9bd509ded4f2f263fb5b765cf1433b39106c3cc9"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:bd28b817ea8c70215401f657edef3a8aa83c29d447fb0b622c35403780ba11d5"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:18343b2d246dc6761a249ba1fb13f9ee9a2bcd95decc767319506056ea4ad4dc"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-win32.whl", hash = "sha256:6fb70de56f1859a3f71261cbe41005f56a7842cc348d3aeb26237560bfa5e0ce"}, + {file = "charset_normalizer-3.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:cf1ebb7d78e1ad8ec2a8c4732c7be2e736f6e5123a4146c5b89c9d1f585f8cef"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:3cd35b7e8aedeb9e34c41385fda4f73ba609e561faedfae0a9e75e44ac558a15"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b89bc04de1d83006373429975f8ef9e7932534b8cc9ca582e4db7d20d91816db"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2001a39612b241dae17b4687898843f254f8748b796a2e16f1051a17078d991d"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:8dcfc373f888e4fb39a7bc57e93e3b845e7f462dacc008d9749568b1c4ece096"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:18b97b8404387b96cdbd30ad660f6407799126d26a39ca65729162fd810a99aa"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ccf600859c183d70eb47e05a44cd80a4ce77394d1ac0f79dbd2dd90a69a3a049"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:53cd68b185d98dde4ad8990e56a58dea83a4162161b1ea9272e5c9182ce415e0"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:30a96e1e1f865f78b030d65241c1ee850cdf422d869e9028e2fc1d5e4db73b92"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d716a916938e03231e86e43782ca7878fb602a125a91e7acb8b5112e2e96ac16"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-win32.whl", hash = "sha256:c6dbd0ccdda3a2ba7c2ecd9d77b37f3b5831687d8dc1b6ca5f56a4880cc7b7ce"}, + {file = "charset_normalizer-3.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:73dc19b562516fc9bcf6e5d6e596df0b4eb98d87e4f79f3ae71840e6ed21361c"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0f2be7e0cf7754b9a30eb01f4295cc3d4358a479843b31f328afd210e2c7598c"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c60e092517a73c632ec38e290eba714e9627abe9d301c8c8a12ec32c314a2a4b"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:252098c8c7a873e17dd696ed98bbe91dbacd571da4b87df3736768efa7a792e4"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:3653fad4fe3ed447a596ae8638b437f827234f01a8cd801842e43f3d0a6b281b"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8999f965f922ae054125286faf9f11bc6932184b93011d138925a1773830bbe9"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d95bfb53c211b57198bb91c46dd5a2d8018b3af446583aab40074bf7988401cb"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:5b413b0b1bfd94dbf4023ad6945889f374cd24e3f62de58d6bb102c4d9ae534a"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:b5e3b2d152e74e100a9e9573837aba24aab611d39428ded46f4e4022ea7d1942"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:a2d08ac246bb48479170408d6c19f6385fa743e7157d716e144cad849b2dd94b"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-win32.whl", hash = "sha256:ec557499516fc90fd374bf2e32349a2887a876fbf162c160e3c01b6849eaf557"}, + {file = "charset_normalizer-3.4.3-cp38-cp38-win_amd64.whl", hash = "sha256:5d8d01eac18c423815ed4f4a2ec3b439d654e55ee4ad610e153cf02faf67ea40"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:70bfc5f2c318afece2f5838ea5e4c3febada0be750fcf4775641052bbba14d05"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23b6b24d74478dc833444cbd927c338349d6ae852ba53a0d02a2de1fce45b96e"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:34a7f768e3f985abdb42841e20e17b330ad3aaf4bb7e7aeeb73db2e70f077b99"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:fb731e5deb0c7ef82d698b0f4c5bb724633ee2a489401594c5c88b02e6cb15f7"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:257f26fed7d7ff59921b78244f3cd93ed2af1800ff048c33f624c87475819dd7"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1ef99f0456d3d46a50945c98de1774da86f8e992ab5c77865ea8b8195341fc19"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2c322db9c8c89009a990ef07c3bcc9f011a3269bc06782f916cd3d9eed7c9312"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:511729f456829ef86ac41ca78c63a5cb55240ed23b4b737faca0eb1abb1c41bc"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:88ab34806dea0671532d3f82d82b85e8fc23d7b2dd12fa837978dad9bb392a34"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-win32.whl", hash = "sha256:16a8770207946ac75703458e2c743631c79c59c5890c80011d536248f8eaa432"}, + {file = "charset_normalizer-3.4.3-cp39-cp39-win_amd64.whl", hash = "sha256:d22dbedd33326a4a5190dd4fe9e9e693ef12160c77382d9e87919bce54f3d4ca"}, + {file = "charset_normalizer-3.4.3-py3-none-any.whl", hash = "sha256:ce571ab16d890d23b5c278547ba694193a45011ff86a9162a71307ed9f86759a"}, + {file = "charset_normalizer-3.4.3.tar.gz", hash = "sha256:6fce4b8500244f6fcb71465d4a4930d132ba9ab8e71a7859e6a5d59851068d14"}, +] + [[package]] name = "click" version = "8.2.1" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.10" -groups = ["main"] +groups = ["main", "dev"] files = [ {file = "click-8.2.1-py3-none-any.whl", hash = "sha256:61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b"}, {file = "click-8.2.1.tar.gz", hash = "sha256:27c491cc05d968d271d5a1db13e3b5a184636d9d930f148c50b038f0d0646202"}, @@ -117,13 +475,29 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main"] +groups = ["main", "dev"] markers = "platform_system == \"Windows\" or sys_platform == \"win32\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "configargparse" +version = "1.7.1" +description = "A drop-in replacement for argparse that allows options to also be set via config files and/or environment variables." +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "configargparse-1.7.1-py3-none-any.whl", hash = "sha256:8b586a31f9d873abd1ca527ffbe58863c99f36d896e2829779803125e83be4b6"}, + {file = "configargparse-1.7.1.tar.gz", hash = "sha256:79c2ddae836a1e5914b71d58e4b9adbd9f7779d4e6351a637b7d2d9b6c46d3d9"}, +] + +[package.extras] +test = ["PyYAML", "mock", "pytest"] +yaml = ["PyYAML"] + [[package]] name = "fastapi" version = "0.116.1" @@ -146,13 +520,337 @@ all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (> standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] standard-no-fastapi-cloud-cli = ["email-validator (>=2.0.0)", "fastapi-cli[standard-no-fastapi-cloud-cli] (>=0.0.8)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] +[[package]] +name = "flask" +version = "3.1.2" +description = "A simple framework for building complex web applications." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "flask-3.1.2-py3-none-any.whl", hash = "sha256:ca1d8112ec8a6158cc29ea4858963350011b5c846a414cdb7a954aa9e967d03c"}, + {file = "flask-3.1.2.tar.gz", hash = "sha256:bf656c15c80190ed628ad08cdfd3aaa35beb087855e2f494910aa3774cc4fd87"}, +] + +[package.dependencies] +blinker = ">=1.9.0" +click = ">=8.1.3" +itsdangerous = ">=2.2.0" +jinja2 = ">=3.1.2" +markupsafe = ">=2.1.1" +werkzeug = ">=3.1.0" + +[package.extras] +async = ["asgiref (>=3.2)"] +dotenv = ["python-dotenv"] + +[[package]] +name = "flask-cors" +version = "5.0.0" +description = "A Flask extension adding a decorator for CORS support" +optional = false +python-versions = "*" +groups = ["dev"] +files = [ + {file = "Flask_Cors-5.0.0-py2.py3-none-any.whl", hash = "sha256:b9e307d082a9261c100d8fb0ba909eec6a228ed1b60a8315fd85f783d61910bc"}, + {file = "flask_cors-5.0.0.tar.gz", hash = "sha256:5aadb4b950c4e93745034594d9f3ea6591f734bb3662e16e255ffbf5e89c88ef"}, +] + +[package.dependencies] +Flask = ">=0.9" + +[[package]] +name = "flask-login" +version = "0.6.3" +description = "User authentication and session management for Flask." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "Flask-Login-0.6.3.tar.gz", hash = "sha256:5e23d14a607ef12806c699590b89d0f0e0d67baeec599d75947bf9c147330333"}, + {file = "Flask_Login-0.6.3-py3-none-any.whl", hash = "sha256:849b25b82a436bf830a054e74214074af59097171562ab10bfa999e6b78aae5d"}, +] + +[package.dependencies] +Flask = ">=1.0.4" +Werkzeug = ">=1.0.1" + +[[package]] +name = "gevent" +version = "25.5.1" +description = "Coroutine-based network library" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "gevent-25.5.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:8e5a0fab5e245b15ec1005b3666b0a2e867c26f411c8fe66ae1afe07174a30e9"}, + {file = "gevent-25.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7b80a37f2fb45ee4a8f7e64b77dd8a842d364384046e394227b974a4e9c9a52"}, + {file = "gevent-25.5.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29ab729d50ae85077a68e0385f129f5b01052d01a0ae6d7fdc1824f5337905e4"}, + {file = "gevent-25.5.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80d20592aeabcc4e294fd441fd43d45cb537437fd642c374ea9d964622fad229"}, + {file = "gevent-25.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8ba0257542ccbb72a8229dc34d00844ccdfba110417e4b7b34599548d0e20e9"}, + {file = "gevent-25.5.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cad0821dff998c7c60dd238f92cd61380342c47fb9e92e1a8705d9b5ac7c16e8"}, + {file = "gevent-25.5.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:017a7384c0cd1a5907751c991535a0699596e89725468a7fc39228312e10efa1"}, + {file = "gevent-25.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:469c86d02fccad7e2a3d82fe22237e47ecb376fbf4710bc18747b49c50716817"}, + {file = "gevent-25.5.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:12380aba5c316e9ff53cc21d8ab80f4a91c0df3ada58f65d4f5eb2cf693db00e"}, + {file = "gevent-25.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f0694daab1a041b69a53f53c2141c12994892b2503870515cabe6a5dbd2a928"}, + {file = "gevent-25.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2797885e9aeffdc98e1846723e5aa212e7ce53007dbef40d6fd2add264235c41"}, + {file = "gevent-25.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cde6aaac36b54332e10ea2a5bc0de6a8aba6c205c92603fe4396e3777c88e05d"}, + {file = "gevent-25.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24484f80f14befb8822bf29554cfb3a26a26cb69cd1e5a8be9e23b4bd7a96e25"}, + {file = "gevent-25.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8fdc7446895fa184890d8ca5ea61e502691114f9db55c9b76adc33f3086c4368"}, + {file = "gevent-25.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5b6106e2414b1797133786258fa1962a5e836480e4d5e861577f9fc63b673a5a"}, + {file = "gevent-25.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:bc899212d90f311784c58938a9c09c59802fb6dc287a35fabdc36d180f57f575"}, + {file = "gevent-25.5.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:d87c0a1bd809d8f70f96b9b229779ec6647339830b8888a192beed33ac8d129f"}, + {file = "gevent-25.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b87a4b66edb3808d4d07bbdb0deed5a710cf3d3c531e082759afd283758bb649"}, + {file = "gevent-25.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f076779050029a82feb0cb1462021d3404d22f80fa76a181b1a7889cd4d6b519"}, + {file = "gevent-25.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bb673eb291c19370f69295f7a881a536451408481e2e3deec3f41dedb7c281ec"}, + {file = "gevent-25.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1325ed44225c8309c0dd188bdbbbee79e1df8c11ceccac226b861c7d52e4837"}, + {file = "gevent-25.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fcd5bcad3102bde686d0adcc341fade6245186050ce14386d547ccab4bd54310"}, + {file = "gevent-25.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1a93062609e8fa67ec97cd5fb9206886774b2a09b24887f40148c9c37e6fb71c"}, + {file = "gevent-25.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:2534c23dc32bed62b659ed4fd9e198906179e68b26c9276a897e04163bdde806"}, + {file = "gevent-25.5.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:a022a9de9275ce0b390b7315595454258c525dc8287a03f1a6cacc5878ab7cbc"}, + {file = "gevent-25.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fae8533f9d0ef3348a1f503edcfb531ef7a0236b57da1e24339aceb0ce52922"}, + {file = "gevent-25.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c7b32d9c3b5294b39ea9060e20c582e49e1ec81edbfeae6cf05f8ad0829cb13d"}, + {file = "gevent-25.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b95815fe44f318ebbfd733b6428b4cb18cc5e68f1c40e8501dd69cc1f42a83d"}, + {file = "gevent-25.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d316529b70d325b183b2f3f5cde958911ff7be12eb2b532b5c301f915dbbf1e"}, + {file = "gevent-25.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f6ba33c13db91ffdbb489a4f3d177a261ea1843923e1d68a5636c53fe98fa5ce"}, + {file = "gevent-25.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:37ee34b77c7553777c0b8379915f75934c3f9c8cd32f7cd098ea43c9323c2276"}, + {file = "gevent-25.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:9fa6aa0da224ed807d3b76cdb4ee8b54d4d4d5e018aed2478098e685baae7896"}, + {file = "gevent-25.5.1-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:0bacf89a65489d26c7087669af89938d5bfd9f7afb12a07b57855b9fad6ccbd0"}, + {file = "gevent-25.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e30169ef9cc0a57930bfd8fe14d86bc9d39fb96d278e3891e85cbe7b46058a97"}, + {file = "gevent-25.5.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e72ad5f8d9c92df017fb91a1f6a438cfb63b0eff4b40904ff81b40cb8150078c"}, + {file = "gevent-25.5.1-cp39-cp39-win32.whl", hash = "sha256:e5f358e81e27b1a7f2fb2f5219794e13ab5f59ce05571aa3877cfac63adb97db"}, + {file = "gevent-25.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:b83aff2441c7d4ee93e519989713b7c2607d4510abe990cd1d04f641bc6c03af"}, + {file = "gevent-25.5.1-pp310-pypy310_pp73-macosx_11_0_universal2.whl", hash = "sha256:60ad4ca9ca2c4cc8201b607c229cd17af749831e371d006d8a91303bb5568eb1"}, + {file = "gevent-25.5.1.tar.gz", hash = "sha256:582c948fa9a23188b890d0bc130734a506d039a2e5ad87dae276a456cc683e61"}, +] + +[package.dependencies] +cffi = {version = ">=1.17.1", markers = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\""} +greenlet = {version = ">=3.2.2", markers = "platform_python_implementation == \"CPython\""} +"zope.event" = "*" +"zope.interface" = "*" + +[package.extras] +dnspython = ["dnspython (>=1.16.0,<2.0) ; python_version < \"3.10\"", "idna ; python_version < \"3.10\""] +docs = ["furo", "repoze.sphinx.autointerface", "sphinx", "sphinxcontrib-programoutput", "zope.schema"] +monitor = ["psutil (>=5.7.0) ; sys_platform != \"win32\" or platform_python_implementation == \"CPython\""] +recommended = ["cffi (>=1.17.1) ; platform_python_implementation == \"CPython\"", "dnspython (>=1.16.0,<2.0) ; python_version < \"3.10\"", "idna ; python_version < \"3.10\"", "psutil (>=5.7.0) ; sys_platform != \"win32\" or platform_python_implementation == \"CPython\""] +test = ["cffi (>=1.17.1) ; platform_python_implementation == \"CPython\"", "coverage (>=5.0) ; sys_platform != \"win32\"", "dnspython (>=1.16.0,<2.0) ; python_version < \"3.10\"", "idna ; python_version < \"3.10\"", "objgraph", "psutil (>=5.7.0) ; sys_platform != \"win32\" or platform_python_implementation == \"CPython\"", "requests"] + +[[package]] +name = "geventhttpclient" +version = "2.3.4" +description = "HTTP client library for gevent" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "geventhttpclient-2.3.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:182f5158504ac426d591cfb1234de5180813292b49049e761f00bf70691aace5"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:59a2e7c136a3e6b60b87bf8b87e5f1fb25705d76ab7471018e25f8394c640dda"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5fde955b634a593e70eae9b4560b74badc8b2b1e3dd5b12a047de53f52a3964a"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1c69c4ec9b618ca42008d6930077d72ee0c304e2272a39a046e775c25ca4ac44"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:aaa7aebf4fe0d33a3f9f8945061f5374557c9f7baa3c636bfe25ac352167be9c"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:08ea2e92a1a4f46d3eeff631fa3f04f4d12c78523dc9bffc3b05b3dd93233050"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49f5e2051f7d06cb6476500a2ec1b9737aa3160258f0344b07b6d8e8cda3a0cb"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0599fd7ca84a8621f8d34c4e2b89babae633b34c303607c61500ebd3b8a7687a"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b4ac86f8d4ddd112bd63aa9f3c7b73c62d16b33fca414f809e8465bbed2580a3"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c4b796a59bed199884fe9d59a447fd685aa275a1406bc1f7caebd39a257f56e"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:650bf5d07f828a0cb173dacc4bb28e2ae54fd840656b3e552e5c3a4f96e29f08"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e16113d80bc270c465590ba297d4be8f26906ca8ae8419dc86520982c4099036"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:be2ade1516fdc7b7fb3d73e6f8d8bf2ce5b4e2e0933a5465a86d40dfa1423488"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:07152cad33b39d365f239b4fa1f818f4801c07e16ce0a0fee7d5fee2cabcb07b"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-win32.whl", hash = "sha256:c9d83bf2c274aed601e8b5320789e54661c240a831533e73a290da27d1c046f1"}, + {file = "geventhttpclient-2.3.4-cp310-cp310-win_amd64.whl", hash = "sha256:30671bb44f5613177fc1dc7c8840574d91ccd126793cd40fc16915a4abc67034"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:fb8f6a18f1b5e37724111abbd3edf25f8f00e43dc261b11b10686e17688d2405"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dbb28455bb5d82ca3024f9eb7d65c8ff6707394b584519def497b5eb9e5b1222"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:96578fc4a5707b5535d1c25a89e72583e02aafe64d14f3b4d78f9c512c6d613c"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:19721357db976149ccf54ac279eab8139da8cdf7a11343fd02212891b6f39677"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecf830cdcd1d4d28463c8e0c48f7f5fb06f3c952fff875da279385554d1d4d65"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:47dbf8a163a07f83b38b0f8a35b85e5d193d3af4522ab8a5bbecffff1a4cd462"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e39ad577b33a5be33b47bff7c2dda9b19ced4773d169d6555777cd8445c13c0"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:110d863baf7f0a369b6c22be547c5582e87eea70ddda41894715c870b2e82eb0"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:226d9fca98469bd770e3efd88326854296d1aa68016f285bd1a2fb6cd21e17ee"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71dbc6d4004017ef88c70229809df4ad2317aad4876870c0b6bcd4d6695b7a8d"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ed35391ad697d6cda43c94087f59310f028c3e9fb229e435281a92509469c627"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:97cd2ab03d303fd57dea4f6d9c2ab23b7193846f1b3bbb4c80b315ebb5fc8527"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ec4d1aa08569b7eb075942caeacabefee469a0e283c96c7aac0226d5e7598fe8"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:93926aacdb0f4289b558f213bc32c03578f3432a18b09e4b6d73a716839d7a74"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-win32.whl", hash = "sha256:ea87c25e933991366049a42c88e91ad20c2b72e11c7bd38ef68f80486ab63cb2"}, + {file = "geventhttpclient-2.3.4-cp311-cp311-win_amd64.whl", hash = "sha256:e02e0e9ef2e45475cf33816c8fb2e24595650bcf259e7b15b515a7b49cae1ccf"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9ac30c38d86d888b42bb2ab2738ab9881199609e9fa9a153eb0c66fc9188c6cb"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4b802000a4fad80fa57e895009671d6e8af56777e3adf0d8aee0807e96188fd9"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:461e4d9f4caee481788ec95ac64e0a4a087c1964ddbfae9b6f2dc51715ba706c"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b7e41687c74e8fbe6a665458bbaea0c5a75342a95e2583738364a73bcbf1671b"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3ea5da20f4023cf40207ce15f5f4028377ffffdba3adfb60b4c8f34925fce79"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:91f19a8a6899c27867dbdace9500f337d3e891a610708e86078915f1d779bf53"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41f2dcc0805551ea9d49f9392c3b9296505a89b9387417b148655d0d8251b36e"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:62f3a29bf242ecca6360d497304900683fd8f42cbf1de8d0546c871819251dad"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8714a3f2c093aeda3ffdb14c03571d349cb3ed1b8b461d9f321890659f4a5dbf"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b11f38b74bab75282db66226197024a731250dcbe25542fd4e85ac5313547332"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fccc2023a89dfbce2e1b1409b967011e45d41808df81b7fa0259397db79ba647"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9d54b8e9a44890159ae36ba4ae44efd8bb79ff519055137a340d357538a68aa3"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:407cb68a3c3a2c4f5d503930298f2b26ae68137d520e8846d8e230a9981d9334"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:54fbbcca2dcf06f12a337dd8f98417a09a49aa9d9706aa530fc93acb59b7d83c"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-win32.whl", hash = "sha256:83143b41bde2eb010c7056f142cb764cfbf77f16bf78bda2323a160767455cf5"}, + {file = "geventhttpclient-2.3.4-cp312-cp312-win_amd64.whl", hash = "sha256:46eda9a9137b0ca7886369b40995d2a43a5dff033d0a839a54241015d1845d41"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:be64c5583884c407fc748dedbcb083475d5b138afb23c6bc0836cbad228402cc"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:15b2567137734183efda18e4d6245b18772e648b6a25adea0eba8b3a8b0d17e8"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a4bca1151b8cd207eef6d5cb3c720c562b2aa7293cf113a68874e235cfa19c31"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8a681433e2f3d4b326d8b36b3e05b787b2c6dd2a5660a4a12527622278bf02ed"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:736aa8e9609e4da40aeff0dbc02fea69021a034f4ed1e99bf93fc2ca83027b64"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9d477ae1f5d42e1ee6abbe520a2e9c7f369781c3b8ca111d1f5283c1453bc825"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b50d9daded5d36193d67e2fc30e59752262fcbbdc86e8222c7df6b93af0346a"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe705e7656bc6982a463a4ed7f9b1db8c78c08323f1d45d0d1d77063efa0ce96"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:69668589359db4cbb9efa327dda5735d1e74145e6f0a9ffa50236d15cf904053"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9ba526e07ccaf4f1c2cd3395dda221139f01468b6eee1190d4a616f187a0378"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:525bd192705b5cb41a7cc3fe41fca194bfd6b5b59997ab9fe68fe0a82dab6140"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:42b6f6afb0d3aab6a013c9cdb97e19bf4fe08695975670d0a018113d24cb344c"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:227579b703085c4e5c6d5217ad6565b19ac8d1164404133e5874efaae1905114"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8d1d0db89c1c8f3282eac9a22fda2b4082e1ed62a2107f70e3f1de1872c7919f"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-win32.whl", hash = "sha256:4e492b9ab880f98f8a9cc143b96ea72e860946eae8ad5fb2837cede2a8f45154"}, + {file = "geventhttpclient-2.3.4-cp313-cp313-win_amd64.whl", hash = "sha256:72575c5b502bf26ececccb905e4e028bb922f542946be701923e726acf305eb6"}, + {file = "geventhttpclient-2.3.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:503db5dd0aa94d899c853b37e1853390c48c7035132f39a0bab44cbf95d29101"}, + {file = "geventhttpclient-2.3.4-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:389d3f83316220cfa2010f41401c140215a58ddba548222e7122b2161e25e391"}, + {file = "geventhttpclient-2.3.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:20c65d404fa42c95f6682831465467dff317004e53602c01f01fbd5ba1e56628"}, + {file = "geventhttpclient-2.3.4-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2574ee47ff6f379e9ef124e2355b23060b81629f1866013aa975ba35df0ed60b"}, + {file = "geventhttpclient-2.3.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fecf1b735591fb21ea124a374c207104a491ad0d772709845a10d5faa07fa833"}, + {file = "geventhttpclient-2.3.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:44e9ba810c28f9635e5c4c9cf98fc6470bad5a3620d8045d08693f7489493a3c"}, + {file = "geventhttpclient-2.3.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:501d5c69adecd5eaee3c22302006f6c16aa114139640873b72732aa17dab9ee7"}, + {file = "geventhttpclient-2.3.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:709f557138fb84ed32703d42da68f786459dab77ff2c23524538f2e26878d154"}, + {file = "geventhttpclient-2.3.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b8b86815a30e026c6677b89a5a21ba5fd7b69accf8f0e9b83bac123e4e9f3b31"}, + {file = "geventhttpclient-2.3.4-cp314-cp314t-macosx_10_13_universal2.whl", hash = "sha256:4371b1b1afc072ad2b0ff5a8929d73ffd86d582908d3e9e8d7911dc027b1b3a6"}, + {file = "geventhttpclient-2.3.4-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:6409fcda1f40d66eab48afc218b4c41e45a95c173738d10c50bc69c7de4261b9"}, + {file = "geventhttpclient-2.3.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:142870c2efb6bd0a593dcd75b83defb58aeb72ceaec4c23186785790bd44a311"}, + {file = "geventhttpclient-2.3.4-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3a74f7b926badb3b1d47ea987779cb83523a406e89203070b58b20cf95d6f535"}, + {file = "geventhttpclient-2.3.4-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2a8cde016e5ea6eb289c039b6af8dcef6c3ee77f5d753e57b48fe2555cdeacca"}, + {file = "geventhttpclient-2.3.4-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5aa16f2939a508667093b18e47919376f7db9a9acbe858343173c5a58e347869"}, + {file = "geventhttpclient-2.3.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ffe87eb7f1956357c2144a56814b5ffc927cbb8932f143a0351c78b93129ebbc"}, + {file = "geventhttpclient-2.3.4-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:5ee758e37215da9519cea53105b2a078d8bc0a32603eef2a1f9ab551e3767dee"}, + {file = "geventhttpclient-2.3.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:416cc70adb3d34759e782d2e120b4432752399b85ac9758932ecd12274a104c3"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2fa223034774573218bb49e78eca7e92b8c82ccae9d840fdcf424ea95c2d1790"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9f707dbdaad78dafe6444ee0977cbbaefa16ad10ab290d75709170d124bac4c8"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5660dfd692bc2cbd3bd2d0a2ad2a58ec47f7778042369340bdea765dc10e5672"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:a85c0cdf16559c9cfa3e2145c16bfe5e1c3115d0cb3b143d41fb68412888171f"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:024b9e2e3203cc5e2c34cb5efd16ba0f2851e39c45abdc2966a8c30a935094fc"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d693d1f63ae6a794074ec1f475e3e3f607c52242f3799479fc483207b5c02ff0"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c7a0c11afc1fe2c8338e5ccfd7ffdab063b84ace8b9656b5b3bc1614ee8a234"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39746bcd874cb75aaf6d16cdddd287a29721e8b56c20dd8a4d4ecde1d3b92f14"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:73e7d2e3d2d67e25d9d0f2bf46768650a57306a0587bbcdbfe2f4eac504248d2"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:063991edd5468401377116cc2a71361a88abce9951f60ba15b7fe1e10ce00f25"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d1e73172fed40c1d0e4f79fd15d357ead2161371b2ecdc82d626f143c29c8175"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:04a3328e687c419f78926a791df48c7672e724fa75002f2d3593df96510696e6"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2335963f883a94f503b321f7abfb38a4efbca70f9453c5c918cca40a844280cd"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e657db5a8c9498dee394db1e12085eda4b9cf7b682466364aae52765b930a884"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-win32.whl", hash = "sha256:be593e78cf4a7cbdbe361823fb35e1e0963d1a490cf90c8b6c680a30114b1a10"}, + {file = "geventhttpclient-2.3.4-cp39-cp39-win_amd64.whl", hash = "sha256:88b5e6cc958907dd6a13d3f8179683c275f57142de95d0d652a54c8275e03a8b"}, + {file = "geventhttpclient-2.3.4-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9f5514890bbb54a7c35fb66120c7659040182d54e735fe717642b67340b8131a"}, + {file = "geventhttpclient-2.3.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:4c24db3faa829244ded6805b47aec408df2f5b15fe681e957c61543070f6e405"}, + {file = "geventhttpclient-2.3.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:195e396c59f25958ad6f79d2c58431cb8b1ff39b5821e6507bf539c79b5681dc"}, + {file = "geventhttpclient-2.3.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c87a1762aba525b00aac34e1ffb97d083f94ef505282a461147298f32b2ae27"}, + {file = "geventhttpclient-2.3.4-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75585278b2e3cd1a866bc2a95be7e0ab53c51c35c9e0e75161ff4f30817b3da8"}, + {file = "geventhttpclient-2.3.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:fad0666d34122b5ad6de2715c0597b23eab523cc57caf38294138249805da15f"}, + {file = "geventhttpclient-2.3.4-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:707a66cd1e3bf06e2c4f8f21d3b4e6290c9e092456f489c560345a8663cdd93e"}, + {file = "geventhttpclient-2.3.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:0129ce7ef50e67d66ea5de44d89a3998ab778a4db98093d943d6855323646fa5"}, + {file = "geventhttpclient-2.3.4-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fac2635f68b3b6752c2a576833d9d18f0af50bdd4bd7dd2d2ca753e3b8add84c"}, + {file = "geventhttpclient-2.3.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:71206ab89abdd0bd5fee21e04a3995ec1f7d8ae1478ee5868f9e16e85a831653"}, + {file = "geventhttpclient-2.3.4-pp311-pypy311_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8bde667d0ce46065fe57f8ff24b2e94f620a5747378c97314dcfc8fbab35b73"}, + {file = "geventhttpclient-2.3.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:5f71c75fc138331cbbe668a08951d36b641d2c26fb3677d7e497afb8419538db"}, + {file = "geventhttpclient-2.3.4-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1d23fe37b9d79b17dbce2d086006950d4527a2f95286046b7229e1bd3d8ac5e4"}, + {file = "geventhttpclient-2.3.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:888e34d2e53d0f1dab85ff3e5ca81b8b7949b9e4702439f66f4ebf61189eb923"}, + {file = "geventhttpclient-2.3.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73a88925055acc56811927614bb8be3e784fdd5149819fa26c2af6a43a2e43f5"}, + {file = "geventhttpclient-2.3.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3ba0aa08f5eaa7165bf90fb06adf124511dbdf517500ab0793883f648feaaf8"}, + {file = "geventhttpclient-2.3.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9db12e764ec1a4648d67b1501f7001e30f92e05a1692a75920ab53670c4958b"}, + {file = "geventhttpclient-2.3.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e310f6313ccba476dc1f393fd40738ca3b7fa3bb41c31c38f9641b1927306ba2"}, + {file = "geventhttpclient-2.3.4.tar.gz", hash = "sha256:1749f75810435a001fc6d4d7526c92cf02b39b30ab6217a886102f941c874222"}, +] + +[package.dependencies] +brotli = "*" +certifi = "*" +gevent = "*" +urllib3 = "*" + +[package.extras] +benchmarks = ["httplib2", "httpx", "requests", "urllib3"] +dev = ["dpkt", "pytest", "requests"] +examples = ["oauth2"] + +[[package]] +name = "greenlet" +version = "3.2.4" +description = "Lightweight in-process concurrent programming" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "platform_python_implementation == \"CPython\"" +files = [ + {file = "greenlet-3.2.4-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:8c68325b0d0acf8d91dde4e6f930967dd52a5302cd4062932a6b2e7c2969f47c"}, + {file = "greenlet-3.2.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:94385f101946790ae13da500603491f04a76b6e4c059dab271b3ce2e283b2590"}, + {file = "greenlet-3.2.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f10fd42b5ee276335863712fa3da6608e93f70629c631bf77145021600abc23c"}, + {file = "greenlet-3.2.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c8c9e331e58180d0d83c5b7999255721b725913ff6bc6cf39fa2a45841a4fd4b"}, + {file = "greenlet-3.2.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:58b97143c9cc7b86fc458f215bd0932f1757ce649e05b640fea2e79b54cedb31"}, + {file = "greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d"}, + {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5"}, + {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f"}, + {file = "greenlet-3.2.4-cp310-cp310-win_amd64.whl", hash = "sha256:73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c"}, + {file = "greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2"}, + {file = "greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246"}, + {file = "greenlet-3.2.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:94abf90142c2a18151632371140b3dba4dee031633fe614cb592dbb6c9e17bc3"}, + {file = "greenlet-3.2.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:4d1378601b85e2e5171b99be8d2dc85f594c79967599328f95c1dc1a40f1c633"}, + {file = "greenlet-3.2.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0db5594dce18db94f7d1650d7489909b57afde4c580806b8d9203b6e79cdc079"}, + {file = "greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8"}, + {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52"}, + {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa"}, + {file = "greenlet-3.2.4-cp311-cp311-win_amd64.whl", hash = "sha256:9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9"}, + {file = "greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd"}, + {file = "greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb"}, + {file = "greenlet-3.2.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f28588772bb5fb869a8eb331374ec06f24a83a9c25bfa1f38b6993afe9c1e968"}, + {file = "greenlet-3.2.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:5c9320971821a7cb77cfab8d956fa8e39cd07ca44b6070db358ceb7f8797c8c9"}, + {file = "greenlet-3.2.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c60a6d84229b271d44b70fb6e5fa23781abb5d742af7b808ae3f6efd7c9c60f6"}, + {file = "greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0"}, + {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0"}, + {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f"}, + {file = "greenlet-3.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02"}, + {file = "greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31"}, + {file = "greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945"}, + {file = "greenlet-3.2.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:710638eb93b1fa52823aa91bf75326f9ecdfd5e0466f00789246a5280f4ba0fc"}, + {file = "greenlet-3.2.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c5111ccdc9c88f423426df3fd1811bfc40ed66264d35aa373420a34377efc98a"}, + {file = "greenlet-3.2.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d76383238584e9711e20ebe14db6c88ddcedc1829a9ad31a584389463b5aa504"}, + {file = "greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671"}, + {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b"}, + {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae"}, + {file = "greenlet-3.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b"}, + {file = "greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0"}, + {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f"}, + {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:c17b6b34111ea72fc5a4e4beec9711d2226285f0386ea83477cbb97c30a3f3a5"}, + {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1"}, + {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735"}, + {file = "greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337"}, + {file = "greenlet-3.2.4-cp314-cp314-win_amd64.whl", hash = "sha256:e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01"}, + {file = "greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c"}, + {file = "greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d"}, + {file = "greenlet-3.2.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:18d9260df2b5fbf41ae5139e1be4e796d99655f023a636cd0e11e6406cca7d58"}, + {file = "greenlet-3.2.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:671df96c1f23c4a0d4077a325483c1503c96a1b7d9db26592ae770daa41233d4"}, + {file = "greenlet-3.2.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:16458c245a38991aa19676900d48bd1a6f2ce3e16595051a4db9d012154e8433"}, + {file = "greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df"}, + {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594"}, + {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98"}, + {file = "greenlet-3.2.4-cp39-cp39-win32.whl", hash = "sha256:65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b"}, + {file = "greenlet-3.2.4-cp39-cp39-win_amd64.whl", hash = "sha256:d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb"}, + {file = "greenlet-3.2.4.tar.gz", hash = "sha256:0dca0d95ff849f9a364385f36ab49f50065d76964944638be9691e1832e9f86d"}, +] + +[package.extras] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil", "setuptools"] + [[package]] name = "h11" version = "0.16.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["main", "dev"] files = [ {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, @@ -220,7 +918,7 @@ version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" -groups = ["main"] +groups = ["main", "dev"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -229,18 +927,322 @@ files = [ [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] +[[package]] +name = "iniconfig" +version = "2.1.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, + {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, +] + +[[package]] +name = "itsdangerous" +version = "2.2.0" +description = "Safely pass data to untrusted environments and back." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef"}, + {file = "itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173"}, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "locust" +version = "2.40.5" +description = "Developer-friendly load testing framework" +optional = false +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "locust-2.40.5-py3-none-any.whl", hash = "sha256:c44a6c415c5218824895bd652a182a958c27a2ceb8427c835d2f4b90d735579b"}, + {file = "locust-2.40.5.tar.gz", hash = "sha256:4332f03ebfac83c115763e462f22f495783a88f1d237ccbd618d5b27863f5053"}, +] + +[package.dependencies] +configargparse = ">=1.7.1" +flask = ">=2.0.0" +flask-cors = ">=3.0.10" +flask-login = ">=0.6.3" +gevent = ">=24.10.1,<25.8.1" +geventhttpclient = ">=2.3.1" +locust-cloud = ">=1.27.0" +msgpack = ">=1.0.0" +psutil = ">=5.9.1" +pytest = ">=8.3.3,<9.0.0" +python-engineio = ">=4.12.2" +python-socketio = {version = ">=5.13.0", extras = ["client"]} +pywin32 = {version = "*", markers = "sys_platform == \"win32\""} +pyzmq = ">=25.0.0" +requests = ">=2.32.2" +setuptools = ">=70.0.0" +werkzeug = ">=2.0.0" + +[package.extras] +milvus = ["pymilvus (>=2.5.0)"] + +[[package]] +name = "locust-cloud" +version = "1.27.0" +description = "Locust Cloud" +optional = false +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "locust_cloud-1.27.0-py3-none-any.whl", hash = "sha256:0ddf732c1702d1d29f8359e261e23147d1bba373ac96c9125f80c290c2dcd9c1"}, + {file = "locust_cloud-1.27.0.tar.gz", hash = "sha256:b371a6940d978bb221ada9780e796e10e3032ff49ffeacf02c515aa876679b75"}, +] + +[package.dependencies] +configargparse = ">=1.7.1" +gevent = ">=24.10.1,<26.0.0" +platformdirs = ">=4.3.6,<5.0.0" +python-engineio = ">=4.12.2" +python-socketio = {version = "5.13.0", extras = ["client"]} + +[[package]] +name = "markupsafe" +version = "3.0.2" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] + +[[package]] +name = "msgpack" +version = "1.1.1" +description = "MessagePack serializer" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "msgpack-1.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:353b6fc0c36fde68b661a12949d7d49f8f51ff5fa019c1e47c87c4ff34b080ed"}, + {file = "msgpack-1.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:79c408fcf76a958491b4e3b103d1c417044544b68e96d06432a189b43d1215c8"}, + {file = "msgpack-1.1.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78426096939c2c7482bf31ef15ca219a9e24460289c00dd0b94411040bb73ad2"}, + {file = "msgpack-1.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b17ba27727a36cb73aabacaa44b13090feb88a01d012c0f4be70c00f75048b4"}, + {file = "msgpack-1.1.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a17ac1ea6ec3c7687d70201cfda3b1e8061466f28f686c24f627cae4ea8efd0"}, + {file = "msgpack-1.1.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:88d1e966c9235c1d4e2afac21ca83933ba59537e2e2727a999bf3f515ca2af26"}, + {file = "msgpack-1.1.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f6d58656842e1b2ddbe07f43f56b10a60f2ba5826164910968f5933e5178af75"}, + {file = "msgpack-1.1.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:96decdfc4adcbc087f5ea7ebdcfd3dee9a13358cae6e81d54be962efc38f6338"}, + {file = "msgpack-1.1.1-cp310-cp310-win32.whl", hash = "sha256:6640fd979ca9a212e4bcdf6eb74051ade2c690b862b679bfcb60ae46e6dc4bfd"}, + {file = "msgpack-1.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:8b65b53204fe1bd037c40c4148d00ef918eb2108d24c9aaa20bc31f9810ce0a8"}, + {file = "msgpack-1.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:71ef05c1726884e44f8b1d1773604ab5d4d17729d8491403a705e649116c9558"}, + {file = "msgpack-1.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:36043272c6aede309d29d56851f8841ba907a1a3d04435e43e8a19928e243c1d"}, + {file = "msgpack-1.1.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a32747b1b39c3ac27d0670122b57e6e57f28eefb725e0b625618d1b59bf9d1e0"}, + {file = "msgpack-1.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a8b10fdb84a43e50d38057b06901ec9da52baac6983d3f709d8507f3889d43f"}, + {file = "msgpack-1.1.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0c325c3f485dc54ec298d8b024e134acf07c10d494ffa24373bea729acf704"}, + {file = "msgpack-1.1.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:88daaf7d146e48ec71212ce21109b66e06a98e5e44dca47d853cbfe171d6c8d2"}, + {file = "msgpack-1.1.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:d8b55ea20dc59b181d3f47103f113e6f28a5e1c89fd5b67b9140edb442ab67f2"}, + {file = "msgpack-1.1.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4a28e8072ae9779f20427af07f53bbb8b4aa81151054e882aee333b158da8752"}, + {file = "msgpack-1.1.1-cp311-cp311-win32.whl", hash = "sha256:7da8831f9a0fdb526621ba09a281fadc58ea12701bc709e7b8cbc362feabc295"}, + {file = "msgpack-1.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5fd1b58e1431008a57247d6e7cc4faa41c3607e8e7d4aaf81f7c29ea013cb458"}, + {file = "msgpack-1.1.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ae497b11f4c21558d95de9f64fff7053544f4d1a17731c866143ed6bb4591238"}, + {file = "msgpack-1.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:33be9ab121df9b6b461ff91baac6f2731f83d9b27ed948c5b9d1978ae28bf157"}, + {file = "msgpack-1.1.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f64ae8fe7ffba251fecb8408540c34ee9df1c26674c50c4544d72dbf792e5ce"}, + {file = "msgpack-1.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a494554874691720ba5891c9b0b39474ba43ffb1aaf32a5dac874effb1619e1a"}, + {file = "msgpack-1.1.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cb643284ab0ed26f6957d969fe0dd8bb17beb567beb8998140b5e38a90974f6c"}, + {file = "msgpack-1.1.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d275a9e3c81b1093c060c3837e580c37f47c51eca031f7b5fb76f7b8470f5f9b"}, + {file = "msgpack-1.1.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4fd6b577e4541676e0cc9ddc1709d25014d3ad9a66caa19962c4f5de30fc09ef"}, + {file = "msgpack-1.1.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bb29aaa613c0a1c40d1af111abf025f1732cab333f96f285d6a93b934738a68a"}, + {file = "msgpack-1.1.1-cp312-cp312-win32.whl", hash = "sha256:870b9a626280c86cff9c576ec0d9cbcc54a1e5ebda9cd26dab12baf41fee218c"}, + {file = "msgpack-1.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:5692095123007180dca3e788bb4c399cc26626da51629a31d40207cb262e67f4"}, + {file = "msgpack-1.1.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3765afa6bd4832fc11c3749be4ba4b69a0e8d7b728f78e68120a157a4c5d41f0"}, + {file = "msgpack-1.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:8ddb2bcfd1a8b9e431c8d6f4f7db0773084e107730ecf3472f1dfe9ad583f3d9"}, + {file = "msgpack-1.1.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:196a736f0526a03653d829d7d4c5500a97eea3648aebfd4b6743875f28aa2af8"}, + {file = "msgpack-1.1.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d592d06e3cc2f537ceeeb23d38799c6ad83255289bb84c2e5792e5a8dea268a"}, + {file = "msgpack-1.1.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4df2311b0ce24f06ba253fda361f938dfecd7b961576f9be3f3fbd60e87130ac"}, + {file = "msgpack-1.1.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e4141c5a32b5e37905b5940aacbc59739f036930367d7acce7a64e4dec1f5e0b"}, + {file = "msgpack-1.1.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b1ce7f41670c5a69e1389420436f41385b1aa2504c3b0c30620764b15dded2e7"}, + {file = "msgpack-1.1.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4147151acabb9caed4e474c3344181e91ff7a388b888f1e19ea04f7e73dc7ad5"}, + {file = "msgpack-1.1.1-cp313-cp313-win32.whl", hash = "sha256:500e85823a27d6d9bba1d057c871b4210c1dd6fb01fbb764e37e4e8847376323"}, + {file = "msgpack-1.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:6d489fba546295983abd142812bda76b57e33d0b9f5d5b71c09a583285506f69"}, + {file = "msgpack-1.1.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bba1be28247e68994355e028dcd668316db30c1f758d3241a7b903ac78dcd285"}, + {file = "msgpack-1.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8f93dcddb243159c9e4109c9750ba5b335ab8d48d9522c5308cd05d7e3ce600"}, + {file = "msgpack-1.1.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fbbc0b906a24038c9958a1ba7ae0918ad35b06cb449d398b76a7d08470b0ed9"}, + {file = "msgpack-1.1.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:61e35a55a546a1690d9d09effaa436c25ae6130573b6ee9829c37ef0f18d5e78"}, + {file = "msgpack-1.1.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:1abfc6e949b352dadf4bce0eb78023212ec5ac42f6abfd469ce91d783c149c2a"}, + {file = "msgpack-1.1.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:996f2609ddf0142daba4cefd767d6db26958aac8439ee41db9cc0db9f4c4c3a6"}, + {file = "msgpack-1.1.1-cp38-cp38-win32.whl", hash = "sha256:4d3237b224b930d58e9d83c81c0dba7aacc20fcc2f89c1e5423aa0529a4cd142"}, + {file = "msgpack-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:da8f41e602574ece93dbbda1fab24650d6bf2a24089f9e9dbb4f5730ec1e58ad"}, + {file = "msgpack-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5be6b6bc52fad84d010cb45433720327ce886009d862f46b26d4d154001994b"}, + {file = "msgpack-1.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3a89cd8c087ea67e64844287ea52888239cbd2940884eafd2dcd25754fb72232"}, + {file = "msgpack-1.1.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d75f3807a9900a7d575d8d6674a3a47e9f227e8716256f35bc6f03fc597ffbf"}, + {file = "msgpack-1.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d182dac0221eb8faef2e6f44701812b467c02674a322c739355c39e94730cdbf"}, + {file = "msgpack-1.1.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1b13fe0fb4aac1aa5320cd693b297fe6fdef0e7bea5518cbc2dd5299f873ae90"}, + {file = "msgpack-1.1.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:435807eeb1bc791ceb3247d13c79868deb22184e1fc4224808750f0d7d1affc1"}, + {file = "msgpack-1.1.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4835d17af722609a45e16037bb1d4d78b7bdf19d6c0128116d178956618c4e88"}, + {file = "msgpack-1.1.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a8ef6e342c137888ebbfb233e02b8fbd689bb5b5fcc59b34711ac47ebd504478"}, + {file = "msgpack-1.1.1-cp39-cp39-win32.whl", hash = "sha256:61abccf9de335d9efd149e2fff97ed5974f2481b3353772e8e2dd3402ba2bd57"}, + {file = "msgpack-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:40eae974c873b2992fd36424a5d9407f93e97656d999f43fca9d29f820899084"}, + {file = "msgpack-1.1.1.tar.gz", hash = "sha256:77b79ce34a2bdab2594f490c8e80dd62a02d650b91a75159a63ec413b8d104cd"}, +] + [[package]] name = "packaging" version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" -groups = ["main"] +groups = ["main", "dev"] files = [ {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, ] +[[package]] +name = "platformdirs" +version = "4.4.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "platformdirs-4.4.0-py3-none-any.whl", hash = "sha256:abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85"}, + {file = "platformdirs-4.4.0.tar.gz", hash = "sha256:ca753cf4d81dc309bc67b0ea38fd15dc97bc30ce419a7f58d13eb3bf14c4febf"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.14.1)"] + +[[package]] +name = "pluggy" +version = "1.6.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["coverage", "pytest", "pytest-benchmark"] + +[[package]] +name = "psutil" +version = "7.1.0" +description = "Cross-platform lib for process and system monitoring." +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "psutil-7.1.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76168cef4397494250e9f4e73eb3752b146de1dd950040b29186d0cce1d5ca13"}, + {file = "psutil-7.1.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:5d007560c8c372efdff9e4579c2846d71de737e4605f611437255e81efcca2c5"}, + {file = "psutil-7.1.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22e4454970b32472ce7deaa45d045b34d3648ce478e26a04c7e858a0a6e75ff3"}, + {file = "psutil-7.1.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c70e113920d51e89f212dd7be06219a9b88014e63a4cec69b684c327bc474e3"}, + {file = "psutil-7.1.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d4a113425c037300de3ac8b331637293da9be9713855c4fc9d2d97436d7259d"}, + {file = "psutil-7.1.0-cp37-abi3-win32.whl", hash = "sha256:09ad740870c8d219ed8daae0ad3b726d3bf9a028a198e7f3080f6a1888b99bca"}, + {file = "psutil-7.1.0-cp37-abi3-win_amd64.whl", hash = "sha256:57f5e987c36d3146c0dd2528cd42151cf96cd359b9d67cfff836995cc5df9a3d"}, + {file = "psutil-7.1.0-cp37-abi3-win_arm64.whl", hash = "sha256:6937cb68133e7c97b6cc9649a570c9a18ba0efebed46d8c5dae4c07fa1b67a07"}, + {file = "psutil-7.1.0.tar.gz", hash = "sha256:655708b3c069387c8b77b072fc429a57d0e214221d01c0a772df7dfedcb3bcd2"}, +] + +[package.extras] +dev = ["abi3audit", "black", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pyreadline ; os_name == \"nt\"", "pytest", "pytest-cov", "pytest-instafail", "pytest-subtests", "pytest-xdist", "pywin32 ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel", "wheel ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "wmi ; os_name == \"nt\" and platform_python_implementation != \"PyPy\""] +test = ["pytest", "pytest-instafail", "pytest-subtests", "pytest-xdist", "pywin32 ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "setuptools", "wheel ; os_name == \"nt\" and platform_python_implementation != \"PyPy\"", "wmi ; os_name == \"nt\" and platform_python_implementation != \"PyPy\""] + +[[package]] +name = "pycparser" +version = "2.23" +description = "C parser in Python" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and implementation_name != \"PyPy\" or implementation_name == \"pypy\"" +files = [ + {file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"}, + {file = "pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2"}, +] + [[package]] name = "pydantic" version = "2.11.7" @@ -399,6 +1401,43 @@ gcp-secret-manager = ["google-cloud-secret-manager (>=2.23.1)"] toml = ["tomli (>=2.0.1)"] yaml = ["pyyaml (>=6.0.1)"] +[[package]] +name = "pygments" +version = "2.19.2" +description = "Pygments is a syntax highlighting package written in Python." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, + {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, +] + +[package.extras] +windows-terminal = ["colorama (>=0.4.6)"] + +[[package]] +name = "pytest" +version = "8.4.2" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79"}, + {file = "pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01"}, +] + +[package.dependencies] +colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} +iniconfig = ">=1" +packaging = ">=20" +pluggy = ">=1.5,<2" +pygments = ">=2.7.2" + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] + [[package]] name = "python-dotenv" version = "1.1.1" @@ -414,6 +1453,80 @@ files = [ [package.extras] cli = ["click (>=5.0)"] +[[package]] +name = "python-engineio" +version = "4.12.2" +description = "Engine.IO server and client for Python" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "python_engineio-4.12.2-py3-none-any.whl", hash = "sha256:8218ab66950e179dfec4b4bbb30aecf3f5d86f5e58e6fc1aa7fde2c698b2804f"}, + {file = "python_engineio-4.12.2.tar.gz", hash = "sha256:e7e712ffe1be1f6a05ee5f951e72d434854a32fcfc7f6e4d9d3cae24ec70defa"}, +] + +[package.dependencies] +simple-websocket = ">=0.10.0" + +[package.extras] +asyncio-client = ["aiohttp (>=3.4)"] +client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"] +docs = ["sphinx"] + +[[package]] +name = "python-socketio" +version = "5.13.0" +description = "Socket.IO server and client for Python" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "python_socketio-5.13.0-py3-none-any.whl", hash = "sha256:51f68d6499f2df8524668c24bcec13ba1414117cfb3a90115c559b601ab10caf"}, + {file = "python_socketio-5.13.0.tar.gz", hash = "sha256:ac4e19a0302ae812e23b712ec8b6427ca0521f7c582d6abb096e36e24a263029"}, +] + +[package.dependencies] +bidict = ">=0.21.0" +python-engineio = ">=4.11.0" +requests = {version = ">=2.21.0", optional = true, markers = "extra == \"client\""} +websocket-client = {version = ">=0.54.0", optional = true, markers = "extra == \"client\""} + +[package.extras] +asyncio-client = ["aiohttp (>=3.4)"] +client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"] +docs = ["sphinx"] + +[[package]] +name = "pywin32" +version = "311" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +groups = ["dev"] +markers = "sys_platform == \"win32\"" +files = [ + {file = "pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3"}, + {file = "pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b"}, + {file = "pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b"}, + {file = "pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151"}, + {file = "pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503"}, + {file = "pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2"}, + {file = "pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31"}, + {file = "pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067"}, + {file = "pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852"}, + {file = "pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d"}, + {file = "pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d"}, + {file = "pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a"}, + {file = "pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee"}, + {file = "pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87"}, + {file = "pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42"}, + {file = "pywin32-311-cp38-cp38-win32.whl", hash = "sha256:6c6f2969607b5023b0d9ce2541f8d2cbb01c4f46bc87456017cf63b73f1e2d8c"}, + {file = "pywin32-311-cp38-cp38-win_amd64.whl", hash = "sha256:c8015b09fb9a5e188f83b7b04de91ddca4658cee2ae6f3bc483f0b21a77ef6cd"}, + {file = "pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b"}, + {file = "pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91"}, + {file = "pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d"}, +] + [[package]] name = "pyyaml" version = "6.0.2" @@ -477,6 +1590,173 @@ files = [ {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] +[[package]] +name = "pyzmq" +version = "27.1.0" +description = "Python bindings for 0MQ" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pyzmq-27.1.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:508e23ec9bc44c0005c4946ea013d9317ae00ac67778bd47519fdf5a0e930ff4"}, + {file = "pyzmq-27.1.0-cp310-cp310-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:507b6f430bdcf0ee48c0d30e734ea89ce5567fd7b8a0f0044a369c176aa44556"}, + {file = "pyzmq-27.1.0-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bf7b38f9fd7b81cb6d9391b2946382c8237fd814075c6aa9c3b746d53076023b"}, + {file = "pyzmq-27.1.0-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:03ff0b279b40d687691a6217c12242ee71f0fba28bf8626ff50e3ef0f4410e1e"}, + {file = "pyzmq-27.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:677e744fee605753eac48198b15a2124016c009a11056f93807000ab11ce6526"}, + {file = "pyzmq-27.1.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd2fec2b13137416a1c5648b7009499bcc8fea78154cd888855fa32514f3dad1"}, + {file = "pyzmq-27.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:08e90bb4b57603b84eab1d0ca05b3bbb10f60c1839dc471fc1c9e1507bef3386"}, + {file = "pyzmq-27.1.0-cp310-cp310-win32.whl", hash = "sha256:a5b42d7a0658b515319148875fcb782bbf118dd41c671b62dae33666c2213bda"}, + {file = "pyzmq-27.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:c0bb87227430ee3aefcc0ade2088100e528d5d3298a0a715a64f3d04c60ba02f"}, + {file = "pyzmq-27.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:9a916f76c2ab8d045b19f2286851a38e9ac94ea91faf65bd64735924522a8b32"}, + {file = "pyzmq-27.1.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:226b091818d461a3bef763805e75685e478ac17e9008f49fce2d3e52b3d58b86"}, + {file = "pyzmq-27.1.0-cp311-cp311-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:0790a0161c281ca9723f804871b4027f2e8b5a528d357c8952d08cd1a9c15581"}, + {file = "pyzmq-27.1.0-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c895a6f35476b0c3a54e3eb6ccf41bf3018de937016e6e18748317f25d4e925f"}, + {file = "pyzmq-27.1.0-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bbf8d3630bf96550b3be8e1fc0fea5cbdc8d5466c1192887bd94869da17a63e"}, + {file = "pyzmq-27.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15c8bd0fe0dabf808e2d7a681398c4e5ded70a551ab47482067a572c054c8e2e"}, + {file = "pyzmq-27.1.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bafcb3dd171b4ae9f19ee6380dfc71ce0390fefaf26b504c0e5f628d7c8c54f2"}, + {file = "pyzmq-27.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e829529fcaa09937189178115c49c504e69289abd39967cd8a4c215761373394"}, + {file = "pyzmq-27.1.0-cp311-cp311-win32.whl", hash = "sha256:6df079c47d5902af6db298ec92151db82ecb557af663098b92f2508c398bb54f"}, + {file = "pyzmq-27.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:190cbf120fbc0fc4957b56866830def56628934a9d112aec0e2507aa6a032b97"}, + {file = "pyzmq-27.1.0-cp311-cp311-win_arm64.whl", hash = "sha256:eca6b47df11a132d1745eb3b5b5e557a7dae2c303277aa0e69c6ba91b8736e07"}, + {file = "pyzmq-27.1.0-cp312-abi3-macosx_10_15_universal2.whl", hash = "sha256:452631b640340c928fa343801b0d07eb0c3789a5ffa843f6e1a9cee0ba4eb4fc"}, + {file = "pyzmq-27.1.0-cp312-abi3-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1c179799b118e554b66da67d88ed66cd37a169f1f23b5d9f0a231b4e8d44a113"}, + {file = "pyzmq-27.1.0-cp312-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3837439b7f99e60312f0c926a6ad437b067356dc2bc2ec96eb395fd0fe804233"}, + {file = "pyzmq-27.1.0-cp312-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:43ad9a73e3da1fab5b0e7e13402f0b2fb934ae1c876c51d0afff0e7c052eca31"}, + {file = "pyzmq-27.1.0-cp312-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0de3028d69d4cdc475bfe47a6128eb38d8bc0e8f4d69646adfbcd840facbac28"}, + {file = "pyzmq-27.1.0-cp312-abi3-musllinux_1_2_i686.whl", hash = "sha256:cf44a7763aea9298c0aa7dbf859f87ed7012de8bda0f3977b6fb1d96745df856"}, + {file = "pyzmq-27.1.0-cp312-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f30f395a9e6fbca195400ce833c731e7b64c3919aa481af4d88c3759e0cb7496"}, + {file = "pyzmq-27.1.0-cp312-abi3-win32.whl", hash = "sha256:250e5436a4ba13885494412b3da5d518cd0d3a278a1ae640e113c073a5f88edd"}, + {file = "pyzmq-27.1.0-cp312-abi3-win_amd64.whl", hash = "sha256:9ce490cf1d2ca2ad84733aa1d69ce6855372cb5ce9223802450c9b2a7cba0ccf"}, + {file = "pyzmq-27.1.0-cp312-abi3-win_arm64.whl", hash = "sha256:75a2f36223f0d535a0c919e23615fc85a1e23b71f40c7eb43d7b1dedb4d8f15f"}, + {file = "pyzmq-27.1.0-cp313-cp313-android_24_arm64_v8a.whl", hash = "sha256:93ad4b0855a664229559e45c8d23797ceac03183c7b6f5b4428152a6b06684a5"}, + {file = "pyzmq-27.1.0-cp313-cp313-android_24_x86_64.whl", hash = "sha256:fbb4f2400bfda24f12f009cba62ad5734148569ff4949b1b6ec3b519444342e6"}, + {file = "pyzmq-27.1.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:e343d067f7b151cfe4eb3bb796a7752c9d369eed007b91231e817071d2c2fec7"}, + {file = "pyzmq-27.1.0-cp313-cp313t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:08363b2011dec81c354d694bdecaef4770e0ae96b9afea70b3f47b973655cc05"}, + {file = "pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d54530c8c8b5b8ddb3318f481297441af102517602b569146185fa10b63f4fa9"}, + {file = "pyzmq-27.1.0-cp313-cp313t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6f3afa12c392f0a44a2414056d730eebc33ec0926aae92b5ad5cf26ebb6cc128"}, + {file = "pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c65047adafe573ff023b3187bb93faa583151627bc9c51fc4fb2c561ed689d39"}, + {file = "pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:90e6e9441c946a8b0a667356f7078d96411391a3b8f80980315455574177ec97"}, + {file = "pyzmq-27.1.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:add071b2d25f84e8189aaf0882d39a285b42fa3853016ebab234a5e78c7a43db"}, + {file = "pyzmq-27.1.0-cp313-cp313t-win32.whl", hash = "sha256:7ccc0700cfdf7bd487bea8d850ec38f204478681ea02a582a8da8171b7f90a1c"}, + {file = "pyzmq-27.1.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8085a9fba668216b9b4323be338ee5437a235fe275b9d1610e422ccc279733e2"}, + {file = "pyzmq-27.1.0-cp313-cp313t-win_arm64.whl", hash = "sha256:6bb54ca21bcfe361e445256c15eedf083f153811c37be87e0514934d6913061e"}, + {file = "pyzmq-27.1.0-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ce980af330231615756acd5154f29813d553ea555485ae712c491cd483df6b7a"}, + {file = "pyzmq-27.1.0-cp314-cp314t-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:1779be8c549e54a1c38f805e56d2a2e5c009d26de10921d7d51cfd1c8d4632ea"}, + {file = "pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7200bb0f03345515df50d99d3db206a0a6bee1955fbb8c453c76f5bf0e08fb96"}, + {file = "pyzmq-27.1.0-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:01c0e07d558b06a60773744ea6251f769cd79a41a97d11b8bf4ab8f034b0424d"}, + {file = "pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:80d834abee71f65253c91540445d37c4c561e293ba6e741b992f20a105d69146"}, + {file = "pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:544b4e3b7198dde4a62b8ff6685e9802a9a1ebf47e77478a5eb88eca2a82f2fd"}, + {file = "pyzmq-27.1.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cedc4c68178e59a4046f97eca31b148ddcf51e88677de1ef4e78cf06c5376c9a"}, + {file = "pyzmq-27.1.0-cp314-cp314t-win32.whl", hash = "sha256:1f0b2a577fd770aa6f053211a55d1c47901f4d537389a034c690291485e5fe92"}, + {file = "pyzmq-27.1.0-cp314-cp314t-win_amd64.whl", hash = "sha256:19c9468ae0437f8074af379e986c5d3d7d7bfe033506af442e8c879732bedbe0"}, + {file = "pyzmq-27.1.0-cp314-cp314t-win_arm64.whl", hash = "sha256:dc5dbf68a7857b59473f7df42650c621d7e8923fb03fa74a526890f4d33cc4d7"}, + {file = "pyzmq-27.1.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:18339186c0ed0ce5835f2656cdfb32203125917711af64da64dbaa3d949e5a1b"}, + {file = "pyzmq-27.1.0-cp38-cp38-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:753d56fba8f70962cd8295fb3edb40b9b16deaa882dd2b5a3a2039f9ff7625aa"}, + {file = "pyzmq-27.1.0-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b721c05d932e5ad9ff9344f708c96b9e1a485418c6618d765fca95d4daacfbef"}, + {file = "pyzmq-27.1.0-cp38-cp38-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7be883ff3d722e6085ee3f4afc057a50f7f2e0c72d289fd54df5706b4e3d3a50"}, + {file = "pyzmq-27.1.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:b2e592db3a93128daf567de9650a2f3859017b3f7a66bc4ed6e4779d6034976f"}, + {file = "pyzmq-27.1.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ad68808a61cbfbbae7ba26d6233f2a4aa3b221de379ce9ee468aa7a83b9c36b0"}, + {file = "pyzmq-27.1.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e2687c2d230e8d8584fbea433c24382edfeda0c60627aca3446aa5e58d5d1831"}, + {file = "pyzmq-27.1.0-cp38-cp38-win32.whl", hash = "sha256:a1aa0ee920fb3825d6c825ae3f6c508403b905b698b6460408ebd5bb04bbb312"}, + {file = "pyzmq-27.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:df7cd397ece96cf20a76fae705d40efbab217d217897a5053267cd88a700c266"}, + {file = "pyzmq-27.1.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:96c71c32fff75957db6ae33cd961439f386505c6e6b377370af9b24a1ef9eafb"}, + {file = "pyzmq-27.1.0-cp39-cp39-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:49d3980544447f6bd2968b6ac913ab963a49dcaa2d4a2990041f16057b04c429"}, + {file = "pyzmq-27.1.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:849ca054d81aa1c175c49484afaaa5db0622092b5eccb2055f9f3bb8f703782d"}, + {file = "pyzmq-27.1.0-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3970778e74cb7f85934d2b926b9900e92bfe597e62267d7499acc39c9c28e345"}, + {file = "pyzmq-27.1.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:da96ecdcf7d3919c3be2de91a8c513c186f6762aa6cf7c01087ed74fad7f0968"}, + {file = "pyzmq-27.1.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9541c444cfe1b1c0156c5c86ece2bb926c7079a18e7b47b0b1b3b1b875e5d098"}, + {file = "pyzmq-27.1.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e30a74a39b93e2e1591b58eb1acef4902be27c957a8720b0e368f579b82dc22f"}, + {file = "pyzmq-27.1.0-cp39-cp39-win32.whl", hash = "sha256:b1267823d72d1e40701dcba7edc45fd17f71be1285557b7fe668887150a14b78"}, + {file = "pyzmq-27.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0c996ded912812a2fcd7ab6574f4ad3edc27cb6510349431e4930d4196ade7db"}, + {file = "pyzmq-27.1.0-cp39-cp39-win_arm64.whl", hash = "sha256:346e9ba4198177a07e7706050f35d733e08c1c1f8ceacd5eb6389d653579ffbc"}, + {file = "pyzmq-27.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c17e03cbc9312bee223864f1a2b13a99522e0dc9f7c5df0177cd45210ac286e6"}, + {file = "pyzmq-27.1.0-pp310-pypy310_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:f328d01128373cb6763823b2b4e7f73bdf767834268c565151eacb3b7a392f90"}, + {file = "pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c1790386614232e1b3a40a958454bdd42c6d1811837b15ddbb052a032a43f62"}, + {file = "pyzmq-27.1.0-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:448f9cb54eb0cee4732b46584f2710c8bc178b0e5371d9e4fc8125201e413a74"}, + {file = "pyzmq-27.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:05b12f2d32112bf8c95ef2e74ec4f1d4beb01f8b5e703b38537f8849f92cb9ba"}, + {file = "pyzmq-27.1.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:18770c8d3563715387139060d37859c02ce40718d1faf299abddcdcc6a649066"}, + {file = "pyzmq-27.1.0-pp311-pypy311_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:ac25465d42f92e990f8d8b0546b01c391ad431c3bf447683fdc40565941d0604"}, + {file = "pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:53b40f8ae006f2734ee7608d59ed661419f087521edbfc2149c3932e9c14808c"}, + {file = "pyzmq-27.1.0-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f605d884e7c8be8fe1aa94e0a783bf3f591b84c24e4bc4f3e7564c82ac25e271"}, + {file = "pyzmq-27.1.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:c9f7f6e13dff2e44a6afeaf2cf54cee5929ad64afaf4d40b50f93c58fc687355"}, + {file = "pyzmq-27.1.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:50081a4e98472ba9f5a02850014b4c9b629da6710f8f14f3b15897c666a28f1b"}, + {file = "pyzmq-27.1.0-pp38-pypy38_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:510869f9df36ab97f89f4cff9d002a89ac554c7ac9cadd87d444aa4cf66abd27"}, + {file = "pyzmq-27.1.0-pp38-pypy38_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1f8426a01b1c4098a750973c37131cf585f61c7911d735f729935a0c701b68d3"}, + {file = "pyzmq-27.1.0-pp38-pypy38_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:726b6a502f2e34c6d2ada5e702929586d3ac948a4dbbb7fed9854ec8c0466027"}, + {file = "pyzmq-27.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:bd67e7c8f4654bef471c0b1ca6614af0b5202a790723a58b79d9584dc8022a78"}, + {file = "pyzmq-27.1.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:722ea791aa233ac0a819fc2c475e1292c76930b31f1d828cb61073e2fe5e208f"}, + {file = "pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:01f9437501886d3a1dd4b02ef59fb8cc384fa718ce066d52f175ee49dd5b7ed8"}, + {file = "pyzmq-27.1.0-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4a19387a3dddcc762bfd2f570d14e2395b2c9701329b266f83dd87a2b3cbd381"}, + {file = "pyzmq-27.1.0-pp39-pypy39_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4c618fbcd069e3a29dcd221739cacde52edcc681f041907867e0f5cc7e85f172"}, + {file = "pyzmq-27.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ff8d114d14ac671d88c89b9224c63d6c4e5a613fe8acd5594ce53d752a3aafe9"}, + {file = "pyzmq-27.1.0.tar.gz", hash = "sha256:ac0765e3d44455adb6ddbf4417dcce460fc40a05978c08efdf2948072f6db540"}, +] + +[package.dependencies] +cffi = {version = "*", markers = "implementation_name == \"pypy\""} + +[[package]] +name = "requests" +version = "2.32.5" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, + {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset_normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "setuptools" +version = "80.9.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, + {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] + +[[package]] +name = "simple-websocket" +version = "1.1.0" +description = "Simple WebSocket server and client for Python" +optional = false +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "simple_websocket-1.1.0-py3-none-any.whl", hash = "sha256:4af6069630a38ed6c561010f0e11a5bc0d4ca569b36306eb257cd9a192497c8c"}, + {file = "simple_websocket-1.1.0.tar.gz", hash = "sha256:7939234e7aa067c534abdab3a9ed933ec9ce4691b0713c78acb195560aa52ae4"}, +] + +[package.dependencies] +wsproto = "*" + +[package.extras] +dev = ["flake8", "pytest", "pytest-cov", "tox"] +docs = ["sphinx"] + [[package]] name = "sniffio" version = "1.3.1" @@ -534,6 +1814,24 @@ files = [ [package.dependencies] typing-extensions = ">=4.12.0" +[[package]] +name = "urllib3" +version = "2.5.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, + {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + [[package]] name = "uvicorn" version = "0.35.0" @@ -732,6 +2030,23 @@ files = [ [package.dependencies] anyio = ">=3.0.0" +[[package]] +name = "websocket-client" +version = "1.8.0" +description = "WebSocket client for Python with low level API options" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, + {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, +] + +[package.extras] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] +optional = ["python-socks", "wsaccel"] +test = ["websockets"] + [[package]] name = "websockets" version = "15.0.1" @@ -811,7 +2126,108 @@ files = [ {file = "websockets-15.0.1.tar.gz", hash = "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee"}, ] +[[package]] +name = "werkzeug" +version = "3.1.3" +description = "The comprehensive WSGI web application library." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e"}, + {file = "werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746"}, +] + +[package.dependencies] +MarkupSafe = ">=2.1.1" + +[package.extras] +watchdog = ["watchdog (>=2.3)"] + +[[package]] +name = "wsproto" +version = "1.2.0" +description = "WebSockets state-machine based protocol implementation" +optional = false +python-versions = ">=3.7.0" +groups = ["dev"] +files = [ + {file = "wsproto-1.2.0-py3-none-any.whl", hash = "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736"}, + {file = "wsproto-1.2.0.tar.gz", hash = "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065"}, +] + +[package.dependencies] +h11 = ">=0.9.0,<1" + +[[package]] +name = "zope-event" +version = "6.0" +description = "Very basic event publishing system" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "zope_event-6.0-py3-none-any.whl", hash = "sha256:6f0922593407cc673e7d8766b492c519f91bdc99f3080fe43dcec0a800d682a3"}, + {file = "zope_event-6.0.tar.gz", hash = "sha256:0ebac894fa7c5f8b7a89141c272133d8c1de6ddc75ea4b1f327f00d1f890df92"}, +] + +[package.dependencies] +setuptools = ">=75.8.2" + +[package.extras] +docs = ["Sphinx"] +test = ["zope.testrunner (>=6.4)"] + +[[package]] +name = "zope-interface" +version = "8.0" +description = "Interfaces for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "zope_interface-8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:daf4d6ba488a0fb560980b575244aa962a75e77b7c86984138b8d52bd4b5465f"}, + {file = "zope_interface-8.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0caca2915522451e92c96c2aec404d2687e9c5cb856766940319b3973f62abb8"}, + {file = "zope_interface-8.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:a26ae2fe77c58b4df8c39c2b7c3aadedfd44225a1b54a1d74837cd27057b2fc8"}, + {file = "zope_interface-8.0-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:453d2c6668778b8d2215430ed61e04417386e51afb23637ef2e14972b047b700"}, + {file = "zope_interface-8.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:a2c107cc6dff954be25399cd81ddc390667f79af306802fc0c1de98614348b70"}, + {file = "zope_interface-8.0-cp310-cp310-win_amd64.whl", hash = "sha256:c23af5b4c4e332253d721ec1222c809ad27ceae382ad5b8ff22c4c4fb6eb8ed5"}, + {file = "zope_interface-8.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ec1da7b9156ae000cea2d19bad83ddb5c50252f9d7b186da276d17768c67a3cb"}, + {file = "zope_interface-8.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:160ba50022b342451baf516de3e3a2cd2d8c8dbac216803889a5eefa67083688"}, + {file = "zope_interface-8.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:879bb5bf937cde4acd738264e87f03c7bf7d45478f7c8b9dc417182b13d81f6c"}, + {file = "zope_interface-8.0-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:7fb931bf55c66a092c5fbfb82a0ff3cc3221149b185bde36f0afc48acb8dcd92"}, + {file = "zope_interface-8.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1858d1e5bb2c5ae766890708184a603eb484bb7454e306e967932a9f3c558b07"}, + {file = "zope_interface-8.0-cp311-cp311-win_amd64.whl", hash = "sha256:7e88c66ebedd1e839082f308b8372a50ef19423e01ee2e09600b80e765a10234"}, + {file = "zope_interface-8.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b80447a3a5c7347f4ebf3e50de319c8d2a5dabd7de32f20899ac50fc275b145d"}, + {file = "zope_interface-8.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:67047a4470cb2fddb5ba5105b0160a1d1c30ce4b300cf264d0563136adac4eac"}, + {file = "zope_interface-8.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:1bee9c1b42513148f98d3918affd829804a5c992c000c290dc805f25a75a6a3f"}, + {file = "zope_interface-8.0-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:804ebacb2776eb89a57d9b5e9abec86930e0ee784a0005030801ae2f6c04d5d8"}, + {file = "zope_interface-8.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c4d9d3982aaa88b177812cd911ceaf5ffee4829e86ab3273c89428f2c0c32cc4"}, + {file = "zope_interface-8.0-cp312-cp312-win_amd64.whl", hash = "sha256:ea1f2e47bc0124a03ee1e5fb31aee5dfde876244bcc552b9e3eb20b041b350d7"}, + {file = "zope_interface-8.0-cp313-cp313-macosx_10_9_x86_64.whl", hash = "sha256:ee9ecad04269c2da4b1be403a47993981531ffd557064b870eab4094730e5062"}, + {file = "zope_interface-8.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a9a8a71c38628af82a9ea1f7be58e5d19360a38067080c8896f6cbabe167e4f8"}, + {file = "zope_interface-8.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:c0cc51ebd984945362fd3abdc1e140dbd837c3e3b680942b3fa24fe3aac26ef8"}, + {file = "zope_interface-8.0-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:07405019f635a93b318807cb2ec7b05a5ef30f67cf913d11eb2f156ddbcead0d"}, + {file = "zope_interface-8.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:450ab3357799eed6093f3a9f1fa22761b3a9de9ebaf57f416da2c9fb7122cdcb"}, + {file = "zope_interface-8.0-cp313-cp313-win_amd64.whl", hash = "sha256:e38bb30a58887d63b80b01115ab5e8be6158b44d00b67197186385ec7efe44c7"}, + {file = "zope_interface-8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:778458ea69413cf8131a3fcc6f0ea2792d07df605422fb03ad87daca3f8f78ce"}, + {file = "zope_interface-8.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b207966f39c2e6fcfe9b68333acb7b19afd3fdda29eccc4643f8d52c180a3185"}, + {file = "zope_interface-8.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:e3cf57f90a760c56c55668f650ba20c3444cde8332820db621c9a1aafc217471"}, + {file = "zope_interface-8.0-cp39-cp39-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5cffe23eb610e32a83283dde5413ab7a17938fa3fbd023ca3e529d724219deb0"}, + {file = "zope_interface-8.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4d639d5015c1753031e180b8ef81e72bb7d47b0aca0218694ad1f19b0a6c6b63"}, + {file = "zope_interface-8.0-cp39-cp39-win_amd64.whl", hash = "sha256:dee2d1db1067e8a4b682dde7eb4bff21775412358e142f4f98c9066173f9dacd"}, + {file = "zope_interface-8.0.tar.gz", hash = "sha256:b14d5aac547e635af749ce20bf49a3f5f93b8a854d2a6b1e95d4d5e5dc618f7d"}, +] + +[package.dependencies] +setuptools = "*" + +[package.extras] +docs = ["Sphinx", "furo", "repoze.sphinx.autointerface"] +test = ["coverage[toml]", "zope.event", "zope.testing"] +testing = ["coverage[toml]", "zope.event", "zope.testing"] + [metadata] lock-version = "2.1" python-versions = ">=3.13" -content-hash = "ee7111da074ba5f0900479930ae235d8b4f28198f0c17aee43b60e42dc097487" +content-hash = "6b687a35bca621c5ec6aee78249d871f3a2254ac8420af0c4bd65e12ca787a80" diff --git a/gateway/pyproject.toml b/gateway/pyproject.toml index 3846c95..063a6ab 100644 --- a/gateway/pyproject.toml +++ b/gateway/pyproject.toml @@ -2,20 +2,23 @@ name = "gateway" version = "0.1.0" description = "" -authors = [ - {name = "Powermacintosh",email = "ak.powermacintosh@gmail.com"} -] -license = {text = "MIT"} +authors = [{ name = "Powermacintosh", email = "ak.powermacintosh@gmail.com" }] +license = { text = "MIT" } readme = "README.md" requires-python = ">=3.13" dependencies = [ "fastapi (>=0.116.1,<0.117.0)", "uvicorn[standard] (>=0.35.0,<0.36.0)", "pydantic-settings (>=2.10.1,<3.0.0)", - "aiokafka (>=0.12.0,<0.13.0)" + "aiokafka (>=0.12.0,<0.13.0)", ] +[tool.poetry] +package-mode = false [build-system] requires = ["poetry-core>=2.0.0,<3.0.0"] build-backend = "poetry.core.masonry.api" + +[tool.poetry.group.dev.dependencies] +locust = "^2.40.5" diff --git a/tasks/.env.test b/tasks/.env.test index 1799237..42e9de2 100644 --- a/tasks/.env.test +++ b/tasks/.env.test @@ -8,4 +8,10 @@ TASKS_DB_PORT = 5432 TASKS_DB_NAME = tasks_app_test # FastAPI -TASKS_APP_PORT = 5001 \ No newline at end of file +TASKS_APP_PORT = 5001 + +# Kafka +KAFKA_BOOTSTRAP = kafka_test:9092 +KAFKA_TOPIC = task_events_test +KAFKA_GROUP_ID = tasks_app_group_test +KAFKA_CLIENT_ID = tasks_app_test diff --git a/tasks/api_v1/rest/tasks/dependencies.py b/tasks/api_v1/rest/tasks/dependencies.py index be68e62..9a7204b 100644 --- a/tasks/api_v1/rest/tasks/dependencies.py +++ b/tasks/api_v1/rest/tasks/dependencies.py @@ -6,8 +6,13 @@ from infrastructure.database.models import Task from .decorators import handle_errors from .exceptions import TaskNotFoundException +from aiokafka import AIOKafkaProducer +async def get_producer() -> AIOKafkaProducer: + from main import app + return app.state.kafka_producer + async def get_uow() -> AsyncIterator[UnitOfWork]: async with unit_of_work() as uow: yield uow diff --git a/tasks/api_v1/rest/tasks/views.py b/tasks/api_v1/rest/tasks/views.py index f7e58de..68ebb21 100644 --- a/tasks/api_v1/rest/tasks/views.py +++ b/tasks/api_v1/rest/tasks/views.py @@ -1,6 +1,11 @@ from typing import Annotated from fastapi import APIRouter, Depends, status, Path -from .dependencies import get_task_service, task_by_id +from .dependencies import ( + get_task_service, + task_by_id, + AIOKafkaProducer, + get_producer +) from .service import TaskService from infrastructure.database.models import Task from .schemas import ( @@ -10,6 +15,14 @@ TaskUpdatePartial, TasksResponseSchema ) +# from infrastructure.kafka.producer import producer +from core.config import settings + +import logging.config +from core.logger import logger_config + +logging.config.dictConfig(logger_config) +kafka_logger = logging.getLogger('kafka_logger') router, router_list = APIRouter(tags=['Tasks']), APIRouter(tags=['Tasks']) @@ -159,4 +172,21 @@ async def get_list_tasks( limit=limit, column_search=column_search, input_search=input_search, - ) \ No newline at end of file + ) + +@router.post('/create_event', status_code=status.HTTP_201_CREATED) +async def send_task_creation_event( + task: TaskCreate, + producer: AIOKafkaProducer = Depends(get_producer) +): + event = { + 'event': 'TaskModuleCreation', + 'task': task.model_dump() + } + try: + await producer.send_and_wait(topic=settings.kafka.TOPIC, value=event) + kafka_logger.info('Сообщение успешно отправлено в topic task_events') + except Exception as e: + kafka_logger.exception('Ошибка отправки сообщения в topic task_events', exc_info=e) + raise HTTPException(status_code=503, detail=f'Ошибка отправки сообщения в topic task_events: {e}') + return {'status': 'published'} \ No newline at end of file diff --git a/tasks/core/config.py b/tasks/core/config.py index fa201b3..af14011 100644 --- a/tasks/core/config.py +++ b/tasks/core/config.py @@ -1,6 +1,5 @@ # -*- encoding: utf-8 -*- import os -from dotenv import load_dotenv from pydantic import BaseModel from pydantic_settings import BaseSettings @@ -9,9 +8,6 @@ class ConfigurationDB(BaseModel): ######################### # PostgreSQL database # ######################### - load_dotenv() - - MODE: str = os.getenv('MODE') DB_USER: str = os.getenv('TASKS_DB_USER') DB_PASS: str = os.getenv('TASKS_DB_PASS') @@ -52,13 +48,18 @@ class ConfigurationKafka(BaseModel): ######################### # KAFKA # ######################### - load_dotenv() BOOTSTRAP: str = os.getenv('KAFKA_BOOTSTRAP', 'kafka:9092') TOPIC: str = os.getenv('KAFKA_TOPIC', 'task_events') GROUP_ID: str = os.getenv('KAFKA_GROUP_ID', 'tasks_app_group') + CLIENT_ID: str = os.getenv('KAFKA_CLIENT_ID', 'tasks_app') + STARTUP_RETRIES: int = os.getenv('KAFKA_STARTUP_RETRIES', 3) + RETRY_BACKOFF: float = os.getenv('KAFKA_RETRY_BACKOFF', 1.0) class Setting(BaseSettings): + # ENV + MODE: str = os.getenv('MODE', 'development') + # FASTAPI api_v1_prefix: str = '/api/v1' api_v1_port: int = os.getenv('TASKS_APP_PORT', 5001) diff --git a/tasks/infrastructure/kafka/producer.py b/tasks/infrastructure/kafka/producer.py new file mode 100644 index 0000000..7978495 --- /dev/null +++ b/tasks/infrastructure/kafka/producer.py @@ -0,0 +1,38 @@ +import asyncio, json +from fastapi import FastAPI +from typing import AsyncGenerator +from contextlib import asynccontextmanager +from aiokafka import AIOKafkaProducer +from core.config import settings + + +async def _start_producer_with_retries(producer: AIOKafkaProducer): + last_exc = None + for i in range(1, settings.kafka.STARTUP_RETRIES + 1): + try: + await producer.start() + return + except Exception as exc: + last_exc = exc + await asyncio.sleep(settings.kafka.RETRY_BACKOFF * i) + raise last_exc + +@asynccontextmanager +async def lifespan(app: FastAPI) -> AsyncGenerator[None, None]: + producer = AIOKafkaProducer( + bootstrap_servers=settings.kafka.BOOTSTRAP, + client_id=settings.kafka.CLIENT_ID, + value_serializer=lambda v: json.dumps(v).encode('utf-8'), + ) + # startup + await _start_producer_with_retries(producer) + app.state.kafka_producer = producer + app.state.kafka_producer_available = True + try: + yield + finally: + # shutdown + try: + await producer.stop() + except Exception: + pass \ No newline at end of file diff --git a/tasks/main.py b/tasks/main.py index 9c3106c..413f892 100644 --- a/tasks/main.py +++ b/tasks/main.py @@ -1,9 +1,9 @@ import uvicorn - from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from core.config import settings from api_v1.rest import router as router_v1 +from infrastructure.kafka.producer import lifespan import logging.config from core.logger import logger_config @@ -14,8 +14,7 @@ title='Tasks API', description='API for tasks', version='1.0.0', - # docs_url=None, - # redoc_url=None, + lifespan=lifespan, ) app.add_middleware( diff --git a/tasks/tests/conftest.py b/tasks/tests/conftest.py index f8efd9d..317d02b 100644 --- a/tasks/tests/conftest.py +++ b/tasks/tests/conftest.py @@ -1,20 +1,17 @@ import pytest -from main import app -from sqlalchemy.ext.asyncio import AsyncSession from typing import AsyncIterator +from aiokafka import AIOKafkaConsumer from httpx import AsyncClient -from sqlalchemy.ext.asyncio import ( - create_async_engine, - async_sessionmaker, -) +from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine, async_sessionmaker +from main import app from core.config import settings @pytest.hookimpl(tryfirst=True) def pytest_collection_modifyitems(config, items): - if settings.db.MODE != 'TEST': + if settings.MODE != 'TEST': for item in items: - item.add_marker(pytest.mark.skip(reason=f'В режиме {settings.db.MODE}, тесты недоступны!')) + item.add_marker(pytest.mark.skip(reason=f'В режиме {settings.MODE}, тесты недоступны!')) class TestingUnitOfWork: def __init__(self, session: AsyncSession): @@ -59,3 +56,20 @@ async def httpx_client(): async with AsyncClient(base_url=f'http://tasks_app_test:{settings.api_v1_port}') as async_client: yield async_client +@pytest.fixture(scope='function') +async def kafka_consumer() -> AIOKafkaConsumer: + """Фикстура Kafka Consumer.""" + consumer = AIOKafkaConsumer( + settings.kafka.TOPIC, + bootstrap_servers=settings.kafka.BOOTSTRAP, + group_id=settings.kafka.GROUP_ID, + enable_auto_commit=False, + auto_offset_reset='earliest', + ) + await consumer.start() + try: + yield consumer + finally: + await consumer.stop() + + diff --git a/tasks/tests/integration/test_kafka.py b/tasks/tests/integration/test_kafka.py new file mode 100644 index 0000000..ea2ccb0 --- /dev/null +++ b/tasks/tests/integration/test_kafka.py @@ -0,0 +1,62 @@ +import pytest, asyncio, httpx, json +from fastapi import status +from httpx import AsyncClient +from aiokafka import AIOKafkaConsumer +from core.config import settings + + +class TestTaskKafkaIntegration: + """ + Тесты для интеграции менеджера задач с использованием Kafka. + """ + async def wait_for_server(self, url: str, timeout: int = 30) -> bool: + """ + Ожидает подключения к серверу. + """ + base_url=f'http://tasks_app_test:{settings.api_v1_port}' + start_time = asyncio.get_event_loop().time() + while True: + try: + async with httpx.AsyncClient() as client: + await client.get(base_url + url) + return True + except httpx.ConnectError: + if asyncio.get_event_loop().time() - start_time > timeout: + raise TimeoutError('Не удалось подключиться к серверу за отведенное время.') + await asyncio.sleep(1) + + @pytest.mark.asyncio + async def test_create_task_event( + self, httpx_client: AsyncClient, + kafka_consumer: AIOKafkaConsumer + ): + """ + Тест корректного создания задачи через Kafka. + """ + url = '/api/v1/task/create_event' + await self.wait_for_server(url) + response_task = await httpx_client.post( + url, + json={ + 'title': 'Create Task', + 'description': None, + } + ) + data_response_task = response_task.json() + assert response_task.status_code == status.HTTP_201_CREATED + assert data_response_task['status'] == 'published' + + # Пробуем поймать + received = None + for _ in range(25): + try: + msg = await asyncio.wait_for(kafka_consumer.getone(), timeout=2) + if msg: + received = json.loads(msg.value.decode('utf-8')) + break + except Exception: + await asyncio.sleep(1) + + assert received is not None + assert received['event'] == 'TaskModuleCreation' + assert received['task']['title'] == 'Create Task' From 048946d8d07a3cf1d5fd963a377ca0a09072ad89 Mon Sep 17 00:00:00 2001 From: Powermacintosh Date: Sat, 20 Sep 2025 17:34:16 +0300 Subject: [PATCH 5/9] =?UTF-8?q?refactoring:=20=D1=83=D0=BB=D1=83=D1=87?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B0=D1=80=D1=85=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D1=83=D1=80=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Рефакторинг структуры проекта. - Добавление документации. - Улучшение логирования. --- docker-compose.yml | 3 + docs/architecture-ru.md | 105 +++++++++ docs/data-access-patterns-ru.md | 78 +++++++ docs/monitoring-ru.md | 65 ++++++ gateway/api_v1/rest/tasks/views.py | 9 +- tasks/api_v1/rest/tasks/decorators.py | 28 +-- tasks/api_v1/rest/tasks/dependencies.py | 2 +- tasks/api_v1/rest/tasks/service.py | 2 +- tasks/api_v1/rest/tasks/views.py | 2 +- tasks/core/models/__init__.py | 7 + .../database => core}/models/base.py | 0 .../database => core}/models/task.py | 0 .../database => core}/repositories/task.py | 4 +- tasks/infrastructure/database/exceptions.py | 71 ------ .../database/models/__init__.py | 11 - tasks/infrastructure/database/uow.py | 40 +++- tasks/migrations/env.py | 2 +- tasks/pyproject.toml | 2 +- tasks/tests/unit/test_database_exceptions.py | 213 ------------------ tasks/tests/unit/test_task_repository.py | 5 +- tasks/tests/unit/test_task_validation.py | 41 ++++ tasks/worker.py | 25 +- 22 files changed, 372 insertions(+), 343 deletions(-) create mode 100644 docs/architecture-ru.md create mode 100644 docs/data-access-patterns-ru.md create mode 100644 docs/monitoring-ru.md create mode 100644 tasks/core/models/__init__.py rename tasks/{infrastructure/database => core}/models/base.py (100%) rename tasks/{infrastructure/database => core}/models/task.py (100%) rename tasks/{infrastructure/database => core}/repositories/task.py (97%) delete mode 100644 tasks/infrastructure/database/exceptions.py delete mode 100644 tasks/infrastructure/database/models/__init__.py delete mode 100644 tasks/tests/unit/test_database_exceptions.py create mode 100644 tasks/tests/unit/test_task_validation.py diff --git a/docker-compose.yml b/docker-compose.yml index 9356950..ee90cab 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -115,6 +115,8 @@ services: kafka: image: bitnami/kafka:latest container_name: kafka + # volumes: + # - kafka_data:/bitnami/kafka environment: KAFKA_BROKER_ID: 1 KAFKA_CFG_NODE_ID: 1 @@ -206,3 +208,4 @@ volumes: db_tasks_app: loki_data: grafana_data: + # kafka_data: diff --git a/docs/architecture-ru.md b/docs/architecture-ru.md new file mode 100644 index 0000000..2c429dc --- /dev/null +++ b/docs/architecture-ru.md @@ -0,0 +1,105 @@ +# Архитектура приложения + +## Обзор + +Приложение построено по микросервисной архитектуре с четким разделением ответственности между компонентами. Основные сервисы взаимодействуют через API и брокер сообщений (Kafka). + +## Диаграмма компонентов + +```mermaid +graph TD + A[Клиент] -->|HTTP/HTTPS| B[API Gateway] + B -->|HTTP| C[Сервис задач Tasks] + C -->|SQL| D[(База данных)] + B -->|Kafka| F[Брокер сообщений] + F -->|События| G[Потребители событий] + F -->|События| E[Другие сервисы] + F -->|События| C[Сервис задач] + B -->|HTTP| E[Другие сервисы] +``` + +## Основные компоненты + +### 1. API Gateway + +- Единая точка входа для всех клиентских запросов +- Маршрутизация запросов к соответствующим сервисам + +#### В дальнейшем планируется добавить: + +- Аутентификация и авторизация +- Балансировка нагрузки +- Кеширование + +### 2. Сервис задач (Tasks) + +#### Основные функции: + +- Управление задачами (CRUD операции) +- Валидация данных +- Бизнес-логика работы с задачами +- Интеграция с другими сервисами через события + +### 3. База данных + +- Хранение данных приложения + +### 4. Брокер сообщений (Kafka) + +- Асинхронная коммуникация между сервисами +- Обработка событий +- Обеспечение надежности доставки сообщений + +### 1. Создание задачи + +```mermaid +sequenceDiagram + participant C as Клиент + participant G as Gateway + participant T as Tasks Service + participant D as База данных + + C->>G: POST /api/v1/task/create + G->>T: Перенаправление запроса + T->>D: Валидация и сохранение + D-->>T: Успешное сохранение + T-->>G: 201 Created + G-->>C: Ответ +``` + +### 2. Обновление статуса задачи + +```mermaid +sequenceDiagram + participant C as Клиент + participant G as Gateway + participant T as Tasks Service + participant D as База данных + + C->>G: PATCH /api/v1/tasks/{id} + G->>T: Перенаправление запроса + T->>D: Частичное обновление задачи + D-->>T: Данные задачи + T-->>G: 200 OK + T-->>C: Обновленная задача +``` + +### 3. Создание задачи через Kafka + +```mermaid +sequenceDiagram + participant C as Клиент + participant G as Gateway + participant K as Kafka + participant R as Tasks Repository + participant D as База данных + + C->>G: POST /api/v1/task/create_event + G->>K: Отправка события TaskCreation + K-->>C: 201 Created, json.response {'status': 'published'} + K->>R: Создание задачи + R->>D: Валидация и сохранение + D-->>R: Успешное сохранение + R-->>K: commit(TaskCreation) + +``` diff --git a/docs/data-access-patterns-ru.md b/docs/data-access-patterns-ru.md new file mode 100644 index 0000000..6f1ba6b --- /dev/null +++ b/docs/data-access-patterns-ru.md @@ -0,0 +1,78 @@ +# Паттерны доступа к данным + +## Unit of Work (Единица работы) + +### Реализация в проекте + +В проекте используется асинхронная реализация Unit of Work, которая управляет сессией базы данных и координацией транзакций. + +**Ключевые файлы:** + +- `tasks/infrastructure/database/uow.py` - реализация UoW +- `tasks/infrastructure/database/db_connect.py` - настройка подключения к БД + +### Основные компоненты + +1. **Класс UnitOfWork** + + ```python + class UnitOfWork: + def __init__(self, session: AsyncSession): + self.session: AsyncSession = session + # доступ ко всем репозиториям + self.tasks: TaskRepository = TaskRepository(self.session) + + async def commit(self) -> None: + await self.session.commit() + + async def rollback(self) -> None: + await self.session.rollback() + + async def close(self) -> None: + await self.session.close() + ``` + +2. **Контекстный менеджер** + ```python + @asynccontextmanager + async def unit_of_work() -> AsyncIterator[UnitOfWork]: + """Контекстный менеджер для работы с Unit of Work""" + session = async_session() + uow = UnitOfWork(session) + try: + yield uow + await uow.commit() + except IntegrityError as e: + await uow.rollback() + logger.exception('Unit of work: Ошибка целостности данных', exc_info=e) + raise ValueError('UOW: Ошибка: нарушение целостности данных') from e + except OperationalError as e: + await uow.rollback() + logger.exception('Unit of work: Ошибка подключения к БД', exc_info=e) + raise ConnectionError('UOW: Ошибка подключения к базе данных') from e + except TimeoutError as e: + await uow.rollback() + logger.exception('Unit of work: Таймаут операции с БД', exc_info=e) + raise TimeoutError('UOW: Превышено время ожидания ответа от БД') from e + except SQLAlchemyError as e: + await uow.rollback() + logger.exception('Unit of work: Ошибка выполнения запроса', exc_info=e) + raise RuntimeError('UOW: Ошибка при выполнении запроса к БД') from e + except Exception as e: + if isinstance(e, HTTPException) and getattr(e, 'status_code', 404) == 404: + # Пропускаем исключения и передаём вверх по стеку вызовов + logger.debug('Unit of work: пропускаем бизнес/клиентскую ошибку', exc_info=e) + raise + await uow.rollback() + logger.critical('Unit of work: Непредвиденная ошибка', exc_info=e) + raise + finally: + await uow.close() + ``` + +### Преимущества реализации + +- **Асинхронная работа** с базой данных +- **Автоматическое управление** транзакциями +- **Централизованная обработка** ошибок +- **Удобное использование** через контекстный менеджер diff --git a/docs/monitoring-ru.md b/docs/monitoring-ru.md new file mode 100644 index 0000000..c9adf85 --- /dev/null +++ b/docs/monitoring-ru.md @@ -0,0 +1,65 @@ +# Мониторинг и логирование + +## Обзор + +В проекте реализована система логирования на основе стандартного модуля `logging` с JSON-форматированием. Логи выводятся в консоль в структурированном виде, что позволяет легко их анализировать с помощью различных инструментов. + +## Конфигурация логирования + +### Основные компоненты + +1. **Кастомный JSON-форматтер** (`CustomJsonFormatter`) + + - Форматирует логи в JSON + - Добавляет метаданные (время, уровень, сервис и т.д.) + - Поддерживает исключения и кастомные теги + +2. **Фильтры сервисов** (`ServiceNameFilter`) + - Добавляет имя сервиса в логи + - Позволяет различать логи от разных компонентов системы + +## Использование в коде + +### Инициализация логгера + +```py +# Получение логгера для конкретного модуля +import logging.config +from core.logger import logger_config + +logging.config.dictConfig(logger_config) +kafka_logger = logging.getLogger('kafka_logger') + +# Логирование с дополнительными полями +kafka_logger.info('Сообщение успешно отправлено', extra={ + 'tags': { + 'topic': settings.kafka.TOPIC, + 'event': event['event'], + 'task_title': event['task']['title'], + 'task_description': event['task']['description'], + } +}) +``` + +### Обработка ошибок + +```py +try: + # Код, который может вызвать исключение + await repository.get_task(task_id) +except Exception as e: + logger.error('Failed to get task', exc_info=e) + raise +``` + +## Настройка логгеров + +В проекте настроены следующие логгеры: + +1. **task_repository_logger** - для логирования операций с репозиторием задач +2. **database_logger** - для логирования операций с базой данных +3. **handle_errors_logger** - для логирования ошибок +4. **uvicorn** - для логирования веб-сервера +5. **kafka** - для логирования работы с Kafka + +Каждый логгер имеет свой фильтр, добавляющий соответствующее имя сервиса. diff --git a/gateway/api_v1/rest/tasks/views.py b/gateway/api_v1/rest/tasks/views.py index 212f87e..c04cae6 100644 --- a/gateway/api_v1/rest/tasks/views.py +++ b/gateway/api_v1/rest/tasks/views.py @@ -187,7 +187,14 @@ async def send_task_creation_event( } try: await producer.send_and_wait(topic=settings.kafka.TOPIC, value=event) - kafka_logger.info('Сообщение успешно отправлено в topic task_events') + kafka_logger.info('Сообщение успешно отправлено', extra={ + 'tags': { + 'topic': settings.kafka.TOPIC, + 'event': event['event'], + 'task_title': event['task']['title'], + 'task_description': event['task']['description'], + } + }) except Exception as e: kafka_logger.exception('Ошибка отправки сообщения в topic task_events', exc_info=e) raise HTTPException(status_code=503, detail=f'Ошибка отправки сообщения в topic task_events: {e}') diff --git a/tasks/api_v1/rest/tasks/decorators.py b/tasks/api_v1/rest/tasks/decorators.py index 031b258..7dab62a 100644 --- a/tasks/api_v1/rest/tasks/decorators.py +++ b/tasks/api_v1/rest/tasks/decorators.py @@ -1,11 +1,11 @@ from functools import wraps from fastapi import HTTPException, status from typing import Callable, TypeVar, Any -from infrastructure.database.exceptions import ( - DatabaseIntegrityError, - DatabaseConnectionError, - DatabaseQueryError, - DatabaseTimeoutError +from sqlalchemy.exc import ( + SQLAlchemyError, + IntegrityError, + OperationalError, + TimeoutError ) from .exceptions import ( TaskNotFoundException @@ -25,38 +25,38 @@ def handle_errors(func: Callable[..., T]) -> Callable[..., T]: async def wrapper(*args: Any, **kwargs: Any) -> T: try: return await func(*args, **kwargs) - except DatabaseIntegrityError as e: - logger.exception('Ошибка целостности данных', exc_info=e) + except IntegrityError as e: + logger.debug('Ошибка целостности данных', exc_info=e) raise HTTPException( status_code=status.HTTP_409_CONFLICT, detail=str(e) or 'Конфликт данных' ) - except (DatabaseConnectionError, DatabaseTimeoutError) as e: - logger.exception('Сервис временно недоступен', exc_info=e) + except (OperationalError, TimeoutError) as e: + logger.debug('Сервис временно недоступен', exc_info=e) raise HTTPException( status_code=status.HTTP_503_SERVICE_UNAVAILABLE, detail='Сервис временно недоступен' ) - except DatabaseQueryError as e: - logger.exception('Некорректный запрос', exc_info=e) + except SQLAlchemyError as e: + logger.debug('Некорректный запрос', exc_info=e) raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail='Некорректный запрос' ) except TaskNotFoundException as e: - logger.exception('Задача не найдена', exc_info=e) + logger.debug('Задача не найдена', exc_info=e) raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, detail=str(e), ) except ValueError as e: - logger.exception('Некорректные данные', exc_info=e) + logger.debug('Некорректные данные', exc_info=e) raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail=str(e) or 'Некорректные данные' ) except Exception as e: - logger.exception('Неожиданная ошибка', exc_info=e) + logger.debug('Неожиданная ошибка', exc_info=e) raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail='Внутренняя ошибка сервера' diff --git a/tasks/api_v1/rest/tasks/dependencies.py b/tasks/api_v1/rest/tasks/dependencies.py index 9a7204b..736f80f 100644 --- a/tasks/api_v1/rest/tasks/dependencies.py +++ b/tasks/api_v1/rest/tasks/dependencies.py @@ -3,7 +3,7 @@ from infrastructure.database.uow import UnitOfWork, unit_of_work from .service import TaskService -from infrastructure.database.models import Task +from core.models import Task from .decorators import handle_errors from .exceptions import TaskNotFoundException from aiokafka import AIOKafkaProducer diff --git a/tasks/api_v1/rest/tasks/service.py b/tasks/api_v1/rest/tasks/service.py index 4cae7fb..6206638 100644 --- a/tasks/api_v1/rest/tasks/service.py +++ b/tasks/api_v1/rest/tasks/service.py @@ -1,4 +1,4 @@ -from infrastructure.database.models import Task +from core.models import Task from .schemas import ( TaskCreate, SchemaTask, diff --git a/tasks/api_v1/rest/tasks/views.py b/tasks/api_v1/rest/tasks/views.py index 68ebb21..a258d7c 100644 --- a/tasks/api_v1/rest/tasks/views.py +++ b/tasks/api_v1/rest/tasks/views.py @@ -7,7 +7,7 @@ get_producer ) from .service import TaskService -from infrastructure.database.models import Task +from core.models import Task from .schemas import ( TaskCreate, SchemaTask, diff --git a/tasks/core/models/__init__.py b/tasks/core/models/__init__.py new file mode 100644 index 0000000..8aad515 --- /dev/null +++ b/tasks/core/models/__init__.py @@ -0,0 +1,7 @@ +__all__ = ( + 'Base', + 'Task', +) + +from .base import Base +from .task import Task \ No newline at end of file diff --git a/tasks/infrastructure/database/models/base.py b/tasks/core/models/base.py similarity index 100% rename from tasks/infrastructure/database/models/base.py rename to tasks/core/models/base.py diff --git a/tasks/infrastructure/database/models/task.py b/tasks/core/models/task.py similarity index 100% rename from tasks/infrastructure/database/models/task.py rename to tasks/core/models/task.py diff --git a/tasks/infrastructure/database/repositories/task.py b/tasks/core/repositories/task.py similarity index 97% rename from tasks/infrastructure/database/repositories/task.py rename to tasks/core/repositories/task.py index d5f1282..35f4e2a 100644 --- a/tasks/infrastructure/database/repositories/task.py +++ b/tasks/core/repositories/task.py @@ -1,8 +1,8 @@ from sqlalchemy import select, update, func from sqlalchemy.ext.asyncio import AsyncSession from typing import Optional -from infrastructure.database.models import Task -from infrastructure.database.models.task import TaskStatus +from core.models import Task +from core.models.task import TaskStatus from api_v1.rest.tasks.schemas import ( TaskCreate, SchemaTask, diff --git a/tasks/infrastructure/database/exceptions.py b/tasks/infrastructure/database/exceptions.py deleted file mode 100644 index 4c8e7a2..0000000 --- a/tasks/infrastructure/database/exceptions.py +++ /dev/null @@ -1,71 +0,0 @@ -from typing import Optional, Type, TypeVar, Union -from sqlalchemy.exc import ( - SQLAlchemyError, - IntegrityError, - OperationalError, - TimeoutError -) - -import logging.config -from core.logger import logger_config - -logging.config.dictConfig(logger_config) -logger = logging.getLogger('database_logger') - -T = TypeVar('T', bound='DatabaseError') - - -class DatabaseError(Exception): - """Базовое исключение для ошибок БД""" - def __init__(self, message: str, original_exception: Optional[Exception] = None): - self.message = message - self.original_exception = original_exception - logger.exception(f'{self.__class__.__name__}: {message}', exc_info=original_exception) - super().__init__(self.message) - - @classmethod - def from_sqlalchemy( - cls: Type[T], - exc: Union[SQLAlchemyError, Exception], - context: Optional[str] = None - ) -> T: - """Создает соответствующее исключение из SQLAlchemy ошибки""" - error_message = str(exc) if str(exc) else 'Неизвестная ошибка базы данных' - context_part = f' в {context}' if context else '' - message = f'Ошибка базы данных{context_part}: {error_message}' - - if isinstance(exc, IntegrityError): - return DatabaseIntegrityError(message, exc) - elif isinstance(exc, OperationalError): - return DatabaseConnectionError(message, exc) - elif isinstance(exc, TimeoutError): - return DatabaseTimeoutError(message, exc) - elif isinstance(exc, SQLAlchemyError): - return DatabaseQueryError(message, exc) - else: - return DatabaseUnknownError(message, exc) - -class DatabaseIntegrityError(DatabaseError): - """Исключение для ошибок целостности БД (уникальность, внешние ключи)""" - def __init__(self, message: str = 'Ошибка целостности базы данных', original_exception: Optional[Exception] = None): - super().__init__(message, original_exception) - -class DatabaseConnectionError(DatabaseError): - """Исключение для ошибок подключения к БД""" - def __init__(self, message: str = 'Ошибка подключения к базе данных', original_exception: Optional[Exception] = None): - super().__init__(message, original_exception) - -class DatabaseQueryError(DatabaseError): - """Исключение для ошибок выполнения запросов""" - def __init__(self, message: str = 'Ошибка выполнения запроса', original_exception: Optional[Exception] = None): - super().__init__(message, original_exception) - -class DatabaseTimeoutError(DatabaseError): - """Исключение для таймаутов БД""" - def __init__(self, message: str = 'Ошибка таймаута базы данных', original_exception: Optional[Exception] = None): - super().__init__(message, original_exception) - -class DatabaseUnknownError(DatabaseError): - """Исключение для непредвиденных ошибок""" - def __init__(self, message: str = 'Непредвиденная ошибка', original_exception: Optional[Exception] = None): - super().__init__(message, original_exception) \ No newline at end of file diff --git a/tasks/infrastructure/database/models/__init__.py b/tasks/infrastructure/database/models/__init__.py deleted file mode 100644 index 85f7874..0000000 --- a/tasks/infrastructure/database/models/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -__all__ = ( - 'Base', - # 'db_fastapi_connect', - 'Task', -) - -from .base import Base -# from .db_connect import ( -# db_fastapi_connect, -# ) -from .task import Task \ No newline at end of file diff --git a/tasks/infrastructure/database/uow.py b/tasks/infrastructure/database/uow.py index a7f8751..faf6bfc 100644 --- a/tasks/infrastructure/database/uow.py +++ b/tasks/infrastructure/database/uow.py @@ -1,10 +1,21 @@ from contextlib import asynccontextmanager from typing import AsyncIterator -from .exceptions import DatabaseError from sqlalchemy.ext.asyncio import AsyncSession -from .repositories.task import TaskRepository +from core.repositories.task import TaskRepository from .db_connect import async_session +from sqlalchemy.exc import ( + SQLAlchemyError, + IntegrityError, + OperationalError, + TimeoutError +) +from fastapi import HTTPException +import logging.config +from core.logger import logger_config + +logging.config.dictConfig(logger_config) +logger = logging.getLogger('database_logger') class UnitOfWork: def __init__(self, session: AsyncSession): @@ -21,7 +32,6 @@ async def rollback(self) -> None: async def close(self) -> None: await self.session.close() - @asynccontextmanager async def unit_of_work() -> AsyncIterator[UnitOfWork]: """Контекстный менеджер для работы с Unit of Work""" @@ -30,11 +40,29 @@ async def unit_of_work() -> AsyncIterator[UnitOfWork]: try: yield uow await uow.commit() - except DatabaseError as e: + except IntegrityError as e: + await uow.rollback() + logger.exception('Unit of work: Ошибка целостности данных', exc_info=e) + raise ValueError('UOW: Ошибка: нарушение целостности данных') from e + except OperationalError as e: + await uow.rollback() + logger.exception('Unit of work: Ошибка подключения к БД', exc_info=e) + raise ConnectionError('UOW: Ошибка подключения к базе данных') from e + except TimeoutError as e: + await uow.rollback() + logger.exception('Unit of work: Таймаут операции с БД', exc_info=e) + raise TimeoutError('UOW: Превышено время ожидания ответа от БД') from e + except SQLAlchemyError as e: await uow.rollback() - raise DatabaseError.from_sqlalchemy(e, 'unit of work') from e + logger.exception('Unit of work: Ошибка выполнения запроса', exc_info=e) + raise RuntimeError('UOW: Ошибка при выполнении запроса к БД') from e except Exception as e: + if isinstance(e, HTTPException) and getattr(e, 'status_code', 404) == 404: + # Пропускаем исключения и передаём вверх по стеку вызовов + logger.debug('Unit of work: пропускаем бизнес/клиентскую ошибку', exc_info=e) + raise await uow.rollback() - raise e + logger.critical('Unit of work: Непредвиденная ошибка', exc_info=e) + raise finally: await uow.close() diff --git a/tasks/migrations/env.py b/tasks/migrations/env.py index 25868fc..96d27d0 100644 --- a/tasks/migrations/env.py +++ b/tasks/migrations/env.py @@ -20,7 +20,7 @@ # add your model's MetaData object here # for 'autogenerate' support -from infrastructure.database.models import Base +from core.models import Base from core.config import settings target_metadata = Base.metadata diff --git a/tasks/pyproject.toml b/tasks/pyproject.toml index d80ae78..dd257fa 100644 --- a/tasks/pyproject.toml +++ b/tasks/pyproject.toml @@ -32,5 +32,5 @@ pytest-cov = "^7.0.0" [tool.pytest.ini_options] testpaths = ["tests"] asyncio_mode = "auto" -addopts = "--cov=api_v1 --cov=infrastructure/database/repositories --cov-report=term-missing" +addopts = "--cov=api_v1 --cov=core/repositories --cov-report=term-missing" python_files = "test_*.py" diff --git a/tasks/tests/unit/test_database_exceptions.py b/tasks/tests/unit/test_database_exceptions.py deleted file mode 100644 index afefa1a..0000000 --- a/tasks/tests/unit/test_database_exceptions.py +++ /dev/null @@ -1,213 +0,0 @@ -import pytest -from unittest.mock import patch, MagicMock -from sqlalchemy.exc import ( - IntegrityError, - OperationalError, - TimeoutError as SQLTimeoutError, - SQLAlchemyError -) - -from infrastructure.database.exceptions import ( - DatabaseError, - DatabaseIntegrityError, - DatabaseConnectionError, - DatabaseQueryError, - DatabaseTimeoutError, - DatabaseUnknownError -) - - -def test_database_error_initialization(): - """Тест базового DatabaseError""" - # Тест с кастомным сообщением - error = DatabaseError('Test error') - assert str(error) == 'Test error' - assert error.message == 'Test error' - assert error.original_exception is None - - # Тест с пустым сообщением - empty_error = DatabaseError('') - assert str(empty_error) == '' - assert empty_error.message == '' - - # Тест с числовым сообщением - numeric_error = DatabaseError(123) - assert str(numeric_error) == '123' - assert str(numeric_error.message) == '123' # Convert to string for comparison - - -def test_database_error_with_original_exception(): - """Тест DatabaseError с исключением""" - # Тест с простым исключением - original = ValueError('Original error') - error = DatabaseError('Test error', original) - assert error.original_exception is original - assert str(error) == 'Test error' - - # Тест с SQLAlchemy исключением - sqlalchemy_error = IntegrityError('Integrity error', None, None) - db_error = DatabaseError('DB error', sqlalchemy_error) - assert db_error.original_exception is sqlalchemy_error - assert str(db_error) == 'DB error' - - -def test_database_integrity_error(): - """Тест DatabaseIntegrityError""" - # Тест с кастомным сообщением - original = IntegrityError('Integrity error', None, None) - error = DatabaseIntegrityError('Test integrity error', original) - assert isinstance(error, DatabaseError) - assert 'Test integrity error' in str(error) - - # Тест с сообщением по умолчанию - error_default = DatabaseIntegrityError(original_exception=original) - assert 'Ошибка целостности базы данных' in str(error_default) - - -def test_database_connection_error(): - """Тест DatabaseConnectionError""" - # Тест с кастомным сообщением - original = OperationalError('Connection failed', None, None) - error = DatabaseConnectionError('Test connection error', original) - assert isinstance(error, DatabaseError) - assert 'Test connection error' in str(error) - - # Тест с сообщением по умолчанию - error_default = DatabaseConnectionError(original_exception=original) - assert 'Ошибка подключения к базе данных' in str(error_default) - - -def test_database_timeout_error(): - """Тест DatabaseTimeoutError""" - # Тест с кастомным сообщением - original = SQLTimeoutError('Query timed out', None, None) - error = DatabaseTimeoutError('Test timeout error', original) - assert isinstance(error, DatabaseError) - assert 'Test timeout error' in str(error) - - # Тест с сообщением по умолчанию - error_default = DatabaseTimeoutError(original_exception=original) - assert 'Ошибка таймаута базы данных' in str(error_default) - - -def test_database_unknown_error(): - """Тест DatabaseUnknownError""" - # Тест с кастомным сообщением - original = Exception('Unknown error') - error = DatabaseUnknownError('Test unknown error', original) - assert isinstance(error, DatabaseError) - assert 'Test unknown error' in str(error) - - # Тест с сообщением по умолчанию - error_default = DatabaseUnknownError(original_exception=original) - assert 'Непредвиденная ошибка' in str(error_default) - - -def test_from_sqlalchemy_integrity_error(): - """Тест from_sqlalchemy с IntegrityError""" - # Создаем мок для IntegrityError - error_msg = "(psycopg2.errors.UniqueViolation) duplicate key value violates unique constraint" - original = IntegrityError(error_msg, None, None) - - # Тест с контекстом - error = DatabaseError.from_sqlalchemy(original, 'создание пользователя') - assert isinstance(error, DatabaseIntegrityError) - assert 'создание пользователя' in str(error) - assert 'Ошибка базы данных в создание пользователя' in str(error) - assert error_msg in str(error) - - # Тест без контекста - error_no_context = DatabaseError.from_sqlalchemy(original) - assert isinstance(error_no_context, DatabaseIntegrityError) - assert 'Ошибка базы данных' in str(error_no_context) - assert error_msg in str(error_no_context) - - -def test_from_sqlalchemy_operational_error(): - """Тест from_sqlalchemy с OperationalError""" - error_msg = "(psycopg2.OperationalError) could not connect to server" - original = OperationalError(error_msg, None, None) - - # Тест с контекстом - error = DatabaseError.from_sqlalchemy(original, 'подключение к БД') - assert isinstance(error, DatabaseConnectionError) - assert 'подключение к БД' in str(error) - assert 'Ошибка базы данных в подключение к БД' in str(error) - assert error_msg in str(error) - - # Тест без контекста - error_no_context = DatabaseError.from_sqlalchemy(original) - assert isinstance(error_no_context, DatabaseConnectionError) - assert 'Ошибка базы данных' in str(error_no_context) - assert error_msg in str(error_no_context) - - -def test_from_sqlalchemy_timeout_error(): - """Тест from_sqlalchemy с TimeoutError""" - error_msg = "TimeoutError: Query timed out after 30s" - original = SQLTimeoutError(error_msg, None, None, None) - - # Тест с контекстом - error = DatabaseError.from_sqlalchemy(original, 'выполнение запроса') - assert isinstance(error, DatabaseTimeoutError) - assert 'выполнение запроса' in str(error) - assert 'Ошибка базы данных в выполнение запроса' in str(error) - assert error_msg in str(error) - - # Тест без контекста - error_no_context = DatabaseError.from_sqlalchemy(original) - assert isinstance(error_no_context, DatabaseTimeoutError) - assert 'Ошибка базы данных' in str(error_no_context) - assert error_msg in str(error_no_context) - - -def test_from_sqlalchemy_generic_sqlalchemy_error(): - """Тест from_sqlalchemy с общим SQLAlchemyError""" - error_msg = "(sqlalchemy.exc.SQLAlchemyError) An error occurred" - original = SQLAlchemyError(error_msg) - - # Тест с контекстом - error = DatabaseError.from_sqlalchemy(original, 'выполнении запроса') - assert isinstance(error, DatabaseQueryError) - assert 'выполнении запроса' in str(error) - assert 'Ошибка базы данных в выполнении запроса' in str(error) - assert error_msg in str(error) - - # Тест без контекста - error_no_context = DatabaseError.from_sqlalchemy(original) - assert isinstance(error_no_context, DatabaseQueryError) - assert 'Ошибка базы данных' in str(error_no_context) - assert error_msg in str(error_no_context) - - -def test_from_sqlalchemy_unknown_error(): - """Тест from_sqlalchemy с неизвестным исключением""" - error_msg = "Неожиданная ошибка при работе с БД" - original = Exception(error_msg) - - # Тест с контекстом - error = DatabaseError.from_sqlalchemy(original, 'неизвестной операции') - assert isinstance(error, DatabaseUnknownError) - assert 'неизвестной операции' in str(error) - assert 'Ошибка базы данных в неизвестной операции' in str(error) - assert error_msg in str(error) - assert error.original_exception is original - - # Тест без контекста - error_no_context = DatabaseError.from_sqlalchemy(original) - assert isinstance(error_no_context, DatabaseUnknownError) - assert 'Ошибка базы данных' in str(error_no_context) - assert error_msg in str(error_no_context) - assert error_no_context.original_exception is original - - -@patch('infrastructure.database.exceptions.logger.exception') -def test_error_logging(mock_logger): - """Тестирование логирования ошибок""" - original = ValueError('Test error') - error = DatabaseError('Test error', original) - mock_logger.assert_called_once() - - -# if __name__ == "__main__": -# pytest.main(["-v", "test_database_exceptions.py"]) diff --git a/tasks/tests/unit/test_task_repository.py b/tasks/tests/unit/test_task_repository.py index f56f4f8..081415c 100644 --- a/tasks/tests/unit/test_task_repository.py +++ b/tasks/tests/unit/test_task_repository.py @@ -1,9 +1,8 @@ import pytest from sqlalchemy import select from typing import AsyncIterator - -from infrastructure.database.models.task import Task, TaskStatus -from infrastructure.database.repositories.task import TaskRepository +from core.models.task import Task, TaskStatus +from core.repositories.task import TaskRepository from api_v1.rest.tasks.schemas import TaskCreate, TaskUpdate, TaskUpdatePartial class TestTaskRepository: diff --git a/tasks/tests/unit/test_task_validation.py b/tasks/tests/unit/test_task_validation.py new file mode 100644 index 0000000..c6fd6a5 --- /dev/null +++ b/tasks/tests/unit/test_task_validation.py @@ -0,0 +1,41 @@ +import pytest +from sqlalchemy import exc +from typing import AsyncIterator +from pydantic import ValidationError +from core.repositories.task import TaskRepository +from api_v1.rest.tasks.schemas import TaskCreate + +class TestTaskPydanticValidation: + """Тесты валидации данных задачи.""" + + @pytest.mark.asyncio + async def test_pydantic_create_failed_max_length_title_task(self, testing_db_connection: AsyncIterator): + repo = TaskRepository(testing_db_connection.session) + + # Теперь Pydantic выбросит ValidationError при создании модели + with pytest.raises(ValidationError) as exc_info: + task = TaskCreate(title='Test task' * 100) + await repo.create_task(task) + + # Проверяем, что ошибка связана с превышением максимальной длины + assert 'String should have at most 100 characters' in str(exc_info.value) + + +class TestTaskDatabaseValidation: + """Тесты валидации данных задачи.""" + + @pytest.mark.asyncio + async def test_dbapi_create_failed_max_length_title_task(self, testing_db_connection: AsyncIterator): + repo = TaskRepository(testing_db_connection.session) + + task = TaskCreate(title='Test task') + task.title = 'Test task' * 100 + # Ожидаем, что при сохранении выбросится DBAPIError + with pytest.raises(exc.DBAPIError) as exc_info: + await repo.create_task(task) + + # Проверяем, что в сообщении об ошибке есть информация о превышении длины + assert 'value too long for type character varying(100)' in str(exc_info.value) + + # Явно откатываем транзакцию после ошибки + await testing_db_connection.rollback() \ No newline at end of file diff --git a/tasks/worker.py b/tasks/worker.py index 6f70e88..903c387 100644 --- a/tasks/worker.py +++ b/tasks/worker.py @@ -1,10 +1,8 @@ import asyncio, json -from aiokafka import AIOKafkaConsumer, TopicPartition +from aiokafka import AIOKafkaConsumer, TopicPartition, ConsumerRecord from api_v1.rest.tasks.dependencies import unit_of_work from api_v1.rest.tasks.service import TaskService from api_v1.rest.tasks.schemas import TaskCreate -from datetime import datetime - from core.config import settings import logging.config @@ -14,36 +12,31 @@ logger = logging.getLogger('kafka_logger') -async def handle_message(msg, consumer): +async def handle_task_creation_message(msg: ConsumerRecord, consumer: AIOKafkaConsumer): try: data = json.loads(msg.value.decode()) except Exception as e: logger.exception('Невалидный json', exc_info=e) await consumer.commit({TopicPartition(msg.topic, msg.partition): msg.offset + 1}) - return - - if data.get('event') != 'TaskCreation': - await consumer.commit({TopicPartition(msg.topic, msg.partition): msg.offset + 1}) - return + raise try: task = TaskCreate.model_validate(data['task']) except Exception as e: logger.exception('Невалидный payload', exc_info=e) await consumer.commit({TopicPartition(msg.topic, msg.partition): msg.offset + 1}) - return + raise try: async with unit_of_work() as uow: svc = TaskService(uow) await svc.create_task(task) - # Только подтверждаем offset если все успешно + # Подтверждаем offset только если все успешно + logger.info('Сообщение успешно обработано => топик: %s, партиция: %s, offset: %s, ключ: %s, значение: %s, время: %s', msg.topic, msg.partition, msg.offset, msg.key, msg.value, msg.timestamp) await consumer.commit({TopicPartition(msg.topic, msg.partition): msg.offset + 1}) except Exception as e: logger.exception('Ошибка записи в базу данных', exc_info=e) - # Не подтверждаем offset если была ошибка обработки сообщения - # Таким образом сообщение будет повторно обработано - return + raise async def run_consumer(): consumer = AIOKafkaConsumer( @@ -56,9 +49,7 @@ async def run_consumer(): await consumer.start() try: async for msg in consumer: - logger.info('Сообщение от %s: %s...' % (datetime.fromtimestamp(msg.timestamp/1000), msg.value[:100])) - logger.info('Сообщение содержит - топик: %s, партиция: %s, offset: %s, ключ: %s, значение: %s, время: %s', msg.topic, msg.partition, msg.offset, msg.key, msg.value, msg.timestamp) - await handle_message(msg, consumer) + await handle_task_creation_message(msg, consumer) finally: await consumer.stop() From 87dfd9d4bf48a3e1dacf2bd2dc030c6cade3612d Mon Sep 17 00:00:00 2001 From: Powermacintosh Date: Sun, 21 Sep 2025 13:08:18 +0300 Subject: [PATCH 6/9] =?UTF-8?q?test:=20=D0=B4=D0=BE=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B0=20=D1=82=D0=B5=D1=81=D1=82=D0=B8=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавление нагрузочного тестирования. - Исправлена проблема тестирования kafka, за счет формирования в consumer при каждом запуске теста уникального group_id через UUID. --- .env.test | 1 - Makefile | 4 ++-- README.md | 15 ++++++++++++++- docker-compose.test.yml | 1 - gateway/locustfile.py | 40 +++++++++++++++++++++++++++++++++++++++- tasks/.env.test | 1 - tasks/tests/conftest.py | 6 ++++-- 7 files changed, 59 insertions(+), 9 deletions(-) diff --git a/.env.test b/.env.test index 82c8cd7..df5f0ab 100644 --- a/.env.test +++ b/.env.test @@ -15,7 +15,6 @@ TASKS_DB_NAME = tasks_app_test # Kafka KAFKA_BOOTSTRAP = kafka_test:9092 KAFKA_TOPIC = task_events_test -KAFKA_GROUP_ID = tasks_app_group_test KAFKA_CLIENT_ID = tasks_app_test # Loki diff --git a/Makefile b/Makefile index ba3e42d..b973829 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,6 @@ build: docker compose up --build -d test: - docker compose -f docker-compose.test.yml up --build -d --remove-orphans + docker compose -f docker-compose.test.yml up --build -d docker compose -f docker-compose.test.yml exec -it tasks_app_test bash -c "pytest -v" - docker compose -f docker-compose.test.yml down + docker compose -f docker-compose.test.yml down -v --remove-orphans diff --git a/README.md b/README.md index aeb42ec..9104193 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,8 @@ - **Grafana** - система мониторинга - **Promtail** - инструмент для сбора логов - **Kafka** - система обмена сообщениями +- **Kafka-UI** - визуальный интерфейс для работы с Kafka +- **Locust** - инструмент для нагрузочного тестирования ## 🚀 Запуск проекта @@ -67,15 +69,26 @@ make test MODE = DEVELOPMENT ``` -## 📊 Логирование +## 📊 Логирование в Grafana Логи приложения отправляются в Loki и доступны через Grafana. **Grafana**: `http://localhost:3010` +`Логин` - admin +`Пароль` - admin (при первом входе) + ### Подключение Loki к Grafana **Loki-connection-url**: `http://loki:3100` +## 🎯 Подключение к Kafka-UI + +**Kafka-UI-connection-url**: `http://localhost:8080` + +## 🧪 Запуск нагрузочного тестирования Locust + +**Locust-connection-url**: `http://localhost:8089` + ## 📄 Лицензия Этот проект распространяется под лицензией MIT. diff --git a/docker-compose.test.yml b/docker-compose.test.yml index 8333f6b..0492399 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -30,7 +30,6 @@ services: environment: SERVICE_NAME: tasks_app_test KAFKA_BOOTSTRAP: kafka_test:9092 - KAFKA_GROUP_ID: tasks_app_group_test entrypoint: ["sh", "-c"] command: - | diff --git a/gateway/locustfile.py b/gateway/locustfile.py index 61a6172..ba3016a 100644 --- a/gateway/locustfile.py +++ b/gateway/locustfile.py @@ -4,9 +4,47 @@ class UserBehavior(FastHttpUser): wait_time = between(1, 2) - @task + @task(1) def create_task_event(self): self.client.post('/api/v1/task/create_event', json={ 'title': 'Create Task', 'description': None, }) + + @task(2) + def create_task(self): + self.client.post('/api/v1/task/create', json={ + 'title': 'Create Task', + 'description': None, + }) + + @task(3) + def get_tasks_list(self): + self.client.get('/api/v1/tasks/') + +# class CreateTaskOnlyUser(FastHttpUser): +# wait_time = between(1, 2) + +# @task +# def create_task(self): +# self.client.post('/api/v1/task/create', json={ +# 'title': 'Create Task', +# 'description': None, +# }) + +# class ReadOnlyUser(FastHttpUser): +# wait_time = between(1, 2) + +# @task +# def get_tasks(self): +# self.client.get('/api/v1/tasks/') + +# class CreateTaskEventUser(FastHttpUser): +# wait_time = between(1, 2) + +# @task +# def create_task_event(self): +# self.client.post('/api/v1/task/create_event', json={ +# 'title': 'Create Task', +# 'description': None, +# }) \ No newline at end of file diff --git a/tasks/.env.test b/tasks/.env.test index 42e9de2..35ca79e 100644 --- a/tasks/.env.test +++ b/tasks/.env.test @@ -13,5 +13,4 @@ TASKS_APP_PORT = 5001 # Kafka KAFKA_BOOTSTRAP = kafka_test:9092 KAFKA_TOPIC = task_events_test -KAFKA_GROUP_ID = tasks_app_group_test KAFKA_CLIENT_ID = tasks_app_test diff --git a/tasks/tests/conftest.py b/tasks/tests/conftest.py index 317d02b..1dc2b99 100644 --- a/tasks/tests/conftest.py +++ b/tasks/tests/conftest.py @@ -1,4 +1,4 @@ -import pytest +import pytest, asyncio, uuid from typing import AsyncIterator from aiokafka import AIOKafkaConsumer from httpx import AsyncClient @@ -62,12 +62,14 @@ async def kafka_consumer() -> AIOKafkaConsumer: consumer = AIOKafkaConsumer( settings.kafka.TOPIC, bootstrap_servers=settings.kafka.BOOTSTRAP, - group_id=settings.kafka.GROUP_ID, + group_id=f'test-group-{uuid.uuid4()}', enable_auto_commit=False, auto_offset_reset='earliest', ) await consumer.start() try: + await asyncio.sleep(1) + await consumer.seek_to_beginning() yield consumer finally: await consumer.stop() From f36ddb48785fa45748816e7bf2a8e9f96582cc74 Mon Sep 17 00:00:00 2001 From: Powermacintosh Date: Mon, 22 Sep 2025 12:54:59 +0300 Subject: [PATCH 7/9] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=D0=B6=D0=BA=D0=B8=20GraphQL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Реорганизация структуры сервиса задач. - Добавлена поддержка GraphQL в сервис Task. - Добавлена поддержка GraphQL в API Gateway, через проксирование запросов в сервис Task. - В сервисы добавлены новые файлы виртуального окружения, для быстрого запуска через docker-compose. - Модифицирован файл docker-compose.yml для поддержки виртуального окружения из .env.docker. --- README.md | 30 +- docker-compose.yml | 10 +- gateway/.env.docker | 7 + gateway/.env.test | 5 +- gateway/api_v1/graphql/query_loader.py | 42 +++ .../tasks/mutations/create_task.graphql | 8 + .../tasks/mutations/delete_task.graphql | 3 + .../tasks/mutations/update_task.graphql | 8 + .../graphql/tasks/queries/get_task.graphql | 8 + .../graphql/tasks/queries/get_tasks.graphql | 12 + gateway/api_v1/graphql/tasks/resolvers.py | 147 +++++++++ gateway/api_v1/graphql/tasks/schemas.py | 56 ++++ gateway/api_v1/rest/__init__.py | 6 +- gateway/api_v1/rest/tasks/views.py | 4 +- gateway/core/config.py | 7 +- gateway/main.py | 19 +- gateway/poetry.lock | 307 +++++++++++++++++- gateway/pyproject.toml | 3 +- gateway/static/graphql-interface.png | Bin 0 -> 307114 bytes tasks/.env.docker | 11 + tasks/api_v1/graphql/context.py | 34 ++ tasks/api_v1/graphql/tasks/resolvers.py | 118 +++++++ tasks/api_v1/graphql/tasks/schemas.py | 58 ++++ tasks/api_v1/rest/tasks/dependencies.py | 2 +- tasks/api_v1/rest/tasks/views.py | 5 +- .../tasks/service.py => service/task.py} | 2 +- tasks/core/config.py | 4 +- tasks/core/repositories/task.py | 12 +- .../schemas.py => core/schemas/tasks.py} | 0 tasks/main.py | 29 +- tasks/poetry.lock | 307 +++++++++++++++++- tasks/pyproject.toml | 3 +- tasks/tests/unit/test_task_repository.py | 2 +- tasks/tests/unit/test_task_validation.py | 2 +- tasks/worker.py | 4 +- 35 files changed, 1222 insertions(+), 53 deletions(-) create mode 100644 gateway/.env.docker create mode 100644 gateway/api_v1/graphql/query_loader.py create mode 100644 gateway/api_v1/graphql/tasks/mutations/create_task.graphql create mode 100644 gateway/api_v1/graphql/tasks/mutations/delete_task.graphql create mode 100644 gateway/api_v1/graphql/tasks/mutations/update_task.graphql create mode 100644 gateway/api_v1/graphql/tasks/queries/get_task.graphql create mode 100644 gateway/api_v1/graphql/tasks/queries/get_tasks.graphql create mode 100644 gateway/api_v1/graphql/tasks/resolvers.py create mode 100644 gateway/api_v1/graphql/tasks/schemas.py create mode 100644 gateway/static/graphql-interface.png create mode 100644 tasks/.env.docker create mode 100644 tasks/api_v1/graphql/context.py create mode 100644 tasks/api_v1/graphql/tasks/resolvers.py create mode 100644 tasks/api_v1/graphql/tasks/schemas.py rename tasks/api_v1/{rest/tasks/service.py => service/task.py} (97%) rename tasks/{api_v1/rest/tasks/schemas.py => core/schemas/tasks.py} (100%) diff --git a/README.md b/README.md index 9104193..ff8bbd4 100644 --- a/README.md +++ b/README.md @@ -38,9 +38,7 @@ cd microservices-example ``` -2. Создайте файл `.env` на основе `.env.test`: - -3. Запустите приложение с помощью Makefile: +2. Запустите приложение с помощью Makefile: ```bash make build @@ -54,14 +52,19 @@ make test ## 📚 Документация API -После запуска документация API будет доступна по адресу: +После запуска документация API Gateway будет доступна по адресу: - Swagger UI: http://localhost:5000/docs/ ![gateway/static/swagger-custom.png](gateway/static/swagger-custom.png) -## 🔧 Настройка окружения +Также API Gateway предоставляет возможность работы с API через GraphQL. + +- GraphQL UI: http://localhost:5000/api/v1/graphql + ![gateway/static/graphql-interface.png](gateway/static/graphql-interface.png) -Создайте файл `.env` в корне проекта и в каждом сервисе +## 🔧 Настройка окружения для разработки + +Создайте файл `.env` в корне сервиса `gateway/`, `tasks/`. Аналогично файлу `.env.test`. @@ -79,15 +82,24 @@ MODE = DEVELOPMENT ### Подключение Loki к Grafana -**Loki-connection-url**: `http://loki:3100` +#### Путь для подключения Loki к Grafana + +`Connections` => `Loki` => `Add new data source` + +- **Connection-url**: `http://loki:3100` +- ⚙️ **Save & Test** + +#### Путь для просмотра логов в Grafana + +`Drilldown` => `Logs` ## 🎯 Подключение к Kafka-UI -**Kafka-UI-connection-url**: `http://localhost:8080` +**Kafka-UI**: `http://localhost:8080` ## 🧪 Запуск нагрузочного тестирования Locust -**Locust-connection-url**: `http://localhost:8089` +**Locust**: `http://localhost:8089` ## 📄 Лицензия diff --git a/docker-compose.yml b/docker-compose.yml index ee90cab..bcc8aeb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: context: gateway/ container_name: gateway_app env_file: - - ./gateway/.env + - ./gateway/.env.docker ports: - "${GATEWAY_PORT}:${GATEWAY_PORT}" networks: @@ -26,7 +26,7 @@ services: context: gateway/ container_name: locust_gateway env_file: - - ./gateway/.env + - ./gateway/.env.docker ports: - "8089:8089" networks: @@ -45,7 +45,7 @@ services: context: tasks/ container_name: tasks_app env_file: - - ./tasks/.env + - ./tasks/.env.docker ports: - "${TASKS_APP_PORT}" entrypoint: ["sh", "-c"] @@ -71,7 +71,7 @@ services: context: tasks/ container_name: tasks_app_worker env_file: - - ./tasks/.env + - ./tasks/.env.docker environment: SERVICE_NAME: tasks_app KAFKA_BOOTSTRAP: kafka:9092 @@ -95,7 +95,7 @@ services: image: postgres:17 container_name: db_tasks_app env_file: - - ./tasks/.env + - ./tasks/.env.docker environment: POSTGRES_USER: ${TASKS_DB_USER} POSTGRES_PASSWORD: ${TASKS_DB_PASS} diff --git a/gateway/.env.docker b/gateway/.env.docker new file mode 100644 index 0000000..784ef21 --- /dev/null +++ b/gateway/.env.docker @@ -0,0 +1,7 @@ +MODE = PRODUCTION + +# FastAPI +GATEWAY_PORT = 5000 + +# Services +TASKS_MICROSERVICE_URL = http://tasks_app:5001 \ No newline at end of file diff --git a/gateway/.env.test b/gateway/.env.test index b436699..acd33b1 100644 --- a/gateway/.env.test +++ b/gateway/.env.test @@ -1,4 +1,7 @@ MODE = TEST # FastAPI -GATEWAY_PORT = 5000 \ No newline at end of file +GATEWAY_PORT = 5000 + +# Services +TASKS_MICROSERVICE_URL = http://tasks_app_test:5001 \ No newline at end of file diff --git a/gateway/api_v1/graphql/query_loader.py b/gateway/api_v1/graphql/query_loader.py new file mode 100644 index 0000000..b719e69 --- /dev/null +++ b/gateway/api_v1/graphql/query_loader.py @@ -0,0 +1,42 @@ +from pathlib import Path + + +def load_query(query_name: str, section: str) -> str: + """ + Загрузка GraphQL-запроса из файла + + Args: + query_name: Название файла запроса без расширения + section: Тип запроса ('tasks' или 'users') + + Returns: + str: Запрос как строка + """ + base_dir = Path(__file__).parent.parent + query_path = base_dir / 'graphql' / section / 'queries' / f'{query_name}.graphql' + + try: + with open(query_path, 'r') as f: + return f.read().strip() + except FileNotFoundError: + raise FileNotFoundError(f'Запрос не найден: {query_path}') + +def load_mutation(mutation_name: str, section: str) -> str: + """ + Загрузка GraphQL-мутации из файла + + Args: + mutation_name: Название файла мутации без расширения + section: Тип мутации ('tasks' или 'users') + + Returns: + str: Мутация как строка + """ + base_dir = Path(__file__).parent.parent + mutation_path = base_dir / 'graphql' / section / 'mutations' / f'{mutation_name}.graphql' + + try: + with open(mutation_path, 'r') as f: + return f.read().strip() + except FileNotFoundError: + raise FileNotFoundError(f'Мутация не найдена: {mutation_path}') \ No newline at end of file diff --git a/gateway/api_v1/graphql/tasks/mutations/create_task.graphql b/gateway/api_v1/graphql/tasks/mutations/create_task.graphql new file mode 100644 index 0000000..ccfe6ff --- /dev/null +++ b/gateway/api_v1/graphql/tasks/mutations/create_task.graphql @@ -0,0 +1,8 @@ +mutation CreateTask($title: String!, $description: String) { + createTask(input: { title: $title, description: $description }) { + id + title + description + status + } +} diff --git a/gateway/api_v1/graphql/tasks/mutations/delete_task.graphql b/gateway/api_v1/graphql/tasks/mutations/delete_task.graphql new file mode 100644 index 0000000..242f2cc --- /dev/null +++ b/gateway/api_v1/graphql/tasks/mutations/delete_task.graphql @@ -0,0 +1,3 @@ +mutation DeleteTask($id: ID!) { + deleteTask(id: $id) +} diff --git a/gateway/api_v1/graphql/tasks/mutations/update_task.graphql b/gateway/api_v1/graphql/tasks/mutations/update_task.graphql new file mode 100644 index 0000000..450284f --- /dev/null +++ b/gateway/api_v1/graphql/tasks/mutations/update_task.graphql @@ -0,0 +1,8 @@ +mutation UpdateTask($id: ID!, $input: TaskUpdateInputGQL!) { + updateTask(id: $id, input: $input) { + id + title + description + status + } +} diff --git a/gateway/api_v1/graphql/tasks/queries/get_task.graphql b/gateway/api_v1/graphql/tasks/queries/get_task.graphql new file mode 100644 index 0000000..47b4dfb --- /dev/null +++ b/gateway/api_v1/graphql/tasks/queries/get_task.graphql @@ -0,0 +1,8 @@ +query GetTask($id: ID!) { + task(id: $id) { + id + title + description + status + } +} diff --git a/gateway/api_v1/graphql/tasks/queries/get_tasks.graphql b/gateway/api_v1/graphql/tasks/queries/get_tasks.graphql new file mode 100644 index 0000000..4f6371d --- /dev/null +++ b/gateway/api_v1/graphql/tasks/queries/get_tasks.graphql @@ -0,0 +1,12 @@ +query GetTasks($status: TaskStatusGQL, $offset: Int!, $limit: Int!) { + tasks(status: $status, offset: $offset, limit: $limit) { + tasks { + id + title + description + status + } + total + pagesCount + } +} diff --git a/gateway/api_v1/graphql/tasks/resolvers.py b/gateway/api_v1/graphql/tasks/resolvers.py new file mode 100644 index 0000000..2c3ec34 --- /dev/null +++ b/gateway/api_v1/graphql/tasks/resolvers.py @@ -0,0 +1,147 @@ +import strawberry, httpx +from .schemas import ( + TaskGQL, + TaskPageGQL, + TaskCreateInputGQL, + TaskUpdateInputGQL, + TaskStatusGQL, + map_json_to_task_gql +) +from ..query_loader import load_query, load_mutation +from typing import Optional +from core.config import settings + +TASKS_URL = settings.tasks_microservice_url + '/api/v1/graphql' + +@strawberry.type +class Query: + @strawberry.field + async def task( + self, + id: strawberry.ID, + ) -> Optional[TaskGQL]: + query = load_query('get_task', 'tasks') + async with httpx.AsyncClient() as client: + resp = await client.post(TASKS_URL, json={'query': query, 'variables': {'id': id}}) + data = resp.json()['data']['task'] + if data is None: + return None + return map_json_to_task_gql(data) + + @strawberry.field + async def tasks( + self, + status: Optional[TaskStatusGQL] = None, + offset: int = 0, + limit: int = 10, + ) -> TaskPageGQL: + """ + Получение списка задач с поддержкой: + - Фильтрации по статусу + - Пагинации (offset/limit) + """ + query = load_query('get_tasks', 'tasks') + async with httpx.AsyncClient() as client: + variables = { + 'offset': offset, + 'limit': limit + } + if status: + variables['status'] = status.value.upper() + response = await client.post( + TASKS_URL, + json={ + 'query': query, + 'variables': variables + } + ) + data = response.json() + if 'errors' in data: + error_msg = data['errors'][0]['message'] + raise Exception(f'Ошибка получения задач: {error_msg}') + tasks_data = data['data']['tasks'] + return TaskPageGQL( + tasks=[ + map_json_to_task_gql(task) + for task in tasks_data['tasks'] + ], + total=tasks_data['total'], + pages_count=tasks_data['pagesCount'] + ) + +@strawberry.type +class Mutation: + @strawberry.mutation + async def create_task( + self, + input: TaskCreateInputGQL, + ) -> TaskGQL: + """Создание новой задачи""" + query = load_mutation('create_task', 'tasks') + async with httpx.AsyncClient() as client: + response = await client.post( + TASKS_URL, + json={ + 'query': query, + 'variables': { + 'title': input.title, + 'description': input.description + } + } + ) + data = response.json() + if 'errors' in data: + error_msg = data['errors'][0]['message'] + raise Exception(f'Ошибка создания задачи: {error_msg}') + task_data = data['data']['createTask'] + return map_json_to_task_gql(task_data) + + @strawberry.mutation + async def update_task( + self, + id: strawberry.ID, + input: TaskUpdateInputGQL, + ) -> Optional[TaskGQL]: + """Обновление задачи""" + query = load_mutation('update_task', 'tasks') + update_data = input.to_dict() + async with httpx.AsyncClient() as client: + response = await client.post( + TASKS_URL, + json={ + 'query': query, + 'variables': { + 'id': id, + 'input': update_data + } + } + ) + data = response.json() + if 'errors' in data: + error_msg = data['errors'][0]['message'] + raise Exception(f'Ошибка обновления задачи: {error_msg}') + task_data = data['data']['updateTask'] + return map_json_to_task_gql(task_data) if task_data else None + + @strawberry.mutation + async def delete_task( + self, + id: strawberry.ID, + ) -> bool: + """Удаление задачи""" + query = load_mutation('delete_task', 'tasks') + async with httpx.AsyncClient() as client: + response = await client.post( + TASKS_URL, + json={ + 'query': query, + 'variables': { + 'id': id + } + } + ) + data = response.json() + if 'errors' in data: + error_msg = data['errors'][0]['message'] + raise Exception(f'Ошибка удаления задачи: {error_msg}') + return bool(data['data']['deleteTask']) diff --git a/gateway/api_v1/graphql/tasks/schemas.py b/gateway/api_v1/graphql/tasks/schemas.py new file mode 100644 index 0000000..c4489d6 --- /dev/null +++ b/gateway/api_v1/graphql/tasks/schemas.py @@ -0,0 +1,56 @@ +import strawberry +from enum import Enum +from typing import Optional, List + + +@strawberry.enum +class TaskStatusGQL(str, Enum): + CREATED = 'created' + IN_PROGRESS = 'in_progress' + COMPLETED = 'completed' + +@strawberry.type +class TaskGQL: + id: strawberry.ID + title: str + description: Optional[str] = None + status: TaskStatusGQL + +def map_json_to_task_gql(data: dict) -> TaskGQL: + """Карта базы данных на GraphQL""" + return TaskGQL( + id=data['id'], + title=data['title'], + description=data.get('description'), + status=TaskStatusGQL(data['status'].lower()), + ) + +@strawberry.type +class TaskPageGQL: + tasks: List[TaskGQL] + total: int + pages_count: int + +@strawberry.input +class TaskCreateInputGQL: + title: str + description: Optional[str] = None + +@strawberry.input +class TaskUpdateInputGQL: + title: Optional[str] = None + description: Optional[str] = None + status: Optional[TaskStatusGQL] = None + + def to_dict(self) -> dict: + """ + Сериализация в словарь, убирая поля со значениями None. + Значения enum приводятся к верхнему регистру для GraphQL. + """ + fields = { + 'title': self.title, + 'description': self.description, + 'status': self.status.value.upper() if self.status is not None else None, + } + return {k: v for k, v in fields.items() if v is not None} + diff --git a/gateway/api_v1/rest/__init__.py b/gateway/api_v1/rest/__init__.py index 14ed4a1..38871f7 100644 --- a/gateway/api_v1/rest/__init__.py +++ b/gateway/api_v1/rest/__init__.py @@ -9,8 +9,4 @@ router.include_router(router=tasks_router, prefix='/task') router.include_router(router=tasks_list_router, prefix='/tasks') -router.include_router(router=tasks_worker_router, prefix='/task') - - - - +router.include_router(router=tasks_worker_router, prefix='/task') \ No newline at end of file diff --git a/gateway/api_v1/rest/tasks/views.py b/gateway/api_v1/rest/tasks/views.py index c04cae6..8e91f8d 100644 --- a/gateway/api_v1/rest/tasks/views.py +++ b/gateway/api_v1/rest/tasks/views.py @@ -18,7 +18,7 @@ logging.config.dictConfig(logger_config) kafka_logger = logging.getLogger('kafka_logger') -router, router_list, router_worker = APIRouter(tags=['Tasks']), APIRouter(tags=['Tasks']), APIRouter(tags=['Task Worker Events']) +router, router_list, router_worker = APIRouter(tags=['Task']), APIRouter(tags=['Tasks']), APIRouter(tags=['Task Worker Events']) @router.get('/{task_id}/', response_model=SchemaTask, status_code=status.HTTP_200_OK) @@ -198,4 +198,4 @@ async def send_task_creation_event( except Exception as e: kafka_logger.exception('Ошибка отправки сообщения в topic task_events', exc_info=e) raise HTTPException(status_code=503, detail=f'Ошибка отправки сообщения в topic task_events: {e}') - return {'status': 'published'} + return {'status': 'published'} \ No newline at end of file diff --git a/gateway/core/config.py b/gateway/core/config.py index f888324..439f72e 100644 --- a/gateway/core/config.py +++ b/gateway/core/config.py @@ -1,9 +1,10 @@ # -*- encoding: utf-8 -*- import os +from dotenv import load_dotenv from pydantic import BaseModel from pydantic_settings import BaseSettings - +load_dotenv() class ConfigurationCORS(BaseModel): ######################### # CORS # @@ -39,14 +40,14 @@ class ConfigurationKafka(BaseModel): class Setting(BaseSettings): # ENV - MODE: str = os.getenv('MODE', 'development') + MODE: str = os.getenv('MODE', 'DEVELOPMENT') # FASTAPI api_v1_prefix: str = '/api/v1' api_v1_port: int = os.getenv('GATEWAY_PORT', 5000) # MICROSERVICES - tasks_microservice_url: str = os.getenv('TASKS_MICROSERVICE_URL', 'http://tasks_app:5001') + tasks_microservice_url: str = os.getenv('TASKS_MICROSERVICE_URL', 'http://localhost:5001') # CORS cors: ConfigurationCORS = ConfigurationCORS() diff --git a/gateway/main.py b/gateway/main.py index 467df74..0a1b22e 100644 --- a/gateway/main.py +++ b/gateway/main.py @@ -1,5 +1,5 @@ -import uvicorn - +import uvicorn, strawberry +from strawberry.fastapi import GraphQLRouter from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles @@ -7,6 +7,8 @@ from core.config import settings from api_v1.rest import router as router_v1 from infrastructure.kafka.producer import lifespan +from api_v1.graphql.tasks.resolvers import Query, Mutation + import logging.config from core.logger import logger_config @@ -17,9 +19,10 @@ title='API Gateway', description='API Gateway for microservices', version='1.0.0', + lifespan=lifespan, # docs_url=None, # redoc_url=None, - lifespan=lifespan, + # openapi_url=None, ) app.mount('/static', StaticFiles(directory='static'), name='static') @@ -42,6 +45,16 @@ async def custom_swagger_ui_html(): app.include_router(router=router_v1, prefix=settings.api_v1_prefix) +schema = strawberry.Schema( + query=Query, + mutation=Mutation +) +graphql_app = GraphQLRouter(schema) +app.include_router( + router=graphql_app, + prefix=settings.api_v1_prefix + '/graphql', + include_in_schema=False +) if __name__ == '__main__': uvicorn.run('main:app', host='0.0.0.0', port=settings.api_v1_port, reload=True) \ No newline at end of file diff --git a/gateway/poetry.lock b/gateway/poetry.lock index ff98475..bbf0044 100644 --- a/gateway/poetry.lock +++ b/gateway/poetry.lock @@ -775,6 +775,18 @@ benchmarks = ["httplib2", "httpx", "requests", "urllib3"] dev = ["dpkt", "pytest", "requests"] examples = ["oauth2"] +[[package]] +name = "graphql-core" +version = "3.2.6" +description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL." +optional = false +python-versions = "<4,>=3.6" +groups = ["main"] +files = [ + {file = "graphql_core-3.2.6-py3-none-any.whl", hash = "sha256:78b016718c161a6fb20a7d97bbf107f331cd1afe53e45566c59f776ed7f0b45f"}, + {file = "graphql_core-3.2.6.tar.gz", hash = "sha256:c08eec22f9e40f0bd61d805907e3b3b1b9a320bc606e23dc145eebca07c8fbab"}, +] + [[package]] name = "greenlet" version = "3.2.4" @@ -969,6 +981,99 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "lia-web" +version = "0.2.3" +description = "A library for working with web frameworks" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "lia_web-0.2.3-py3-none-any.whl", hash = "sha256:237c779c943cd4341527fc0adfcc3d8068f992ee051f4ef059b8474ee087f641"}, + {file = "lia_web-0.2.3.tar.gz", hash = "sha256:ccc9d24cdc200806ea96a20b22fb68f4759e6becdb901bd36024df7921e848d7"}, +] + +[package.dependencies] +typing-extensions = ">=4.14.0" + +[[package]] +name = "libcst" +version = "1.8.4" +description = "A concrete syntax tree with AST-like properties for Python 3.0 through 3.13 programs." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "libcst-1.8.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:114343271f70a79e6d08bc395f5dfa150227341fab646cc0a58e80550e7659b7"}, + {file = "libcst-1.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b376ef7fa30bef611d4fb32af1da0e767b801b00322028a874ab3a441686b6a9"}, + {file = "libcst-1.8.4-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:9be5b1b7d416900ff9bcdb4945692e6252fdcbd95514e98439f81568568c9e02"}, + {file = "libcst-1.8.4-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e4c5055e255d12745c7cc60fb5fb31c0f82855864c15dc9ad33a44f829b92600"}, + {file = "libcst-1.8.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2b1e570ba816da408b5ee40ac479b34e56d995bf32dcca6f0ddb3d69b08e77de"}, + {file = "libcst-1.8.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65364c214251ed5720f3f6d0c4ef1338aac91ad4bbc5d30253eac21832b0943a"}, + {file = "libcst-1.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:a90c80e4d89222e11c7a734bc1b7f930bc2aba7750ad149bde1b136f839ea788"}, + {file = "libcst-1.8.4-cp310-cp310-win_arm64.whl", hash = "sha256:2d71e7e5982776f78cca9102286bb0895ef6f7083f76c0c9bc5ba4e9e40aee38"}, + {file = "libcst-1.8.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e7baaa6f01b6b6ea4b28d60204fddc679a3cd56d312beee200bd5f8f9711f0b"}, + {file = "libcst-1.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:259737faf90552a0589d95393dcaa3d3028be03ab3ea87478d46a1a4f922dd91"}, + {file = "libcst-1.8.4-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a65e3c409ef16ae369600d085d23a3897d4fccf4fdcc09294a402c513ac35906"}, + {file = "libcst-1.8.4-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:fa870f34018c7241ee9227723cac0787599a2a8a2bfd53eacfbbe1ea1a272ae6"}, + {file = "libcst-1.8.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3eeba4edb40b2291c2460fe8d7e43f47e5fcc33f186675db5d364395adca3401"}, + {file = "libcst-1.8.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a5cd7beef667e5de3c5fb0ec387dc19aeda5cd4606ff541d0e8613bb3ef3b23"}, + {file = "libcst-1.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:3de575f0b5b466f2e9656b963f5848103cc518c6f3581902c6f430b07864584f"}, + {file = "libcst-1.8.4-cp311-cp311-win_arm64.whl", hash = "sha256:2fcff2130824f2cb5f4fd9c4c74fb639c5f02bc4228654461f6dc6b1006f20c0"}, + {file = "libcst-1.8.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1d468514a21cf3444dc3f3a4b1effc6c05255c98cc79e02af394652d260139f0"}, + {file = "libcst-1.8.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:870a49df8575c11ea4f5319d54750f95d2d06370a263bd42d924a9cf23cf0cbe"}, + {file = "libcst-1.8.4-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c9c775bc473225a0ad8422150fd9cf18ed2eebd7040996772937ac558f294d6c"}, + {file = "libcst-1.8.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:27eeb16edb7dc0711d67e28bb8c0288e4147210aeb2434f08c16ac5db6b559e5"}, + {file = "libcst-1.8.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:71e12101ef2a6e05b7610badb2bfa597379289f1408e305a8d19faacdb872f47"}, + {file = "libcst-1.8.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:69b672c1afac5fe00d689f585ba57ac5facc4632f39b977d4b3e4711571c76e2"}, + {file = "libcst-1.8.4-cp312-cp312-win_amd64.whl", hash = "sha256:7832ee448fbdf18884a1f9af5fba1be6d5e98deb560514d92339fd6318aef651"}, + {file = "libcst-1.8.4-cp312-cp312-win_arm64.whl", hash = "sha256:6840e4011b583e9b7a71c00e7ab4281aea7456877b3ea6ecedb68a39a000bc64"}, + {file = "libcst-1.8.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8e8d5158f976a5ee140ad0d3391e1a1b84b2ce5da62f16e48feab4bc21b91967"}, + {file = "libcst-1.8.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a179c712f38acb85e81d8949e80e05a422c92dcf5a00d8f4976f7e547a9f0916"}, + {file = "libcst-1.8.4-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:d130f3e2d40c5f48cbbc804710ddf5b4db9dd7c0118f3b35f109164a555860d2"}, + {file = "libcst-1.8.4-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:a4270123c988e130cec94bfe1b54d34784a40b34b2d5ac0507720c1272bd3209"}, + {file = "libcst-1.8.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ea74c56cb11a1fdca9f8ab258965adce23e049ef525fdcc5c254a093e3de25cb"}, + {file = "libcst-1.8.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7fe97d432d95b6bcb1694a6d0fa7e07dde8fa687a637958126410ee2ced94b81"}, + {file = "libcst-1.8.4-cp313-cp313-win_amd64.whl", hash = "sha256:2c6d8f7087e9eaf005efde573f3f36d1d40366160155c195a6c4230d4c8a5839"}, + {file = "libcst-1.8.4-cp313-cp313-win_arm64.whl", hash = "sha256:062e424042c36a102abd11d8e9e27ac6be68e1a934b0ecfc9fb8fea017240d2f"}, + {file = "libcst-1.8.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:873dd4e8b896f7cb0e78118badda55ec1f42e9301a4a948cc438955ff3ae2257"}, + {file = "libcst-1.8.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:52c9376ba11ede5430e40aa205101dfc41202465103c6540f24591f898afb3d6"}, + {file = "libcst-1.8.4-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:074a3b17e270237fb36d3b94d7492fb137cb74217674484ba25e015e8d3d8bdc"}, + {file = "libcst-1.8.4-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:846aad04bac624a42d182add526d019e417e6a2b8a4c0bf690d32f9e1f3075ff"}, + {file = "libcst-1.8.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:93c76ab41d736b66d6fb3df32cd33184eed17666d7dc3ce047cf7ccdfe80b5b1"}, + {file = "libcst-1.8.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f167bf83dce662c9b499f1ea078ec2f2fee138e80f7d7dbd59c89ed28dc935f"}, + {file = "libcst-1.8.4-cp313-cp313t-win_amd64.whl", hash = "sha256:43cbb6b41bc2c4785136f59a66692287d527aeb022789c4af44ad6e85b7b2baa"}, + {file = "libcst-1.8.4-cp313-cp313t-win_arm64.whl", hash = "sha256:6cc8b7e33f6c4677e220dd7025e1e980da4d3f497b9b8ee0320e36dd54597f68"}, + {file = "libcst-1.8.4-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d011d731c2e673fbd9c84794418230a913ae3c98fc86f27814612b6b6d53d26b"}, + {file = "libcst-1.8.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a334dd11cdea34275df91c2ae9cc5933ec7e0ad5698264966708d637d110b627"}, + {file = "libcst-1.8.4-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:783f52b7c8d82046f0d93812f62a25eb82c3834f198e6cbfd5bb03ca68b593c8"}, + {file = "libcst-1.8.4-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:0352c7d662c89243e730a28edf41577f87e28649c18ee365dd373c5fbdab2434"}, + {file = "libcst-1.8.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cb188ebd4114144e14f6beb5499e43bebd0ca3ce7f2beb20921d49138c67b814"}, + {file = "libcst-1.8.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a718e5f6b398a07ca5d533e6593c1590d69fe65c539323281959733d6d541dd"}, + {file = "libcst-1.8.4-cp314-cp314-win_amd64.whl", hash = "sha256:fedfd33e5dda2200d582554e6476626d4706aa1fa2794bfb271879f8edff89b9"}, + {file = "libcst-1.8.4-cp314-cp314-win_arm64.whl", hash = "sha256:eff724c17df10e059915000eaf59f4e79998b66a7d35681e934a9a48667df931"}, + {file = "libcst-1.8.4-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:64cc34d74c9543b30ec3d7481dd644cb1bb3888076b486592d7fa0f22632f1c6"}, + {file = "libcst-1.8.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3ad7f0a32ddcdff00a3eddfd35cfd8485d9f357a32e4c67558476570199f808f"}, + {file = "libcst-1.8.4-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:2e156760fc741bbf2fa68f4e3b15f019e924ea852f02276d0a53b7375cf70445"}, + {file = "libcst-1.8.4-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:fceb17616f1afe528c88243e3e7f78f84f0cc287463f04f3c1243e20a469e869"}, + {file = "libcst-1.8.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5db0b484670aac7ea442213afaa9addb1de0d9540a34ad44d376bec12242bc3a"}, + {file = "libcst-1.8.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:929798ca38ea76a5056f725221d66c6923e749caa9fa7f4cc86e914a3698493d"}, + {file = "libcst-1.8.4-cp314-cp314t-win_amd64.whl", hash = "sha256:e6f309c0f42e323c527d8c9007f583fd1668e45884208184a70644d916f27829"}, + {file = "libcst-1.8.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4b1cbadd988fee59b25ea154708cfed99cfaf45f9685707be422ad736371a9fe"}, + {file = "libcst-1.8.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:fbadca1bc31f696875c955080c407a40b2d1aa7f79ca174a65dcb0542a57db6c"}, + {file = "libcst-1.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d4111f971632e9ddf8191aeef4576595e18ef3fa7b3016bfe15a08fa8554df"}, + {file = "libcst-1.8.4-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:f5bd0bcdd2a8da9dad47d36d71757d8ba87baf887ae6982e2cb8621846610c49"}, + {file = "libcst-1.8.4-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:2e24d11a1be0b1791f7bace9d406f5a70b8691ef77be377b606950803de4657d"}, + {file = "libcst-1.8.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:14bda1e4ea0b04d3926d41f6dafbfd311a951b75a60fe0d79bb5a8249c1cef5b"}, + {file = "libcst-1.8.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:056733760ba5ac1fd4cd518cddd5a43b3adbe2e0f6c7ce02532a114f7cd5d85b"}, + {file = "libcst-1.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:33664117fcb2913fdbd7de07a009193b660a16e7af18f7c1b4449e428f3b0f95"}, + {file = "libcst-1.8.4-cp39-cp39-win_arm64.whl", hash = "sha256:b69e94625702825309fd9e50760e77a5a60bd1e7a8e039862c8dd3011a6e1530"}, + {file = "libcst-1.8.4.tar.gz", hash = "sha256:f0f105d32c49baf712df2be360d496de67a2375bcf4e9707e643b7efc2f9a55a"}, +] + +[package.dependencies] +pyyaml-ft = {version = ">=8.0.0", markers = "python_version >= \"3.13\""} + [[package]] name = "locust" version = "2.40.5" @@ -1022,6 +1127,30 @@ platformdirs = ">=4.3.6,<5.0.0" python-engineio = ">=4.12.2" python-socketio = {version = "5.13.0", extras = ["client"]} +[[package]] +name = "markdown-it-py" +version = "4.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147"}, + {file = "markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "markdown-it-pyrs", "mistletoe (>=1.0,<2.0)", "mistune (>=3.0,<4.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins (>=0.5.0)"] +profiling = ["gprof2dot"] +rtd = ["ipykernel", "jupyter_sphinx", "mdit-py-plugins (>=0.5.0)", "myst-parser", "pyyaml", "sphinx", "sphinx-book-theme (>=1.0,<2.0)", "sphinx-copybutton", "sphinx-design"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions", "requests"] + [[package]] name = "markupsafe" version = "3.0.2" @@ -1093,6 +1222,18 @@ files = [ {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + [[package]] name = "msgpack" version = "1.1.1" @@ -1407,7 +1548,7 @@ version = "2.19.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["main", "dev"] files = [ {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, @@ -1438,6 +1579,21 @@ pygments = ">=2.7.2" [package.extras] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + [[package]] name = "python-dotenv" version = "1.1.1" @@ -1473,6 +1629,18 @@ asyncio-client = ["aiohttp (>=3.4)"] client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"] docs = ["sphinx"] +[[package]] +name = "python-multipart" +version = "0.0.20" +description = "A streaming multipart parser for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104"}, + {file = "python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13"}, +] + [[package]] name = "python-socketio" version = "5.13.0" @@ -1590,6 +1758,33 @@ files = [ {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] +[[package]] +name = "pyyaml-ft" +version = "8.0.0" +description = "YAML parser and emitter for Python with support for free-threading" +optional = false +python-versions = ">=3.13" +groups = ["main"] +files = [ + {file = "pyyaml_ft-8.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8c1306282bc958bfda31237f900eb52c9bedf9b93a11f82e1aab004c9a5657a6"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30c5f1751625786c19de751e3130fc345ebcba6a86f6bddd6e1285342f4bbb69"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fa992481155ddda2e303fcc74c79c05eddcdbc907b888d3d9ce3ff3e2adcfb0"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cec6c92b4207004b62dfad1f0be321c9f04725e0f271c16247d8b39c3bf3ea42"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06237267dbcab70d4c0e9436d8f719f04a51123f0ca2694c00dd4b68c338e40b"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8a7f332bc565817644cdb38ffe4739e44c3e18c55793f75dddb87630f03fc254"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7d10175a746be65f6feb86224df5d6bc5c049ebf52b89a88cf1cd78af5a367a8"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:58e1015098cf8d8aec82f360789c16283b88ca670fe4275ef6c48c5e30b22a96"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:e64fa5f3e2ceb790d50602b2fd4ec37abbd760a8c778e46354df647e7c5a4ebb"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8d445bf6ea16bb93c37b42fdacfb2f94c8e92a79ba9e12768c96ecde867046d1"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c56bb46b4fda34cbb92a9446a841da3982cdde6ea13de3fbd80db7eeeab8b49"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dab0abb46eb1780da486f022dce034b952c8ae40753627b27a626d803926483b"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd48d639cab5ca50ad957b6dd632c7dd3ac02a1abe0e8196a3c24a52f5db3f7a"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:052561b89d5b2a8e1289f326d060e794c21fa068aa11255fe71d65baf18a632e"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3bb4b927929b0cb162fb1605392a321e3333e48ce616cdcfa04a839271373255"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:de04cfe9439565e32f178106c51dd6ca61afaa2907d143835d501d84703d3793"}, + {file = "pyyaml_ft-8.0.0.tar.gz", hash = "sha256:0c947dce03954c7b5d38869ed4878b2e6ff1d44b08a0d84dc83fdad205ae39ab"}, +] + [[package]] name = "pyzmq" version = "27.1.0" @@ -1717,6 +1912,25 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "rich" +version = "14.1.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.8.0" +groups = ["main"] +files = [ + {file = "rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f"}, + {file = "rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + [[package]] name = "setuptools" version = "80.9.0" @@ -1738,6 +1952,18 @@ enabler = ["pytest-enabler (>=2.2)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] +[[package]] +name = "shellingham" +version = "1.5.4" +description = "Tool to Detect Surrounding Shell" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, + {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, +] + [[package]] name = "simple-websocket" version = "1.1.0" @@ -1757,6 +1983,18 @@ wsproto = "*" dev = ["flake8", "pytest", "pytest-cov", "tox"] docs = ["sphinx"] +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + [[package]] name = "sniffio" version = "1.3.1" @@ -1787,6 +2025,69 @@ anyio = ">=3.6.2,<5" [package.extras] full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"] +[[package]] +name = "strawberry-graphql" +version = "0.282.0" +description = "A library for creating GraphQL APIs" +optional = false +python-versions = "<4.0,>=3.9" +groups = ["main"] +files = [ + {file = "strawberry_graphql-0.282.0-py3-none-any.whl", hash = "sha256:6671cf90fd3630ae7d50aae2d8a06808ada6ce55d02ee01b7b7cba0026dfed18"}, + {file = "strawberry_graphql-0.282.0.tar.gz", hash = "sha256:f15610e4944210c15f83be814bfcd6ac1024b4293c18c9f4eee8345639795d1c"}, +] + +[package.dependencies] +graphql-core = ">=3.2.0,<3.4.0" +lia-web = ">=0.2.1" +libcst = {version = "*", optional = true, markers = "extra == \"debug-server\""} +packaging = ">=23" +pygments = {version = ">=2.3,<3.0", optional = true, markers = "extra == \"debug-server\""} +python-dateutil = ">=2.7,<3.0" +python-multipart = {version = ">=0.0.7", optional = true, markers = "extra == \"debug-server\""} +rich = {version = ">=12.0.0", optional = true, markers = "extra == \"debug-server\""} +starlette = {version = ">=0.18.0", optional = true, markers = "extra == \"debug-server\""} +typer = {version = ">=0.7.0", optional = true, markers = "extra == \"debug-server\""} +typing-extensions = ">=4.5.0" +uvicorn = {version = ">=0.11.6", optional = true, markers = "extra == \"debug-server\""} +websockets = {version = ">=15.0.1,<16", optional = true, markers = "extra == \"debug-server\""} + +[package.extras] +aiohttp = ["aiohttp (>=3.7.4.post0,<4)"] +asgi = ["python-multipart (>=0.0.7)", "starlette (>=0.18.0)"] +chalice = ["chalice (>=1.22,<2.0)"] +channels = ["asgiref (>=3.2,<4.0)", "channels (>=3.0.5)"] +cli = ["libcst", "pygments (>=2.3,<3.0)", "rich (>=12.0.0)", "typer (>=0.7.0)"] +debug = ["libcst", "rich (>=12.0.0)"] +debug-server = ["libcst", "pygments (>=2.3,<3.0)", "python-multipart (>=0.0.7)", "rich (>=12.0.0)", "starlette (>=0.18.0)", "typer (>=0.7.0)", "uvicorn (>=0.11.6)", "websockets (>=15.0.1,<16)"] +django = ["Django (>=3.2)", "asgiref (>=3.2,<4.0)"] +fastapi = ["fastapi (>=0.65.2)", "python-multipart (>=0.0.7)"] +flask = ["flask (>=1.1)"] +litestar = ["litestar (>=2) ; python_version ~= \"3.10\""] +opentelemetry = ["opentelemetry-api (<2)", "opentelemetry-sdk (<2)"] +pydantic = ["pydantic (>1.6.1)"] +pyinstrument = ["pyinstrument (>=4.0.0)"] +quart = ["quart (>=0.19.3)"] +sanic = ["sanic (>=20.12.2)"] + +[[package]] +name = "typer" +version = "0.19.1" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "typer-0.19.1-py3-none-any.whl", hash = "sha256:914b2b39a1da4bafca5f30637ca26fa622a5bf9f515e5fdc772439f306d5682a"}, + {file = "typer-0.19.1.tar.gz", hash = "sha256:cb881433a4b15dacc875bb0583d1a61e78497806741f9aba792abcab390c03e6"}, +] + +[package.dependencies] +click = ">=8.0.0" +rich = ">=10.11.0" +shellingham = ">=1.3.0" +typing-extensions = ">=3.7.4.3" + [[package]] name = "typing-extensions" version = "4.15.0" @@ -2229,5 +2530,5 @@ testing = ["coverage[toml]", "zope.event", "zope.testing"] [metadata] lock-version = "2.1" -python-versions = ">=3.13" -content-hash = "6b687a35bca621c5ec6aee78249d871f3a2254ac8420af0c4bd65e12ca787a80" +python-versions = ">=3.13,<4.0" +content-hash = "a4c6e3f31e6039082c7c205b04d761b6aef7a942d4c49d2ce720464575bbece2" diff --git a/gateway/pyproject.toml b/gateway/pyproject.toml index 063a6ab..399ee25 100644 --- a/gateway/pyproject.toml +++ b/gateway/pyproject.toml @@ -5,12 +5,13 @@ description = "" authors = [{ name = "Powermacintosh", email = "ak.powermacintosh@gmail.com" }] license = { text = "MIT" } readme = "README.md" -requires-python = ">=3.13" +requires-python = ">=3.13,<4.0" dependencies = [ "fastapi (>=0.116.1,<0.117.0)", "uvicorn[standard] (>=0.35.0,<0.36.0)", "pydantic-settings (>=2.10.1,<3.0.0)", "aiokafka (>=0.12.0,<0.13.0)", + "strawberry-graphql[debug-server] (>=0.282.0,<0.283.0)", ] [tool.poetry] diff --git a/gateway/static/graphql-interface.png b/gateway/static/graphql-interface.png new file mode 100644 index 0000000000000000000000000000000000000000..cc9327e2d0e66a5bb9112bb46817489c4a0a7c28 GIT binary patch literal 307114 zcmeFZWmr`0w?7UDiXfm;0umC^At^mbcXvxkcjqWbNtZNAcMjc%G)NAOQbP}t(!b54 zKKl5a^FQD7?*HO&T{Cmfp4s<3d)+HO>$BD-SV2x41C0<30RaI+QbI%t0Rf#70Rbfo z^(Js6JfAWX0Rb(~Tv%8^QdpQw!NJzl+{y$2K_WOV;g*8(I$l?cr>)03DiM&>nrx&T z0_~$Jgpr1@NMuwhe~`jGqKev=xVZOJkackt?NmdGa22gWU!onMXsX0Imm3JL=o+9l zoUJx-!TVFVTh1Mu_fz467p8+Kegz+5Bt{IV5JozuMp*RaO=YYeVhf@MAs`xmzEj5M z6Yo!a|30cha)@sY)*J$1L=EFd%ZszCtMOQrb_M|i1=QZ#FByDzdZ`tCdlDon5kW`q z>n|6rdY;z2lSz1w@!rceCFZgFixlj~4{khmAa8$4Gm1#2;KpZu9|7la0h{AD$rr>S zw|do{gC*WnAe+=29NaL)W7W)2F_;G%!VXIi}5kN2pbYOdmQcb+rI&ElZD z=^^ex%!R^bBzyS@$-{k8^yd^aXNm20j=p+Bu8 z5tjlkOLnlAHW(ZWldj-j@su2SwtUjgu3wiHhs~s)9M&8;YAL)t#1a4_W$pC4!3rYW zP-;a6uQ4+tR0K#@bYZpkL^8yML`PR9S{=N;ov8CfamP%5&}~P$uYl~7fmsC> zU_r!dz4;UY|1)AESP=E*Ju*B7WUt6OBg2FEulULcab7+zBe1%)l5v0QMqsO=-9vWp z=x3zbJ0-8QKQpTpauw)EAYi4 z2R|Z+y;Tejd3QhWVZlp_jP!TPpHSB5#%|9Ao@NNGF&?0Z8KB7oLJTO}IQw5t*&#ec zWcG{sEb|nf$&ahu#E!!Y*~Xu_75b&Yj`)`U%T7z?zs0RX%u`7`(NtDC6{mnmA8QK_~vUI$K zYtX4-TZTJ-bSQr^NxAjh>QOb0C&G+hlYdhvajQ@37rQ$tPX_P70z*5qKgWNWSaMm~ zu!q^F*80q%l0>L?B`@iIZF3_LAkq(72o`)P7zl62`Yd>_8=3eeMqA)r@w?c2x3m2_ z{44#L+8x_z6oX$#I6c0Jjq)M;gY1Wk4|t2RiwO3ySu(7T>!QgeXtTz%Se1y^@2}rm zCr*@^px})X?jhf!b09c*aDrABah~}8*^^8=ntfW4>R>`*rJj^nRI<8Sv zF1{4~@srG{OhV#$q9|L$kXOcS%OvyH=1ilrx$eS_BGTG@>eBBa%A4;eA~}U;gn30h zlaDmFg@}{FlfxyG9Dc%Hzc2&?Dkd z@|5918KQ3#t!VouTyXOqdz@I+|K2-YOm`I@0E^QY$~I8LY7>_pvlG z?WoBwt22^@9G2^v&sd#(9GsPVQPZ`P#y{Xwa-nsmc4mtij;R#L6DTBpqsy&JH=Lh= zhu$BO=G=LEb9udLWW8$C%hY1 z-8iFHqvxvYn&t^PQ^xYf0(T)sz^s&A(9TfLAh~h5W0h_D6kUmxDUS2#U-u5__BM9a zzJ?z#9s4Y1!eW+{H`%r<;SK%AjieLIt+t{1Sn8pDunD`s3*w7}vlV*5dgGZA$Ky|s$f4`w z_&hxq_BZ>G6BHQrII5z1f~GU?M3F<0G_&cw^m|Vu(=LXHI+DVB^dZ*a9bKZG#6d)f zFn-&!M)1keK03^mnMJS6xNSUu5PcLcO*5-DsAf%sk5ho>((YVckEJw;E4o#7GLEGm zw(Gj9f13|^2Km)9b;ICY_xG01B^N^}p;^U}uX=WRvU`Nd!}D|w9(OWlv#uCf*lo0p zl~=7*ojN`9@H(X}4|%FO8~-k~oHA4SITLN{fhmuf&CtX6n-W;YLYn9mNtNqs22R4J ztIXJJD%~89@s1e- zrDCNWq)%%G=ca4J>WW{?oNb3z>oY>=i)V$VAI%JF<7rGZjvByLQ}z2|`rvAAYGd$` zS%?j^YwqQot|#Bon5u;;p1RKz{j_IkZ%sk@bY8s^sg3?%v)NhZQO(td)BIJxkKn}{ z3z#8TM(>eFB5Y@B4EY_43=SNQXJOJrfyvRy9?3?@yz(dM7S{IW=HEK^5?i}i ztXs8Bl{?nK#0I4Yv2-QsKP}Yf9e(M28|pg!Y=(ykMW^0j3bxnj;&N6;U!pFj@7(OM zLAa?k>KwQk#9A(kM6X%NA4ROd?^s06c>$%BS{b#_ENe?Ubj7L!fY}-Z9KK%!|**V zOJBI!I4)Xf!NlRq6rlGm*>7A87ziDGCGe_7Z_tx_S8C6~DQ_2RMbM>*)7^VdK0?s; zPS+i*#;9fj&xXs?(}q{@?fIH;|2KRmk(Y)CM#I#H@__=C0yVzDmwR4LU)9f{6}CAG zTFtk-eA(j#I3ItJbjQv_c*&FU7PWQe)mqA3bcAg@9>MISMh+$>HjXcBodo5IMS%mi?IbiE5fJdGt{;e!N|d|6{FCM?8crIrGCW4M z)=Y-Rw$DwN+^p@c=Rx3e;{k@&CQgQAZq`;djy!Jsnl!{{Nx(4 z3S`2z4kl!rOe{<+y39ux3wX=p4afXt+Nw9Ir;TM zfB${|ohEMPzgDtw{Bc>p1u|cM!u*7Zh57Hffm8XekMby(yO~&NikMpiG6U8Sc*4%k z&iB^||N7|HlE0m*@#|F9ryQ)mpZeQJf1ax9XyPDjYYi;wB=Bp)ew_UKhd)l_W4^xj z-(>M!(0?5TBrSl($NcxM383v}zLo(t@}aqiybACNsM+-&(g^TG^ZgYVBLx_)Jj-E1 zKmZ{~iU_H=A#Tmxa>EfN?fUBL@eI`;FY9<-C@Z+hK!~BV3H|8iOAOJrn=~|>3T-#> zK%$8EaFB74g@EroioL7l;qHoOQ`Z#lKht0p4Hv+gmz$cJ8X~z3yRc!(vKbw$Yd6&f z_r_r#)KNX&so8#*_y7r&%n#vz^91U_MST=$1y7bIo0>lkoO<-XI~@UuO4komF_4ak z9Bu9M>MhCtX6@@As?d&tN;z|W8$>p>$`!Q!zh7SGujLW`Z~6Zd{{K?<|4;S)|7du~ zvSgH$BF}_{sTdek#+oyW9%md)-31{aBL5FhWyv5Ln-YQSl$3{xXB+Y^F5ypmU6SF6 zgMpyE#9oy3r${|QFIU-rDM>XBDmr?C9i!hvJQA_B$#~Zw$^XFpq~!aN$PMG}-%pZ4;4yF(g4a&qC#&nwWVXPki?NqF+6%zV4V#NPv4FqMdps=#C9^l5HJ7Si=m|{T=Iyxyj4(lsQ`ARQ8 zbjG=)#+a<=Hn{XH_+C*pxa?F}^&4P`ka15greOW88e|GciduKMb&S8T-)he9AAAl3xwuqk<(f$V)<&AC;rK$~Mh~687j*7eDv{OXaLRVR zQ4(`YJ~jp6sY-#0Bq95YymYg6f7{S4IzT&$-QTmJ{S6X8Ur_xm442p5zEFH;%=w>a z#oaPBP(akE(r6Wf4MKY@%3BLyc}DH(SZU_X9C_QlWm1#Tk72;!wtBTZ1)-g~np~ex zW3+-juQ7D3||;P%MT)Ry4o!&OYtED^H0pjn!n z;J_9*#rg*XoNNhG{JoKXU(kQyF*KMXQ&Snu&DSTeQo4eKFevq%on6gmYl8){ z`}<|4%8eQxPNvgvBceV}pu?po)~*>Jg7{o$O*Oj5SWPu*j*PPHk(H~n(NoTB`mhlF zlGFl{VpP<9l6yN1*u}rL^Z#RXmjztZ&mcL3YNJ>E38@EB`QVA2g+;-ei#;}OpL72R zy(0_qNUPGbHmhHvYD5=#A+#*P82NBb)*JHXRKzU&sOKXPV|vCfmvP#m1IVX51f+jk z)L(MSSibH5+FwHAMV|kL@3RA2GPL21$zN0c9D!e=8NUE8%P_uuSi}gZP+@~>f>>Bm zcNB%V@pvz;QjMN>zEZYSS&6FP(D{jPAJVqG;uI<+ejINn-_QL9M>A&3vxE&dXHyy^ z9~ILjUWbkg#Yg`(rt3|n4h#&G_CFHuew+|HGw4kI$7UG>gDj*hKH+^sb09k*WQ?5E zz$D?L(f9e9NTqQ?AaWs}ly)pglWk;VGLSURdXZp$!rhPO4Z!zB&Pmhz!^6W$B|6*@ z`-=2_fMIxAW#0cO7SyV1ooTj+8HXtrJ}Q*AGBq{T;%8s_)4wS!Ba@Spi+Bs)D}0P! zr`_fM^D=)yI#qI7g6r0;@oKxk7cIF3Fwd++39+4Ixe| z4QAzB85fnA%P3IAwymN9^|$`YA?Z{eXZ|$hi_dOb!-0I&ihr9TvJ%J}frXB4WKTJd ztl|`n;NR|u1zki;Y@^NCk&)_`7XBQy>XPyE3tw?QKgP4PM5WZ;G(UNP9L-40IC4W^ z;Yu`LvogNRQbAw$a*YDZ<9FF)fn;Q=@=7Bh7JWT~QBI6OMVH7?jfy@lk>QkAWkrREH%|=4zvkbg&S-{6czfO> z`nTPGmL+3jQ$BmWC}TSiKL$8i|0i~@CZ9y=KrB=Vc1JQ=b*uWi7rgk@RtHlzm9$wy zk)x$oy@T_q+Q6->15pUmW}Jo)Ar) z$ea_?pArBgp)RkkN=ZpsAcoVpsRQnj3w`4raG2HUI>FTjDK}p`qb@V&au!9ES==N)E;Wxc!4)Zu;j)4()@8xbzDR znuq^(jDE==Evb|$PpnPhy*+K(+o%TA2VGvF9jnT&J zZ`mebB1hk*eVAl=^c`4eSOU94qL070O^M$((<}PjohVSEJU5a);fMG4GxT(K?|MGG`N!@8 zZ!1B@##tgF{>k*Te>x#xqmo*Kv1t+Q%S^~l&e547ry-lGXD?gM7c2SB?n?~D&@2$| zp;5vG%k=d~cAqtOWg1-qBnE6DB<+Wc?>+^WmDvS{haYSr*VWZUM@Mf!A3S{XFPol6 zk%|k6ij2GqCw}oSp@8qxM#jfKnwrv#*Kc6F(G#zq%}E9}-c-3wscokDDGG=LDsL`- zu80bzv5w2O6I9pi?e324@9zi6L_GO(8$clJprD}0?rv0uzeWE`^I|~pN7f(L5x;R7 zA@w{qJ;S9_m-|E=_qKL{GX`)LZZ$7K4qv7mO@Ey6l=1U1nsnW?dTSQ)D!qZ+P&EIq zxqgg-7*(bGMWfxx|HVrA#eg!Jhu?xKuq%jNZ&Ri>({IF_Z_lJV*0-B5v(YPG>Q;4U zPdGji5YS8Fv|g=KEaZ=JcoxsBZE8`f-qNfhmuFSrh!fAK{oHHC?Zu0{l)2_6ryZ{n z6#(=-e=a5I=2n}Po4dKRBQFy>RcY4q`f!st5O($?61;o_OQ8rO;)?V4M-Gl)rp}h` zve-w9s;Xk&o|fyryf|A)_g(D^S?LqK0MV`CtqR2+`Z=9gDeR$lp5 zZd75qO_+EFO^;4V*|MamsW#9Lok7m~uAUipQO4Ap3P2Tt+Brw&eQyxFrbp7b?HT^` zwVjHfi>obE!IqW0r}cKSf0}iy6F4?@jI9^()PW*$OS4{%6wF=y}ey0nLj=z2CGkF+v7TPmCr#~HK2;S&~q zbl$+zvM((wi+u=Z{CDU^E%NhdA%FaF-;)T;&zAXzHwKcZRFsjC5h`BZnGxFi64kMz zr){W|$+G$$?vX0_O5-}~D!u*vu>wt`$0zvNvdPtZt*@|niC3C=jXpXho{v&0zbXY) zY%G);iF=Fcj|!d8Y|YjQzs7X$fTa+3Xb?y=@4gQ`^efX^*_GkMB~N>@gl|2*n7-#+ zTY9&Y@N*xtU_!%Ay|~u^Y)J4b^6P>J7G3s7?G0f~s2?HUlBlh} zUpP(<;KTf@E0jJE$O~N%J@X!k{&&cJNs-aKz9w_k;%;Z!t@$sbC!0i~vrLSNGG8|b zyh^Y6g#mK(K+d(xSJxxn+V@SlxH#51v6$7^2g_xDv27{z9&n@0CEVW`&JBi6S3A%Xrf&IJhFu3tO zVqys{B^sNUoSgG}e!SsG_NR5Ay5Z~|LmIn;@9U8NQIU1DM?Af%h|5gp!^K9rRHFO)dk z?=*+vFihO)PooDESooUK0CbpGRGI|X%k~GgLa3AtGX<(nff%G;9OIT`lR0~L4Q-P! z)$}EgCd%&JCnU5eaAhjeDAy4SJ8!M)oy2k?(@b5vI2P|t8ZQiUtl#-YB(dYt88?#I zc)^9a5-_u*@fv!j&yoVT z9xsCWX9|#f``Z~u=>|%ehv9z#ZQJfCkTR%|vX~10v1NdIVi2;&Zg5!eq;jgS4x|<` zK3}<**-YiBBmyBqb}gl(3bM_}BCTk14`1DrII^0~GFNtA3>HWuk{`$Pv<$MEZ=71& z|AyU^Z9Zx$Hsvf{JO(Ybwe9KNJ?|(X124zM;z-KO=9XT%##cMo0%T1dnX}$ZFgEo8 zx7#L6o~-U!0NUP$<*WUaz*8Z|Wr+&Ftd;dI$~+D?rqBD9-BXhGKRqh#tG1rulUqo- z3uj=As*G=K;UNrTWSi)mZ2sVP;> zM)gJ#^SLQ#SJBd!QP-@mT{V0)m6XV{N}BWks^9lcI8esfOiAISv;?M0w$hi7fUybf zi>A6->Eq_CuDa%I=v0a*H#i)XMjmn78MHj)_oxDm?#A9yNvwQd0f>1?Zq8d?K3}8! zrPXAaUXEPiR+mH@e-+Km=y7b-3#vmi?Z$8VC+l630)cCDxupP}o3te52*f`X%&mbI zX)33|1zRok$60J<6Iid{?s{j-)R9FmyGecdl&%nAe34plCr7+Hv4g2Y&Lu~+aLYJj zU!#8h?Q|DZD8;2P1$x@MxB znyCIG{S4Z2jj@ec$ey1+Q%vE3%T#ZAz6Njz}3iIjQ6`u=ODrrzIR_@GsCq zQ|s4K3Pbl13;!qXlnMt`t}O{Bq0KR46sAbMVjchv9MfiSdSbX9E?YE!aQEHP<49Wlg`Yn#wI0Y zu9@>maEwcHJlh(TmvMGs*0{Lj2MCk%aQseC1#T9v>rNz>p6@tJ!NR$jYr#WYzZ0t6 zRoYBQ?>m%SSb9gN{JE&@+z0i@33~-S@bdC<$KIYavxlysW|-sn_}t1yVX6I{^{x0RiIu^8CRal){CUYwDa=j%?}}qkeg$Z}~Nm&B3(f1=ZD;v)eZ5 zVs-)`6m@;V-NtJ6X1HpqH%jzA?`t00(lgRAfqRbC`#3UZ8wrC(5dy{l78+!a^y*4= zl}upLCGM!@C*g5Y(DVA@UgIH;`zo+8+qb<#Ik`Z)&LQB<`L1`(>bbvL%ZW$PB`sOa zD}EKeOA%Z1>8ixQ_!w1-xNZ5a<%{4LA9+FQ!;SHMo82ck^T-FOE8jDme`f^Ax8TO#yl~##vfQPsB4Luda z^;b5!fT;M+w_USUXyN*$mnSeI4j0K{mBz*l-`b+-NHaq~|N0h&Q}14R$$ufk3sq?&JO8Ye%QH zpsKAZnP%7uy++YAwcNSdYJXa>i)?b~(lxFh7AIjpR1c7fqwAqBZT_ML&r@hQKRxhi zSL}xx=^?`K_1)w!iCIgZrm6?Ij^$w)ckZp6@c8bp4y+7!r5#MyWPDl05;&It;5c7+ zjn4%S!Ph}M<>WX(aBqJIP88I-z{LV&;^5@|KTS0x_1Ytb5~Je#|DFTK->wqOeU;)U zC+^)S8hRP!i@##4DAM;>0rduOnc5}wr-U_ZW~QdSRp!dZ5u-KbfdK*1(EY*VZ?d~x z;ly$FMlE(kxldJ}2EHbSX1|;)nPL^!79yorm5Q_&FX#beOG!a7_f#j~jpvaE2;E@vfS~QpFjI~C))d$AppUM`H_~9`xbcl{K>qdt^E3@FU!o; z=fw6E&>+{>J*S78`_4ge;N|dC9?QZz3!8_Hq4>U$Y+wuMHl)EI@aydB(!RWV%*G_>IEe(>i>t0;N*-G)-{~&MVXjL zAXZnqjm#6dHBh+ejxQ04$2gY+I5Tqes>YPuV#TG$4qrPH>N&QjDz$x1zur>j2ODDt zDxzAD)tU6gJFJ_`9mM!@>_|)U#j$XiVz&|_^-O#zzzx3D$lkr_x1o&K;Ie%%otFOk z>het8C-n)1pzfi7g|jxq!d4~rjGC|!qrzpI&>cSK+Q3ou?^GrP7LL0tjZUY70gV%ZcdP+L7t^W%;Zodz6Y(k70~F zJYs;(Q;iouBLQB6R=2*Y+QBX-Z~X1}Io?%+gj@;>>5`XML*>vgo(qGS%Jy7?xLT6KnHb67+SK!QxQ2r9blOul18tyfbq{WQAD80q!Ru7cfiLZ<+lM;k|{ z8XXjbdZ9J87$u!>PJIiDWS2cf(RKa=-=dIIoN(oX_nGlZ?~2%ofHmUK+S-fEA{Q6< ze74E-_C}utdHk5YB!@hIyzP^u*BT?0fB0ptVMFoP6J9&bUEleqGo(l?fvbG zXNARzlS*g;KZt(f0y`?Ppn@c(;ubsM8+Y~gf|ph@;>R7WhpFGI}YKI%WarAuYpXn9Zf-i5acm97g)H_ElP-^A7PJueTGrO}?!v*jMUs?fB@;b!tF@rWAI ze9M(n-lQ_wl#`#bP=MdKRQtVqQCg4pZ+d4N=9;EA1P7lj2g0fA5A8818=QBQ-m$91 z_nstzUR7LzocA8ZVVV>)k4#L$=2_9~8%a@o#PwhVp~U4Ty?dYKPb z#O3pIb89vO05E@0yG?m**4fzvsVD95C5eREs6wA*&1m#D=go0w{9ehTyD1*D0Qr1l zoZjS%;FSiSgFzs`;j%2GHIYPC4skMT!p;5P3F{?T&s4ix>}lcmgDOr%pM37Tv~lDH z0@LUaAGI@tw0*uhkhFe5I|k};Xr7EEz+URNHS2zH>dd;B`ejh{xk-@gZX_3#z~zDZ zjkj{f_Fzy&XU3ht>maYNjPhO9QNCz)h`);zAlO9}u8l!-H#(8^_rQZJnURGO4Fqe2 z_wV1!)YGjMAeE|Fq1>jFe{dC6eRoBuZu^LLh(;Q+n~t&v^iU+_c;|qPIj$?F%bTUm z>|sF4uDMbz=F2MO;OHo8Jgca}|7h_UJoW7`nI_}KXsB1qup{hAzyG<$h1Dwxjgoosw9mX$p$v+JN zwoVIDaOb*~(Yz6O)Tz?|IWX`FA7!ORI(K39MQ5Iw z?0lJXAm<&;VdIqV1Ejw?O!LpuM=r{>EBYc%;@X!RMtIV!{o<%fq3vi7TVk-k9|w}L z46p~%`AX#@OVgWkautp+OihSIw$)6%C><4LcbvLj@v-yH+oUAAbYIiKGIw;!+^nn@ z=zcbFB8<>@g%gIqO8&QCU&k&ZVww}0JdYoY&m;8!-OBG*YgLo=Uq}SyZ5~yDR^F_S z8u!Hyd~~yb)o)(qGWu(etH4mr3VV}n>vUBNCf&7b70~sWIRi^mXHt&=8g))b%|K3C zI%Y`V;=`I4*;EG0_FV~1`^i#3mRHBdpEK06D~>vtT4t)u1^b4SsbMt@042+$U0rmC zfTw@6Zk+k$JK6i zc|w=P$88@fGg+g@nftH@ZWu5!1ngD-tGV3wQtb}}E&42j5+#~~A~Oqmft9oqiZbO~={;dvVF{H}{#IuR-Om>7Q_E4dS!kBcx!~(m!6zoB0QlKHMj8IS zj$@e%J`|vEht&sg9VR@sR#xV9ht<54tgItW=KxuBkWrO6qD-cln9p+fr6Z7d?x1T1 zUMt-jAI3GFkDD?sH8?oKe|$93KAxRY_~C>{MNbX|l3KH_RpwqOT{cxW=iZ`I=P(VK zTi2li+Lx!1Qb`G&k)tutMlr9k-~}3T^uDY7An%n|-Qfi99`r}c5i8ESlXv^}UAzoYHW7%%sx?K?0- zeR-W6-taa*nKGovek}rpA({LeI zqZ&jl_e~9G)G#@{(<{`w}~o`7yKJ$KEBv1S=@$m+|HLK8CUTmHVGMBBbc86TNI_ zJmF0gme8Un9NGZpa=yATQljfQ`fV^EkfZCMvQds5s=@;Uav5vcxNL@CAIdh(Dh473YOf-+1(eH@~f|yXjxi>SuKxjN^7t zPR&Ss*?~0=acVTcREq@dQ6=c@IJSv)HAWEg=B#`WaK-6Vrcr0KIq6Dy$@p~r0Sh~O zfA_d^OHQCliC284r0@CHF1QIijbAL)l5C12$kK@qvP64+Hk^kAw2W!Pzt9351mbG+ zv<)_@g{m=@rA=)rsc+xX2zm*&<+3|kr_H9j?^RI z?!|du;;2XYTNq$A&9@>1hqaUHy?QC&nR3SuGQD{gTRKDK)!n8lStHL+iG;JfPSErQ zDfj-OOP(Fe-$<1t(?qEjZ}jx2bA!ed$Oj$x>^*^6l&+MOvA7>MVTtm4%$y1w`e$Xm z6^t@6394~~F*(3=kKK5iwtyT?&)Xye>f%cTVNAj++N@xbSN1M z65|qG?~LqVOvSxb+(0D9>i29LQT_uzzi85w&yNT)rEGA27ucWGRk0p!&*4b7V3DtH>NCqwpHb@ zf@c23=)@DZd;4rGX1ZdJS}^X5HH-dt2KC%=$c=YQMPK%evMcn)%_JcGNkeKX7)nHr z9=Gp!9T7P>sR7xvPtLoz|CWu{H~oFxUO{2D=P?OMmtx#T3?*~(ZliWX+@tyKZV7&z zZI}DGA;X!108xJdQ;9jY0lJ2qxR3b~Irh2IQ;Qq%(y8D7fV4yaPX*+n#zgZfIsYJB zP;nGM#c$5-_d{<}c-kw!TfU`!VN)1)Z3%FoNA=4v3R3_Z=P26)7E zU$4U}*Qhh{u;$a5;_WE$bi3pc0Ktq^m}%ym8r+IzZd`k=XgJr1)SV+~f#Q3kC&9Hr zX=A+5me2*DDvamqIXqIwfeay4Hi?}rRX!j}m1e4Z&SQpHsU+oOCIye_TwJ@#DGE^Z zE*|I2o@=UOBa`)Yx&?YV4<}L&=Iwn7uyJMJwiI%-_d>K`$HMT->g*;LCBYZ-zPA1( z-Od+dul9vPA*7t?;RM?{E7frN$RZvrB2JYvoX*EJOFHx($LsWAgd8r#oV`DYLa`}# zn9PlyrX61pz-PkwV$H9BjB3xRC0E4zc^4FqkdV$6!?SA}n{u%0{CpoL@n~NKM(4e- zaTosik!|oPdq@o<(D&4kGasFn_N6#9UoRj<-+LQ_Ryn80YN|qW-or5{f3D8p5b`u) zK;S#pb@@Rty0mok|C533);6%}>&uo*ISFfOjG)uxpCFNrZcsb7NDe(ZK5VpR@(=!= z$b5HKe%r_@1}7ULbV`#xSyy-`e$H4=?)Y{rAAFx?NcL; zA#hu=lMwpScpm4CB)KQPmwcMlPQiL+&SWQI)+j4d(^9>IGa3W%+SRqml6Cu3l~TP9 zAa{ZOs9^v$^ij1SgFQFLJc(!z22;5=TDrHjV41b!+7N zdz*tzK!M``=tGn$0P6p0ByPKgFw>d~pm-tbvNO95FqhrHt_q-h-JoZ-q(>%oc({1v z_Jcv6+eoFyV|dGK)WUZm{jqKv*jRvM!o~f3czFBmt6Nyzo25TJ~XLpQ(0elJawRepyL)%$ZMHorSFKhQjq{FnuWtJ-n%n%F!= zYzoPeOL5F`H8Z3W&0P`gmJTBdGERS}sv~I$w z2=IHS7=*nh3C?U``Dk4cqzU7N>b;1JG~UbI_j(3C~NGXRax5tVpwO ztVr!D4QO%53zsOgD_r4vqi!3_2Zf~=M+9XT zhtT!C(TH4M)H@G$D^&Oo4-sVoKW#qU_akNA7uRY44=bNmNegSu`IQ4riD8-Vv+<`}PX$D+#xU z3UmB;`&fyf0r5o&={WO*kGH3^scDWQq?|P9uI-O(ighpw8m@J5V&_nC-7l@9qmyQ6 z%8`b~CZBj7W4;E`30+72S+*+wVOn1YOf3FsS|mspn`snK)vryvq9nqxwX3AZHt}55 z40H#ZfYbbMHpSuDvzOHya7LTsr3gXOKA_)W7H}R&_avHO^LjP}c@cty`HV&8dVY!n z9UCAA5s|Ee`YWLttEq0R1vaJ`fVIlKyF1_Hxh!sts0bZ!rZO4dsqZb{d{Qu5u54yL zb7WPM6CviE$M`zYddxE^RIB@N^a&}EcSw8qID7$Uk3G?)j$~LQl-QYF(W%=XZ1A41 zix4qZR7Yo?w}nWc@y_X&Q1 zGzbEwvBpiz)7>=9{0?N5DdtT^AJ2TuY`KKQ%O`&#)!g0Bg)!kJatt%3^uQJ*w&p!mG&VYWGzPp_`y4$0SD ziTN0IF`H*ORRBrx+;In7Po8b@mC+zPhe!O&yFk)Wy~04Akkh5SDEQ_A9bAV1$W~qF zog;uYho|b&di0cqgE7=sG!3rX?8LcfKs6$6qIl-*hU%cj0d?jZ9w0AIvr+@v&-Pa@ z%~OWT9RX@uVtvtO4SsrdM2H!+mcjor4#g-B+`vBqi^+=pOawQFpmxB@XFgj*ER3)rbu=9fvbgVupPrDJs}|xy zLLUiT^ddR>5k)e8sQQwwiQGR`eI99!ZX#Zt$ho(Hf`1nIW|2M_8>Wq8A(m+XP+xn+ ztv(p=d-@|Pok4js+7enqp{_SRw-lxnYRja%mtKwV{Pl22b853P%rQF-kJIHM#{)oX z$Fnoa+K;#=o+eByp48}@$#AJ1Fcy2qoDXm}M!vdrL^M8-Tobv^$3R{O;9{W5kyK0&*oy>Rp8%lOuVZlL2d^`zdfM!; zGqs7htuF+9<5%rz z0Av^dF9(vk%bbNS^llC)2_oqEtfOoPb|RK~GXe0kZvFAG$$l!ykB!Y`{1o^fKFfA)H zwjT*P+_X?8p=dqouJA`d-G?>Ybt_LtT}mpXnY_ZXb#hpo|MH1hbv4pHU1l%9Ko7r- ziYj5=(WrMy5fK;XEeI2bNFA)n3q)^iF=P(*g7%7Q=4e-XC(hZ51A2Lo2#be&%d)`{Tvv7u0yK<_vOrdubwnHW zFmqa+jGOzU%xa-o_X;P}9wgv0_RV7IOq0!QHM1s2703`Oa%7Wx=Z+6zSxtJEH)l&y z$8sG7+hJ9(P#Y@M| z_?`@bp8@@V7&3+WpK!=ga(~Zo5Rs)~TPNcaq+@FLs5X*{>n9;y(aR;cEm|D21Yt|? z%@Z~r+FQRML1BH?~ zH9gLo{YG6JcALbGc)UOV7XW=^N|!>#k0OgQ7hoO7g1coTWiBZo6Sx53AvkmG>u^kN zS2zjXcl>;uvRO$U+4yWf3AVUmNQhWmaeCni+_}`Gdx>S!1#-A1rN^N+&wTAq9vaR! z*6kgt8)dtuH;?2g8kLHhn3(h^d#8PhZx}k5?iyC8vC(xuO@tAPMnt6h3W(t`>b$5r zL8BxUNTIw)_f=DQaaz&B|Bb+@wuo&uf7>! zd0OqO=BvGFUVASsauMltA%y^4QZaBnJF*5qpI|po_0~=HjtBfc`L*AM3fQ(>#9Pgl zwOM)!5!R>7sMb3-JZs1aao39>R1YXjV9;b>%ef-&>FIG#qk9XDh8eGYPjCR%4X7cE zZs4;EHG9eZgQ!7`)c|Y4beK&jW?NRPKD@;F+#X?^(?=Eh822;kX2U4}s!s`?kpEs? zAXDH&253ek^Z7;-F!SRlPZV?HPI|1J_2m(@^ns{?&1EyIGKLiDZcV4ZTCY{Pi8cVx zaCB_(>Lpg=1#x@ObjR5o1E9$w^$H-#xxz|W^#O*?reI%1fnK5zx7fSbe{21zGyg_C zAJB8npC1IIHe1h=wRmqvTff3y4hFj1w%$f-MFW0!P$^SPmR6fnPyhWTkZ%IjUrOy7 zt0>Ls7u=ZuGZwfYm5>Bc~Rqke|{`u8?NkR;xB-$ivY z)d8XK11aJuT)kp_^hijm^P`l1b&JdP^m{Mve&Qc)Z4hK&n5$jIwexK7vjirvL2;Pq zAMxq@ulw7a_fj7I!~2!hfdIB<9RM`>%DE*&pDe}1>f<}4Vo~;CJpjMXucta{I$i^@WUK*|{3JY=BgKpYd4G7_d=ZLQd`)yqGaqjNHy*wS)se$q z`P@ir20eLN12gmOiN0D+NAZQ_TDG2Ex6}bXZ;sCL=Hp1KuuR-c9DoY#Jb7^ArxeQm zirm+|RpDa&w}GQHa!7PRvvtz=+rF&vPjn}$(sPq~e;`^=#y9lynU#q}-zdb!_9I_k zqSoPkl4&4JxTk|j{t@>Pkfbu4bW&6bG$eZyO3B_CzH?aob{n{5@$JK>b|7t3R;teu zK*bTbR}fb+&nw=id3&bX0w$OS-}gYHi~uS*K8oit>Sv1A7*T+D0TsBK^_M}W^O-I1o-F?c2h&R7zS&=dVa?tJq6E$czg-qfR z<&T&FBIgp)kwC>a-T1Z_(mW7-x-))vgBtme5joN?&@w;?Te7-Un}-(_sr#&s;0N+= zWk8en`Q0rO>?dOKDfp2(Fvg`bHul8RozngsBjV&_*~YZ}=n2r=LJe&Bj+IzW6epE? zOqIWLP13^s4O^=}f8;8$@$?yJSJvO{-*^i3}TAc3N(DPHs*nuf#x)pq{V7%NsMA{^08R|lC27k3?sJ|M+*-IdErl8=WM>?8DGgUP8|&BrZI7%m1OO}n ziKgdS25T)+-&fAKX~*qNnz=^Pj6%&C=31P^n}TgU2H^Tva~Qw@YRmC2=i?({gM5z? zwR4Ku7@$z%_^~rxu_Q4bIS9$UB<@=6BguG6#h6ljp=}JqQrKKe+)JKv| z6lve(eXA)tzrK&tQ?Xs@Y+!okABXjVYK$Z&Y;#{ zdP1G5NQZh$Du5DfYo9lmUR9QFFQ*#I=v`N`N-AV=Vw_`xVm49C)c3V!kfzLdz)HQ| zP-;mou;RC6ilhN5au%NQ{}s+R+v;9*01npVkWEPeb3jfC2TDBpQ6Fjl-Uv&bLWKlD-v!#JbY#j;mDY2K|bbWJaP2pj#oQ74~2g98ZyzXw+SMs$` zxje6{EFd@B)jcZNeR2%W>kocm;?Y>?wIXPctL@z%iNN`hwlx@xm(}i*_KFtTa+Fnm zyyE=XV3JPDH+UMcm5N|g(mYzCgu)@s=*}+^Z+se>%1@O8xQ+j5^c*IGZ-53Q^F&5L zL0JGZO{1sibO4wLnLzwFHUo4{3bzvIf%JRT7xeoXTRMP`kDcw6$)QJ9YJqObnm}~U zc;y_?))^NQTQt4tC=Rs2(qw<;VA2-t@t5c+u3RbKz7Un_c^y{@!peK1qS0I|xYbFe ziT=IbN+si6l~-D1d=wL$O;Ic1)Gm?B%EKiZ46!7hxRVge%;IRUO!c%pn)t`-7$&;z z=|+q?Cwm69;Lj18gCh)T8z%PiMSXK+G2wxcyCfOepIDMMg&dx$)*$WeX%G=!y z$opd+Z(g&!dVFM3?ZD_d?Z>uuDU*1YrY}v_;gU|(8QnVuhOOC;lnScFOuZg!EOLn_ z7A?A)ykMY`lw9rJ$k)kGOizsSY0Qj^W`*CW{Cv$=d(#>a|;~konwhw zE;F0h+%}}4jbq(|%OKg1wScxzE5y2Ey;OSTEej{PVh63~^F`V!vuZ_k0$L59=GQHW zJAIj?)uKfo@=J$);gN_rtYu*mPu76vSd4z}p0Bpn)J+QrO_~|dJV?r1Gwe3t)a=#f z{K~_<1z&Nt1})88jhs_d+MLdYaZA13>|TTv$#_S|(n-vQ*(yIMT#zcx*V1GOo32(A znrQ->^STXOPBn(huM1#rY0mZ|Ch1j95lI!sUA~ZJ*8ZV&zkyToBU>gDt$K}zO;?*| zMdhZO-6A%UVjn9>Sv&4=ln|fg8(P^mr-a=$7ry!&Z9S~TvJbP*u0}fIk%+1s?zkWF zd9-&2eDPKh-&I$;rd^YQ>e-oLi~Di-%39YC-Osk8VFvTC{DJU!OEY`iL^bbu*fAyV zWv_e~bxmh(HdEHOIZR1IV4tx1HIqw&)#{8;Ny8KoL|WN{cce@PE<_s{OKl8PAt-OT z6z9p}J-XJUZ4gGhDXAHr+7rW9(*mYZc(wtPD4=^2kMYC%ZEnOLjr;*m62rXMQ*ZZj zJ+kh7j^R}nqJfu;jDrC!3_yhM+V8^ts}<3VfCHe~@k0Np69>jAo;v;citQ^Oxh$tC z$-Hb}1%ZN2>3{e#+Pi-RAVK1sAOU4`3SH$gH!!o;WGoe%KE$mC3=r;S2WPJu?a8NR zc(z@trjIhK=R%*C=G)JOnKNw7mm21SKUA0}(7U5iE~I}7w&p8H)6&fX=e%4UQmHT+ ziV(}_n=+a$c08It%X*b?9Ht=)Es^8i_O(!1FgV1Wit_qi7qS442u+YWrb!;_oI2fL z1W=a>c6B({VA#5YI7K|SG+I@iM(Z}45i$Vg>pF#kQ_8(l3W+X0gG;WIY9P0QN+v{D zAet97yU-(pj6PS1qN5pDlYD4QY+N&}(GW6M~P|Y9I4{kP2tR&FB{(PySm3t-J3=y{AHR1rE1zvrte!> zaAn3klvOifr$WA3CS#_f>fd;`MpAtW8X|>bwg#%C5s36 zEhG};yqf4peP66Ff>94DAKZi)T)6ju9{x_7zAZmIX^Z(YdwS!Vb%Z57|^c#HiP z$4jTy-^f{N*yVv@i6aV*hFgRhUUH9zS~^@e1WPWV=9 zUg@DaNy9e7#rnEo?{Me-*iNsGTh?g9KE9`SJLvZCQC$=ReGUy->=+`2BU>@wlg88o z((1-5qj~7uu7pWw+0U=grzuk*kvv?$7DnBhzmfd>Yp<3~-e~idTvKAK!<+F&m-3XM zZ$>%F4PnEz8x(Gqs%F83n{ZHGfQs)bNRf4Txe6d=`83FMQL1aa;B|(3v(!stX3|MB z5O&ot)rm?s5#4an?Lq1Lj~-#u9d0+&((f*5>zCmN@Gd(CTjy+{GJHHXwP-P38As4Aqxx@y!t zT{dQ!&q=ylRCL#a?MIWrItTB?3UY@0Cv$7I5A~f+`=C%iU5;siJuxm5#y)tWRyQvV zgG{WTZAxAOpb@Zv2hnU*^8Wpp)>tW7^<+_N$wBCj=Z^io5_u%$V5hC2krXw%+~8FQZs>ePx(ny#MdK4>>}z^ zUgO@d1HX3$eIHQ(0e;);b`*g$dELi38)kx=Z@ooVma68@=s{CJDw3W3r2N?1Od>7udN)RB)f>wxj#{H60ub8yzi1`;~Oc=}eRpxc`Lsp`4zibD0=9?NhtqX_fLl z1a~NxJbxNc#cyN9%yzltJ=|4^s8Woay znw+9dT`fJY5eh?_5GmJq>?(fUNyWWpXfwwPYOI9#0kfa^28%lmCZm(S$qRd6;bOGHKVp2m-D;&WxPaC`LnnU%A|n&Ae=W;(YK!4mBIG2wufF8jpM3}Y zZLULWk>biS!$}5L*tKF9%Z1FeiLZVYmGwNWro_W2u2!M(-UKjQI;Q+BTy zWuvszOcORK7?}`d-~bTYyN$sPJ-%Y<=SL$Q7sdQV3-H%3T3e|Ep{0fU*O}%O3Qi9x ztuNN?d4;UQhDhhqLzR`kS@gL~Y@Ua@b%r(fhuIdoSq!CTjTWl(TGoaFQ)+-IZ?oHZ zH>MUzr3dU?ycDwB!k0qmgID+Eos_4}fR+xVcuJje~JlG+AjyMVBg|Np`=!*?x; z+=Xm+Z4=9n1LYjb)`d<+Ct)f_-Tg5z@Q(LSf#qnhyH=ictGLIJ36ksXX>9P}Wn6y6 z*9t>>IHIPwU#ZtfO3U>m$tm$pH(1rziLb4aC_Uyqf02*J-f~_!KcaRh$GNE5&i(Y2 z8#FZZx+fgY{n%1GZKg zpHV!Tgn4)}*M^8)adq&;Fpaxuud}iH_I6pnu5q{@OhG-XM_sYTN-!w!^QfwRI3A~P zXZ8C&v#ENckc_UI7O7~F+WO9k{Qj`w*N+5v}J&k zl$k7|0cm}=;)(mKO#bIy!Q{^|z~0h8Ta7h) zcseXGquP_xp!Rsq+tNEJI{fo^F9GwVXqd4PAt04emjkK1(flN#)oo0FDcDy$MQF8q z)^r`gwj+=iOF^moPHm2k<~2-IXEgF!%J2nLW`@C-(pF~qV913$CsT`7oi=Jy?aqLD zx%c;OyciYn0%xI!(%h(ts*|k%s`Iw{o%*nhg+P{0v)Ffe5jF8(n1P|WY3oD0~b0lVKrl2?C&@jibW1e#H1wCE(AtrjJRl0O$7r` zcLBuqOPaA=7fm}VRWta7BIWi66PAyJ=$VH;v`91}`zGD#jykuDnBZbLVU66#zMHkY zmcXU98OpB|-hC?LHGaO+799~}Su%WnEh`r-p*nCT;Db_CmExh(!)=xxUJ2v_k#&|8 zVy3rO--inuJP~v~el^8*snS&Zo4y1$?^0Qgt@@$LdQxn2f$$M>cZ1l0hEkOQq3oJ~ zi9!md6rxNB*@UX>d}>khZhcJCDq5a1qR7orV^~!Ecv-1f`}LaQ9-kQlkFZ_&_0r4o z^-n@TM*vcH|2N%{MOWNdq4O`Rq=MUJarWfU!Thyy&sCdngog@jW!GGbVR{tU&((3P z5>i%G&A#L_@W*RqyZhTW;40j1K#e3RtlLtLWV4UYysj6c6nsv0&mpmZJRCU^JzZS) z2C)9Lk=^qLSZ_VrnN4C~JgNixm%rz0`T+bLL`u(*d}@TgTebMzbcq~)UEOwfjCUtw zp1idNv4Ktg)_1j`fGehRyK;Er`A&T)_%WSi77&Iwg17ccfDu)!u)KzAe)Th> z%&t~WjUG?Vge^yw!UUFPlIday>ay^|WN(#av(e!I9ih#~-Ey-ukMOB2=i#rFb4SZ8 zx$7UA&XclSj?~@z>owPyQ$VX! zFtDlQ-jYyjNvm{8|y#n@;YB9+kN5@%NbePP+>@L2z*>}aF~eWe$dR0dN|Tzdhh(iU(UMaOHs(1;t5Vy zuTa6%PWzHp{>luKWC6GiVQ{cm9h|-7TaLlU;lAX!g~W$NNZn?M3G9##QUmad@>nt_lidpoiQnt!V|jm4lYA;Ohk;gnD}3fn z)fRc`1TaSdk>tCoO0(hfmw5hObXwq)gB)1+J0fA#3BHCB4e0`8e->VE;je}FVgjmG zb*a>MS{6%v?ls2oyh?P4FMfhk%_JTVKBKQ0a3=B((l1M&BkFY4|29RDZgFL>Qo6Ia zwEHaI-%`iN?ByQ0$V-F^Z^OIRQu7$AlIc3)t+kHDBE_k;530Val9*(dHbcs+u%O`= z0xk#KM)3395toxdqn7HR5sOk+h}wc*gSU@K&5jqH14Ge!hUOO~F{&t}=301@}XEJs|eLnrJ=cW~*8M63~*1iVP+SY9} z=d$yGS8wE3f=9=Zy5)3qHm}!dvi0>z`&H=^-VV}(3Onk8l&lo(b#=+K1l}j|WJ{ve zSzjP(s7VGoZkC-V)~D%iq^w#RUjbHDZ*{tx`yL!mDIwOwn7oe4af%z|r$GK~8-3V% zhdNrFV>XPHxk_MU zip#a8^0WQWy^PT@JV_lkJ+$BR-;)am&9|h(yRcMsGBrN;FD6I1x_Lo-{XvJZh z^d0V-i;&4L&e`LW8mcF*=FD1xg5q)O4EOj^ky{ERB6CZa8AaMfw|4Tc-NYA;$zQ;q zsI>@HFEZdFz~hy@%T4Fz_KW))EZgO0yNY4Fmuob%bJgAHMNoekLz)xMZKJI19~}!e z`!fSEmUWB7Py91;bbLb+5^@JX>ma(mto2?G4ETck!^;>cbH~3bJG8?-qVI<5co4&OEy^sfTAkYnmGM?H-d$TAZ)+F4?jCS^in!El8_y#s>-T>eYG#@bIS(_bgQ z5%)hN$sy|FyGpIc`$Fk%B*_x}5%J9rrTVPgdk&htFyGqP2&k>)3Ayv(!^_2$m5kA> z6ltX%mEoRJpes+YIzbVnCbd6OLpENdJrdpeWXwsfq>S(pVR5B)jO(Lj!>qK725xG{ z&*Hk*Z;Vp3av3Bq&Av;1#tg-`tYGLpfadv4D%fBk5UtPa42WSD0UY@$SkCf{WIQCy z{c`C|#L_y9pS+z{Q~XHpIviuPIY!)nMyU0)=$?R4CmUU@mg!JUBlgBtxTL)9gBVp` z@Kbux-G%s+pb~ka5>fpsTveuG66KNn}#4w z153Nx^hJyob!c{;D`K;D+|T?&AIZuw>V9a9=`G~KY=XTK3r{gAlmE=V!)!$LJ|yWq z(a`yiNTeTkV!keqJnouG`5c^Rfqb$Xx;T%Bes1^e5H}M{f%2umyyQE{b=Szf&0*OS zC2gIs6UTx#mDb#skD>-`yChu#v@b|vhydMpioGJ*g>1n}x-MC`yp^Sh-KcuZ;`U&^*U4;>n@GQU){7f4%wp!Ue!i>Yk?TDFP^-|N zsK6@S!8P~j5ePKcbcia+q{hhY|2V;6P&ahVCo2u*MM(sy&|4loHi1O#?ZolABgK#I zZXpOql*qMP2j6|8c6MLpaO-VBm9>s1^1nNtQaIa0;J!R3Pb9Ok1o~m=5F6PeyOH-9^L}#zhsTQyOw&EL_pgcJBk9FdTrlqgVeIml zJJs%_(I38ty2PXEjZ9pBC~RMNE7-$JONh|%n0cqWpLT}_dS#C9IL?)rnAD!%=9Oen zw5Phw7FDxyl4HMpNfLXf#go)q&Q!O8{CeLQ5~F6#<)5+xU{0s&S;IX+2v`@m$KBpa zrgPVe3d}dv<_USyuJRsGZ5L!@`Wa6281YY&!f^1{u~Vx8+u|AnJbw7eUdZNVe|i8# z0OnIFDsgdZf#{nxcPFr^6e;%*q?b>WIAjRXSQ`cmlKuzr$D1$wfm{(^>Yv7n%qU?3 zmaZK(-C>ZJ^o8n@N)&u;zHqCZonU;p9E82ZD$Xj2O(t#ou>Zy;EzfX|J#o zD9^?SC`m~OKM^!w2E>IFhzm=E93P$x$NG`I$rMG39%ni2gGv0F_BE4dkNME%tm?H3kuB#_1z1oeHo%xKjZk1hh~P;T zU2=7+#c8^`tlU=*NtWxsI8*f;^>oE|^V_^%QhSbzH#W_pRw+iVzONQq;n6r=a)m%8 zXY09GnDo5^w>=Wu@hYkt-)OzM0mU~ogY>?ulQzf#wxRVwTuYnV$52`iHyxZX6E6Tj z6RbNa=>BCZe@V#XF(3iWjk@F= znn;_1N3F$`8iop+8q+K3l#{g8{iSB&zNM-|EGHslTqt2z8!D{6+edc0?yJdsYV5_< zvHhZ=HV|C&l#Akn@SVHOazi$!Y{kV)WHbT3n2qOr^x>qH)1grbL|PeqtrYZ6RG_Zu zNup@%+~;enD|c#g32QH4!OZk>*&-SP9F=p z?0<&xzg9VnqD7>9MN5WhAd}A5kg2n(9h@Ae8ktOp&yam~IaG8(w^Pd`SJ7=B+~m#m z!Hqh2MKR7R-~%T^!mNZgs@RWObnI3M&E0v#Zgc8@fVIK|DVN4@9k187Z{G;{ENbmc z#Klp{+1M4d6hDtf<7OqJ+*sUnfJgyyq^AC-)%?%I(acjwb64YtGt|40Go9Wv0x~yW zyV09eAHn<2K^F3AGJbVzpu*eF8vcF;+`-pAzJ`6YB>5C~BSYhk$%Z^_B#aGAYHI7z z;w<2#e13?MaAKhqIWdgpw~3i@8lf%&t?ajx&CIjg@`4!HiD)(sL0zN7bj&ahBqzXB3upX@rtiI8GSS zf0XjiU5f|;k=%seN?-$_q*Gf#kA3=|l|N$uRvw|#5S!@gjzJkv@BYri<^gp;M_Pbx zs^0k4!!LE-OlSC2{c6HBZB>pK_eB>2%QksT2nGCJv|-())ABrM67O27<}w} zai1*JA?b3Jk?`m!+ERkC@{_$iG4KkJp(+`*3mCMuyIacPn~0q~rR#&=&I^pP3-ILs z%qD84!~x&ax5@kbMmzrDmmC3j)I$B7p$cpZIf;(r#l2-y- zY?Ofdw%HLvN$EZ}c80Zf9d)0$>^r&yI4Sq{629`1L8E{uY*#Y7oDqH0VTVWKWWVr>!z>C-bmAQOm zb0eL9D$Xbt@H}?|GpyM_yPIlXHg0mMTPV9SKkvC-r-*X~xMwd)CvvMmX{^zm^5H|% z4x!9w{7QV!kWd`QjiyZ=o4`$B;Zwq4K=1QcIyEc=lscK0umS8epLV!7ueNh?d7Dgr zvtmro^jLfiUy5@|Pwc*GXKC<3n}K5C0k88oGVhlAAISFRDWC;t0`3CQzJ~6NW{K=K zKZI+e1sE;K`E))nyE6@e!_i5^)y0yb`ct_Wg1oK%;;_)81Mz5webiw4H|geZm5Ivl z_CdSI=LeF}WW2XtN(HITm8U#Gawxw2UG`>8EHqli?{wcyA~kB>lW0HM8(z@wwde`Uc zI6T#3N|o@)^1LDEIxzL2^^hAd zz)N!rd1FE+1k=6EX{C6(j<0w?8X`4i_4*rAHTtp@Sjki)IW9zr44h_Ru5M#z|1#hZ zXUMkeo{Pi1k0Al55BNy(gG1ifJVP<|)_5>iSD}H?4gP&e3>H9+t-A02)`Z`-Q-D;B zD_Jbyb~g*1>qSbksbg{V+isC^CLO%~p#P(@gW$i`dLqSl)ye6b<)uTz^@hsDM+y20 z#(~~%-)P7btBI5Xe<3lwtfPv`B>T<_5%sCG@5W9rAYVQaz+>PAHTngjDD#e$Kz0=%4)`;$(pMTeQ6kf$^bADW7lH*9u zd${JjgpEbp0a6naIvAJ9&?9{BHAj940Y^nm)r zhbf;aP$QEvM<6={!Nv2pZTxW*WsYr2DG7{VW&joRtZfdR&yUoYUfN8wj*pk(d#l7K z!4^G8S4F)bR1151|2`0|@WJz3K?$SQ!lrVpI#&nwj&U8#9arhZiLvuUZsP7Rbq=}- zwWkH;T6rO-Clcwp&)qJN)BF zjqvdL<-(`;icRiXYGp+wxgw`|I0R?$F^QL#i}<8eX8FhVX#+hRGv?|J7!UpAON0*4 z!o?hIp9Y7M#2}5(Jy+JaCW)PCxQiSlm*1b_n^uZdoV2pIkRv?nfdC=k8nu#;Y&Dfv zPaYVZUhjXIK1%w96@x!hk%Wv6ga07iWV47lO5~ny59~1zCCz=Rx>2!z$gwgB&^Als z1!@X@U{qm(l=YhTIZ#f?swjHqWJIk zbu|mf>Xs`qWrjM1#da&k!=a)h-|GWeo3uVJDIa_CAG05JEiEXd7jTuR_SmJm?F14< zTh`gs7ZQ#*Ban6JCNJOBED>Vk>X+%x*ILXxT2)aAgi$W&dCZ@)DHIRx*c`@+OTSfD z9=|9v8+5>)jxDfWsCWVou{Wz6^coQWX?=CYnAcx=2MWFvAa;4D+H|Kwx&RyX^fj)f zbbqq1yjUh}0%|1xybV$Mt8jwTyWQlj1WGZJylI;*IwqN5}6=Z%%O0 z_o&W@BkzH63nUtE@3uKX^xN9?W79NhiEqnrU58V?mRv|AtAj^!)wKv&)hJyCqad^BDi>7F?(Z+`rq^+g>sZ5g~0b*5F?n=(be|aaqZbP}V|U@)dq9c-KPT7{;PQ@K zPm>YES_0eGNdxkN{wvnt)F0x^fNe85T~^sH=d|D3jQH4M)q$76fPP$deTZ7fX+-iX zRuRDgOo&t8kmf%ovMUGRn`7K(;NT_j_1~iT3%U0I-#k7)n(gk;CUT^t?XRcd(r6Q> zhIBQNCJfU05`-}<{XOGOMmv2wbHAOy#6>wi;?W3hh-&$6BQR0Tn+4}-<8vLIbAeZhAWV2IKwbKWeBNB(>-AT(|Vz2Z`C52#p z8~4a~@vm5I-%S<@c1vEbS{5kXOZ1>x&J;e9!N4MOgK(aB9#NH9l1j!hxHX+{y=J(z zLCX6v3IcvM9e=%fJg!yi_N28bXT12uStRtG^EIz-ixgU8Z%MTH@tcbsGX<;7P9Mx> z#jnIy%M{U8*Gd-VfEToLdbQjOX_*riIiV{7CxV@*f-%T^q8d=snUg+a9BRiLVtVqS z8Z}hY%>aCRx%yCE6sWZ`zPZS^BAmsouMz9TJmN>jps^9XXX$V4A5;Wn!^Am7@b7T* zHXI*0RDHdkBvaiB;_XNcJaIPSyjqQ|>{yAlG9qmx$K z(+WE|dS;}_Oetk~mEe%~Xxb8p&I+Q~#~*;D)nhK|GBnEsc52%_8WXk40QNnr?}S8n z$w9nKoai`o>d?Isfr!rCW4n4s-6| zOCzJA!zi6=EGtD5Rj(wiGGuYov!`2S#%)f0B6fqTTY*U)F_Xri2a(2eD4P!NG_RJX z^Vnemhw0@_@VtQ3xb@p~7yNqtancAcx)UwBPhLdF+we0jqtkb;Ya2ik->$C#v>y*h z>^neu<Uz*XvT%ljjD`*iI#>md9o->1e@lygcnKNUhk zpIRO}G5&_BN~|~VTS_}bPni0HJpbWy{yG(D{Tbz3DC?pFQO?Mc(EkZ6Z=p=T5ZT!{ zmpg3oCz@Us<9WY=ObpBl(KKY4C74i4yi9T3IB5B%TlB(%8YL2b5fJFf^jMOV6w4Qw zjTC4r7mdGMzlx{2VXxhZd|6Py`W)7_)b}U~v`mO4AAk@uYOJqb+K)EbR4g_)t_ zL|d5dH2ZsSNcPhot(q47vkmy&;_BJj%YwtLsKQztD$(o=(yXqXnD}r_yH){^$7R5$ zu4^OSA8HI-n8#n&m*$I5-Gom*PU5DmN$mS-Zn&Iy9oQjQ&KQNDgbq8+Ua%d<;QE;N-?CB>bwRUtyX~)F>-^{{uAt$GW}_6H<2&OEY@7 zj|i(v2gDpyx45H$V|#S=qIp8tKPt-B=wNQ(3LW<2I6cXgypC4zVW*C3{rI7s_-N93 z`bx{wce>(Uq!18r=`p%9WET?yFdGV0bWXukepMV4BRs<4o5smJJM&K}gKGxcXJZZxUq> zh9;QeeMjf1e!3J4mJ(5Qp{bxsBw5T$bDV112R(5+WOBLt_~iwvuovo@duX!(V8X|x z4t*hYWjwh6zyNvZ~bVq+h7eUSEaL@=IVlCdIrd0pY-GsI3@ zwPcImvHFMMROSJAwSDneQgx#<)cgtu% z&qL7}uJ_$nP?Sl8@0Q&58#*qAixHUvGsUnCKsLuD@0vwRULM_XMsgEOM7lF{o#h;Z z^E%m+<$<_(N11@&&~;H=kI=|lX>q|%nG?bv6T(YOY~Qsju1a~Y#!ZWqL$?R*yp5(D zQ9lX-G5hN7Gj2cAQ`5THNr2Pk+6oO{T;HQ0(61MI=O_GIQJZ= ze`3yoT-?uL2rh!v0QCsnK6HU+N5Cw>dU|_?URM1E)>5;gP(U@~Gc-%tdI|fh#;c3# z+YveB9Wy*7{AYz7;AP?=j7r}KUishtb^*hat#({OX2xNj)&@bU(6{YIN- zHp32WvUSp1A2F;Dh-FA(ZdCUt`LP#z}e=##}=zwLB79o}M zuUEGLeXSkEv9c1fEtkZXX5D<%BbAwz)OI+E8yy=< z=lCa^{^^&0roh|9=)mF9h2uZ&{in310nVYYDNpu%vkRDx>0H!uSpK5mst8Y#3-d}N zDKMtzN3i1S`9r@L!4CRkk)xFWu6Np2Zb_Cq)3!2(@&Z^B^1C`N>x4SOWiO+x1A)qt zWz@hUIE~Xv0eisqcDndB@ESVvERiF%cf{d3o*MAoEZ{={-X88($?0e*+gPoe2r^&n`5^Pg)nlPv5JLn zG`Sf(F=RUR4?k_l^L{rS;|tJfdW20t#9L0JTq>8ab96*%i7ELftjdsQ^t+zQ@G@zC_y%->xFocg;LJ;Fz z9{w8s{!wJfbf@MHDnyb_d&GW1;mzd!F#}Jb;F%)XwE6mM|%nD48@tQl9 zqYO76>mE%sADfREE5Q}qg%?H-CzJn2CNe`X2!l2$d6X=jAx6i~O5*b$|8&Yp$p+7# z(Z2Z7m|Tv7K0sErJ)+^eO4IP54+kZqyKKncEN7C=I3 zFCPA3&vUtJAk99}Z>yMk!CS_Jsuc-olASWvxtHt~>aedQ9@9RX8H0t|c>QVEVc%U- zEe*A_y7`d;(@Rm+UR$kmez`gkFjZN44xpyNyk8tg1;GqYVH0vB4vsqo7qeVyPBw8X zFs8E&kc~e0yZHYhoK7r2I6$cz*OmK{ z2{75m0Cl+|7dZ{g1QFO5tObwb*+hLu?!Bwy`yA7{3{s!OV3R(3#86})h$u5zG%UMz zk-A;H&{VFDc(6Z+O?E;`6BeWPEVv^D3QR_Jv#*r_t{T5nS=DXT8voCr9!mfhx zAD!mVLhWA`xzW%y&O(ah7Xklz)?GkJ=6ZOaFhAd{Du%(VI4rUJf(W;`8SBIe;C8QT z*6BN`g}ulgsDgC__tR*wCyN?PjDZbnGgu>(RjcW9b1&yP9Z4^WvGD~)Ga*%icYvt( zl5=Su;I9B)!21|yi1SW2{`c8mR7fcDs8Gu&%>Px!$Z#c*{1ybupffb?YN4TGQ|(Gm zNzRF@+`e2vL-8{R^hQi(AyW_L9@Xf5$|9UmU#~IZS{cy)zOh0T+ORNz`MGLG$%+No zTAqAMc_#O0V*5w@h~#`#Z*d6`jr^Zoh3TjkoI^ibqmQ<};b#u>8i_l=*1HSzf{Ur% z%!v#TYJ%W%%*_8o)V^tXk5cL7H2@5Z&@o$S19B4qIu48hss}2gkhx~yC4c=4Gt7!# zPMeYqSb0h_6pew7nYG>EhpokUmJV)rIxMt5+BM1XcFc97ke!o;Q(o(3^=k+pxg6!U zf{U%v=lU;S&pIEdDNo#^>P2Yd&EuKd4}-MTi%(38QdP*OCdNpbF<6TO6B$C|RaHM; zk-TUJtyFu3r*BJ}x7L_wd-@u>E=~e0aISHBJ8_SFh3!FJ0Mqu9pFoG}CnVpfXIuC- z&t*Ib^oSq-H2dMTEzaQS*96%Fkeay=ElRri-5|egtxuCuBQZ`fpP)Pk5cMkXcEfcd zOEjn#y63%oLO@2>+4bpnNFc4S7o=UsHpI@;TIQrKi;mOuB?&(l{c?|na<)wRve5#QDf_?>hWikl*qvA zC~-!52724GWw)ENI>!4Wj{j!5!{}{XB^h-#tu7l9Gm;Htk|stZuG$8sXf*TTuTBfj zyub>6rP%)?mXc`aLZ5aZ1Ilp6a!tB;teJfou7CjzCRai zME@=rTG0KKIkbwrtPwKtbb?lN8Q|Z(IK!T^^@Kd9FU2Xgcp(h1LI>|lhO(DzDtX9+ zjYvD^(-|FXPDNN!^k(trlzu=(6fmq78lK$EI{oxQw;AiAzIG*SQ|#mr6PthCh`1xH z8EN8Zb~sa5*46V14~8ES^T&!cgSEkv1ddafLQ@n}3+()Ho<7m=`dE^#twCx(ot*f$nx46Ave9-+E7>>$PoNAGpc3y063 zkY%cX%8Iky7XZo4M@gCf(nGDb_VLTZ`X1?B_a)oSEIiybHG5zho$lR8l&9W*r8+(x zH%f50Wjd|x;=%*W<9nmhS;P5&lnoh}0rKug;g8oAGu0|1ha_d}EZ5{Nu)DN5T&`!{ zSuxq63<@mXDzHI~P_=JRrNNy-Z&2UpD0eQ!_xcmx@RKyj5{z%T^ep059SVlo`!Ch? zi}Tbo=I1h-4emPcKfQ86^-q8EM3@Facr=iiUSFO*FZ871MLDq(W?-Naj4p0pdpjZH zE0osHMC%}02++z$E2uDO8JU9}*y)q-mi<4O@hub$X<+N&;Z7Ec5HMm{!|Yzbt{Mwd zKAY9dIqi`8HFfhipJ~7HM@ zl_)s6MI-PCpMQ!43Z!)B%7{oIZVE|=RW%j86kKIeJYuTp(XsHxG$0UA zIKEXTiUy+=c5yBm`z-6LUe_dtwz(UjCQ!VBXSa5`>9J*K1o>76$?!OLGMdr&CIxdl z*=&{(U7q(W+$&abUPN5KY)?Z}ZLgvIOry`&&ZA3|Yo@yjhc(Ejcxmt5#}vSTl-g9p zR)wf2lCQM%%D+f)e|j;TD8id? z(Qa_WiOS2R?VRQ`w=j6eB@hwcr&E(*B;g zW3yH~*qMUM`@*wrVXhV0eCA>((PyQ8yN7REUw-(#WHjhW{T8*6Xmw0lI0YNS4Q?ZHb|<1K84#ieNKAv^twHhu+$ib(Qpm>n_L+8X)p z0lUsyQ_77V9-0X$3Da;Wm+)=5f9!PsIqm!HNY>*dXD~=uL5%3#X{+AOBp=Do(F;a< zPHCjk4_kb74;9a`d+1voQG(X64)zp+F5E35J#vqRr3xNe^z-{&XIgwS5=}aU0AT>Q z9>z+-!$D4b?zA63>gAhFzow1BJs>+1P8Hvo8l^f@1U1V8hI>|^UlBSbu_by~8PqVp ziU(h*%tznhV5Ss+vUz0i1?h}sz;;uf@a-SkHX^KAIs}+f8`Y_lv>Tt4c|wQ+wuiDHbvo zzvgd;Rk!FuKYV?T{eTnPFS!4W2J6e<%agdXUimKQH@DR6bssxWU9sz^MX%*=wNbiJ z8#?=%s_LewNGu#2hHRC$Zv%z7F0IU!D(j#eoS?@2j82<%&?#oc!}@KZ6GD4Ozl|>} zD1qMP<*@QC5&7m@T8LdFo`$-F{B2KNXvac?{kCKg*F%)Z&e>C>bogiGu$iVy_FYXu z`6({E%CF&h&9N@rD3OkQBwjjI1}fs)RCOf zRo)!Uu9E-Beay$0U!fUl4sWmBNEW+qB zGH=#X6}>Z1J8$OW<>^y`0!rFMs2|Sv3>H`7OLX(f0aVUGZ8uWG(&&q*-C>^yE2i1j}(_hZ-UZr}}!k01Y> z!ZO|fd2xs9gx<-`tSgaFbX;eWX0BptcgS@g%4-RG$Z<-yj)n7a)72Fz6~&leWox~u zg$)tQmfkA-c~$I@KPW}MJKm5#3t=@k+P28x5sql(tDx z{JM?g_0r4=7OipIjcBoAVnz7)m-nt|UK)KM*OKYkvlX|z=3mwygJy55vmArKfInD+DHC^;;bEl>K@vmC3 z&aTFVdNQs%hm9`=b|tj~ho^3qUei36C-PV_wH4Xc+PeNj3&rDUiuEC{Cwgs^!@C&I zU%X(nYw9?RqC9&1_;IdHtAXxtC*qSa<+~J%s{Awk{U~a8Rt(JJ5=~uiGoCbl%4XU# zuFW}fZZ;_Cjyps=ebxDT{FHf|=pa=xtN5?0>Zqn7k^K)}R}z;E-DbvJ zAYXxV`AQ|e3)yk+NlO#jSsg~{;zzHr&^7Zj8$`PH-}K?!a}LG8_5H$vJ?P@W1yX0K z`$KK;8$Dy~!vS1+|EoGr`vQzDv}cFY@Zq4<)|`qHFYRC9s=F8C_MJQHdjvj}rwt5i zIfD=FR+rk~oYbPV(-z8*bBDE<* z6UUB>bS#&$PTWUr;>%}ATKV`pTr{|hRK@)k2V37%ot`9{y`f+npZnm^=#PtHYC7%N zx5T-q&S^UVwo~jf=PjQnJJxy}u^ZZ)lz%CNa;%xkkIRd6J@HszrWB4r(UM<>kV4B`4(&F@!m2=X!y|j zc!l_U?O%)p!L2eo+iHr6#>Ds0f{t7#x7$mqZvrgMEWDx54EZBU83&Yb88oD1 zyU*r7e^#l$<8-(QhR|inxBnrZ`9R`wVH)dQiG%+e%F+h1kh&%m!XdW`{=O>wWPxpk zVL8D47@*JcUBke&`+!&&<<{4}Zp;&i_u#ho)(Ja zC+7ImB)$bhVM3q6a?@8LR@U4%+u!qyKAxnbpfDGYiSh0KR>_wysfC@wvq`4LT~3po zn4ORJ5WaX~;_z0J1gBA6`w&R#uxpQ#H*GUj;NS{`4;wNQb`KbglRT=uPdI+dq-(vh zq$J>_VPV)2x824K2|V6xn>z%5B74dX57;dcXuB1@cbv;JW461)4-WyO6(>6QT9%q5 z+6tgR^x-7uHC+7BV1JVHa4#B(6doR4dnT=O!C*E+eYPbsBEmB``1N;)BM}WvW*0l*!eD`rq1n(I(}R*0G#BWAwO^t%A^gRZCZ=+cg!C9QCPB%vNF}v?!?< znI|2Q+@rv_=N(8$z8QfxOJ+uAaP;Nj?q0<}r@ksV@a!MBOpeJmHW*xz^NwFNgTaio zS`1GO(RQ8H1(}GBC}fQYd6pgORgW- zY0U_H-(X$w6AtR2juE3i5}MMYS%Ge^heJ5h`z-z*?qYe z&u#wH^cpElxPLzVo-B(J9jj?5wzBM7XGc$4%Ism#hkeeHFjJyj6&C(cO{waXb38Q- zai94`r_P|;Ecd-s-R?$oxD6U-vFQs535l$*fLZy5M9F5$GTKHwk0#CAl;y%AYUwjW9x%B`tHpc3LQ{Me7KdTfJ;k3z)I`)&Y3s=r zZE1{)G=h>GW=jH07`^WFmMw!8-pXUv2lFhel?ts+p~8l0foH0ppW1sb6qS`BRvjM~ zG?3(SUQ@(;?!{<@w_TK>0P5TaTC&%Vsp@1$4QV_$*a`Ic=oc=aInq@@;?}K}^G+00(5bzLQlWJC*~1Ykj=Wp#^;d3E>56KtpE0u24&7O$PmzB$ixG4-u;G}6 zqQatg*ryE9ck}={dp)H%mTMN#{1e{KGyC4=6oR(Bzkrj4Zi2*lxG}Ao^45IsqlHV z0t>p3jk$Tv58;r`3dkmP#SDB1wIWSpXQE)#O&tT8oG31%Uw3v08BpoE`fC*w6}4+@ zx6Ri^lx5K&c6vmEbadzxe}c&&Ker+H&nn{`103b$I4hs-lXMaj@rlVJlbDVb-aj}v zh!U@udkkIGwbpr!#!L;KV%~O$wMJneEqASMUFqE)>T8Hb>-vTyIv`?%~-51=3Q}*9F)6ByDW4 z_jYZnmuU?ZX8fR7Z)s^^JR7!eYHgJtH8r#bB%YzLCEj0(-f-m>Y0r%)7|%@1rb#DG z%$we;EPjct%)`1ZA3UsDy**c=Sf{MwEbc<d%P&u~9GCw7t8G4P z@0OnA>jOjEXF2^;*5b5J-|&d97UZouJ3E`@?f407Wu&Fu0j5oqhq0t13HE%Zy%(@%5i zmSTJ0(aF{5hOjU&riV>WJ*Qr`zKnI5eujUBtvs4g!SJ2>v?Pv8r%ooja6=`u3yq}XsB!64a(9CeP$8(X@_Uh zr6_fFuzHs8wXjJptNiG;^^cu1r^L*_a_7w>w(?hA`Qvg7ybYhlU@)-ff@M99%16HG7Q|zF$O`o06$Des*p{s}* z5O-7#Vv@WcD;)Rq2RI@B68iZ~*Ho;^{BNncRJF^w(8qx>`!QBwelQ#I1LNR@3Zv0* zpNFELfdu&RiMfX*A~o}7iy6j9pO2uPlvH^q^1+}}VEjyp-SYaTPkg#`c(gMbA~aZF z*4Eam4lC*!~wq!8j-n+g1*pnVo<~T7F5e_bQMw=xq{m;6usoD7h>nl^< z0R0rGt&GNm6qWtIt~|N($rr2F;#mIlJ;LVl1|?rxGWjHbaAxA z`BqQLi+Gg(^buXNxNgqpoJ}Ptxjif2cd@g#C+6iPjCbZJkycCvaBVV*#$Y{U#n=!| z8=d!dx zQlZv3EgGMtGYIXO=Mq@CywfyZWZq7kJ3Yu3}Jz* zn6(S#xIX(or35Rg=O)w`EDL&o@3)-8>N2~sHOo8I^r|JNDr;GWnKh7R-xlmZBVk}b zO-@e!wNS@yjr8itF1WZqlP6wY%l*bJ(#!1pB!7aNaCLVH+&d2IkmnV#Qo->b-&s=d ze;O#P%C?oP;=3tGA@u6Cgo!%(iViv-K5eOM6Uu9~9rhRGYK)HPg;{lcR`Xx4gYw72B_`$qdqpfr13i zV!lOhrwIr0XWIn=hB1*I3Ypxs_W$F$P)bEy`Yt`pl6{~cw3s?Dv*cOK4g{Y&6soj=BUBtXddU-c5~=8MCMG7|_fM70%xy3ewAk@z zs%8#-ZX-2>^Rj{lo=;^_ygj#r*W>I_j!!tX#w#n7PFmWTAtm38K@M-p!i?$ayQM%! z+l8eRhg1>W{Nfgi_)>uXt6@a;#_qN!Xj)QU?Sq7w>T13b^ZC)K87$hE0NKksEmOoT^CytEC5ig@sSw^4vApH5J7GYTng5p>}mhz%X6JEFOxW zb=~Y9jIFIL7_`LE0NtSZ>)%jny+2n%k3ow3^O6yP>Mk0X(fy@}7y0r!>gWH%)vP-|cU%H@+P}5o5`n-# zlk*!6GT9z`ySp{JtRuc|ZZ{^^rk8!v(;t5?E&H03bTc`b?DPJvBIV=9>HB3()U*^< z>(ZvU-EF=*vOs>?7#|<6M5XMqzquKv@SN_WMvkC8 z|1Hd)XScz!ZCVHJk&%&&>P*ic*to2x{=j`KUa&LZ)B~%{hywodTsmYfb+C|&b??7F zXeM{=yZbNIZvRo+D`^+%{T7)6k#eOS@MZhQ?VdO}JN+oiOiyq4%0E8268VJI1#DjN zuPN$Rr*BX$+~ADiuuiXUlzRfo84Y&qX#S}6-<1w|y#KkDZX}36CblopeQBo||;N$+i=8WuTPEK6u>FFDto|ZoxGwzN2 zdcIkamDwo)0sg55T)j_u#mA)x(JaOWVdlN}YQdH`Zh}9J!jxZ%E^ULpv&+95p1=d1 zJA>=<_?;i-U;am{_1Ax6Yd44#HGe)V8S(bVuaj0#@HlHb8JJTP40i_axjK&K|Ccu= z6@O)kSQXd)62KMNS4|0EC(i%B52)18ALRa}qT9f=qyMWJ6kNNs^XMh#wLZcBNIJOr{f1%no56tEGzY7$YFfI{ z0cZPbrz)N=r+;{XtT+Y}4jN7{@|Rxft6rU;Dw6+yW6fNYb6wsu504@Hj}p1Tir+sk z7p#L1hU_o6d!bX*)z{zBoz+z;oZ!^a)n%?P7as1*go5#=$Gm3HTN z@s~#Iu8n75+@)*_$099B|Dz~wC+B)xGX7-#=e3yrXkeP?xx0r93X*JX8z+cgFupt_ zsq*&m$ohPTNg4AzbhhSIt=N#aNe8FUFd@ zcMTlZzfw$pZmIX$1E2gaOa1L!n{2=Hl=eTWCSkI$dNAT{%U zJVbT&c@VXZ3U)5J-MD!Ro`j1F&-rN2v!tZNB1l$NHuo?>9_*Eq1vDriNQTvE&vGR` z|Jo2V+ujn;5I|HYcaaNW7%*}5<$NPHyAkL9B;L4GWehplR@7Cz4qP_UBzM0 z(LXwixHf_xLU5ua_Jwl!X?O)g;wpJ!O%rGmaciQxl8Y8mWEI?b=Qu*svzbW}f$H}5 z@u?97nltF@=)b#99^~qQUX|5@CG)kvpY->=bq_xum-KTN1omJc(rD&wHuI^QEXE^l z+w<+JJ;TelL07BoEC2&eNB=AO(`^;;k`h@JF@FOdfcp*`C#Uwvug#5(jZ9{ButG8@ z_j;lS=#TNgb86W^#x{zBS)Xvy^GvR5SNQVsru@ z6%m9ap>ukVC{`KrCGhy<`6G*7EM` zyKt%Y$gc_nSwTU3Uj?5y5@~xhb9NiUW+BBH{F#3&E|>fJWvtip`2kBt{onQ(e8Xy+ z{OlL4<$uj3fQe{X^no-v#ayf3awd9-U*b`F2KASpF|?(wVg6U%vdXsrq_v zeb}e4(4*>BV_y#bU(-*(?fn0a%>f+$T8D#!W;wdg+{nv-cw#>#dPG3-26UC^-WpWm z-AC|&E@Wf`y6z=`Zb5;PS0RB67B~{CCvXpsSVXD4lWSO$&^h*TKmG#w5MCOUx0OIO zlET8(D{EKvZ}4iAPZDuJRQp_$B4a+{eUc8NuJWHTm_~`w4}{65Y@3mg8fiY}SuQ z%e{3uG0w}r7uS1VnORsgl*7~KbrK>n0{$5@u0F+R!=DBACLZ9iXyXSy->)(L*q5#@NJ)^!m^879Tlvd|__(9I}Ks>eK?)uc! zJKS*EMP9!5XYtk)ZxR9jmwbF*K8GCd7j!>dY-(N}2{P~NHELB^o%$1a%_S1y8 zQc_Z1j0&{kVSkrs=wUG)yG}R8c8%icr^NmH5+o zP)GrD5G`D0vy4b+O1Lr#kvuFhS9jz%A&<`hrEcUXO>kF$|F?YXujCUE1Go$bA1Gr8 zZ#Nk5JA1D97DM;I+G-kQplkzQn&oT~aC*^Whx`bnIg#58ZTR9Wrdj2Ye_jMB?A1=ieq%*YhpvCTH@n7$D^|5;FCNSurF5K_zc3~=?g_;vrEvE645il_W9@7xrx67 z!qT^7X5QfOzggl5#hB|e(pWE!_M~{nxsU2v4);Qu(l4IGd0ON&Qcg}$p~ulkTR|xN z{VvRXa}nOz`h(pzX^_l(_LT0t@8Xy&!b?N+e;3L==R1Wg4CGBu%&yXw^)Ff}RhiH} zrlwYX&E~lv3rL|CL>r|4OO-BrDlp57OFH9Vq39G69tA#@A#~5fb^?4d6wkVnv~h-& zKwC?Bt@(bZ;v<`CCA$O9>glsV2+9VVcY*tKjstyo)@#x544u;9?^9z8*uKP}AHq?I zV0h4oLZzNRA-1|hib_Nr>b5wF-96%1HyW;{qe_==1XWmH9acAA<{VwL>dH>yT&!wG zH?bXRJKk$bd^Hx0gp5IWb|dSqhK63l5)Bdis|~xzElAapJ5u;*1jbBrO+2RXQodv| z+kO&RX^kW|QE8dXmOo)|+6U4s8cq^cA%UwY*=(o`Wo~cxJ~TYT;wGmeCl?U#BS_p; zRDXJw_wh7)7aJ92WnpHSFzm;x5Vf^~6nc#yFh`V)Cg)Vkyt+rztBOfae}OIEIV{tD zo$4DUtx4LaZ~|03@{sI!YICR_vl1NziF}{)M$F6`0yCwCFt?evth`j4a1BelxH$0- zPdZJzU@5SER!SKbfh4%guTu!-cR2A!7fWlwH2Tl9S{0o6$*XXSM_^5BuLV?(8zyo4 zz@gRr-)muRz^?LDuk1R)29F+#b_T%)JMOJe!NDV$bfFKHYD08%be?|m&-mzfn{+?^ zQ1qdBr{C1@CuaFcQdKD0r~Mm0--(+^lyYf;!Nu^@!RPZRG9Vm!f?64%xSf zRbjtUi+Ilzc+wkMc|I*7fWO{BVFlB@g5XEN8y)<0bCk$g<9a-ZaruN-9}8>(6?zpHpw5x~^*N>xxEJ=L(fttqD%8&YKEb9F}gB zM$h(4a@*+Q+!c!3f;1)_1tK_9WZfML#OM9lokL6UX1B3RL)1wHHn>-PxAMs5mFUPj zmdmX=V3@hsgS26M`?7pai$L*=-d^T>oz4ImX(%0(g@IQSJGPzEAmr(PW}j~u!4&kb zBM8}SufGsP6jC7kSe#K4`09~{AJ=DQY3s>?lO@_mov- zX?-*f3UpRSUx%2K=H4Xjr`*>#JcMI93D=`l4vr5aUZPGm3}s=vo{_HyD}cq&8rQ+L zoWVH{;#TOOUVPT^sOo;7ub&9RmM|IRU>I<;5xTyGtd75HTguWXlG)nYioqbxiG;1W zuWoco$9uNcze9NHyuIRQlQl=R?H;xC7-GdtOv9m(GJaf$C#p{WP&Hh1t+S$eSpFTU zG{T`c9*1yQ3SdmLjyCKEOWwG<7&|lB%`r0>?IEei_-)yQhMDq`H`-)NpZ4VhbTta}Cpvg)Jdh35VI ziRmmS02}POy92w4g4lVOT8VftJa3w}oN*{J_X?}$7UFjtFw;j!$}aR?lzCVyok4x7 zWYfH5PA*+ayed3tm2H1%m*Y+;(`nSv&T+`%@a&Q6NVcZsyQ{}xL%T#4X~I#)*70%8 zGONW$U_fJ+^1({i?9XWWu6;1SqVQ=11Ro!tHnGvy`kRxzeJRc1CVWJ*Ow;#jW_r4= z@xZM$V_82|{odN7Wr84rx>S8CLEB6P7oA^UNh&9rI_G&*Gqk z9LrsaRiQJwqQWlz@=KB39TB zxE(_Y_2yKP%WQD&-zU};3AD85KN@;FxZpI#%q{Zw((~Vfaic)^T;U=K_yFD$f9$|a zp5X7<>bgIan~}A4ZABE`1-TBD3+MY2nr>3`kGSbnxe=944L->^IN8cGOkz0ttnLaB zOch5An@c0*^wcz5^kAdCASu6Gtg1Ms2SrGsJIj_@HV4I2ovvj(CL_+`S~HMu`O;}c zaVMA$2(yaGVYT(DmuCimR?@*DOUPDVKw=-1E><#@Mg6XcN#@2}JPUMF;n#3!o{LrJ zariwU32dukv5HLuKbcs~wC#I>jrAz4-8QNU+g%Dybhy0EQ0Y8@ZoFHh0Tokp!Z@s| zIm1c}`6?ZmrwgpicEQ2HkDL$52a9A>RjFIT>B579WguK=*LVBokb+jnmzu6bJxPef z%#2P;0}^gwiTk~WOmbxu}$lMLI>pf(A9h$E!uP$eiwdFk- zA9`kHH}%6y!Ja3!Y&U#xzan8Y<7=T3Puc#@T1Wx%2Z8!#`Z(=7W_317OTD@ zCY?UhB8%2RV&y7#i`NJ&3f(SFi^$NSl3or~&XUk?-!f6HJ#|{7dDDoD5A^ak3nFL- zovuwA%O#)uV`1vSgZQPwNhuFZpl&lw z+1#_WN8??G$}!Qj@nD>er!$XXn;(-|Lzsg`-&kwDZVhg*rG81=T(j_r+l&kPoKW+O z=x%!UO_Gd{txEwe+V3gA@?Yt9Vh#gE`KIdxgAm&sbq<6-_+d!Xg`sMcQ!YJGBlKu=4qYQ-mqKS1-PuP%tX1;VCKYY9zmu(ZFQI5vFgs&)nCm5 zF!mPQCm@|4+xvRTF|Q5jhX(hrl~5&WfMKL9rMBfXg0|UV_~R9cH#6mi!xkBx^2N$b zvg5|2Zdkp5fg03bI45o8dyXx~XH9MVgbT(N*MO#U^Wp~O?X-;Yf+8Ia-w^iSmR(^HD-9#M{;E`>$J+ zH4ikbdAkaKGRE8@^|bO1Vt2JybqZrGQ6lWc(6zAY=NPO2`^BL`1#K2~CisC)R*eSI zN4o54NCFBi(Y=H%6@D%@t2h*3m)U*Z+41^`3Dl2!KMn0|*2j{M*(TgNRiy~8mZ9-g zzl7OcFWQ`@5c+^-WaOOo47#{@qD|uq_&6PQX=bLFLXHZtuI_AKuW_5> zV+cKpoXx9ZyyWEMsrh+|B`yi>W|0=1#V#`Bv!n84e+nm@*mlQS?8U1EMAt}j=c)LG zBNjb3zLd=A049wR+`pf&ir0^s!(X8Bfu6c4OkA__(JhJqAt4>CMIIf1uB^}Jc+IoY zI4M;LvA8#Q5dyLtxns&UsvHMX^G$dA(NJ-SE83#SPf|~0P?Qvw<-;PHu>v%xbomeZ zTAMN<8bNg2hlX!4$oMTbQu%|O%_2gvW`!d(;F49Fg}m07g>q!0Tt#@C7nn|l4u2@~ z<)ReBUn}H1w<@_WP+eL7qe7T#Y#Tab+x;k zNb9Rx30i1O2e))^aL6jGKdZ4CeSLjBlYM@^&sOAklrX3f!ea}h^F$_iz-(8VP}kot zm?9CKaAGG%8s9Sb1mtf=M@~n@Sr#)*K^{??pR5wM?E|n$WBdFWcr0g~jQuf?a$SRud(93duO5u0Wh2vdGb(=pXtj zlXJI8J^343_)#ho&-A5FhF!*^OlNcsk)`L6!gR^dFhjoFe0V0lY^V(b4Trh)nD^6) z1d%7DGHI7P1t``S&B8Ev>TBIJr=TpoF= z2Y-Xqs7`J9n%hZE5Z|RI$qG z;8{-fBU0DQSPnb{$ryeXYZ!|c;f)k3^;Mn~zWlKps%(2I>U0dJyPlq-bJ9pZRD=#Z z^agdyoP0-f&1iKf&8^r78zrxWBKj2`fO2 zxZZv+e0cLJ62n)kUVu#*M8}bI#gk2ukhO`;9yVWI=p@NEUhX4Df_8#Cvo%EeT=p(2 zE0O(BtE9-WTb_z$Pf4oN-o~tr>8rfc&cqBDXy5zoU6c+Gg#9d)E)OFlQSnDv<4{b0 zOidGUm}(7XrUYna7_rQgVU3-6*x4WH>-MOJS2?X1P|?$MEI*x1`gZbGWLTWmv1a9N z(c|9U-mTG+yU{AKTURG`12&5WEW{vr(iTZoSy^dgt5K#C6dD>jl*}n|XJbF&Tese) zp*V+3%@PIB7`*ef&LcMYCP$-TKc}rxgs<;C?sjxZ-?n*f^Pf8puQB%OsABG3xObN8 zEbU|K=H8LUMn?HP;3mJ-eQQ?jU5xtVTdBLp9uhsHZ9Q63LragL+%7^Hs#QiM zr-`KdN)Cyu-#ERk7uoroPTq%pJmX?_wsI|iyRo$IZg>Sx)fg~|cR#<8)K^<9;EZ4d zPK|%o={Y8i*hrR_!ayTfG`vC0uZ?ryg^9 z$yA)3tFs)x3m1G>0uOUnFye`+tMoXu^eL~PV~bA#p}-Oni`kTcD^8jT+n|G|&btF7 z%dRW`o~XkBwvQ86)x?2o`?Jwl`Jlz%!hH3!_epx~8Y-pTsgh98G`qu*kU-32zx7nw zB_b6c_%n4tx*-Q*S!TO;c^6EX4|ZxqaZhRzX6F=nAW}|n?+RP|;wxz0w(u6{ zEXGT3I?ujy)a=iWE_jhY7HDCy`C|L!$z+m4677)~i_2-gjmZg$AaD^}raHWuqqR=c zv08augfO{IIKN4cjdYFFg`GYvS#4N)>rO5k%7;EnNkbEg(Gu}?{uu6BN2)7sfdW~b zsC-D?E**4f++u0mDjUz;-JQvJ$ZFQpVN7MSH$y>0LnBVZdZtMl4Hqj_y&pxP@2>rT zSLZ>wCsM@PwflIb%x-rtApzDw6_c2#ly+Suqr|MR32Zm`b}8+qKns3Jd#@;kc_n zv*^lu#^;HzXQw>JyKRNWel3ay7f)G=TAy?~&}eeI0EK`f`(UjI=Ql!=lJsF-k zay=EUD&}F#;O#SxvM1K%n^-0{U+85XIQ>!n{`PiFX$v1H^4Cod3>w!Q|T2uIoEQQkoYy7j<}I>AAc%imubtG3lTPsv%}( zpy(ElDFh!srY7a0QFGW^qFwUW2-jX8;|AWgMvHC;Z?Af=C*Xj6uucYM%H$X%wMKgP zMdBIf-y-$NDL#gQnl>YlDfRPGzI+|xAw14F-?C&cDfDKDJUZIHY$qU?=|F~?*7?LX zUvD--M&UEHS6xa|;I>O*Q395fM5XiT87T!xD~GU0TbY8#&%>;6g^U#?C;b)+C{M2X zR+!dQ(|3(7<7&#qA=3|)K9kfQB6Q%yC6g%@**>}Hx?4OSXQdu4TByC`mM)Ua^3?*(d990|RB8=0w6 zss@O0wQuA+Je5o)BW#t2_#In%_+SH_9sHT0Z$FaAsk43@v81uo#E=phv;n{P5 z3OMDW%FnW$wkF6}4#q@?>SraL-eOr9si&2F6+^USBFk4brBy~EKb>fcWPun^_(jtu z(pQP2uoY*oFE~xl(~Az}x8vyw1AoIH*{jM~$RUndJSV!iEqacl(pN{Me8c4Qa=E>%0~LfJ=UzH`wy!>7WvBNc4h9qEYn>sYwe~;p)z!wSZ#? z$z8Bp-O6ap34_&*&=qVfEjfGf`tV+7fkMSLEBp7ic`n8Zt~i{(=1|YvbL#1 zY?>3mKFUhC)<5J68#;FSF(1w3JmIHrvyZ7C>jrJjMc~Z(5z?B!Jm(Up8w|z!x$d1lcQ0;q%0}+&adQclo_J~QwaE8)+3osAg)cwlVlgYL|!*6Afk&z{g(u z_Z;PJowvjaD4yb2Z_8c8x~6oglR&VNEU0c`NAw2A1&Q>4^ge#h>S$L$IUf zyl*Qh7CPfXHMPE;!<@P1yE4C?8r$F30~qRu`KIGMvT*OTwY7CYSEcp7tP5qC9N5Smo`iRo2i8FhC4D*2W@5a&T6;f^SWAoBn4>{*kI1;_j;eMzAYWL z;t1>lIe{M-DUd-p94(*_XJTR^ee~#g51|kLOM#(KK*I$Bk7qcEdG|Te2LiB$M?u_~ zy5YPjO8~)60fmrIGm^)-EdPb&s7b41SC`J&sk4fP=y{(jDLU$wzK{)Cg%g$fl;8Q$=X_CD$5;^I)MrCw@m!y z)E-gii9!tn^(=IonVE6vN)|1&JF;7zeH?mYiqQ4=S(S|q;5n!Pe1tH}dcJ{yIh|Ub zr{Mp{-<4r&S~290KRjdB@am+@R3><5IpV8&L_`=gm`pTOYu13fsv-ttRZ6hn8{Gc` zw|W<3{DE(lYTW(6mGFR%64$tduW)$^$VWujY}ZcB`FBjbf;Gs^Eqh_{{P|Zq`~Hfs zTBZ-cIfUlEsv{+R+7q1QJU2Vr4ESg=dir+qiqnrAisBLyK_;7HMMn(XuOx1 zFRd#4wBGlB9F|+--84?D{k2g=G{+rOO-)T>t}u+SDR3zRXsM}1k(1UVMn=@Qvl2qa zn%5ekCx_I}>h)~oP1088T6v+HKgGBmtKDFl*PzaY%Ux*9O7>noeSJ#@tBZg^tmIZ^ zz`VM2*KR->`US4Ap1rvrI8uhv)X&Q|1@9mBBO!#0i~Jev^G9S1q-x7AmCfBlvF3$q zpotcC!xrqthOu(;p(Q5prMOqZ?r6B=VG9}IOTab$`=|6%+&HRYn5@gxSDhXAn#Po1)Giz&Mp&Tx1BB3{?^YfVy?%fNW_@aey4>1_z%NBLthc3VE z)?4V`eIK^#YhwZ2&2b5A?5ou4wb1V0!KI`$rxy!d#GVwPb zk}xQe68p?1Okb&e#KP|ME7xUoOajme!_n~5*T{8!w)ZbnvZfe7xZ7^E+UUB6t&*bp z^G|Z#J(-r^PxWsJb{(fbP=5I4sUYt4sSG1r7^i6)KC3(b&}lx{{*XZt$0d#f!0Ve5W(9p&^cbuz$QA2vDh4u+^s=0!5XOc)~HWOuB?UVL>Kv` zmKK&?!niT=bNK6bzL2*HD2mqP6&4ZcTZ@Q~NWF!MTXE17lt{{wZL%G#Ef@gp%Zm16 zSq$IxYnvankg`Jj=WBwSeDCsBB{X(!g&_#B^bgQeDz#Otk}W(G}_fym^og?%_9W9$o~qtKR=pSpQrCmX-6g0B+RM+qY^|UB>X3f>uPIt zfYDar1kkrthcf=qq#GZXfg|3wk+GBFN`AbBnT)F@^$aKbwG!uO7zuTo;$|~-gP|m+pI_fclRyE&ZFT|uEsCP!+&4{BJoIIe|q4WWLB7eP(pjIpYlo6h!eqq=p#&O^?Y^4seAZ`acg@=vF+ z)F=ndf?QB|$%xHI3t^MlDadvwA-HrSKVm+Nk3UY>98H$9&l(M~J)>nlI1o2-pSpbZ zj?POmdQtz>7wbw%e!F)IpI|{kE&K-ocTvJT$Xp&;FB@T(hvIXSi^Y(F5#Tbaved)H z#zESR{)3_BHbJ2=q);f8N>E{soUr8hdggb*-#2RJ%i`02Aoux=V#ByFa;YQ6@xpxh z?CsT!{fcys$D$x#&zSlwIqU{u(3Zh`t9g`hcOEw`$y1-Z9B)2(d2#D(1QM&Lgl&yaE7E9^gG>>NZj3r91(~Q!mCN}% zj*5Uy4h2&Lk$Qk=33{K>{V!zzZjRhVswmc?#F-o@9oKu46G7LppMb?D)^z>AvED_(o*KKxc z>Jhv3QmD9k3%^A^T40PCR$xr}O;SQ4qQU2N6#qG}LhY*x8v48E@A8GQsvK0l{A5gK zWX3*-schbBYL=GL7}l5C8k67F1=KrsnQe7-!lP#D`DR-a<{pWY=6}5c5!lL0y!Ef^ z{u2%K!vsM?QmM|I%d_jlsKZ4;?Sl9=6%|!is%dbzf{M)JmT=mjs3@EYF*CDVu{b9A z@`{StUz=is#nu^eio=zsWRE*!-V*M(Q|Os|+<|Er3v=fCpkCivZxwslK{ED|!b$aD z$(3Pp-trxaXq%DQcWyei_GmkobZGniOQ*$hW`XLTlH`-U@>*1i(3O?*--fIX-#LfZ z+8@Fyxp^x3+jH?Vc5hNzjnB!6&dyF16$y!AK-agCYmUCMpZmG}Lli+tAz;_AUq}Lu zlWJIQC-*L3l2CBzM)|K1`06FG&i!*ePaUj|;ru(`)E3(9C-A*Kt*#ZGADTCDCE5bT zR@>a;Z|PW}Tq%%}pCWs`!<5;XVP_^*1fZCtjo19;9PcS^MI2}BQwkz>yB)hlm$8pS z4E|30MWIGYs}e81(q92d?Ul2+VfK~)=&6}-bz`I8p>HHv(5OSpSnoF3`Y+;$rBcU) zJq|is+f>)fKa`?CefW@SnnJ9HJ)D}85X@>=?qBk<&NbK2$j;O#Y9{BUV*xBFPI7WD zh=RQ_L|2D|K1l{9)Oi}}Hn%kEbbci?9@3}B`u|B_L~kp(?Dq6e5#kMLX@_gg%+OhL z65+MwH80W1U#AqXl5x*Yiq)>C@YBujBix|I30J19G=8q5!uv~5k**xjDSjv!G8V|n8 zaOgK)iAvkR!-LNUVJF@qGVP3-CzkA-la72Ft+JwlpFAlYaV#y9qLz+SQd}&+Q>Ire z7arkoyfM7|o$IuQ;l_pG<@i+nnNd4Q)XJA-XgabnbToi<*jH_IR|!d|7%xLHE3~|v zt0lSEa4Ym%Hz_5hkSM3sgxktcg=l+8j9AQ5{@S{_!j=lhZk_Ql=kQFM-M7Gz&t|~> zQzmp}L-jAo_&H4)*x*)sK9Dy%N`sJ~?1m+^S;Ih=)M=kVNv4c#1?c2$1#B3xm5o!s z!9Zi@)gE)VL4>lFHU>72$CH?xbLz?uy!J8_loDglZe5GjzvY*}l{W?l0PczeDGRlF@QwcUKirx zOLrE`OJMY4k8(N!Ajob%^+Aqh68?>NB?1Pj{!6VL-4fv{;i?Xi)nAk9gJlz~0tSJj zpQ~f4%4zSLbML$s)qp7aua14ubX*d4#E(ejK{>pj$N2=&7Dh@7e7PNCcxGlr!$yOA z+E@HDO@1(%cj+M9&G>&9`|@}w)VKXZTC`9U*~uV;Qphf{j0xGZS4ehQ#=cZa$i7UH zec!Y1rcyN4vNOh#-7xmu@O!4H^ZoX|pZ9nEI3MSn&d1EN-1l|g_jO&*DTsvI>U%46 zl@eb;{9&Tdm6d&Q#h^$5G|;V^K7VnFI>#zMYaR&x=jKR*aP-&%u-c4D7b*WUO8i62 zU~tIyq>}~dk^C`Xnta>JIU`8;q+%O)PSjT^Hr=hMloG}9Jf$f6qKYMOWSy2(=)<-` z_8Y*oDnkcsiE^_{{AR}H=9Yk)N~sSRKc2h(2$}%P?;5zXzk38_w3-K-*P}jp@utSH zy-{8)qre&ek@#glzYq_i}@-GHHVGI-3sOQqwm zT)~sRW|CCBBr0ohL=?XI$_i7}{V4Qz`UNx{3agrXU5Uoc=V)n@Nv^1TheNeG%d9b% zZG-F#nFn0!<{neyk`WM z&OFzyIoW31bY1qf8XVcG&JYxQw2V>r@fnYHg@yZzyf7lM9&5?&8#sQG>8m`o=~cSXmqjll5DBCfWjQ0Gqy*gi ze^Ncqg<7?BUR-Gwg}8pAN6@N24=

af`FIldvIjL|MT*d%2&|kFw?n4OUy!56<=n`~kFnBFWMyzO3a{BY@pKwc0Y#9NBw@I?fgI zKK>&qaUQdjlsz|d`6y4m>yt3T%wODPqb$q1kJ9G%Snh@jGh151>P&2|riA@XnKIj9 zo6b<$_hJt}UtU^Y(jtxuG~FsPZ9;R-3U=K+b&M<48U$ubqUI*=4x>u@%Jb*X_mw0W zo@Nlyps3=o00gO@{f27(dCrgjUtK7xwj;AW-jR3qk!Jcfcg`s8l~P0w%78Vy>nyjI z<@)jK>=|mLTZl=zjpNo(@JT@d@UrSYE|T{-77o7|R|O-hT`fs@#Ab@SPC-wZG0{z~ zfOFWWr}$o7Q12GRHp$e-H`9(U{rGT}_nS<@W(MPFgPfWs7i_I} zA+S=qM>{X4s2EU`7@r!&t+h9)Q|1Uwak}gy1tUEhI;d8J`_4;*!Y$EH9|p3El+#^V z5vOTyC;*ei%V}w*@Svl|k3)gu3S?#TiEw<3IidiU{O;YLN+i%I3pkY<)Un+%cs_$J zPq6BHuf@e36$c$yB82N;^NX~9g=?+DaGi6T5U#(<_g8KdAw604J|^)BWgcTQ67JHb z%Fu>Ay4C3{r)8_5s(U3t!mdz*Tl6%Y@LRxN8nN|8e8}V-;BiK7KZ~62`?0v*MjY<> zqe^kS&!0lvBa%eEw^n!X0jrijTR#WHy;%;WSKa}pIXMppvb4eIMLB`3v|BU0eD%2M z&c&l~4HbY%&@Wlf=1ZW9JN4I)?MFA+aF>8L!%0oXQ*kEiaT zM5B3icFLg-)~}f>1NqIe-OONZf-j))h1XaKJDG&g4;NQLF>9wzM7H^J4(vY@m4$uu zuU8b^f$&{7$mV)0$V3=9ZW0+o#Mo7d>qR-O8N$^4HWX|oy|VIit==0wFsSk`@J>|n zvY8|TYt64~DWq5!_-clCizDP~kL^%o(I@ci#YC!l`B1cab$j?OJttq;@QVVkkANc@ z#bn`TY1%C^d+s6?C+2t%7^0DIq9oZk)~!_=oYF(q&?ioYgn#&^AihQ5JPc@1Qi(Y| zkGByo zG?y@Ha-5 zQo${1-GPGuMXe~p*U{xOKFWtoLnb?82PI*xC`vNhkt^WU=4Z5G^!7a$X9VZQ z$Fa%A$g?@1Hq>fdYrCTR7c?HIzd3b~+!kF9Iuc?;C6>MU_C2q{bhUGGawY)l!A-h+ zCgu34OrpH0-BDM6$Fo;s-K~)04DF$YtQnT9gG=?*MNS`M&jf3EqFXkNBoj$$pE_rW9YrkTyPz7>18P^yaT@!+f;{l{Ke%$O%>c(_Tv@&g(>z1Hn1y=sTnA7N|gaMw7>Np!+r;70Zw6-_}I=059M2}e~c^I zjFNmW$D1ZanUE4DW?BKl`5N#2XiRMu5lu`;?l(#K@ss{+mXXUVmf z<%3?&y9D3Mya72aDIqcjXDSkUDTLmI-g8Jgv_7Y9PA#g&7}-fNeFG9GJFu18Yg;E zVQ+oGJM`m}ejZ6xa4~lQd#;ORzKNBNO+*Gx!gCK((4VSfbVGo-5)8)s=gZ}~t_eDh zb5=uu;-_&e{TPJLYmE_g2Q$4W2zKL)T)Znfu!#&KLqF6g@;$78ZI~i7cRTae*sXJM zJUZ}%S>B!mF+2bN;A%S&16XkLzuJ?`K2kfsha21z78NLd`s?}** zRP+T~iAywk+S9$W(Dy}S4uHQYu5>1{j3mq(=#$*4CLnw(iCr4K`2A3})@AdaiesEa zL-l;SacMgJNO)2z@6PQ26*K6a;RpP;`kl~{6*xcI*^M7#JA6IF!D}Za6Ydd*^UPTM zv-?tIpT$p*uR9!6$z1iknLA!tq>^IZC6XKh9S zx027FKU-j0G@k|c=IZ1*Z|$CXWa(Xefr{#Dz(iSf!R(8hw-QN-lj6q4sY5)#Qyhy+ zfr@tX+JwLfSSrN}-mqc+@+1cEV(nT0;|X{BeZj501n(kq`Pw(03)l`Q>08YZ>r=zw z^FSLAr?)?re0(@;@eNM5qm5}eg2!mTS42-z`?(D;=1zl1%BvJh_%q$qO2@3G#*aU? zvPh>@V32(Lj(%`6#jxi)bhxm1d@cu9h*Eo=k8~dmQOlZZ5M8D&R{+JI<(82IJm~x* zreaR)^uuw!J(a8#7*CEc5eiV*m%EL%VY23hLp9|g1^P>?y+2Y&RCDA(M)BC$<#DS^ zp~Nx|Iorn0W-3H4W~rK? z+GF)Lw_dDL!aj`DW3P)n;V>tH`I-pOQo7RrS9kHOR3iRhauVw;e?mcUpXjLX%Vt+^ zH(8zYAwtL}X|hg9+h}T=FfbqM9I&;JS_bdxQSHCCo8NPvs%4S2q(5F!0SE__y-F{| zR#O>A-c?$}nAGm4_rM1=dtv3I>Ln`!1G@cteR#FFs4RmO^25B5a0tVSfAaH1_K9l) zEwu{5!Soov{j8tbVu}QUg}l3XUV%|aui>&Nb&h-#g~raugm&k?AJfe?5nd5qNfW{+ z706DIMHop47&RB<<%P8~R_QCAnsZ(Xo{fi4?^fdSuEu21nSfsM0A}Hb-z4;&BW94> z`pZ<&Qs;GBheGZ-$b-o|J_W0et9ia6Q)6}KVQ1QK z{qH^)V13Xkj1{-L64Bd!RoIp3X4~HIZiYz7y8YyBS*!d!v{j(b_^Uof{;8+sr4rpe z8r;M6K<fi7yxqv=^9Ny4zCr&0@?>w>%nn+5u|KPajGI45BM; z6E+BVyG2t_EN$rEPQD+cNF^K|*qK#5{tc#r9&YQ^etG$6bKR|vx?$b=1BL~+D_ri{g=Has_Yd*TN636L0I*X&0d&;?USM+sK9*GO4J zl@U6iMb*Ie?Tf-8b3^E$Dc{iQVpSFKQy12QSJE;x5=QZlUOB71@keBIoE>aM#hj>i&Gs>aWA>!!Jm!iX zRSk=(5-pUQ)~3A$z>;+TMAH>3oukbwMlAF^S zE1g7fS)Tn{?HOs8tPw-Nor7=2pU3*SZ*pHA&b$5LK_J+) zkg9ROTb)qLv-yZ(EplJ-BSWiFHtxcd5ok# zHAj?!2~(;J=i5>sFx-}BjW&I4!PletC&6Fcw4+~@F`)uI8*><1LI9QvXQ>34N`=)## zwrxdTB!QIA9a&Z-zJ2TtQu*~yk#SJ``kA@r>~P#o|R&Bv$^wBoUlJ~kDNl(z9oiaV(xSLn*Cg>cYo@W zLq-yg;{YY^kan+S9uz@N)QX9dpI)4@CKiy9kuh10G}n~?J%R1>;sr(onmqZg0TB7v z1F?_a^T$`1T@R`WGOP$}cQ?!k`UD59zU1}vBmde)2n@u_YB7PNfF98oYAnx^^s5x(!GxH0cU?HvmOI zas6rBnKEmGG9I`>e4bd2a?^G75bNPO9yBr!jpgihkHv-A%U9U;5LHdGu=dVbd_PvIh94{Phi=1V zDqrwCma4hO)(}zj$pbN4p>}y`QZ%(WbTt2bchfl29mJ{`QzM@ic(&c))NaH&6qQkvyLXaoTTSR3U(O1_nnEub<4I804%y&lvo+}fk zbl`cL(suy?Cs8e8kJP!YT)89SoWCP_r}d`ebYiskO;(wcr%qWn*+2EkA)e*^G;8x| zwh;H+%yf9*1zC!WZvcxj1k#P=Yu!Qf|*~EI*<=AEf_>}irvFOlh= zPqHLww{;OStkOdOuKQ#F!B2N7EFQ6kS>p*xumSPd^<{{|a? za|39W$LQGq$RU0=PX9E9K${OM!E9uT7~gzq%=Tp3gfs*i>JzF!dYZIXL{&>av4%=W zgR(yTnNU$8W_wyp~I1U=~oFS?>bpodp@tjZML1oF-X~t_>+lFg;OJ`1& zLHXL7qe{Fb*ium;-4%?mYvm|Lh>_j56c3DY>QfmEPFx5fHhui=>fSDqYN$0(}GayPF*h;ia}Y z6Gb`+@#n#7o)c`nyJIajy$i$FWL#a9j@TBc-q0ugVSQ3p{YZGD;S&TTC^ips$rDpv zG>JE(A8JFR_42)*6oPn`kPcH)3i=h#h{LVF{<#OV=Rpp#egA;}zh?bsr9K!R{be1{ ziaZH;%v(p6eQ;TUy%HG8FG5^$w_Ocfw(2lydTO&&;u}hHY=(-7%BI_f<E_XvS$(w^h&P~Ihk2I`ORU|EFXcl+6yowGYIo4hy_p-I_7FHEtevfTLAU!Ts zbS&B|&9X@$Z!nl?C<@%u5*k@NgFiKB&;bjT_ngL)Uk+&Td8iW81XM%2QJLjlji_Px zwBhrT)nxU?iJV5Syt#DrBJW4|nJ(C3s?Yc}WR*JbK*$VY-rr=2*&laWlQVXA1-htL z(P8Tm`a9*|Eu zCz)I4{vkrO`lh^9f66O<{A;f0ei{O*mrt_c^@wgz)M|YVm~RxU@dpFjlNKH4+Dis* ztG!KG)sUQ9?`1QJR^6f_Af`eSpczVFda|J=9d-pa{EhCv%Jtl*;pF2iL8siOBIQvr|s7brwea|G}iJ}wx_%R zn|PA^74A2alHtxl#jG+B5*!@;-MGO51BeYOo&mW2gC}B8t&iJ;8ml-`1{qopa2d+8rN?#bx9HLc`*>LZ~cP(;!*2YHrgdB)M*y@#gSD6^@%~I5z$<- z!J!v`o^tLHo9+_e;uBuCCo1f8Q|X#=7|Yb2F8Q3Mr$n7?aAviUsAz+MXTd6sL%ddM zdX*ZQXy@~ubu!L_A@;_d?Om`a{-*#deN%3O zKGTEGD@AexG~`u*j_SOW&HM_mELmI6Rgu$oj5z(q>qT_rf&Qnb|J|RJ~4AJ}d@wve_pYlm$VmmhZwG7IRc$Nd#uI@8Yfj^}qCUPXKeJHjcIrL5?bhR;APr`1zQ~OQ-%m+4-jcYq8pk zL-DWPluyPlH50H?aV0oE5qKYK1j)0+z@mL?Y`F9a=n-2G3D~)|6yQREtAL(RT3k*wBhyfsnxMyWa>t`O zgSxkgxF*r{fND0-2lOKp#DiP^(foAsOO93R}R|0Y==?da61`bhaY-J zhTt#6T;+H8YaOp1%)dk~O4iH%^AyewkhZ9M;_2guU)}B}$Pr?sH8^b5{3(|n9gu6U zGu^h-WM!@_O|4XsKU=XRo1KP}7=!@IGKFiw!sen?1h{^-P z>a-G8r}((E^Y7Jx6N2jh$N2gGSe?+DCN&z`nouvTm*?Z!EX-1j|Fyd~@G&G7l#P=P zX?=gb;Qio(-Cfbw&AkA2_jUBkf9)>VI)YW4()E{8|0Q)GA`y8<7?t`RG5+x99R2#q z@t?zlzz0U9|8qi^xxah*Kbgs(z59q1giRrAy2ju7*>b91E&Xz@!An1ZezN=Fua!D} zNSuAXbY1`VDL6PNZwZ}{;oMj?(!-PU=hEmNoWJcSgi90R_b+Iod?<9<_~+u)|30{_ zX9@L415ei9dL$d(!%F=_Kg<6Duo-@8!2a_zOJiicn8_kSPhIS6e%A+Zb~ zWh{OBlQQZLQby+}<3C6K+kPXFhH!dYE7&v-kK6Ah_|QtIn`}#cOl)nLW?~~Do;$1O z_-q&CVk|APO;vQ?0)}nk_oB9wko9R6V7(m`L?@{5;6YMxvQ11Q8Omns-t=!N^|uEH zCDhD&@@G%~;Dui|(-zSO{ONTvuxOoiH^jcg0L7#&xU#n7!@~g#&IK zd#@(9*y=a^87d||qxO9@D&F069qSTPHsWx!T7vtZU(|J=CrbC)ulVmZ_=gBcBUW5@ zsGxsqRe%o39beZ?9M0sjcn+$dVAqeVs*>~Yn1!n;tEeD)4LzX&0Raa2ww#+S#e53) z?qyyvD$|hIUG#(%HF^Nu({@OcUjN5x7=o9gKP!Ud=rMmJ64~Pq`XQX$JW+!+`Y2Re z^xJ`fo&|bmt7}hvLhYb2tEbNK@%0z~IK|1`WLxN7`lx>1Nk7m0YwgcHvN~AG!g&Vm zzt>9vjIW1OWB=fc!$0Cp{VC{}rXASF)z4j)VcMNQtu`K|@1y?uZq zFl`!=kWjYGJ=S8zAj$5&o(ctm`OYGqFyXCj`80J8CQh*^PRmJgHsBJX_d}2&yETw; zGr_l!-NKkx#7V!-Wi=aqZEsy9AHHOFkp$eOk)*?*dzlsU-y4>wc@&6?^h%2dPyarx zhm99qS;B=aKck=}P#YPiSWq`9#P79Ba;7{r^|qnw1RHc1iM%!U>eUI??wlu_(F;ey6A5^NFi#48>(# zcDkN|h)S2nvKwfu-00S$X+p9ag!3f`Wp`sA$w|H+QMj z7P~;l>rW&Qp(Cv?xPZTFre1M#p#fI^GKOFFlQD%!Ph3HO(cSmsj2OOQG53g3y2|>B z)8x;N{rv2MatD=b`O_rU!%KJ=uqz4)gK0YQp#0zUz~LW}x=skY8*hNcrR7NCEqnYL zvX}UEx22QcxX{pM$lPF|Os%7f*vj0grnZ)(BK`iDt$KD`%iQ~qTFMaSO4ARX9v&vZ zG?XHL?zO&}{v|rW+^EUD<_i=Q$#X?wTF;(6PfJXc0=8&rBz4;5cN)EIK(mu-!n(6T zlw&<&Wx-1cD+4%STfm!fphR+z{^t#Qx=lEnu{%QAcrUx(^u*sd=l`l@h69LD)|3}_ zzsWeH>3P(6i0{L6Di-NfT-)3vNfmlH?}*dfyq~x_htUHD8z$XN6KdIWHdf;&PM(Ye zk8A`cAd&P6Du}KwjNDtx5$F`_wP@@VM?q&aj07#p}9=ldj78W>wdGA zEBy0E|6Xbz4nq0mzT7t>`rn!R#7zQ@sKXqGaQtUtGu9MRW@GN( z^`j)%338}VE>Tzujn&lXtJ_e3V`vsa$5$#)TJ&&BjgyO4uqz*dKsaJ0b-Vu2+)uoV zk|=>G&!M@%L>#ccOqe7kp%-1sZadDi5q*51_QpZq+%ga}!ychKbi22gXcUPHv{#}zo#Ip#$w6e0Yk6un{#GJVy zP0JLVB2j4^vQ8@DeRcJas;PgLv>V=f-uIi^^olpwCzk#sJ1-+6e{205ftGh!54N$s z6a^S@^EEd&d^I9_#8(#IkU;7ARXvV8PrWyT{%(LxEg5lqZv8^Gk^2~tZXNAqLWTEu zYPQ&LbvaIO4X7#E_HVybdb{?5z_C*iC!aabYOoV@wlrZjDR`!08L#SW2Z!GnA7eUy z$v|CB@lFDZ+FJxG2RSYrG?L>4WPdgTeCQ5qTe%yKM~TYMUvxq-v6(id=?+_1T8^i< zKZ2RMW^sDXOHS~s?rVF9zzAI_(8!4C;0^kH6u~v}*&<+?$&FW3e}|L2pO|I?97p_z z*F#`5oAL~>dJ`WAxZGUnyVhT1TI@-5gwrfeKpI%IvmfZFZd9`g+;wPLV5AhNDA_Bt zZ6)@H(dHlbZADuL1#62Y8<@R>s_8G|D-WR>Jn$NE93G<>D`!Pzz z`xYf>*{vD0eRg)85BpcQn$-;T??-6wU%J7i)v&+Kr+d``FSb^tNE&=^W9gK=-B<{` ze`sjPel2jneJJjOye8%p{l3{SCB-MkPj!@n{m$ploiD`E4e076l;$}Nds^i6Sm;?} zbUiioo){&*y8QK04m0x(S&=UfNl}=m=f=?0`aAp)EiK{^gHW%Hl`IE@L;F_30&1s* zzD?4MN)*$J-q{>&KAnSdu3?5UxQmGQ@=3VwT5z_APdIviTTOrsM8>|u2^(HnVQb{uM8~bC+Uy)r{uyPjaNLIzsjvAq*h`W4`g|dIB(@w3DVaA3 zu|P>OMy7~*B;@pQcPPI!a>`hx^{#wkiT&hk+F4Uh&*bpC$xAppR1{Z56Uy&upZL3O zK2MqnoQGL-zJJ)vp`{4#ZlbMbRq2Au_XMZGs9*r_b{wO}8WnBQadL63S9yt(u4ZRQ zMvc6;3mMAeW~rQ-p5gyd<&MpjAD)2Yt_xX;p3ttkg6IIW>W=U*abYg*rt#Y9j0&D? zj!b1dW>|a{y;o|~JiD~a=P zQs>P>!29)9mSsIt!E8*;FNF(ws}`)Kmve{X7U0z87w{cNUI(az!( zCjuq$pC)Wj!4j?MdIPT03O( zri&vhVq{PD5G#Xw`z|5eNzB9oB-?kYbYB{J`90Cz$IQ!E`;9j>1<R6|($g@lIw zRih!G*QC_=dzL!KOoE_P+dEXmM00dj-maB3(2+$}RNU;Zaw?{maO}eh z^42XdC3D!%`o)h_Z`V#ueC^Sspg~+V@H4nQxsw2b{KQ};HzFnQ9`>ZtH#S$%kPX#ix-nwJ&GRDu@BFct}+g4~Vyq+pE z9Hx6oIjzNWoeI^QIS(eNIfiksYxX3@81TE(!2%8L+m-PbYqZh+&LeE)eLH)&xQJDG zWxsekY=!!}J-gK)a=^}TH_4K-kmj6y<}D? ztCL5p2I-lQtJ#l}VuE9~LZ29>&d=722g$#7KznmFH$$d2Z=p@|RKPLej&nl@;tX;c z4MN9T~Axb`jd1 zV&ft;u*PU1)`N~&t3G8VyY+LI-)H*tAHCB}NgK#d^B^r99$7+^k2FtwG$?S*gK3y+QqUI`B<;%9T3jS3CTeH|X~`+Sg`U99%$->MltlKL0kKl|8@ zs2jU+COUMtDQ7=2^z4SHpJ3`ZxnwRvXn501MsUVK4+7b_GqwDM=*TgJ#x7-GreoM& zYl&#)e`LEp)2U4e^uQk?(pskE~7YG5qOZ%O&u#Hn&~)K_?l3u6^vmFZyPwI+|h1f}rHq4jP*7761@VKDHItYZR_o3nH0A9J9 z!)clqA-0*0ABrv*3Trh2zM%#ypRf6A57)Z2bzZlmTG}2!d$Bpqu^{YaSIwN#W3@G2$o+cd?LLjm zQoG5At_0e0vAk^2|=j7x40SI&4F+*hH(Pe!?qe~u4QHWjO_7;QI#D!8PodTcEB zFXJ=3H&!(f6Bg_cEUMK=!aKG$mxrY?m03l?YmF7 z*FCf{-hM7nf~-mfc;%|o;C~EE)rBrj-y5sr@EPSk~qOFMxY`KE5WFA>`lxg^fop--k;q+@qfQYm2_!Akioo7P=?Byuw#=`N@;Q zqB(Th@~Gc}P}5_5XUrM?2R|Uf4(vvZ75g|j|Bq-nsKUBdE^Zmb=5JnPW2SM@r|s2X zCzl$NLi)cwV1=l_Jd6q-R%$EhFOBkhpCI#;zqlZR zqt!3w$LGXmSVGgbpWLqpHoXfOmQ+s^MY^4>hl=g<=kD!>l?BfG>zZOP3b-!4bj(f_ ze#vjc=!z+u?7F3qGT068z0aj;p`JE()=~#jgT>i|#uBaGZbZu~y@4v^bGugTzYuB~ zfq6gp9GWsOjek)_S6W?v&A&Wf1XH^(TUU;MyV`69kwq`*O7?i~WzX%dt7~^FF8FIV zz328a789*9&b#s*E(sSCn-3go$3H{jm6dVBKkl9RwT@JjSF3%p+@y`KF=p5)D8PS= zBoiH79bUmOyr|5$y>EQYmJGj9)q^>vXw@tj?%;@g*H^ByI;;tnP%fO|PjcIRS)$@oZ?ZXVXx%9Ka$CAc=~?^B^9qVHEC{j1muPlpUi`hDc8QI~XEvuS z$S;lQetm)53&iVPqi>!?KA)nOgc!UuygxWpwP+BsfA(7;W81&0h{Oj!VGO&X?q9va zr!UXn1+O4T+sg#UlUsw2b3~V+0Qk$Rg-7V2dU#?d7DwxyB3JRM78V>(x~o$B*Gmf~ z46$3i_VOH%<|q~Khqjw|_Y4JDof!PUQfi&=_yKedF6eSM)K0bwgvU+nq7x8rK5Ow} zzemKZeb)3u+|X|PU@jR&)ams|jO!a*Yi}2YHMp=c8xL-}LG`AadY1abIhb=3imAM3 zs|u`kFqCDRx3kzwJFa9j+g=6hxRzh-KD6F^?V4A7S*$}@Sx#|I{S&|W?52}3PQ4}> z598M-)T|LWDl_LLV?PrP>7QgY*daKCbo3`GD3mQv-@x?Idmne`hS^etGkB{wXd=eM z!A}A=|7Ae+!HxLQ)JhK)JSy>LzVPcOADv%kH6wNA6);y^cD{jNeB>~Oft~Xm>W)iq#l*~ZH8(Tx$p0h(uY8>!x(zD6EI0U7;U{Cg^Yb-j$I$IHq`I(vx zXgY92EhV>e=5*FxlxuczEr3I6T;v!3I&Z;Ze%4M=0S=(|W^jg+NS*p{WjWsdj>4WA z+EoOG#iH ze50c3lO%dkw>wSE&3S`IAD)tW`fc$96gSw*xjZyh5E^`>fp$YoNrCYo9}Qr?QwDG3 zzRAIVH}Ov;qvwz**bMTOyDcm}d}D!UN8n$^f+v{o^AHuUxLU5geEcso^=rBT9v_@t zbEgQ`d>z1qWoFUgu|e<}q}n3)!oAszfYLX+Y`M5p>8)ek?Z(ev%kuQbfzH~n^xBGT zAlv23eJ)d2YH#kCo@1D~mc!7T z&oDG9Y2M2t4nF|zFz))ozr4K@)VvKpQC6!yY{tw6alS*xL+QQs`g_{5xjS3C{+5IA z_D+al`GpFX5m3!csMPQk@}Ox1Ja;Bj!t0z$19fH9IvT#F8tr{_ndD+Ych-f5&V?gl zK~VHDJ=(&1KRf>0Ju1ahE!SB34c-Bf@&HqzbtLH8RB?auB)N0ybnUKohnd>iLSj4w z(pYB2jgWj|L$(C`OHjC|eWw7{bXo40y+t$y;|1eEz&PPx{6oS7p3UzFcyvPKw$xui z_`a^x+O{|;D&6lh@&W*|Jwlf*>9ZTTgsILXzc`h88}^T?>uuoKdo+SCH-DclZ;xVO z7CG?1Y)pWuhS?n%yTD%qqVI3O5?kmTam8cH2Cz=qN;UEK=Zo4{fsRmrY5gZQUF!N zLXg42YPMkO4#LXdX0vSGC3E#hO^Gw*wC#sQpt`Wijc1#Dxp%Ll z`<8SO_k}-GNpR(reqQ_X* z=s{V5dq2O$>cy1&iRQYf>t<~(1`7ZeapL)EKJE=AYcE6rwcL9nEGc&<&eLG^whDTb zi$zDpz7n^!wN5fJNa<%Xl;Fh@bz!2c_jNlVlvPi&_g7oQkDJBWxuqNVT9AIG#^3|! z``6>F@Y|BQ&+f?P@du;Yx9i&(k-8@xRJyr@Ce!6pvF~RwDQkYi-pfM$wGWl^?6ZzE zLamzDi;Pk7rSZZ;?{%e%7}4AP1(wiCCefFiSw|Ya`Wo$i^je73#)W~ z9~d}SZV*&}Px9jcizv!2i&e^XnKBpNtf$E65g`{gYQWDu*{Ky)X^*@fBR}7}O$wqm z{m-baB==#CIDM8>iMgJgoxN%Ln(@5By$!ssuFu8hF0o?$_J_-C_umG9ph`Vf03NVKEA|q z*iaD$Go1)9CD?~$CxJJbXoPH@`M&ULE=-X(9cyraejd`Gr#i>hyEk)+^d#9e!<;MJ zQMJRKoPI)lh_c$33LEFBVH(n~3@!{?E}X$D3_KGXT5EL+o=$%cc^76k#H_jmZBT9z zmovKbk>x?S_jX0g7Cxw<_XXPMn=-)AZz0aJ#)DiuEeL??pp#GM)xr~4Q3l)4ogtZd zQ4#Em0DG0@j1VK!$bzke_pcNxw`2M#C>YJXQy1nuOm>{ra%&Oa%8DJk!kvx72WZ=o zo-3-*;i>_{9(YI6!U@t4f5cODZ>}eKA{WcabBzcu*$A{bgfK;dW}x*Kj91x=#9a#Y zDp7HjSo?_E4eS>;R!wGVT3FYoTxt9!`jn>(3K%GDtdBYk*V7@Rh;_#cfb(!qyQ|W&ayslzph@fFni8y2JZQdTBrhcDuiX94SKCJDc+QtB zl`^<%w_o=nTf=re9ZU0D7Z@rV3+)-6u$45eF7X!Go<=p{w!N~-SRGGUn?1(gTPz<& zq40WhPIf=1{P)EVkY^9&GH)^|B?r{XDtD;^7`>V7lvxjHN|}?0om~`U+1jR_gk=f} zeJ9uUe)q^S+}9+QB;ijY;UZbJjrqQBcbz5a1@MZ@$}AcZX)3X$YC*Mz&E;MJ_HvH3 z6GtiuWdQR=T;IRp>CXf8q4d`+HxSjEJaK7x^MrzdlIO*XqeV9Jx+uQP zxWO4Hwy^LTzsIJ6e?V~bvt44Hy!k5qY&MD=x2`*od>s{2*_i0f*fcg=*)_&Wm_iQ| zS?!PB4zpw|$%96>W>~;@pyW{UeE7Rj7d?7pcK^)Nz*FM+1xCAh)6fPSnfR@>WKkn~ zMMbza94)kfYT(;zpLqhjy9PHq9%i@;@C~vx_FNH~DKmql?N7fg#~3Dvl&IHjH!~== zgKdpttf=_rS?7YIPUaBob#_rJs535%r&s&6V~d#=WA?tGDI)r^A5kjzx_Q@mj0$q{ z@jR(2FuJ+^+;?18Y>6Hc)NAfd9E?(OiWH%cwZ?O`&NCM;FS*c zWI(d@x))PdbJrKDcMC<@5J9#y6C>94vUt)ZoLQ=%w= z17P43Gl@)3QwL{bA=91b#T=Rg?rzUMz3eZjx}%tle=n%YxNhL?xlz5Bj%EIV5f zr8vx;GlWk8@0r?z*qwPtfzi8}vcr7wv#xbTb=Uzo$!HXywAnDP)&Y-JQx&H`_ z7Ta}4Nvx-I?l>8g-~^@E2bWWCH*oZDr7ys1&4*%_$Es{C#MQs^>7^x&o*QT%t?e+K zK3ck+8nRO-V1(L8*j3`f>>lwX6g?e&!-Cl>H&`m`63q0hemysKBmP$d>TN^B-A;S( zeqgF)`K+z=WnNxj&P6jN=#hyH?TswUt&;VNR6CNl`ZU&trmL zoj^ROms5}qq>>BDDD@rpbl>=zB~tg62Y7F-76fC5YBM0Ecld{zTTx+7z+e;VzaYxm zI~P8roE%L;-&+(njRHI5+t+bv82+RO8?0o(O{)9s@tgJT<}}$Y``Hn)0&L)GrO@#< z@JN@KqT)$=2==SQ{PluI(~JgwFJHg{$uMknn#V~=&qUneVHAH-o}Jy4vXOT;^O5xO zy9_f6|LR*E$p+NsX~I$GCu!u&lo?ip^*sl})vBNx(nZtIS~oQZRm14^wXNmk_&4wR zlKeiGS>>>$`B|WT__0k*OK=JmQdaOiStKK@o{s>@0mzp5vT^w(86CUzK#2g?%?Jc{ zGXlIfvhcQMM)?EU*Q8O>UbG1K^n%cj&;-Xn`~?A{AGG}pPpmE^fRfG`?#9X|B;V9* zV4FCqardL_W255NVK+1#hxZ%_^b3Lss<5n=NL@EYqgLA z!p8PxD6BzD*na$#*ot2U?RAn6G&@VbF;~K=*=pSS3|d5p)))-+ zx>Z*;_9QIKgqDVe4aCHT-Uiv*w=Yg)bLEVG8+~5numjIJop@U}q0r?!^n<2!kvh>q zIq>+|0j494b7_)Q53)sn+j*i9n_)Fja_x6;5w>o+LvsVKmBO*jBP)pUUDNhzf? z`|#4U60CUF<#MOd>Va~X8q<$MloWr?rsh##(l+slle)iNbaBk9zt+9Hd02e@#jYI% zuq6N>v0!GfGO%|2#i_cEI-SBnFU)ym05W2q5qbV9@eWBb1R!X3&?Xl%ZZPGa|1r~6 zYo3}@Fxeha>9CJh$aC+#LW&x4jp5AOH`Z^DuT8Vo^Q7(z70JoY%#3_Z*;wjLk70Z9 z;)PT6#DmTY%q*2N!93zWSt@pX2O~Jo)S!KnmcBv?YHB_L#iXUBMVDx89<5U4IB$X6 zpYQn6@y=t8Ve0b&0n1{C1Ni6TwdbGA>#oP-?#x}-DfQxiyxq=b-K4bc4uPOKZ~ocm zMevmLy6uw8OS0>Vpx4|4?zp%|r{ovjiVd(0)681ia}LEEUVM;y%<(eR$DrYX1Z`l4Ib4P2=PG57YdR>Dv3>nVMy&SQDi&x9> zkd9U6$0rGu+J=zkthK;dv0n|LiZc)N!$YmqM=5{Ldp@W?1=h_l;Qge!`!$TU$hA{W z#b^yC+~^X_2t_ExzU^TOdK=fib2LuzFF=&2dh}=N9n7rP@g9RfdTno$lF-6@e8(HY zGYkm3_O#)kJJb1wD!v3$>+U?0j_12k0#`F5yhA7EA_d1i)~&X2{UJ@WPwGe`qSG+6 zo7s3q1H2Hlv!UdmBT?w74eCouLdSHba<6T6BLVSam%egQ$Xg)(|FQSgQBkh%+6F3Y z6cj|HYXE5_MN&{Yq@`6r8l<}vMWlz4M!G?|K}BFdx}=ei2I+?H8D<9A`a5Tx?_1~3 z@1MP9ZFS~-pSa_?ulu?I7Wkm?<{n9yqj9Li9>CE%|w*W?f{d6EXc~8`pWxN&d zco6HUi;0!5BL;!+7`^a!FG73yN;ql$7acrOpClHDr`DZRV-QS0+>=^tH0(j{^1EoaUC%k1H0+aS zh$r}G8yZMVdV_iT3K5NZiAfk3@pP}}nT`&%Y3-T*JhQ5hu+UyrWw)7|*g)*B`QgdG zL_PgggL8~otcKRwFg+bzIuBj{9a0?V0sD-i&q)~xo8M2!;B^ z1c~|u<>ftciXa&*fq9(2w9vOCLp(u2(I11e_4k3N!w3u<3K8jg1xLls;ynC~1Q1Gr zV}CI*h2j(#0~l1|n1!Z;%HtE`e*8aUV8MV1YTvDGCl1?frgD)I=^fqRAUzlsybHX` z`40hgZ~t2E5%7ZxF)Fp;G!)!pUV&IA%Pozx3ev%!li7Z+!SN?j4D0z`O~C9+>5@I#?vxjdQe=Il$F38o;dR**Y)2+KM}{vBL#jp_|uF>JCvlaWu&irdrqdX zLQyKb0B0dY-h{|E^i_X&!e7eq>UKc?AcWti)mB zK$-XjJx>}C*x8WjUW;$spF_;J~#m4gF zJ5FByoH_!Pym90J?#1}|2llAF5M)DErn=!8PIfrnwy%g0K)U5ing2>HThLnAm8c%c4u(zRMdd-N0I)h zUn}^Z|5`i@9c2^`Cs9VRgjus(Y}EB&QEx+cl4CTR6^tMxr1BRBtzYKBKtkkubFa;~ zF|SRJVX{7e0+i=4Kc3h^)RwvvB5GZk1o$;QAYL0aNWXdVjEU6&jz1|be&2sG zhL;k+iot-(BIaNy{^g>WG3s>$sW1^tF+*Lf$Wzrm_~QSPtG#pfd$8xEKM7BhyT_}A z>`>s-BRNLBnF#tfYsDl;xz#>@{$f(13krJB*jTd~TbuEl*ch-J&(ae^d$NGi(x_{O zK|xXW^x`d6=KB{lS0!gz*Utf#(|TIRYUeZVJlBsVyQ|W4{K4}bJl9X))^nP`^9hpO zAOH6wW>Fyh{(}dlANMQ(VmAY8%v8yR?(aK?$5;%}m66v7R;yRZOBCA8-GjT_GG@Bi zlk0u52nz6EINdkN>i`&7;ag-ruitn{#)+&jCkbyB|Joo zMh{{%izr_ctDa!!-o`S>zOutR^LLLHN8kaH>AT+(+J8Up4e+>h0XaU^AUZwwu!D)O z!>-e`O$_86q22bDN6I^!+5zI?uCdTvlTeM#nHuV9=?seqI7I9^cX5!aD-PH7Fa%;d zL!&Q47Ti-18=O$d*kvPs78%sAo1O(((dKq1&%cgd{0B66lp`&+sc&)|JINZ({n_4e z=4>W-Z2+zq#NP$M8+KvrnA4|4H|X~;(@@TM+RH3E(_f$fV#;?k-)}yL(QE6HM^fNw zR}H4r^fODl98RvN;`C*_l55x(7-deyUglIHV?n}kf?fDvcZP0?ii(QM%S&QlV#6CD zV69DI@&eAyZ^~{t5S?7a)%8eH;To~xPVjc!&&-OXiUqQ=)&$dfi2%u70Z#G&< zo58g?xg9Oy@o}7@a{vPrlv*T4z1ef%XMVG4k`VRcxVJ<1x1#ox{k>UDs@ z6=ey-OZV1EC=!?s$%d;_L?nMQgF?o1!yw}O*hP`X%;WY&U>u<#{v`94H`+hEf{#zW z*Zk|MM?Fsa^p!i}*+q2XdEd&7Ep=W$HSaT8`F?%^?PMov89cgW(xG9T?e??)B?9v` zfAs8SUNiyNq zH4K>FJc>Sq26}goDVhvKZ#+F4A1b68Ry18Cc$$xyA1dneeGVs2?Oa~ZczUzH{_n$L zgL#?kj=WltkseD(a12#wDBkA$o4Xjjhub+1pJ6&F5D?Jn9+cZ`&Zk&{xO!BPcm^e{ zd2(3MqY-7^Rc>`jkRWH7Jr)`Ln)kxTk5me9&zQKO>d(YFA{P1_EuFR1htmY0*W z6Y|Y%WhRGgI>Goz+>LaLI>d(?|B) zNYu@Yr+O@zXKFG)eVE_QIi6)(cK>Tv0xfqRFKD8nHFdfi25#$%woR*asj1?ZTUFrT1 z0}3qylA9mNj6)-St))V2+RJiVbClxi{Wc1;gJUEG(k)7MSr-!`I_)}(a7an!SIb=4 zT$&|R4@Ruy)fC6_eVgn}Di~Chl$x?eHOKO+ey9x7Rn=>o@ecAHnf9-4xM_s3%`fE3 zo1F+Ov^*k*Kol=x5tA#6~C!IKW|M@}Ebjz0dl+nECp85YykW03n_ zY3^fW3e`($PC=pCa;9jRO^SKDXU&Md%ZQ+h?tzH)m!+Gm#OrgTR6O``YUV>3;)8g<(bA@P@Z>7mmlw4HO_we)ArRH59`iYO!kok>j zr)kJRV(*Xlft3JL&Nm!UFKSAAk)uS%g$f}&o-+pm@`1OvH#D&Q^I=2GAq`zuwcl-8 zF46pg{K@s%u0yjNxp^*-dv}i+BHF)BEHN-S`;-V^s^)TVxrDfwvJUrnWJU7ycLE9e zuHYb+g&fm>ED{H5r41VDWmRsKUf2DE2Ge~1)M^h3WM&cv^qP1YiBHPyX{fNB=b)yZ2dlaga6S#|88)XkcQOx21 zaJ&1L2W2e%NdhIfDjH`;8!h3%Ng_{Q(+9t1$X+8U21Wq1`>YPN&6vGmpHo^kq3YTX z?FUCR;gMcV_KMVy%ojQRvcK;R2$ECbY$5@jL^G6`KQZkF#E4XZtM#tq5IqKrRG~-p zMU%NUl#?$5S7?s@CNTsj;UG7w(}u1=SGTGzqLbc1a*&$4qVa$k1}tLp=kR4q%@1C7 z`n>zakivPBkWI)*Pm15_uFAEx<1U1|3*C{`#_KyJ0{XIyAVl)^LaCg+08E|Z4jbwB zey$bfqhQLYu?m&{=g%+ablbn*4Yvpl4+p~mC6fvZyQi$oD98M2^#Tq=$JOoFwSXkJ zQ~rw2k=2f)Wh%e?`(QdicGcjwtDF_b$<=W%Z*3S|^|U7B?XZ7%biOIsoL_l){`vUI zq$Yp?H@&Q?NK#MVKpHspQkuOb^S2{HetIH@SS5Aqc+;ogyaeCg;-2U@5)+D=d+1=t zF$-(#yMi9tcsuB5{}J;P2NWs_?y4c5@M120h!X55JClb%l_feVh}kNxtp6~U1x^!@ zEnid>pA~2_nA={ul0Vb4r@^@w+@SAWtrOu2d<^t$6!OO(2_uiB-!DchZi8P>X4@%} zm3aZ`Dlaep%=sX%S~7pJy@qCcFd0HU$h*C+S-WDluh}dRZWC9%;H0NNx(@N~>l0ab z@Zops2mlNeJ;2wW&u)_9jjfyqG+u$|`Ng{zQ1=(y#oH8c@>GJM*58w#eBiA#v=sdb z=S?wv0I$Hatj#!XPv~=^&am<`Ns*-pjRTH4FDr%^C{&Z0YMzHGj@i0~EkFBX=V#}g znGcet;ruR+fYI_bm`p-So+vRp*_@YBwAf`jU$fz%H4ao0#{z}P8=)gD*R@zZW>Mdp zbg*nS?ym)I@a_tyk{N&<21O6ai}(_ovRLhQ)2SBJZ!DW`3PqDY3aAYv0K<4-eS?xQ z-`8H5L~pTh+r02Ph%KRwg{(NLr)E22E=E0J?y0^eBJfW>+teCu&PP7WJwqB&*^v#< zT13`r#`Ep`smpR59c2Ct=pOW^RtXWl)jmU_8Q;(JUH0;vjHImA1cXK6gk^u;+lr2b zSu$e1>L018bKQc?6<1Zj>wl^Qkt_HT}rpe8a@pL&(w;vE#=A@2j`n7b?+bWPz@3`w}^$8wGEk60G9wnB@%I=Q%$J? zA4}E_s}z!i_WpUH0!rUGiYICMzdRY|i*|Bxaqg|X>F~Ac7X&i)_N5wkrzrOdK&>*2 zm8+(rAJgKcAm6#CK^?5K;ca43q^~r>x{nMjdz{)}LD`ua{J9QYQbLyVIfksWZilyi z$lU=NILAah$6pyS#vU(D_rbr0(~AEQ{y=}~NFYu^-diN_!|-+I)}n+99<%ertwJ&Ce^^ zxX=kTo4{t$y#SX>lYm{^U$H9*4=*R<_?h*-zQ*ah_fRtS@KuLyJT+u6T9JEjZUS{h z;cMUqzZ!c~G;@E{JK#kxJOp8V!e75CJ2+5-B}nvwh=x_kIx)|e#C%8j)o-6Zbe4TB zOPa)S(Vrx1nye#Oh6Zh1+{%iE_a${C77ydC(om@8>iitNF^GRqHtOY8<_22ldmWGVp-G%zuH}jk&7`2DpM~n&0j%etxZbzqluLkL2ViwB4q5x9$Mj z9^HR zd9EhWdv8qC*Y9WBMgm4;_N(fQ`aEb#8BBM13~bDg6GD@bQ)R76UQL+|)f&|cAZ z1x3T{qi?u^x}mjl$jnT~M42bfvO^IA6O--puGt1Xs8eR(J(~txbnTkC(ZM+hjhqci zF5vXWw!OS7st=@kT@EE;iiWqxg)p$v4^KQbiW%H3?s&-^FH?P)cj!V?7ax@^8% zP}@|^ekM**-b{^MZ8)@L?WL%lCA zmEQirUAj~AHQl-324<{s{?`JGQepslx%nMFNpLM=xQUNdW9QF6*;94xwHBeop5( zKjdl9oz>yJHc9ax5o$5sAVU?{8Qogof#mM3>-87yuc=KDn;$n_C03=90ZY?~V|_HW z{e5xAS9B!EvpB|gT6NZGvKjxdAw8?wX*C(UiYaKNXLKpy=>D`QcI@Dtq4c~juX9&s zlGf0!5tpDr!z!$X$kfcI&q&n03p2~`jt%8w^@ zqgY1Bvg!dTKB#0}clmJ-!ZUk3 z_FM0`q2Ug7hrBEkdBlTdt)QXN)372?b1#);LHuH<8lzLqo;;Sh7PG0-m7pam=CCx+ zFqviG3hO?hYVxJm5I1vzMoMzX|LxmA7=Emz2_rLe7#M^rRtySlfYt?&A6YPPZp5Zo zYR|uH9-3o%S?kNLclCY!?d+M!4%(c)b9Pq zwOl|o0))Dqg_X?t;T3z(!z)p8O~KERfuYHl=Q~#p`^P}^b_DBlI!eGc2ZqN3Zh-pCWy%)`K)^gOu_Z$?KnI@8 zUu~)at43^ac>aUhmMPczgO>?IjC(TrfZLTlo$1B&@E@i^n)M`A@H zVEghrEc}z&@QLC>y?-4D9AvggSm0gn-_mtD6I@g#ien)MpZFA#5)wXteBV_DPI2hW zD2~;N%h8LBwiO}sqsHEzPK(;d6UCXHx^CP&^`E#;`HKuVkNdyDPQ}H{_U~k~odat% zxw8Azz`j)Ka6>y;Dcn`7X1)b8;*xD6;LwLzl0hZvk=f70Pu5K{=xdhI#eC;!is|OJ z#>?qN^N;103{|(A_&SXjF7Ns40WvCN5`_?Tqg)9UucQ{7nC>9#1u_%MmPDZKQmwrg zbN$AR9_KoabNm=Huo|k|3RwWs{$TZZEL++#RHLNa;wZCPAY(ryBITpZx)gTQ^HaX3 z0+XjYZJE8&ZUaBxb#vao#BXiJQfiJc$gG0HG0LfXC?NlQ`2Pq7>)T32tZ-L)54S7LieueEG!dGMy% z{jkT!P7IVO=FeSmRvGnUxszN`XXvxH+s7H#j`Lp9=O4nm|3o6WCmt!3h+LK?P-A1X zS*=(KT9*_iulV?us%onE1FWR8munwy#CWQwY=!}NPF_oyl3R4kP`r^K#Sw=fid>wI z50azw?)s#z#FFr2<|td95Y@HoV){c`$j1tkq^C;uN%sz73v{e_1lB@^3l8UL?+2 z)SwRPB5h~B7R`|dFWZ0m?jfm%x%+t+bhND*+}F~p=zfjLo7qE<727v+T#LWKSHvgK zat+*?$B^B#zi`B}eTcNlcF`oF0(6v`-&&7>(vIw2G8|@-7N>#}(>l3GL!sx47ksml z6ckTX?oORd=07ULK-};(9O&?&FFSd@lSewsjDVGVjs$^e9zFXH#+A@&d<|Md{ML}G zi}SuN+yGgHx8CbEjAJJ!R1SsH+oP&vSJ7`Go#ol{qVc~E5#kd&K)3;|?TyTTnAA;+ zaNc`{@rp{IABG-QKJP7KKzBZ6m=bh>l7ILSWP{JYS6Es27z?x~L{&R0ylb0uT*rEi z$}>F#@e!^AcP6&(RK#$+{({2r*qiHtZy`#2{r9t7VL%-4HzWeN>LA%PW>sME1c%0M zhD%=ll1$)sFCEUcE+I;tald;$n5#)if9QorAj#-5$cwfs-Ymb)zcF!FOW zN&a3W&;hu==&;L4K&fASY@ z;G>ZDXp;XqQHXpj7=9;Y{Z@Yye^D#?7}-h~MrvmJ{~r>LX8d=QtN*`}|Nl%PP2d0c z;;=&n#l+rP6Wx(kD_o{`Qf>*2p14FrhZFfPWK|muJi8bMpGfka)I(|qkm%y3Jtoh8 zN8gL@Ktq;oBoYtcX~2xfth}=PD5$?w9Z(NS7`17&2h=Dv;ED0_f> zhDwq-Hm8@5wLikZ!eCp1Q>ee7(lxlrHG_xY!^;0cff2q5{V~#8?2CGM{%0NV&6~A`r z&FB(1ttE==0rocEbhcX=#~XC?*w>)_4m88=LFpEheVW@dQd(uWb%bXarp- zP0ecQ4<`{Hl>c*gKt@f_YoC5 zz~ADO<3APt{Q}zKK;bj&*58r72eO{%6TpiByTT>d(a`}iZF4|b$wrGCPHxql$HNP? z9N(4$RfX{Dcz6{I^)4p|9fmyU7`kJw2fLC0H1cJR<_@N94rjugT)J9u0WD!X7{Xfo znhz>T>a6hcs@iqo=Hb8YO9B!Li-o>xKswqUu}Oqsg9_NIocV2*92MR$Yl|=j>kU z^wc{TKCNbSn0N}?w@}a4KklhS#(?CH;3w{U(P-V@il9q~j*Eqn0UTM7t1RDs@W8YA z?X^S*GyjOejM(ne{*O9dfZpEI|HA%p>H2J+C@7ZsS#tMtgTe7?baYJFYgP5GH$f8v zsH6Fjys2`@{HlZPi;LX(7YxXvq-p#OxArnC{n)^{2+d+x|$j#q1+__qS0b?4l37f?}Xs&iD)EO>bYs#08So4ZX zB99Wdo)>Xaq(>(QxEefF8g@$fJ5^Farb@{s9{>kz&-^we6_wt%?-mJeVL(Y1u0*Dg zD&x@eBvUzCx6whEnw?$oozFYHo(#MJe=vox=g0Erm23sw0lr+x$BKozWc{?-)xQJ| z&GK7!vv0`8d|JJV^fyK*t^nQ>_o4UBKLAPd?d^o&V@_`giy$Sf6a(f1T8N~sa{}K3 zz7KbSOh@VA>g&OUEmKqw1qWo|TQG z(r3?}6>5fwN+?{S8#RaV2Lvdx6nv}DGT_N_{AN_?DeH}_q*fuk{;<0GI1osf^P=G76rqv2 zs|^wJ9rm@d%nxOUhJ-*8MFN5{n&?%lP0}avufNaXVr7;atjYuh;mW52D*xz{^wRgO}yi;fUEL<#&%w3a47v+;qDg$Yv2wZ!^ooiDE5Do*} zW7)H4vG;Vi$|;0fgKZZFn_<3}RZEtf;$F#iR+HL~o3=?vJ!1&BnW=Cfd0g`t$c()U zxjxxLZ?#ci1!3j<(CcEyb*!NZgfw>S;cVSKEn&ba8k$-IYEAv+zxeuBdw9%hj5L&Z z{VN!z^@zic_}3J|?;HS1Yy$25`G(4Av(N<{fpSLu-hRF0Aw*Ca?~UYdW3Vqh{o*A# z-)ridXJuunJJp2e(R*S13OS(i##}P~j#m>jf}6{3_7li|k@yH$GmpLC7$0x~SL#93 zgkqDEowO}apN0Kvg;Q(6$OIP1e75x(@u^iqL>1c*L;xH2=EDyyN($BNqK`bQ4@~WJ z7eQF@5rh@=rnMgrseNjK5)z)}&dbgUNYDUT#aQA{JiXPCVFe?+4bHRnz00k36}7G) zkPX`|sKDtnYWz`;6hh@0;`slN*;>@9s;cnb%twIYn_n>F87DxU{;Hm5bbV|NFcLz6QY~pn z(rE#kUOZq3O3d2c{;f;zjHtEd=TdbDE(5;fjdI`=It5JKk>QGh`cD5qz3h7+t7nmK zGyk01c_y#VRH|xE&#))CW<~41@*74cKn{}_rTX;g6SO@ivv4Vr1}K?w+6s=8t?Q@? zRM_I=#R?LGs%dwJkdywmZ(hD@2}26`KWbv!MfJ01im*pFv)|5a`8j1m^42(Y-o!nc#Kd1ajJFqv*(j^jA;8y%ySn;iX@Naz`9a% ztrvTxu}JRS8Z0*3$nXmcyjpgci+L z;A_GWX#yFt;R8*6yN=NP9B9$R9%yH9Wpbg>(i`F}bMs-`9$b#bd~piu6vTxmROX-A zt*@M9kO*_(@f-mM>iQhr0*Axa{S7u5MYdW=m>&^W zHLfu#roikq9m`RQ9U|o@wR+?V@>0bsIY!sk9lJNSB<)P`^$xxltk&djPK3`n_W({& zwYv5(r)Ys48)4%Ogize`*Tq)Tt)01Uk=Jq#FX?H!acF~N?Hsl9_~l2(CLjkXX6zS* zm;810(537D`Tf92C%3Rz$zR$lvRs`MFA9yzmL@Cs00b1Y%yP0Ge;fh=zAiJ`$Mu>j zkS{aA?2bhqfrikpa^`~zvcdK)85&M>fFH^_16B9ybK7_I$co(1h*63--aw#Ma$a#! zLqF94(XAzji!%MU3WHgqDX(3-CQ>>(>!sKHv&94Fp2fwyT0a)%kg>qqiI?K|ZIc0c zH)5`(z1fZ0g+^1S`=ixt1H3At)sspe%PdUW{5^_{W1#hWg&bgr1c+LAihgY@a*Nbw z;epG+?tKq{+YN-@gzvCH6FhvB?tfGLXN9d@0}&~M{z3?F5?Jk}E4b8PmPT*xo)%y) z9&dcH=|Gdimp9^CTCrJ=tG~^2!j;eJwD(5c(W@~U=QsMhG!&! zSd89y{?^K%|5mSuYA4E__%_(EwSNznS)gT-EQ^98ejUgD;Ts zGTF+X3*_#;g@~^=T`v=^Ujb`m8SrmWMI#0Qb@dZbMcJk;X%PAEVi`P|^#Z~RO2V|Dx@*S!y_du!D^BM6qsO=`+ zFnldNgW<{em7@7MS5){GR1+QTv3w&mkFFWBf&zo39|G|}6GNA|J!a-hRA04aCLX4z znqRIYvOMB5%}QlB*)hbH$ir5%fY`PxC!STs>R ztep6@ra$x zQ)<$_&4g#qCOxKAA|K+>ZZ&sEy9Ez4vBKzYQaB{0G!BHvUiV6D$(pDXYyB1~>$0b` zM&>>z4x=r}4O?>@|G0UDV|Ul^yDtwlKecd$X)ssKhH5jdB+uSY+7oZ@?&z_;Zav#Y zE7{rE1z8%PAmp0`a(oXnaut25l{2%l7GRn8Rr=-}`DZRl{WT|w{DtP(o;{#xsvTZw z#{iepa~mpMfriJiq{_xY&+lzzn(nI^Km7WY^~IA9(E@JDn+wI8N<)U+=k>mS<4Jxo zq~R^w^1?@Dlvw+qpkeBBho;#SiFpW89 z(ON7f+CJUYY--)1y{Zz(J?2k3T)SK!_h*Uh>>P9AuJUeF=i1P3DaO{7~fE9C1m(Nd2gbtc;;I7~uF%eQSv7(J$YKkRc_Ksw_>(M3}iPA-NaQPHbpl1t_Sx5HnMo%^Vr2gXsBU_ zE>2V5BG{B8EuFY1I27KQIS7h;D{ElPtR-K8-fB|#cdZkxCYv@=J-bxJJ ziaoMSWqvo!5@g|1{Uqd)u~7beyt9q1=__MIBp{?(J9jZ6y-0S--Cu>lw2I{eCW;goq8X;-;#;>) zwUoWEEB?jJ-ozud;W;SlzrUhU@fJ?z*m8cjcPZM=MuM^TXeEU|<;(o&!gi!XT!h;z zshtW@i1C7H7u{3LX`Vt3(^0 zg(4!v#D*`IIO^hGnNob;1;u3`^)xiEFyL|q0PiK2$(GI8Ykqyoxf&EIQBh6< z4@x#BCMKqSs+%2@9w@2psq_@*az$(N3jaLpvTM1k<>c&9sA0;w%%im(8AzNMlVCd< zz`xTpmE6W0H1H1U-y)et4dJ=;T|s}^X&({FlXqXpGJBGt)sE&(%+%S+hE$mk`t z?)c?99@~@b9l8G((q2DET10Ga+(IpgXUEr4MlHWWXG9$k3{ke=SxB{Nxq66s9 z-F1jycgP3YD^2Oaw3B0>UP8jZ}p(CMsWxT$ttR-(9J^F*c4KvE-0riDDQ?^V45yQ$%YTWSF7du~?!9kMM-9G%X7%UPJA~3IK zJJfbgJ+|LeWn#mtpq~OsHS#QV@3|t?gBf{s`uU0c05afbK9}Q$og4SI^7#h6q4E6w z)(ms5y-hmpy|ySjpE}w)qKy*sJu#q=Tjj|0m|hhawC20se{;zyK@HXos0VLtR>=dU z(xW`t_qXMCK}T#$OH01R7e_-All*SEmz&`sK-V(t{rAUoOmsn-6}G$GBQJ9gr1CHN zvyYgXr3EYSC`*1#KX0kDH}@m!eq!>`TX85~TBFHe7u~1luZ{8TjA=<|4QWZ|<5D8& z`>WUW<*intA<6nM_d5kiqrbdYOQ!i*b}^cA;woYfvy+UpU9#K;BBLh9_T0jBqDI2* zF3!hZl73H1HSN+X^|*JwP|Gx=q}r-xQwgTBt{y-J=P5e>+QGv~r#7398+eDqo%fR? zy|>y-EkM6LNu8SWPQU%neOVQNC|TNW!jMcmlqr?IrOw8AD$jx+Cp(W1!sdZLs6=kQ z4rftm3TufPW_Vm0b=MF&`E!#^?XJyg(&iPPON@ojYgDpxrWb)~?VmM&(3gw2rp5QD zTwUY9@}6lh^8Uj1{98y}(gQ<-v~Vy&K|-_2i8ZH$kCv7e=Eo%y>RI<7JvTGFWgxw| zg{ftvdP&)Q_q=vEg#vzQs6)9$VNv5MncGA9HqsTvuZ+tIw>56?Z$ceLd%n)b80&p$ zZY$@LSXQ}Z$GbsPlJC!D6RL+375I$i+`RZ_$vDlS>)^*SR$|+aWa2ffbaJLc>Jh@M@|ntjqFZ(>k@R*z?0jK+tOT zx@bkBw7;o?if!eFf}v^kz-(FS%WC2J#s#mqpzUs78Kt>Qdflyj?IxIM<~_c7p3=w9 z-G1=k#El=uk~XA+-hyT_S8~I$*ZE@|aT1CqmBho_D*e0lm@xyhkH?I8gMxxsXJd04 ze?`Pu8s}FHKZWS$y3C3b*mlLRnswm&PHTd0GVJ}Sg&Wto5GL9)9(8*m&&7T_f#Xl4 zKp}dkNGA;P#92=mH?&*Wg~q$7cXq%t3|g)`^J{OcXoY z9}_Lp^E-7KKwbt74W$<$cf_0~63OVA1EP5wj$5xx%Eq~v~mD3pIhD<)uJ zH<>2K3LtMvN-AHhT%%Ny@X#;`O_vzkaf`$m@y3-E3}|#T*~MS5aMINV#FBn!0V{bMTh?t*Vcw1?f(?J8_snMSlr`N z=vMn4@+dlLd!qlbE6#ZD5dmFfZb?xwEHu(6$Tr9a4}Yp|W#T8>!Ao4|@Lfl19dKR} zTakAT1q8yw@cR_;jz>TXElQRLn2@+rT4JB2kT(7OpJRQ=be$1@(UEkZu=X|E&23kg=U#{?ny%Rxb2c&6n#Cu^Z&sW~>?{YS}0i0nN)F z<;(W!Pgf_2lFeoO%q=+oEOmyEP7qonhwaose zoYWQ|mYlFHX!W-s#PMU*ww?p?kAUHTg`{`+J}oLNY@AbK`1<3;W76lK+WalXt^fjo z+%#S6mN91Tk}<_f4(Qo%zNLEm2Fi+^yxsO=lzVESr0D;NdrBSaJ<9a6xxO)0@W{&I zhsF%65E2nhtxh$|D=6r6iD6)#@^_$f2}tLqQ)9J7@W|re;QDz)3)m@Rk@DVhw9L&aL3v6Iu@x3d&kfaqj6tWP;s%cc2wb%6Ih^P;_LVS2EeEhK14kd>!?Nw_z=I@ zvnRh;>xA5}5m6aww0+v!7M&1S%c8z*JgqP>pXFnjIDXSGi+}M?m*DF*&$K>2s!b#H z-hi`r$sl}SfY8u%(czqhwRH%{EhHZ3CiRba9PA0LwylEaqPcpyT>x>6uCgMn!A>sF ziTbavWz;{uWCHhhr>AV*nT=NSS#EyomzlbL`cS&R1r1&0!-cbK@DzqyN7FRhWcx|g z-GRZ-lHtKCYQVbM?yvvJu03;Z4v}VOx%!6`iwWh+%MkwdHF>v?FwOW2dy=zy=XU#e zw`RLUMey+?$BS|UdTZt!dYbT>cH=2dodzNCS_vV`B-@0QM!CeKycdD2P)t3&e5Wll zkdy3)H#fcfr6UZM!}YRX%3szoJ{(~XT7&+KSQpz#%AdiU;mac^2R+tykgg zK-}D_k~FZU zlS@@j2Xq*)D*g*-zvGoLO60Opv#V>(!O}q-7D^#(e)Rxt*gvkk{9b>Jc`hiU*gDs_ zT*VyXJhBB*>>ZI`t@$Od>>-}NF)4TVBQ!-|`&i1`jr&2?zy9FnwZEPO=^JYl{wpJ7 zI~~VqTCTe}Yc+h^Zs|L--ay~^HH<4B7clX?5Aiyq1BnUOV7Godn|&(a{oOS9ia_YG zoUYmQ*B+7EBaV#8+USMM5XORic=pb@lPw2Q3FP2$$R1S~cFs9gN2NG; zqPF1V@ZSezu4B)3Lm9V;)a|R!k=}iwi44rTEn#_V;Mq4a!n|Bvkk$N1)Q^zq z)kSR1SS77;2$^eXaomTUJo?1{<(gcF>rkRqsU@@ zzI=a~j#s$3{HY?H$1j{;(-<&?6se%Bh3bnl;)_uRScaowxJzW2^E)rLboNodirQk& z1oycEK>ad3R0kZ%{}}q|s2qYhYzC30NV%o^HSN`~Olz#=OVY^i!j)h;BN zFUWMy0o~)!Yg8hHa^ayy7%(1jF|2$#h{nlD^EiXyOTeal@%r_fRiR-ajX9b;p&Pt5 zbL_Lhp?ZaOK%yS57MEZAs)zzS?Gq9%i@zdOcOdW!huNKqi@$=VX45-Y(0==j7t%yQIrdFXo1ytu1dQe38`to;1VLS!lZB9`jMXRiy3izD00&}BUK_j!T3(aUSj zE-qD-HD;zSusqXFZT+u;S^(?mO{R5-u=FVPN}M0F$YwX|LA-CVs^SZJ9X=&*&Yfo_3xB{vJKo5gP@SQK$a}A z6qF!}fsSiYQBkYW{^e&LV7Pk(hm$||ITx)B-Sx;w!UA8E1jaE2cNNwtb2~O6Mt5PK znD>RCOw7I6%8gn5q~b%u92Xtf7=`e+Eijfwd2Vj5W$#5*9x%TuT=jo4;{Y}sdAl3tgnpax91D48$AmdQ~8%L&!x9dyRxb|x| z`O3xqxpZZYo%{f80k3&VspmCg@q|Ek{KJh*)4w2 zt`QXx5tA^AeDLrgcT_OQeH#522fyvTsD{6%K2QBA%YS?W1k+AJOuFOT5(p9Neb2kr znX8@ipnU(ep31etBJN2cRqx~Mk|?S?<5@-iF*_%XPLSDCc4dlsOJxgzPo10raMJDP880WQ|Q(ZlBmqJy5FGAJ; z9V|stop&%b)mm`fKhupPs++}Y&{G39&^@aJg@h`H*sY2kZoicXeDlV!zx3&=nNf)^ zqIGkQq$g?bNx+EChfM4D?K}YvCL8EVxe7uCy(gapz1w9Ty)b~)b8z%n?pTJ-xIOLf z?lwTXMizI=vD5PT^EXK;DaPW>L7gD#0-|nBKZLzZ+@7tzYRe65d>vw|&N1Wxba^1QntWe>+dlkw-NH*{h9x%KV^(WT5LCWX&Kti&$ zIqwG*gqF5%u{)=@n6v-aCr2voerFG#`0MR`_*|ownd(9hjg5WSIoZWtZTc|`mRQ_V zeWpda#-@X1JCdXvI>fi@eXK!ytO3PJ)ufVCJq2D}rVs24} z&l(6&0a(HE(vyl|DCp!O=#XWOV%3Y>Ck+BN}sAUY4w!bQR+Goe+PQ*c(<$S;Y98>v61XJ0jJAHsr~iv z;oW!d{DR-U6-$I?#)M{wFd(lAnJ`qm)I+2O-+mP%pyL*&gEj@7djFn7-W}MRirBnz z+eN|xEc{P&ftfB7?_BTYuUXBEo#l3bnxk1b{yL2=%bo+ZKImX>jjr*0dSl})*&g1o z5~HK`f`kN(J=-s=i}Ba0JyNJbK!VY*S^5`6)ME^ZOSibu0;Fsd?JJP8_KkY}?yw-a z?4j+_5HlFPHYexR-`@|Pq3P}K4=eypf1%;4P5c;XKBF%RQ{B}&a41hwN+>}wMu2&F zeCjrQkjCl%si}Rwbh)hD&zO z)(=8e>4V>_Hz-PGLty0U8VkVAPtL^~Uzqp~+0u7d@r$qCVq^^Ic=%O>Q7N1SkR+l^ zuHoN530%Pa6ST(!K!H~YY2u&nOU`~0WdUDuz;++hKUiJrrJ)%yzC({j$;n&_AMQCW zT#UO1^xQjTRAcEeyuCp#MFr}p@OpD5(<`6RF|U!Q1AHe-LXD;puWjH)+LH$ z<=lb;Hna0_Wg%C{1+Orv6^iY7Jt1?Ws;jPYnq25FAa%0Mc3Q2o;I^I#Y$)f=tEmnA zAgovSHb^9Xx-Bl4uflFnz<}~}7~~O%4>xEIsOZ~ zt*i=6hVrxsi@N->opEr+^?rWq$H66H0JG!Up<-BShOPE0dgt<{o)lhGtOqk|-w}L3 ziXb?OBEgI0TN*We@IaEmbfENpMrLNqo4YKT% zOH0-ZHm0OAzbCs8Iuxqz@BImv$TYMi{+E$`6%Pt z<(rwA8Db5Mh@k6AX$!O!t#HnBjp^>`+bSInS>W~d_huWBTo!n2<~U3=b}f zYdm|`twkTas#B4av7TgXr-3vz?n1~Y?H{j{!gLVWi|bA{&_c-W*$c|VF6_3^0zlYu z@8#>~!--(%<42u_ka{5<4?Hnx$*#kX%H;&{ z({rQ|3q#(BI-lC;U`1pDkBOP#$jHg|_S4S~W`Qf$U}On59ps<07~JA7Q5+BMs&rk> z)?W%QZ^kdr5-?j45L+>gn_rF4Dh0E6n!X0_@$&bPrTI1#QQ?6ovxNVa4!)}vW#Ti9 zD9)T*jk}3{%M6x9ABwx!P(7Blk;q$VoVYSN$Yxe9-r2?Gi#1T_CRS|u)zacFam+np zF4s!HgN~Y-@68E&^G0MX)@Ka29k*k{)B2#RyBlJxocmAp{i}CQ+hNaWcVLJbJ#Leq zgor4-;OcRdH@F}E4h&Mq)s6P&73CpO-OEz15Ru$8cr@T)yayl&XnlPOY0+pG+L+3r zUTk4WiCw>_IjCdf2N(w`<3hcpwHXzb_9Bh{4{h%qPxar&54WYINJ3Ut2q6?15g8#_ zWhNv$dpl`~Y>vIx$ozB^Fqf2{R+kag*cmAN&U^9tpY8>qQ0NOv zeEQVC!)^(C8MlNY-4LnJip$Lv<$qeLZZy)V911c#0B=;6I06R|oW(ay z%?T5X(He2LZrMB^Kr9(?JB>75)i)0Zcz@Wu!2!{CpdI$R$#nwhaghdL3*Tw0@9FiYhcNW{PsHT%Ny?ZdUa`G%K zBV+BSm2e#s9PzgIe?j@tHv!5=QOo82N42th*dQmw7IS_;6_oeBR;9bo(UZr=))utP zM&~tiJTwf9Myq8j^{jOp!veN9SJwL;M!x->IiC^ezKU#h3gj>RIguO2I{Uhc&(!C2OyeO*e{%%+BS zQi~rbOtB4uL5x+b@%xq)1$$p)^`n#V0d0O30>5)noEVh1fmMJf9a|hbXNbn~7`1zIhqxb!ceL}Mdypb|;QcyH+hu39% z#eC*RX&_r3WZ=f;qzsDoA=gby`$nwN)*6-$wCZzWrvcR8%_s*7QX*DDB3210DXF1% zQ4dSc($LXW_u1xM-OkR*saaedK-x!I9AGZ!pHyYartNm@W|#gITzm_(<@b7LWME6{ z?1_dDJ{2%5146gT7+4)O?B&I;yTM??sgzdz@jS&^AK14MJ~i$*wdu>P@3t^BSy@`! z!L2^2D$Z0hDe&})z&g`NcOsdA&WK6mY$o{!OeX!y9OH-iD2|#?MyXTs@u{I3=X!~H zE%Z!vGf^ca>H`{i9Yqs=w>~GCkAj+Vz%A72kMeHM4U|FlBG1a8DuW)_Ye?(B-q=AS4>3&ylo zX8Wmin<6aj6Q&cQo=08wBBmw;eT>*t6-VQM_oIy#m{7qZFqsgC)Q{a-SoqN2HiX5# zmLFh3zRU|4%ds8&*HU7}Mn*o8gn@wOvQ0z1c{a@I&+iyjbqv6bd~@DJ2Ot;br?M4n z3G5Gqq^;godXTc(uCJSIEHm8w3MuWWOwUo2SG{>0=SuDRlCDnE93TJceIYa50{hZc zB3GH3$*rhR-|P;+!V|V^j`(j%8RpS=QL{SYb!4yZbs_UKs(0EUGpermm>4#n zj0u*d7Xm8({6^@a?DQqH6<*YQeidWR2e)eo%om~$lSq|U-4}c)#o^%>V*x4?q#kMN z`9f)2+)T5SK#R+`WURxhS0g?L(!RO^Z15hZdFfi%D3KHgxj#iOGZSP{Y(iq+;54wF z%<}8)e@fp^ySdoup`Hb>^%0rHuD7UNQ&WQm8LPpXNT}7Vf-hoc z&fj`zxXC4Hq`ORU^K;}Dv{@9xX_B0sVjaY|V_(W= z9}cO4uXZ#1+zYXPXI218yob%82C2~*6d0g!s}JFO7^kM)n&1Hd?f5vb{_9aNm*dCg z4jlL(=r1Ts&WehN)EpO3H_Ba@gE)x;&IcR9G5;$#6!r-5$Q=!KvpHQ4DtYL&KplZK z`t*;nRj&u}2BFnKPh)qWXLYl!QL@*JQjHN0t1878wwh`(r0U}47Ek8s_F?@17V+y4 zEyoCu9~3O_K?#I(u(`n|ac~@aKmCxzI@oRWU>d<~O#TOY&~=sP;qe(6HBTPm;x4e8 zj~lwWdO%xz@w;;jVDT$qtb^P22EP8mT76vY@--{*0)D_b(J=5yo^lVS-To-!U&^;? z+br{VZmouxN0EKerGSuVaOJM6j5J5Br{PmZPQryRFk6T{MN-+9Y!32Ge*U;zLX>hNgHV}=sdI% z6Vgx6#$)s)O3f z_>werE&~_~ciwILrD;p}GQ(AtvlRA;y>>9`H0XI&f!@T%K2|50#m@=WfD-$9s-DUg zvCe95XXvlu3ezgLb{w(x?XecDda<@C4XI4+f|AUQ=*#ADH6+^_|Jv zWh{9|PfyP$oHw^FUNX?GEt+3It4hinH0bs8^?_6*_fvkOe61snF77_vcmmW5iNs_S zu1-Ajb2_E|AQQB-&W?(& zdHI^BmpehE5^CAtiS3FQOtU4I+5^H+3~!#hiJ>aU~`T`>mjbzMOZSP;Cg^;_T;brwe%d;=nkE#!fwDTRQQ zJd1*&-OL@p1k23K)SmpM>Dx`;`o%iFKsnc_mr*G_=`L}8a-$!IIV}g|6HT0sxRHpf zJT$_;GNevT;k;OIk`4Y74qAhu)8da1$>G`#_w{R=Bxd8Eq*p~%`E;Z|eld)n{a~CY z-(n-m=huwoae3?!l4F{#Q?m2&e>5<5;Wx@hC()p=zlY}Gon054 z1snV2d>r7etB|kD*gJ4~Idkvsgs6{4+5i2K0li5GeRpo068HWm{QRQcbNQ>E1m>Xt zxDU(U2{bML=;7T5sOj!*)43zLTrU0^H~gp{UXT?7es`^wXxGCIuDun(Br0FOT{__MgMSUHr%`q67(aQa2)w%0x z*TB#tI$7Nbrq@XYp55K|<3ZkV8Pfxmy+sppI5tv_qK{RW{L|4taSikzy!a7&tgK*j z!T-eirT(FR08??m2d2N8D5w4}k5L74*E?F7|EoFkF9`@dapVc`jE>X(fd}t|`Khb} z^N>gjAfvQ2MYS)+K{fQQ`g7Mi_%XP5B%L1Ndty7P>mWA2oh$bCCF6e2uA{j^a#ex&Xk6 zeZ7*DmYP~l@`0z7y^4$|3&UMj`_&mLwr(l9HIrrAJh@C;lb?Ql^h$F!i=D=P#EIJw zN_NJ|8$bxm<0I)GpLq+EmwbrTBU9L~bntPG0mU?QAODSvW)lw(b=OsIJ2<)dbWEs6 zd3Gqn(fF%#)jSc^X<*y*LMn1tAsbtI!uSAi#>U%0mKCSm3EK;>Udqo z3+F;CKKCvEYW)a2Y4HyH{*eRsqe+KG9A2uPBicWMy@vzA28%ct{U6%L#Ka6s#w8-d z!^8C#n(^u5hajl-{9^vo zg%!d=X6Y!2i~9%jM)2xxlFCLV{3lL?el$vLY?7)0gn0ialZ&KqaqyO5&^c1BzH^9e zO9K%B+-@WX&~PW_)X#pFtv_}~&)Ap?k$;;1XdxJ_X9lV(?-14@pAPB|Apqjq@mtVb z#r?+@-r4)}GyXYKKw!X#hwc6TEa>}0%<&XTzjNX-6B2rRN&VTgV5^OV6&B%Qqn%mM zF4MZ#Tc{ft#%o;yy6HV~lmLSQ7-YlH6}|;Ya8|eH0v%CjU*<0jORPTwJZc^jz8!bh z&w)kFtu)L4)Os--moc8H%47eOQF?B5&2y)WVu40?Tx^g^i-v*vA%4q-n55i0Rep#( zOGKCM&vqk0GIC$*pRWiw zJUmm`u*mam)@1w9g;XH8zp;CrI5eP|9CO~Es=Xi(RVHqbY$qs1__dU)(SJ*JhuQ4l z6LYR2XaFmo^F$up+@8C3T&a|`!D9{vDO51a2U-2ecand;)-Gr^^m^*Tzpq7!d96nw zP!?dtF;#^Jrk{i<`@WDzCas`hO2cVjH1Q=R@b?Y(-{I7Kk&X2zXm3}}oT~H~w^!}b zh=Spk8941&GVo=m);WVc1bL3glOwl>S(v_EcA5{>9j#A8vd~g!B)RJ@_M;wxX)2f; z1=-moNtxPSwXjqD84*sPm8Qh#fADE3FJ490x@8Zh z5fhuEy4rqlSGO23cx(E*oL_71p~k+;%U%QucoaN0=%vFZGjm8`k9=lkN-8;A%Bc{= zo6>>E8|N-K)3T-ne5$@d-8BfYH1>MyG+)I;3!Jr$E-Fb$r?VF|vf^YY+ zI}y7zziCpNTUs=!2pjQ$+VJGIFF19S4+c1oOkAy)ST*vsEZq{VVho=HD8mDxKO68z zcZ-v!Q5FZG1sk4@f^A9Yu4-9AW1c5yAvSpA9YlgHYRr2H#AXjngYC#V^WM>-!pzLf znPwG>(jHf?T&bOmd688FP z9(`N-%)Sw@=`mb4;aSTourcAO&^PDkQI&cLk9%FDReO#ok|Ux+(Z9MyH_+zGx;Wb* zD)1Y@D0Cn_PR6?Zhu!YI${Q5ME28dZwSib3ux3NNe+dOMFmAD;T&_d)$rIoDVBRLf z^o$JImAP(aAgmfg>Uot-!pzLPVPZpM&rE-$x`z(o&vPDK`>1zTXL{R<^c^#Arm!Mv zIfDf!!oOK*Zl@7mnT0{R)H=+sY>;>@ZO=I+tTOrYMr?S<#)B$)XK}X4N~zyQRA|xC z^$Yf^gKPC>5S{aFU%7hzaJlhDFdai&?M!GX^b{9cX>?USxRTBoV1*z^cC$lru*6Yk z(L=7lF+Vj`Dkdhzod=0TF76cM^mj}|7oP-&5s^SkjR&|J$R>2%A0V&;t8#XlEA0$! zQg<9x1P(p~$QV0#RON(k4HL7Qt@Qi$!6JXsB}hC{EfRb1UY7Ry^_DfD0W!YSb0v_c1cKGUy=tLX#-CnqK`=n%XqGsvkx%%gMpmF{I zC&1tPBOLAB#44~Rj#~`}CbukxNzlFC<~5+F^rdWke^?VM#+o*(XB9YTX+>T(L};C|e2(J3>$s6^+a&V(%v#8id)l?L z?Azbz-R~=f^|01KwxBFWTfkUUxJ;?xJ%glFUjaTx>p*1KhmuNjgt;Uw|J{aHFFOaF zs5X^Q&E0Y9VBpX1?Vp^j{|9Axk?oh2JFA}u{rpqz>E-uOBKS~akICppu(hKA22@&D zdcED^pr{z|sKnH564pN*308&H0^a#{3z5eu#i8#M>HYwIi)|HvjF9W4hZ3;MZ)gl86|bR@$VB#V%m>VWKnIN zIhhN2O$EiFJ=_{|Hq)Iie`LWPXm$oVcuX`x?4N;#Dv6XDzqS0pdb2?iVe9n=!Hn#eQuZrO7ROcA%@vv5t^$}0C9F}wW6 zD|+fer)fAGy`HuQtgTP0P{qk816^QmDmi0r(J1=9IrS9-27!`?V3Lex;-e|MMXgZx za;^CjI~#kLtY?s;*Q1gNRL~fa%nX#8G(bX5Ek~QkGl1&Tw@ic6A09rt-hb0k9RuO{q`Y*g$>vBiRF$BOz!)! zYo23sAQgTjb{yl$qA>Ve#!}oQ{q;eIx>S5(;%K710$tvD=P|ru<+8QV+#8pgx~V-}6S?l@9@LIpLw@AinX@<3-_-9+`*u+K zf~@c)x@~qwC<^zVyYMv_gII8VCo2cLd}GCi<~A>%3;f_!tZnghk86bgt#SJo0d9?x zV7&O=Kk(x*rk?4CJ#UT?xqgX)o+d9h7j)Jp0ELYjJ@>x)%eCpDbKJ6F@cMinjs0U; z*cD{}P-irl)PZKqz*KNn)MUVByv@!;!6SVZkfG#m{dRexVcGm_yFkFvgC6ABFSpC{ zcs+z=?scHPkB3A;)Rq_e7ED+r%_5zKXG6qME5T?fgO3eGlGoF=A?0^JSO_@B8~;-v4&K+6N(YZQ;y7O?CHH<1)7U^PLvstmo`vKfBQ= z^BS$RCHkR9T~=Sa%0vq~n1yJM4^lF8uRqaHqf%lCrkYFCh)t-w!Y;q6YGo$DF;>$2N`V8VxRlxh2uxV4)?IzPwq*L6W* zS|1o#IUG?y-4w)*y=2fZlJ)6&Jj6GuK=pN?+SVTFkTA z_nhzMGPiJ2@=Z9GDAPhv_-ib4`ab4M(tVjfePut%#egO1Xm}D4|8?r{Z@}EZjlG78 zfOLQx=!YvtPdbvK`^w9H_b!zTl!${aTv9!?2tZF1rR28WIkq!v4DQFcJT!>%N-9QF??esTWYo~>=) z5@!shp?VfSj_jS*6Ix_Ku{UY4FMvPYvF0`gN7}ufCC${DYT{F@V-2A*&(YR4;rGnF zVvF?YElBB66UubzSyUTb3kNL*Vgw)&B|9yC@uwJUO=MPBu+R^}hQZTkFdqEAv*jW< zySOlpYjx62D1*;I{0Rfy=>T?ES=mkT`Hr0ssgfM)-d)CA< zyl;kq>Mk9NItZOQ;G$p`-Q*G6gB9{v3)^KleDI#a zKV*Br!oYeBbW>bFCa8TJFdP^sH#Z&6e60IXrOrms{r`svq@XH{g-6q$oy}L7VSr84nOt?#)A#f^ch+)g9zn zuJw;8SHR((xHYnDY?*6t6!k{puZ;=2nrb^T=)&ae0tSnB9>NX;JG_1HPrq3(8aK{TpgyP+ zVs636lw}ssdwls$6_alZKE{qLGTwW8Xj)wm45@)~)}Fzz;P7vb92LM+RbGDaF;lN4 z#MHk&_pv%=qV3hC91^Mn#31?Xs(Nb~flwB~2bZRe?90+YOt^{9@B@Qx%7UwM`qHIH z_ngA_qv-l{f&$flkG7i_0(ewmJsHXuicz|W=>?NFSJqk|i5VOCOlP+G0{tD?&QL!e zHBtpaFN07lB~)-8J1a+i_xj<-j9T4&0ai1+zXJZQ@jx&wO%0CtFa6*JSoRpqe7?P4 zYAx)pdBW~@*B4r>&X0t;T06=DXgRG{2h0R*)J<)l(HRJIx*<;7t(L0*)I3tQAu^z$ zDIVB_6w(DQD3zXymmnsTbb7SG#8Ff^G=18uXyePLs$|bEShyw^V=r2~l*h1z1J>{L;TpEl*jsdYl?fM|o>z6uxjEK4mt@8j3JjX-m2r;Ck zTF2lVq2b)^YCh#~)J=tWSloTyhHt6y&v@^y%dtC*!`yi~CB>|``~x^1gM2~mOjQFE zB-Xka3t9cmbjgqvu#K^xF162gA4G3;NI)kXUce1(c7Blc= zWHzF)4aP1EU)jS^`_rLW+#^T-?^f%-1H4nR#sRTxq*7)%%s+*e8ZnR~EFmGe&2v@} z-xoE9Q%A!^Rr3ka5-hwpu%t0}*6BgT@0vHPDq0#oq3NXw8L%yw3rzvAqvSl?kK}*M%-7tY*WxYOk?LL<|J+!`ziqJ+Upm7;9!WAzi@7C}mY4`$d_m}sj?-S% zal#oL!7rZkxp;u+VldDsm%Z-m-0u@73heIC)4)3%H&>wIesrI$Ze<$wZbYjlrJU=! z45pWM2}moe`vj!I!lyv2LgA57e%Ew zd$CNm+u(x%T6`{6tLNfr7RhF519w2_5#blNe3SUr z%K$K1BfGQGHz6W$zZ+?ep%IXDk<%EpJ2SE+BTAtAOI!6m)vXyvMsGll1%_VJP0kmC4MB>)`&5=H0*yJH>bosyRr z>EtlcTFOE26`7gC%Ev&9lQ$h$`B3LxBiA~XVuLN9=)Ns~I-J})51_9oBK*q~;lD{4 zhGzw740xLh(*8HEGF<>u8QBYFi_y(xl zI7_~r_@JV)uGs?u1)Q;8iQ(B{&g_mg1U*v~!k~AN&}v>>tfevlB{SKU2cgW$Ztmtc zb)igkRu(o9eq^dZka)}N>;+qR@2a??<%cX{SwgRFN+OIcUX;f)lHQ*2dVcsWPST>g zQ|f0zjSv4uu*_@kmadFwC%y`KuTAKt-ve|d+kM}M)zoWo5bjh zO$?w(nXQ$DWE#@~W|{KPuy4lp3pIMa3U?%8vD4zS|_RsCQcpJmxSZ_n~IR4i_Hk!~-Oy>=4f0&uI zi5?ACEpd3JuWyH-m||o2>mL-ng=T`{lwWl{5VXJ)=qK#x_WFzw>o`S#Bzu$|b}(h= zY>c6dSP(FJ3GLIFuW3q3e*O9EADarm@<^S62g=IEC9{$%~dh03xSZiixW;84;(u|BO62ih- zw?3HkKDF#b>nkkeLB--^131A$rNt%B)km0}= zB{?ANJf_(z#6+9F78ubnFo@F)-Vx!IVyyY11m@aE`JWEX@}}XnwzlfDjFNgh(C#z? zEyl4iBJBxJGJq*=Qoiop>IFmol{QOY%474_vGo1Z+kKE|(2wDx=;3ic+_83^-~aAj z|MfMtYSJT%R8;SYf(h|&mU2o;^g#M!0(dt%YHDGi7)WKO62T9J29B09tK8#D=sSxR zSP<9Nj(aVXN%U0y;4MLl@%1wBUwD$YPaSr@f}gN_rP5pfrRT6Si~!^u_sCnaF|o0{ zmcNaJ%nS`v`pn=)FWJq&JZjh-Qy~^5MG0x+v~%S5ei{~LXFsr-?b91DZ|2xlT2TMx zp>$JYAS*EO??3;3H#fL?k?jFC-^SjvAJSNIFX4YlyT~@AM`rSZad{x{WMNPMx{dhw z`0nf=+k8kwD6aXNa)b;V7JB|FAtCu?AsAr@086Y#)CIa%i>(LQq}Mo^UjK%^iCA-l z8!dShc$`0<2?k5k2V(aT_1%8rMQL;e@LRj$>0!@!8bb^3-Qot~M4>VlfA7}_nt*JB zR+|;&ERFEKhgvxqgK85vulyFiVniWsXBXm5%sX&niHmAIcRf$?(IfYTMnEGUZL9IC z%-KPU&BR6musds}Y{wA{2Iv8STEvNs#LkKH(p_3^E*U=dCg31MBWgbuhJoe)=&zwRPn zuA(20n5g`p$Gf@zc%=XFcp-udtGB6ayS{3gm4E#$YUAMn6gV67IpjNAeVAC({bx!X zJ#>L=>VW+!Sr$3b0PZox)|= zOY)b0r+*uEI+`9cB=gui)t|-U!<>C+Zg#d_D3?@ELig&HZo;T{YZ%Rh_IOy>Xwf)- zeeimtHUA*uo^CDm;O6$Iy<2-*-?g>IW{lqJY06&>$E@gYg_Hj};a1-He$;kpf{B5l zdwRh2?XlT`;<}!uh6YZ>hmDF^3x%VZof=ubUg@Pfb__TBcuI|DN$~Xw=O0&jMMlkN zmiMT3|N0fh9Z)=w5QYUY_b4rtZ6{_tCxjb5Z~kNBmrsO6pf#JT2T8!!T75G-G6MDE z5Pf&*yu8hW2QKGE}FrQMmr8Kyc~v6;@fG zFW6oj`*5Hg2-CLNS&kB%tn#24>+e`MNG}}V(IrQdgTS~`PVM^dV!=m`vJ<4k)A;rD zj9BcD(7;}Q**}O9AVj_odDFk(@Ws~jpWyla?VHvmATNTmt^!7&Q54?6SJ|!lY;<&9 z5}$4TkXR$e#lpnYzP>~R)Qb{BLiCdfGBOs}{Q_EBHg4R#+b*VjLCIV$%ae>Z$$|R& zdqTf$RLZNPm;|~&qipU(LhJDmL06!Y+-LV;^zBGhj&75&)Gcrfb`VQ#^Y($tO3~!a z6mLTWLr7^8tGXE!9x7G;>il_RQd-gz=)!q=l{~|Y&Lc{HUz=jVvN@X)qKmK3{^fzt z*}&`Iy*JW0b?wtmg3ckY;T;}EWvwbN1yRui zh4f{iM4!p8;yIRBv?4{laA_!jF?SO^}B|4v489eUh;n5z(G*P>ilAheTGOMESH$ID&i73}?jsn^ZRgA-PAc2spW?MwdD^B2 z?t&fei*9B*x_EMcvJ+66QUCON-gh3NOP4fh8T0z8lGBU&GV5T0$AJ6+i2zk+lH>0! zTcf^j-|LtX|IW_dd!h|&Qp^-~_&mUGFa}l#3=Bf<9lXY7-w2i9QWQ-~N@*EyFiB2E zeM84}g#cX!7JhXg4$C4KR$hMMF!!zUuarHg4d`|+i7ffw020;0mt!hZ1e`b zZnmYVfWoWH-rf}XO$x$Ok*2OdQl5Zy}E$P;a^ zoUXLW{r2r?LpZO7Y;!Y@-RP$a*SbvT!!**)bKt||h*XUnq`p~bHk{!M4BU(-GkJGP z1yVH2jl>j0mPZQ-f~4_Y9Yfv&@RYQqWGi9TME2AGX`Q-ts;6N@n0F`;<2OtOUnYJ) zxwy7x!e#Z?JC}1Eqcw7=XB#7!TYzS8acNM<-!Js(bQf8Z%V~lQ= z&AXHzEJs1T0hHF;ke%yVA9$W669)#UzmD?>i1Qmyc$un}rA#O)-!V zFidT|fJ7$z)vALoy{N$27yMHfa+4GS!`hv3N_)C#o%kpWw-?|I_tn4` zN2Q`(IZBCfZCWBZfpiYx*z|Cs9DR;?)rHQCeDn79&Ko^zv0Uc8dDdRQmAsr?Dz|qY z^}jsgb$sF(k$<3CTThO`|C=|ghfddz{{A5c%hsy0dPo|?u9I}?Jb6l%NM)^|ii1ip zGcttq_LeYez!);Hy~)9-Qe4!(6doS5wnR_Z%t-aJsy{CokTA3AwygNOHb(MDX>aZM z?&3#S7q?(VOJ%$D9=EoUe0+M?jeGF1kx@9@=4Z7J2}q|b4R_R6HVo3O;0WC`PvqC| z`T5ss_Wel3bOU|;Y_p0`zL^V?SU7htFBpOxEgZ2$t$JViGpX6jYUar<8bKKH2C@pll(@oL(h1V~+u+AGZ^g4L~W29S} z-v0h^n&tdrG+e!6@X)mP?@uV1)1UDyT!F*kmP2JnJ5B36^A{IQyTO-v&yy5&GKdPqMQE;kg@QZ537<1Z>ZvDjjF3L@Fzihku%q zIW6CZ6^LBJ0-)eYc4OIvf}SzCSTi$!KaL(4T*Glp#|znDG9F}EVW{*Z6D9!^0$O=Z zOqMO&*jY~osN08wMqEnIEZ zWN3w+ks;(E-P(R7{PA3KT#cN(#khN}asP{CusNo8f|@Gdk+czG`7&5zvrU(-x`2n* z3A!$q2}qNNvvd`nJ)5#1pdw}kn|RI=F=xybgQ~Dj9l}gQ_D%0EBZ;C0_h;Snh56ya z{OAe01Z+&Q2ReXRc&`Sw*1@8=4&X;EI>e4GRK4WS(reXCni&>JRmtm6B(TEwEyu^d z91+rCyeUzBr>tKI&0h;ABbyq zspQxZ=dm{VM7{SyLXsHU`_(dGta74W0fqydm;dNxq?C*aL#}VpAczW<^%t<|Epc?w=aC|IIh!jVe(


)!^O=Z2NYE=f!cM-U8;nx=TTRCkq>GLQJDXgOZO(dNk6MW@$o?3oG*S3{ED0vK&$gO40@A~e9goG@2Ohc2> z(oC5qu&@HgSqf(IMpR+fa~?QQyGZQG^Md&@aPs3R&m?3JFrYY;7!_59zF2kj^-qk| zBiueW=`STn<@TKZ_%>!swwbn_*1a?k;y;r>7wN{V32fgI*4Nh1w~mq0So- z`Aa8;^11arFUr5q6I{Gy{-dx7u#MxwB3j%`m*Q8PxF07CwQ!YZG0f3^b@z4=n3;oP zOZB5an{6<`qGHqq{^v5{vZHUPjAy-yw$0sUTRRz-tUhRGWd_?g%%hyrr~7+vPY>Wg z@6ePJ=2buC%b(8|V6+@~alUYYTG4hPZI)-DFfxBSX!q+B?ncvQ!iVA4lLNesBU%;G0*^Zk8 z$aie$q8ToNwu8Bd_7cSKPyYf8IQ*=)cVGS`&V!@d`{^_%_7iY_+WiDyHOp@sZ=F!^ zS9;YD(!OiGKR$fE9O)fZY;Of$TNv53-kHSTVL0Tn!$XoaKY_+B#o8dfe6eE|VJ1?d zY65SjHA92{B{USb%Fk&{(x4O*3T4z@GcCmn7!#4;_ym{xTcfN~hm*2&{ZZkYEa}5Y z(^3_I=;*WQrpb^kk3h@0_|ihC>E7K#>v=9+*z;!C{|3~j1YrN(oU4on|KG(7Krl7H z7PoCUsYNqjHm~^n{Q1D3Mj;SiM(HL*7!)L)To*}6lPe_CGGCu^I-%;lt_s=Z-tN`mO)_qU5qjmWj`L4!aRlDcQguH{ zh*+y;1sC%rGB-a_mbcW&D};%Ocajf=`MgpXI~7`Dc-?vEOir)S0lP$~7#xby;Q#6z zL5WV1nLr&WM^Dwgj&s{+!{YqaTaOWBd@DcB>=oy`KA_AGlp;m2pg$*b_Rc`C=?b=gvY4EVwnZ1fnl5$PH`{<}k{K^Tlo<`Z}F-FtO^*8!Zgz zaK}pP#Nj|5MRXP<;j1r5jQ>uq{3JyX=NlA=3I<0gH@`_f889#rXXb57HG+kIoO8L?zs?|PL zuu;HLQLuF#-VBitn)080xr0j#iHS8mGSAFXMIF{gI(B>}BAY7|>Qc9FX+bAz1RyOvtlW<- z2y8^<3^wCwY?#}IeWDWPTu>4C>PDKBoV__v2wY~X=`i#x=kheX-LP-MRfjcsG2D`0 zO-2Wk=7?a@oX4gUf3B$Cz1v@@fz_D6jM5InZb!h*FaEfXZ&y{TN@gB-RLjm4&*fSTueWen?&VaIdKfcbzAdov8J!m& zxcWDO*68xv`eCHr|57p90~B@~)pKJ(Gc)wp#F25gnyINNiP_eNrj<$6&CShv2UfPlD2A*Tg0Y7=XwWk zb8O`eF6t~xANIh3xXC!}k64DD>o;jbka6EjKA>pKZg~X@Bh2@3wZ+*BcG&;s#KlQh5U^K&!bBqvr_1x{ zM}TGm@_fN0z)1V4acx|F`1<-=R`E%Y^5shPo^My^K`m9aJ)Tz&H5caBO4;CTcWfWz zf+`cL-tkXgbz1q999R5)G;Uq;_H=Ay_B7cByfx`*=|&5uk59qOhBwK$4=6@)l^=gtOd~2huP^ zX)7pNpUOP=GGb6;0TI7<1G1*o6c_vV z^%#U6fiQE?eyGnl9Y2T@eg>3aN`Psgn68}I)6=7F3F&jc{ax%%Q*EsxfK&$tzTGEc zQ9Vs^h2xU#O4wacWLm*n0jxS>RgdLxgGojRx~H(+$`o_BoCa>>49J7SH~N18DnkDo zX}^PqoISG#Ot%_8ybE~k#>bTEBVs}Nl3f2t%*g;L(cZS^?S1W1^iQU71}CwPjj3w! zm94P8Ve^aEjxpobyfmqg8g-Ppe!Ti4N9 zU!e4*%l{B#3KY;EN>OaCqpI6>1n5v2Kfp++q9c77E(SXP#tWl8vBh+2>Lc%M?U_dv zw6G~?6@PMw+hU zyp;0-&Sp?rOd(yN=NcIp2#XGW#_ZBlG(|>8L{#Wms6`L@>;&{uR-BGoYiwkEi)l@W zXr?2)2Va>VoxpAOQ4;;>-1qL(ud^5!Rlp35Lmh42Un)WQ6KkhzPR4meXC2mfn;58! z-dMV@ZVy>O2?_6*<$)wiRzDI?QFKm%J+s@VdC*B7_uZ+&jckOHfZ}XPf0`CA@3z23 zWNi=xN;v$@$J=2}gS88n=$FANYF%2%zK)BmSt;Uaq9de0PBU=PC&z4)ZF^NFuy8s% zZ$v&UU@efIwzSyv9axbzXvQ-XIa2A-`So{ss+CN{y=XOF>r+K|xA!goeZg*jXwwvR z@aB6zEsJ97t-SZ>MueaR9@Yv@vtjP|vG0-I-ceH=FKf4M=VfNHr>YcIP9%i8jhL5H zy}lphv#pob)9c3#p`pQ}U=z}+@-)u~LZq(mSm{WrTX={%jS_UkdstfbAPK22jxI^ZU?QkrGD@CpWi@Fb79}NaB|-ze4g93!#=4L-JvsJ*V5vQ7f~$ z?g}3^Nt2sD!h>0vr<%`6)6-N{ROmMkOD10kz4g$Gycuk8F(MW@N1W7EubI@dksAVs z8&&8#n#xFv4Ir0w2?>df`x{Nv`w}!tzDo5*6bYL)`zUtHrO&l_MfUb>SndsIK9nuIiJz~ zzY`W<(|^GW|8dq^6@#S^h*Si-!b_pSu~1gr8tIDsBD`xF_}^xAnJ!-;*Cg9o|9sZ| z_UBgI8V+}b;!R>iM!tfQk^x{6-G`&kHE-*;oWv)OTtkZWrBi%a4v_;pv$GQ7pE7El zmS=eFHgfvIdw2;a7C!=+*e{8#359M-Me85+4dAL(&OJ4ajU8*a`HJQrJ^(O(b48F- z>W|xsK;PEmhZ`P17wP}x(D$-V64-hJ^nq?efskWMOP^3EZn&wbsbVk~%9O4!g`dDN z0-N-Vgekk_@L;8l0N?YBEZGa8wdy^ljCZ(9W?{Hg$c>XgZL@ zgl!PjtFY1e(VCamn$Z*X@d~s0@CKrDs`W!piBTv_--%fg)DMqFN>j%b?S2<=8FmeI zuADv)FZ`v5u2YO2NcoT~Gr*5#sr%xLsS?r8bh4W=TY}c9KQ*Tw*lz)`6@zOJ6hiDKM zS?j*i6n-bAO$*AO1YAf|#VGL=vm`J&8F)!AA4UX~0UDLUyWK zs*Ti1|MZTYRWxDbOCPVTwQ92GxfFc&5pJv~Q-VoBl61u5_TR_#8TpezQ>{YIilEwl&B{vC_1Nz7$g#mSmeeZqbs0%tClTDw}{O5~Pe!?{QKar=w(tx;%_y_iV z)Y*9se-Egvq__YE@JYaO@(VMAFyQc>Nu47L`7I}uY3n0rnsQ;j96tzBWevTn7tu+g zf?78qd%A7yg)~pkmm0a^B;UN?O5POuf!->;v$FJFQo*z*fr-|z-))2^;??s;e=9BM zHGwGWi0urP%jC$XRiW=k!JhZW!j%nXYJ&sYKt^7prY6u=`?Fi)RdJ+>YNt&hL9kDJ zkqLjFF_M5uLuuh`Q?7jp()DW`jmO3?xBnfQSj&tY4W}4EC`?9g$Xzmdf?Q+8w{aW( zfeXpPDkde>9+aU4+IFe254|PIzq*@e)u00UGbVS>bxok#J~;{+8tK4gpM6?*8#|~0 z+V|qX+Q}d8e^hL=nRLW<77(Y=z1TOC`*MgEUtsYDw^AnDnuv{Y`D-#6!qN4B1OhG1 zm-&EmkA6fNHP1(qH54G-E#YxuIFK);q|Z##@JW*KdgI__W1334tm2iCLW{Ja=b=gA zv^1=1Gvy>9*75Ly@br6$e07ngWO)PmD+O@1WQR~D2O>hk9RAt%lKc=;fD0Mrr2$8H zchK&q7JDXaXn=;M>Ss{$th!E$C)xNJ)3tdjGM=uEc7^XUyc*kG=a@r6j6_hYIH*Lo zX*CqLE0XMj~8hIQ?`^#&anoQD@25W&#JSiz@ z&J411tK)+6L9KER?f2|GB^dto>Dv488;E25NBpip$Y0MOFn!sS|HN@)d10f2J4FN5 z(()u7j$>Z2=5J9!2YHR?bVTNfKGFZyKBfe*&<#xsyix*7sQkz^_VWIdQYvMKPAwkG z=YF1ur?F@0@ffc2NC%6yn2i6lCAs}F1YTerVXx}KT{6sLTf6L=Ywgdsz;T}1bdJ=dIm8utq3Amux zb-@<9_CV;@TY$1)e}v_I5SE%TY<=CQYbKe%bOQ;85p(F;TEdI@#Fug-Qy)LId9SlD z!RqAw6;3Ek4;^>hpwf|2f8NfMulr6B_4}xolEb9407E|NF}!bp8x=#wib}7tn|h|D zprD+R^qH2tDKF6b-bAj+t2OszwN49vcSA)qwir{Pls{d%GR=f;&XDzXPhl~U(lFRpT@3TA0;R`pXSc|?sGMxItL{W_V&g&?!*JXgmJt;XUTOVp~ zn0JQC>6YWhIV8ocvL`o~i=)oNJ8>TTeB@2RuKkrxI*ew7BDwt~5Y*~ORU`0T(L0z{ z8aj?{*Wq2y*#9*98F#S=wj67qq`EtgcjMkY)v3y#wn=PkD&P4c!eR9Yc4suaOz7_kF)_uf6sk z7i*!;+}C|xXCCKqz-EPV$2PS9a8Z2jgUszk4qTsFHva#8G7YG3PGnrIXQVS2G@G-cS~*i z2$0@*wD#$#(i_8(^HAk<^%fW16OBMA_Xax?Tq^#X+qvoHnETM$Lj?r93k&6#3BkUj z_}}2M3;I}hxk9*-B|zZkjE5GswtO&}HB!aI#9p^?yyrG2393;ov%3@q+!^OoLYa-&ZmW9$P5U(y#M5TcZe5AMyXThgWX6T%_*Q2imcdgsF_mgWr z-hrFc`BW8?M)a?HuVrq9NqSEdTq@Y^;icXjjXcY?-H~k{=4sq1BQ4$8Z@;X@+=1yi z^cIwipid#=5R0Gu-fBup3M@5ESS>bm@!Q0Jut|ATwmai6D6 zT9-TFIMvoUDnVh{D(-WY)eKkmgP3>2*tF+SS}zAVTZ6WTOVggRDhF9Rkt9rIkX zP9o)GQ{W-({rhEukMnPSXlT29nCQHq2F2|8Lk#d?=kvE>R%f3-8o;C*xRmwT z{tviAFj3lVGymC%8@LH>Y!1BK(s~(Mmm=~kX*k!;PL+-)K#6J=EG);CxFl1LJXi5N zo7dqm^hHfkS)=Exp>rbE8TPJoQ5RXisF}RN#A81#Wy{#V@is7Mw#PA3_P%qUsggm& zhn?2*CdwZdVcaew5^vs!Jq`|q-z?u)U{Fv~=_E)UXo6>|q$Vdrm~Mg%4dv=V$IO9Z zMEC-TDHCcw*UiP>c8Gil%S;`Of-QH0jeANJ@>`|Pr{qS?8?clSIz16_mVJwvD5LrJdg;5JLI9dpP$4Nkn-o^QoW_)8H!FXBYNIjlR+2_k zFavEc5mEB~g1W}8kdS5isJe4jg}5X_>a2BM2AY5NBkXpFiBp(IQDAVe!7OPL6QN^q zejFQsi@G_Do1Fc~+jdH&)W}VGXD*5I8*oLwm04c_*igHaw~1&Tch$+?MRYRJy0ubC z;e8F_I;;atF*#lt)Xm{%+K2tA*%Al;jsjTGMxkiT#5Ag0yy~TPr(sn>0x`J(?X6o< zm?kYiR%(BRK+8x#fPi|71k#YhkHioHv35a8Yj7Zhi+Uc9 z^@KH~+!@S$fQ4~gI7x|fe{>^1+@C7S7Om)a|5nR9p^!$#!aE2YA-MnfRw^?eDl~Cm z*Jpo{^FdXG%0xlw!t153(&j{y-VeUTpw|CXTaqnofqsE$S_QP5zEcd??>ybRN-O-@aU`@>V(4r5tOHXG?TNl5N!DHyf_LMdbv*xRCfQv+(G$KcQzT!rvW^Z4_`rM_icLF#32Wv3jG4=V;E_v0T zJuPeqa=nWMH$_LP6ZZiYArCVO_2=|w!;s(JBuN{9O=^nvmEHD$8}gihOE%&bV{6c@ zFz55%tC_w&^UCzxYb^)}2pKS8Qq*g@zR$Ow=Qzkeq!50NYzT+d$4kfM>n|;Sc+y~$ zZ5{BWxfoB%>u%e$q?fxK$iR}cXy=3p)d8+5okhzG=cYQSc7xRfELTU#=3%N?NawVr z;%UjgiV7vPYYKnt$Gg}WIl10ND7g#cg{0jK@A!C`lZfK`E zX|$vL)QN&Rb?PErGWPjzp?kjjCOqvuwzgAVT24so8H0(?gf2!lwpL#2A7!Uqvpi>1 zEoSY#mNKS)o6;iB{Mo7n(f%$8K;E`tFG)OkViBFFHBzNRS>ZYx z^*wXvwsbuA`!IV+BC{S9T&_6HyMQVrYAgXv??9blcv zB&N+16-?lX3RBGoTNG+GAjvSL-J~$1D44lJltiZ~7B$X@v?pXR7<n1`CB#q#O>ZMnn_i7Y69cZuG+UME$eA`}C9)2xhGSQY)uQ2^iR!L>b_Zwpm0%?s% z$yXw(;?7V&AC#R%H0KjFsS`|NN-f<}9QW~v}RN&LtI}syCO5<^k z5ipHnF6n?)@8Rt1(2MRLv@Nsuqe9XzgWbr=uJPftw3|{j4eW?(`Sly`yYv0Wpv;rP zUrIMm>(EC5#X!ihYN5v+X{TezOK90FKQ7Ic2c$LY(^AjaZ@6$qFqv0!6Pm|~dMoYv z-Z$i;PwDFmf8VCLGk4twV30--Yac+#s%So32oMTSY^`2#VJG;k*v8SuQ4j=f2m+CqA%M;{o;a zR#P@igUi}W#K@gEU+}&`XIQV?A`b}BYjlV~UUo_UkM~*+R6k3Jq%BYMM?|q&wH$n@+W*qVMFB00J3s7hO=e4&+=^&DbJSsd!1idbpx5D= zxJ5hBiKGCXTNx(Y-0fm9sUSsZQANq=G5tb=;Pk7e)|!WEOkv*8 zUQGPv3IAJtF|Rgxoi@zsp1MUXw&@uGNbmF~X|(@1mEhb~tDYKh(HhO$GaWTe{pol# zJVmR|H7z%qV2|$G7tuRSxu63IMgohL$C-F|dWx&m|8)SIhK$V2CKQ74>tMrg0d%VU zHVsUO8>6~_m{f6t4v+&O5fhbeKm0(bS zuIf3#pJ>y*%-?Yr3mZ2DyM?JV@2{JKN{cSwG>q=Fj<6 z-*##YLMb6>kkjvj2QT`iR#Sl!~B@+=yq~CM$TAYgA7jWC|$9rrzJ~u<9&`KVBd*oCJfX-XbfpnwPG`XIEnL zK$6C6q!~ZB;!YLFa7w{(sgShkio|d*9n7k|P6n&rctTre|G%5b^4ByvS#AZa=ZFn)e)wmbeE!F3oI6{28$OU%s&5;OziUs z*ZTUH+J>;v;#fX^KaGed)htJX8EBNjq^>~?UcyPzQ`&-X-Ztzc%F$R?S5t#O(|)Ka zs}e&qk3ci(oxru_?*c730Or_3llcB@M`OK3bjd+VTvQSnA3O^dbm;Jx?|Jx_g`MBfLu` zQK`s{UJX;OBm(!@D);&tg~o~Uv~EFX0h>Pcjx_yc(Fm745>90$hqN}ij}8rIYY}_j zPQmt>-l^3#G}X4f;a%}}>+@nA%3`<#rA>4!ncZ1aZr7oG<(N}BF4gjRQ#l0?PU~sH zQrbrKO`pjfJf!Or>{N&Tqw(bFBVTTQ@b!&x_opu@E*#t#L3&hC$!4!IyV@_0-?+h3 zS)4MR%2=jLOQVGtwzVBFH!+E1%gOHL*q>%%DYy~$6U*}19s|#xa1{A#G5*4&$$@K~ zn`7ve0C+~*BcmgLrSka=fwHKznZbmYFON`Vu4Onpe;$;z^%#d#AJk}1RkD+OUnR6~ zAE1Ns8KEV8kCl@Ie4Oe=43XyY&-LpmqHHz5h<2#A08v|5gtRuE3z+FiClr0TJQgNz zUSF71hCF1q&I$WXtzk!7&Oq@#j~m~lc#aA3}US)`+fop+;bJ3aFiqBIulsq)Ps z2H=@5yh(&)N9GY-=|vIeNs;wjC84tl`D5tDSNjCB`S z+=avP@-XB0ZC%o4?O!Q2B|NfcX=iL^x*dB9Y%_DdpnSNfxs?H0h}S;*E?5&>D)Jgy zcTr2B5mo65@vj!s+VH3?fM(PCfn=wv#>b_V)7&Tn&uL+3yD!%_+b%`4e~Ai%MY~gG zo-Qr4Tn?4yBdR{rzlAVt44!PBhow{zR=1N=X4Kpxc~2D*S8pVwldkUcYz)olGStJh z%X&KYtxxM~M=CRt@Sfaz59+jJ+ujgVj(RFLCe6v|7^hi77c-!uv8zpe74BE=h(85^ z-@g8P4CyYCFMU^)hIQn-DQsA&ya;j6D@mp(Fwge(s5guL=Uf$&q|;sH3G6WE+H}vO z2Qk_q8+-HuJ$?w9W{M*c5)z=1aI#pWWA4*rI&>{wj~wb*H|;5uulqAa`+wIPjoU)k}if%qsLUZyT#I>!*O1G(OG;$`Y&%^g7pMuhZFodT*d09ib zXD~`Iw)op-hBjPUG*K?G(JJt4xP8Jix$Vc*6Kk_dl@jYN8vR*{XOGPnO&83F@Lm$T zcrkRxBS~GNqJ(NUza`Rb+-sMKvtxUGjDKmM=^&$-@-UX_2x@ z@|>1tLST(aIYI-qp9uVBafg9(b8nlvA`hm_6P#^x!J+v}#y7}V(ESjYEe_)78j0xv zVYV1$^5f@m=7x(3c#@!lC-`VL9#@?I?1r8U$JRV^J=Q67faAELbM65vYm2HyN5bnC zqB_*0^lwb8m88f|9>MCmdF8`WG%o3;Oacj5_+l}ltiz|lp9i(&O5k=TZ<@k!_CW+} zjH=VcQ7C(VTQI>Z;z>j!Y^xx(H#@5=l_JQN$J)QOB#Otdv@|4r`I;Oc*fB$<8e4;kDf`g~@G(5>cW<-bmBax+TTy57U&J4d_|Q z$Jw~-QgV`M1=k;J``$IZcrf5jEGV>~`tu+*+Oewkz+}=GO&oa@p1PSyeq%5-#3P@O@W?&s>#3mYbU!-QF9>sInLu z+8C(bDY@+yqP3CQ$}p-zRFC!mNLimin&W!gex|ZtbXAhNp9S^c+OANlqN%m-Mm8&(RgusSBOLK*h3*UjM~^=xRc6Fm*9; z_%O%?5za1<8|=a;tb_6<{<*=ox2wP(e&4O6Xn%OH{ri}+Gs7M-Ha14lzUE{&^Ua4T z!&C@8iqP5@$#b-INV~%B5?h6G&a}<|;LzFq&R~H~qZ_&Y-~_(yu>)J0= zI&b1`lwqZwyGjwEmiJIt4TfNr&ZH$xG}@XkQXjPG@9n7qJV?|DkXoE;3Sn1X#9vHJO>Ga73R93(=}D-< zY*}kp-K?yvhG)mhk$EWwqo>ium*CdIOLJnBkG>&~_?TZ~&kk5`a7(w8I(xQvvyzV= z^IF5iXRN|cY6p%WmM^F52asTJ!T6@mq4=HKE{inaiq9*VP+9>&gP3B;lKC>YR9esx z0zWm{jRS(F&wSWkVJVvPH%bzW*`9=ArmoGMBXfVgxygt_yahf$Ks(+YPpx_`XYtTD z4NxcKfnjN2K)^i>`SsXM^n=eJ?Y@*OihLs>#u z_VOHa87wLj*qzkn$C(MYyTP~I(sg;86rVib!L2{})kwXPa{`jP@0wZYt!5(%+m@v} zLuyPx>AYylsIg~Qm%PNG_Rb}Tf^Y8t6k6j8o&^&=s8)Lvd> z@6Eowu_oj{P#&oBbC*3P$)*UMSuHG5yl*pu9H4!PI5U2X3s36eo^Mmd?60t62b${q z^H9F_pRpU)1C6A?S>z0OzWt-8zy@u%`A9%uNcyLR+wd={+Ib^wZ{DOPr`=ZK&j<>6 zO-@FZ1lrYSN%=)sSy`3JK!cislgNGRKpT`}aDy#xjgHsAmby}V*SyuzHd1mp#@V&Z0%x5j;Q)Sy=3UEe z17m8i;Y+&Nal+c9>0AVC_5o77v&_jT!q_;nZ?l0V75Uh{7s?)4R{`dQ7e)Ck;rtrO zuY{cL8tR+DFJGoe&ovT?KaEy~PpP~26>*&qt-n$3)T>y!-Qot;2_n(m!4b(9d1}kL zCS~9a(xpmIyAN>mK(P-?7DIZ47e@_`d-A&%Fi4;ii|H+#haL)7s!hgXgYe=#ylFN- zQA4+TkMEDY6HyCzQ3narQs>Xb6EP)`z37hfYpM+A!xG-0QLS$x)Y4Bm(@V8|XCi*Q zJ??|EbML-B0}A&2DO9RqUDaBu&Evt2J2dm#-hMf5YFTJFqhjtDRFT|S*^5Y5@`|8b zinc`{@3R2-tm-#A6!(6$b-x3{)6PIluB-8YlejSj)N_GU-AOe8m*~z>C48~Ge4U?7 zu7gf5aKE{$y&pNeJ)YUn{NqX3uZJro=b6J>tfvo=}Jq6O4)R$XK*oHMEo*26f=65k!8on3Co3H_t#XLUy+F4iA?3^@MHJ zxSXc_4md4(BZWQCd0C7oEXc+FIwz?_?=e$E>gmjKT29V9p81qtcU~-e)!%G(Lz>`* z%Wt_R`cFN37O=e=#mGqA!k7V;E;VLgPDLQzj~i(nS_3sbE^Yv` zCLcZjZtn2Eqz0S6KPsSii#KGSB36XVd zbLbz}3%IrZijATH%BvSHUW~cOo~bzfeTX-ANQ+UxIqk$sDD$sn{#{dI;OggR1^cP~ z{G^!cxbJ@Xe|~p?yHB><=371bXB@1zejCd79k*+e0QMErh`VDK$zaE6bc0HWv;+T@I36 zQ%OEYxSf}MBuPGw6&rS#mS@OsbC-C}&eU(z5OX>VHYmLlsM}8i7*t(`Unc6{4ctA6 zv23>sLchr_{YlU|^8 z&~6K0dxGXoka$*E1q`&4*v3KT_cFHZ?i)XYrN8y4H)td@xY_i7qQ6eR#}2;(k_n24S@xkAEUI?$-3aZ?tmt5Px{ z5HT6Xqq-~hP~jQsUq%6I5xv2Igr#A5V0`|Ub$`B00BZ5VfLgerkN!*+0Twq1ccjZ0 zuD;)Q`*5@41wCC|gZ>SC-cPV73?UUKtCjxSCVXVXDs*L%l@v&qE2ih?i!u#5<>Wx_ zP`y54KoV!Q>s)SHpm#!PUkJK8VcIKz+7bcy@{Hnb^8^QRGlbc+Mqs31#?!XTYQZxq zdwR1@V=0}%Iltq+axqyw%H)akFIVZ{*zfur5(W_cHzz~?Xa`7ZMjr5mp)Ug$lWQ^? zdUxR5?49dRGM+mPD8u?pM6?L}OiTAAe2_JfF9H1J*9`{n-t}cL&b+KJ;Lm&e;%?L7 zHz58$d;@_A$f$&43^Mv%jS;TJ6ust;t^)m`sh*MkYu+L2PtP`#v|=#Y_QTdu za)YgX8s_z{NA9Ed5~{XTb*01M22=XO%(tm%&^Otb& zR{a0*6~Q`|n5gJ9KuQ!Bmuqix5naAq?AIiK5D|AseH9&sO?2=txq;q{KfO%n z2Wk?fbt5CAyy1p1*J7ex{1-1kU!Et&w7K4Az-TosCSSG5WtP{cEPTf`?(C@uZ*kr<9b&yXB-4HRbgk_@&`)#(U? zPQ@d4sn!iD(jZLF%eU8z9JYI?>?^KP_t2ci3DNxc9^cB7v40NKEqw0>`1Ex zL(K;UvDQuxc*Axz9hLdfSxFd3Xv}X1U5Z&fT#v<1{rhsCKg=Nh1?$)cEs6RNa>5WhN$y?puW?wIexmN_{RlLGv1W~R#|{Sv|Wd`AfhnVj#%7d2;{XZ>%My~4PXWx?GK+4L-*92_i~MAP@a z74WYCeE^@EmwrvlUl3z*Jxz{#M1PejlTUG7L>9oK@Dmkz%0DmE++gaM7^%cT$2%Dy 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­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 VJ;(=MLVn_elAOA1=~WBA{{i=J_~HNn literal 0 HcmV?d00001 diff --git a/tasks/.env.docker b/tasks/.env.docker new file mode 100644 index 0000000..2cb2e98 --- /dev/null +++ b/tasks/.env.docker @@ -0,0 +1,11 @@ +MODE = PRODUCTION + +# Database +TASKS_DB_USER = postgres +TASKS_DB_PASS = postgres +TASKS_DB_HOST = db_tasks_app +TASKS_DB_PORT = 5432 +TASKS_DB_NAME = tasks_app + +# FastAPI +TASKS_APP_PORT = 5001 \ No newline at end of file diff --git a/tasks/api_v1/graphql/context.py b/tasks/api_v1/graphql/context.py new file mode 100644 index 0000000..4f9212a --- /dev/null +++ b/tasks/api_v1/graphql/context.py @@ -0,0 +1,34 @@ +from typing import AsyncIterator +from contextlib import asynccontextmanager +from fastapi import Request +from strawberry.fastapi import BaseContext +from infrastructure.database.uow import UnitOfWork, unit_of_work +from api_v1.service.task import TaskService + + +class GraphQLContext(BaseContext): + def __init__( + self, + request: Request, + uow: UnitOfWork, + task_service: TaskService, + ): + self.request = request + self.uow = uow + self.task_service = task_service + +@asynccontextmanager +async def get_context(request: Request) -> AsyncIterator[GraphQLContext]: + """Контекст для GraphQL запросов, использующий существующий Unit of Work""" + async with unit_of_work() as uow: + task_service = TaskService(uow) + yield GraphQLContext( + request=request, + uow=uow, + task_service=task_service, + ) + +# Сохранение межзапросного контекста для GraphQL +async def get_context_wrapper(request: Request): + async with get_context(request) as ctx: + yield ctx diff --git a/tasks/api_v1/graphql/tasks/resolvers.py b/tasks/api_v1/graphql/tasks/resolvers.py new file mode 100644 index 0000000..8b71fe4 --- /dev/null +++ b/tasks/api_v1/graphql/tasks/resolvers.py @@ -0,0 +1,118 @@ +import strawberry +# from graphql import GraphQLError +from .schemas import ( + TaskGQL, + TaskPageGQL, + TaskCreateInputGQL, + TaskUpdateInputGQL, + TaskStatusGQL, + map_to_task_gql +) +from typing import Optional +from core.schemas.tasks import ( + TaskCreate, + TaskUpdatePartial, +) + +@strawberry.type +class Query: + @strawberry.field + async def task( + self, + id: strawberry.ID, + info: strawberry.Info, + ) -> Optional[TaskGQL]: + task = await info.context.task_service.get_task(id) + if task is None: + return None + return map_to_task_gql(task) + + @strawberry.field + async def tasks( + self, + status: Optional[TaskStatusGQL] = None, + offset: int = 0, + limit: int = 10, + info: strawberry.Info = strawberry.UNSET, + ) -> TaskPageGQL: + task_service = info.context.task_service + """Получение списка задач с опциональным фильтром по статусу.""" + status_value = status.value if status else None + + tasks_data = await task_service.get_tasks( + page=(offset // limit) + 1, + limit=limit, + column_search='status' if status else None, + input_search=status_value + ) + + tasks = [map_to_task_gql(task) for task in tasks_data.tasks] + + return TaskPageGQL( + tasks=tasks, + total=tasks_data.total, + pages_count=tasks_data.pages_count + ) + +@strawberry.type +class Mutation: + @strawberry.mutation + async def create_task( + self, + input: TaskCreateInputGQL, + info: strawberry.Info, + ) -> TaskGQL: + task_data = TaskCreate( + title=input.title, + description=input.description + ) + task = await info.context.task_service.create_task(task_data) + return map_to_task_gql(task) + + @strawberry.mutation + async def update_task( + self, + id: strawberry.ID, + input: TaskUpdateInputGQL, + info: strawberry.Info, + ) -> Optional[TaskGQL]: + task = await info.context.task_service.get_task(id) + if task is None: + return None + updated_task = await info.context.task_service.update_task( + task, TaskUpdatePartial(**input.to_update_dict()), partial=True + ) + return map_to_task_gql(updated_task) if updated_task else None + + @strawberry.mutation + async def delete_task( + self, + id: strawberry.ID, + info: strawberry.Info, + ) -> bool: + task = await info.context.task_service.get_task(id) + if task is None: + return False + await info.context.task_service.delete_task(task) + return True + + + + +# Автоматический маппинг (если много моделей) +# def input_to_partial(input_obj, mapping: dict = None) -> dict: +# data = {} +# for field, value in vars(input_obj).items(): +# if value is not None: +# if mapping and field in mapping: +# data[field] = mapping[field](value) +# else: +# data[field] = value +# return data + +# clean_fields = input_to_partial( +# input, +# mapping={"status": map_to_task_status} +# ) +# updated_task_data = TaskUpdatePartial(**clean_fields) + diff --git a/tasks/api_v1/graphql/tasks/schemas.py b/tasks/api_v1/graphql/tasks/schemas.py new file mode 100644 index 0000000..f8fd2fd --- /dev/null +++ b/tasks/api_v1/graphql/tasks/schemas.py @@ -0,0 +1,58 @@ +import strawberry +from enum import Enum +from typing import Optional, List +from core.models.task import TaskStatus +from core.models import Task + + +@strawberry.enum +class TaskStatusGQL(str, Enum): + CREATED = 'created' + IN_PROGRESS = 'in_progress' + COMPLETED = 'completed' + +def map_to_task_status(status: TaskStatusGQL) -> TaskStatus: + """Карта GraphQL TaskStatusGQL на domain TaskStatus""" + return TaskStatus(status.value) + +@strawberry.type +class TaskGQL: + id: strawberry.ID + title: str + description: Optional[str] = None + status: TaskStatusGQL + +def map_to_task_gql(task: Task) -> TaskGQL: + """Карта базы данных на GraphQL""" + return TaskGQL( + id=str(task.id), + title=task.title, + description=task.description, + status=TaskStatusGQL(task.status.value) if task.status else None + ) + +@strawberry.type +class TaskPageGQL: + tasks: List[TaskGQL] + total: int + pages_count: int + +@strawberry.input +class TaskCreateInputGQL: + title: str + description: Optional[str] = None + +@strawberry.input +class TaskUpdateInputGQL: + title: Optional[str] = None + description: Optional[str] = None + status: Optional[TaskStatusGQL] = None + + def to_update_dict(self) -> dict: + fields = { + 'title': self.title, + 'description': self.description, + 'status': map_to_task_status(self.status) if self.status is not None else None, + } + return {k: v for k, v in fields.items() if v is not None} + diff --git a/tasks/api_v1/rest/tasks/dependencies.py b/tasks/api_v1/rest/tasks/dependencies.py index 736f80f..0eee4b0 100644 --- a/tasks/api_v1/rest/tasks/dependencies.py +++ b/tasks/api_v1/rest/tasks/dependencies.py @@ -1,7 +1,7 @@ from typing import Annotated, AsyncIterator from fastapi import Path, Depends from infrastructure.database.uow import UnitOfWork, unit_of_work -from .service import TaskService +from api_v1.service.task import TaskService from core.models import Task from .decorators import handle_errors diff --git a/tasks/api_v1/rest/tasks/views.py b/tasks/api_v1/rest/tasks/views.py index a258d7c..f197c79 100644 --- a/tasks/api_v1/rest/tasks/views.py +++ b/tasks/api_v1/rest/tasks/views.py @@ -6,16 +6,15 @@ AIOKafkaProducer, get_producer ) -from .service import TaskService +from api_v1.service.task import TaskService from core.models import Task -from .schemas import ( +from core.schemas.tasks import ( TaskCreate, SchemaTask, TaskUpdate, TaskUpdatePartial, TasksResponseSchema ) -# from infrastructure.kafka.producer import producer from core.config import settings import logging.config diff --git a/tasks/api_v1/rest/tasks/service.py b/tasks/api_v1/service/task.py similarity index 97% rename from tasks/api_v1/rest/tasks/service.py rename to tasks/api_v1/service/task.py index 6206638..9750f46 100644 --- a/tasks/api_v1/rest/tasks/service.py +++ b/tasks/api_v1/service/task.py @@ -1,5 +1,5 @@ from core.models import Task -from .schemas import ( +from core.schemas.tasks import ( TaskCreate, SchemaTask, TaskUpdate, diff --git a/tasks/core/config.py b/tasks/core/config.py index af14011..e93a0b8 100644 --- a/tasks/core/config.py +++ b/tasks/core/config.py @@ -1,8 +1,10 @@ # -*- encoding: utf-8 -*- import os +from dotenv import load_dotenv from pydantic import BaseModel from pydantic_settings import BaseSettings +load_dotenv() class ConfigurationDB(BaseModel): ######################### @@ -58,7 +60,7 @@ class ConfigurationKafka(BaseModel): class Setting(BaseSettings): # ENV - MODE: str = os.getenv('MODE', 'development') + MODE: str = os.getenv('MODE', 'DEVELOPMENT') # FASTAPI api_v1_prefix: str = '/api/v1' diff --git a/tasks/core/repositories/task.py b/tasks/core/repositories/task.py index 35f4e2a..c545d99 100644 --- a/tasks/core/repositories/task.py +++ b/tasks/core/repositories/task.py @@ -3,7 +3,7 @@ from typing import Optional from core.models import Task from core.models.task import TaskStatus -from api_v1.rest.tasks.schemas import ( +from core.schemas.tasks import ( TaskCreate, SchemaTask, TaskUpdate, @@ -46,14 +46,18 @@ async def get_tasks( elif column_search == 'status': if input_search.upper() == 'CREATED': - stmt = stmt.where(Task.status == TaskStatus.CREATED) + status_condition = Task.status == TaskStatus.CREATED elif input_search.upper() == 'IN_PROGRESS': - stmt = stmt.where(Task.status == TaskStatus.IN_PROGRESS) + status_condition = Task.status == TaskStatus.IN_PROGRESS elif input_search.upper() == 'COMPLETED': - stmt = stmt.where(Task.status == TaskStatus.COMPLETED) + status_condition = Task.status == TaskStatus.COMPLETED else: logger.exception('Неизвестный статус задачи: %s', input_search) raise ValueError(f'Неизвестный статус задачи: {input_search}') + + # Apply the same status filter to both queries + stmt = stmt.where(status_condition) + total_stmt = total_stmt.where(status_condition) total_result = await self.session.execute(total_stmt) total_tasks = total_result.scalar() or 0 diff --git a/tasks/api_v1/rest/tasks/schemas.py b/tasks/core/schemas/tasks.py similarity index 100% rename from tasks/api_v1/rest/tasks/schemas.py rename to tasks/core/schemas/tasks.py diff --git a/tasks/main.py b/tasks/main.py index 413f892..850ed8a 100644 --- a/tasks/main.py +++ b/tasks/main.py @@ -1,9 +1,12 @@ -import uvicorn +import uvicorn, strawberry from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from core.config import settings -from api_v1.rest import router as router_v1 +from api_v1.rest import router as rest_api_router_v1 from infrastructure.kafka.producer import lifespan +from strawberry.fastapi import GraphQLRouter +from api_v1.graphql.tasks.resolvers import Mutation, Query +from api_v1.graphql.context import get_context_wrapper import logging.config from core.logger import logger_config @@ -15,6 +18,9 @@ description='API for tasks', version='1.0.0', lifespan=lifespan, + docs_url=None, + redoc_url=None, + openapi_url=None ) app.add_middleware( @@ -25,7 +31,24 @@ allow_headers=settings.cors.headers, ) -app.include_router(router=router_v1, prefix=settings.api_v1_prefix) +app.include_router(router=rest_api_router_v1, prefix=settings.api_v1_prefix) + +schema = strawberry.Schema( + query=Query, + mutation=Mutation +) +graphql_app = GraphQLRouter( + schema=schema, + context_getter=get_context_wrapper, + graphiql=True, + multipart_uploads_enabled=True +) + +app.include_router( + router=graphql_app, + prefix=settings.api_v1_prefix + '/graphql', + include_in_schema=False +) if __name__ == '__main__': diff --git a/tasks/poetry.lock b/tasks/poetry.lock index 408c93a..5de7d7f 100644 --- a/tasks/poetry.lock +++ b/tasks/poetry.lock @@ -376,6 +376,18 @@ all = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (> standard = ["email-validator (>=2.0.0)", "fastapi-cli[standard] (>=0.0.8)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] standard-no-fastapi-cloud-cli = ["email-validator (>=2.0.0)", "fastapi-cli[standard-no-fastapi-cloud-cli] (>=0.0.8)", "httpx (>=0.23.0)", "jinja2 (>=3.1.5)", "python-multipart (>=0.0.18)", "uvicorn[standard] (>=0.12.0)"] +[[package]] +name = "graphql-core" +version = "3.2.6" +description = "GraphQL implementation for Python, a port of GraphQL.js, the JavaScript reference implementation for GraphQL." +optional = false +python-versions = "<4,>=3.6" +groups = ["main"] +files = [ + {file = "graphql_core-3.2.6-py3-none-any.whl", hash = "sha256:78b016718c161a6fb20a7d97bbf107f331cd1afe53e45566c59f776ed7f0b45f"}, + {file = "graphql_core-3.2.6.tar.gz", hash = "sha256:c08eec22f9e40f0bd61d805907e3b3b1b9a320bc606e23dc145eebca07c8fbab"}, +] + [[package]] name = "greenlet" version = "3.2.4" @@ -540,6 +552,99 @@ files = [ {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, ] +[[package]] +name = "lia-web" +version = "0.2.3" +description = "A library for working with web frameworks" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "lia_web-0.2.3-py3-none-any.whl", hash = "sha256:237c779c943cd4341527fc0adfcc3d8068f992ee051f4ef059b8474ee087f641"}, + {file = "lia_web-0.2.3.tar.gz", hash = "sha256:ccc9d24cdc200806ea96a20b22fb68f4759e6becdb901bd36024df7921e848d7"}, +] + +[package.dependencies] +typing-extensions = ">=4.14.0" + +[[package]] +name = "libcst" +version = "1.8.4" +description = "A concrete syntax tree with AST-like properties for Python 3.0 through 3.13 programs." +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "libcst-1.8.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:114343271f70a79e6d08bc395f5dfa150227341fab646cc0a58e80550e7659b7"}, + {file = "libcst-1.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b376ef7fa30bef611d4fb32af1da0e767b801b00322028a874ab3a441686b6a9"}, + {file = "libcst-1.8.4-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:9be5b1b7d416900ff9bcdb4945692e6252fdcbd95514e98439f81568568c9e02"}, + {file = "libcst-1.8.4-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:e4c5055e255d12745c7cc60fb5fb31c0f82855864c15dc9ad33a44f829b92600"}, + {file = "libcst-1.8.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2b1e570ba816da408b5ee40ac479b34e56d995bf32dcca6f0ddb3d69b08e77de"}, + {file = "libcst-1.8.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:65364c214251ed5720f3f6d0c4ef1338aac91ad4bbc5d30253eac21832b0943a"}, + {file = "libcst-1.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:a90c80e4d89222e11c7a734bc1b7f930bc2aba7750ad149bde1b136f839ea788"}, + {file = "libcst-1.8.4-cp310-cp310-win_arm64.whl", hash = "sha256:2d71e7e5982776f78cca9102286bb0895ef6f7083f76c0c9bc5ba4e9e40aee38"}, + {file = "libcst-1.8.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e7baaa6f01b6b6ea4b28d60204fddc679a3cd56d312beee200bd5f8f9711f0b"}, + {file = "libcst-1.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:259737faf90552a0589d95393dcaa3d3028be03ab3ea87478d46a1a4f922dd91"}, + {file = "libcst-1.8.4-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:a65e3c409ef16ae369600d085d23a3897d4fccf4fdcc09294a402c513ac35906"}, + {file = "libcst-1.8.4-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:fa870f34018c7241ee9227723cac0787599a2a8a2bfd53eacfbbe1ea1a272ae6"}, + {file = "libcst-1.8.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3eeba4edb40b2291c2460fe8d7e43f47e5fcc33f186675db5d364395adca3401"}, + {file = "libcst-1.8.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a5cd7beef667e5de3c5fb0ec387dc19aeda5cd4606ff541d0e8613bb3ef3b23"}, + {file = "libcst-1.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:3de575f0b5b466f2e9656b963f5848103cc518c6f3581902c6f430b07864584f"}, + {file = "libcst-1.8.4-cp311-cp311-win_arm64.whl", hash = "sha256:2fcff2130824f2cb5f4fd9c4c74fb639c5f02bc4228654461f6dc6b1006f20c0"}, + {file = "libcst-1.8.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1d468514a21cf3444dc3f3a4b1effc6c05255c98cc79e02af394652d260139f0"}, + {file = "libcst-1.8.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:870a49df8575c11ea4f5319d54750f95d2d06370a263bd42d924a9cf23cf0cbe"}, + {file = "libcst-1.8.4-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c9c775bc473225a0ad8422150fd9cf18ed2eebd7040996772937ac558f294d6c"}, + {file = "libcst-1.8.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:27eeb16edb7dc0711d67e28bb8c0288e4147210aeb2434f08c16ac5db6b559e5"}, + {file = "libcst-1.8.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:71e12101ef2a6e05b7610badb2bfa597379289f1408e305a8d19faacdb872f47"}, + {file = "libcst-1.8.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:69b672c1afac5fe00d689f585ba57ac5facc4632f39b977d4b3e4711571c76e2"}, + {file = "libcst-1.8.4-cp312-cp312-win_amd64.whl", hash = "sha256:7832ee448fbdf18884a1f9af5fba1be6d5e98deb560514d92339fd6318aef651"}, + {file = "libcst-1.8.4-cp312-cp312-win_arm64.whl", hash = "sha256:6840e4011b583e9b7a71c00e7ab4281aea7456877b3ea6ecedb68a39a000bc64"}, + {file = "libcst-1.8.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8e8d5158f976a5ee140ad0d3391e1a1b84b2ce5da62f16e48feab4bc21b91967"}, + {file = "libcst-1.8.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a179c712f38acb85e81d8949e80e05a422c92dcf5a00d8f4976f7e547a9f0916"}, + {file = "libcst-1.8.4-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:d130f3e2d40c5f48cbbc804710ddf5b4db9dd7c0118f3b35f109164a555860d2"}, + {file = "libcst-1.8.4-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:a4270123c988e130cec94bfe1b54d34784a40b34b2d5ac0507720c1272bd3209"}, + {file = "libcst-1.8.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ea74c56cb11a1fdca9f8ab258965adce23e049ef525fdcc5c254a093e3de25cb"}, + {file = "libcst-1.8.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7fe97d432d95b6bcb1694a6d0fa7e07dde8fa687a637958126410ee2ced94b81"}, + {file = "libcst-1.8.4-cp313-cp313-win_amd64.whl", hash = "sha256:2c6d8f7087e9eaf005efde573f3f36d1d40366160155c195a6c4230d4c8a5839"}, + {file = "libcst-1.8.4-cp313-cp313-win_arm64.whl", hash = "sha256:062e424042c36a102abd11d8e9e27ac6be68e1a934b0ecfc9fb8fea017240d2f"}, + {file = "libcst-1.8.4-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:873dd4e8b896f7cb0e78118badda55ec1f42e9301a4a948cc438955ff3ae2257"}, + {file = "libcst-1.8.4-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:52c9376ba11ede5430e40aa205101dfc41202465103c6540f24591f898afb3d6"}, + {file = "libcst-1.8.4-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:074a3b17e270237fb36d3b94d7492fb137cb74217674484ba25e015e8d3d8bdc"}, + {file = "libcst-1.8.4-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:846aad04bac624a42d182add526d019e417e6a2b8a4c0bf690d32f9e1f3075ff"}, + {file = "libcst-1.8.4-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:93c76ab41d736b66d6fb3df32cd33184eed17666d7dc3ce047cf7ccdfe80b5b1"}, + {file = "libcst-1.8.4-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5f167bf83dce662c9b499f1ea078ec2f2fee138e80f7d7dbd59c89ed28dc935f"}, + {file = "libcst-1.8.4-cp313-cp313t-win_amd64.whl", hash = "sha256:43cbb6b41bc2c4785136f59a66692287d527aeb022789c4af44ad6e85b7b2baa"}, + {file = "libcst-1.8.4-cp313-cp313t-win_arm64.whl", hash = "sha256:6cc8b7e33f6c4677e220dd7025e1e980da4d3f497b9b8ee0320e36dd54597f68"}, + {file = "libcst-1.8.4-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:d011d731c2e673fbd9c84794418230a913ae3c98fc86f27814612b6b6d53d26b"}, + {file = "libcst-1.8.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a334dd11cdea34275df91c2ae9cc5933ec7e0ad5698264966708d637d110b627"}, + {file = "libcst-1.8.4-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:783f52b7c8d82046f0d93812f62a25eb82c3834f198e6cbfd5bb03ca68b593c8"}, + {file = "libcst-1.8.4-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:0352c7d662c89243e730a28edf41577f87e28649c18ee365dd373c5fbdab2434"}, + {file = "libcst-1.8.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cb188ebd4114144e14f6beb5499e43bebd0ca3ce7f2beb20921d49138c67b814"}, + {file = "libcst-1.8.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4a718e5f6b398a07ca5d533e6593c1590d69fe65c539323281959733d6d541dd"}, + {file = "libcst-1.8.4-cp314-cp314-win_amd64.whl", hash = "sha256:fedfd33e5dda2200d582554e6476626d4706aa1fa2794bfb271879f8edff89b9"}, + {file = "libcst-1.8.4-cp314-cp314-win_arm64.whl", hash = "sha256:eff724c17df10e059915000eaf59f4e79998b66a7d35681e934a9a48667df931"}, + {file = "libcst-1.8.4-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:64cc34d74c9543b30ec3d7481dd644cb1bb3888076b486592d7fa0f22632f1c6"}, + {file = "libcst-1.8.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:3ad7f0a32ddcdff00a3eddfd35cfd8485d9f357a32e4c67558476570199f808f"}, + {file = "libcst-1.8.4-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:2e156760fc741bbf2fa68f4e3b15f019e924ea852f02276d0a53b7375cf70445"}, + {file = "libcst-1.8.4-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:fceb17616f1afe528c88243e3e7f78f84f0cc287463f04f3c1243e20a469e869"}, + {file = "libcst-1.8.4-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5db0b484670aac7ea442213afaa9addb1de0d9540a34ad44d376bec12242bc3a"}, + {file = "libcst-1.8.4-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:929798ca38ea76a5056f725221d66c6923e749caa9fa7f4cc86e914a3698493d"}, + {file = "libcst-1.8.4-cp314-cp314t-win_amd64.whl", hash = "sha256:e6f309c0f42e323c527d8c9007f583fd1668e45884208184a70644d916f27829"}, + {file = "libcst-1.8.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4b1cbadd988fee59b25ea154708cfed99cfaf45f9685707be422ad736371a9fe"}, + {file = "libcst-1.8.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:fbadca1bc31f696875c955080c407a40b2d1aa7f79ca174a65dcb0542a57db6c"}, + {file = "libcst-1.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d3d4111f971632e9ddf8191aeef4576595e18ef3fa7b3016bfe15a08fa8554df"}, + {file = "libcst-1.8.4-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:f5bd0bcdd2a8da9dad47d36d71757d8ba87baf887ae6982e2cb8621846610c49"}, + {file = "libcst-1.8.4-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:2e24d11a1be0b1791f7bace9d406f5a70b8691ef77be377b606950803de4657d"}, + {file = "libcst-1.8.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:14bda1e4ea0b04d3926d41f6dafbfd311a951b75a60fe0d79bb5a8249c1cef5b"}, + {file = "libcst-1.8.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:056733760ba5ac1fd4cd518cddd5a43b3adbe2e0f6c7ce02532a114f7cd5d85b"}, + {file = "libcst-1.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:33664117fcb2913fdbd7de07a009193b660a16e7af18f7c1b4449e428f3b0f95"}, + {file = "libcst-1.8.4-cp39-cp39-win_arm64.whl", hash = "sha256:b69e94625702825309fd9e50760e77a5a60bd1e7a8e039862c8dd3011a6e1530"}, + {file = "libcst-1.8.4.tar.gz", hash = "sha256:f0f105d32c49baf712df2be360d496de67a2375bcf4e9707e643b7efc2f9a55a"}, +] + +[package.dependencies] +pyyaml-ft = {version = ">=8.0.0", markers = "python_version >= \"3.13\""} + [[package]] name = "mako" version = "1.3.10" @@ -560,6 +665,30 @@ babel = ["Babel"] lingua = ["lingua"] testing = ["pytest"] +[[package]] +name = "markdown-it-py" +version = "4.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.10" +groups = ["main"] +files = [ + {file = "markdown_it_py-4.0.0-py3-none-any.whl", hash = "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147"}, + {file = "markdown_it_py-4.0.0.tar.gz", hash = "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3"}, +] + +[package.dependencies] +mdurl = ">=0.1,<1.0" + +[package.extras] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "markdown-it-pyrs", "mistletoe (>=1.0,<2.0)", "mistune (>=3.0,<4.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] +plugins = ["mdit-py-plugins (>=0.5.0)"] +profiling = ["gprof2dot"] +rtd = ["ipykernel", "jupyter_sphinx", "mdit-py-plugins (>=0.5.0)", "myst-parser", "pyyaml", "sphinx", "sphinx-book-theme (>=1.0,<2.0)", "sphinx-copybutton", "sphinx-design"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions", "requests"] + [[package]] name = "markupsafe" version = "3.0.2" @@ -631,6 +760,18 @@ files = [ {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] + [[package]] name = "mypy-extensions" version = "1.1.0" @@ -864,7 +1005,7 @@ version = "2.19.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" -groups = ["dev"] +groups = ["main", "dev"] files = [ {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, @@ -934,6 +1075,21 @@ pytest = ">=7" [package.extras] testing = ["process-tests", "pytest-xdist", "virtualenv"] +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +description = "Extensions to the standard Python datetime module" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] + +[package.dependencies] +six = ">=1.5" + [[package]] name = "python-dotenv" version = "1.1.1" @@ -949,6 +1105,18 @@ files = [ [package.extras] cli = ["click (>=5.0)"] +[[package]] +name = "python-multipart" +version = "0.0.20" +description = "A streaming multipart parser for Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "python_multipart-0.0.20-py3-none-any.whl", hash = "sha256:8a62d3a8335e06589fe01f2a3e178cdcc632f3fbe0d492ad9ee0ec35aab1f104"}, + {file = "python_multipart-0.0.20.tar.gz", hash = "sha256:8dd0cab45b8e23064ae09147625994d090fa46f5b0d1e13af944c331a7fa9d13"}, +] + [[package]] name = "pyyaml" version = "6.0.2" @@ -1012,6 +1180,76 @@ files = [ {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] +[[package]] +name = "pyyaml-ft" +version = "8.0.0" +description = "YAML parser and emitter for Python with support for free-threading" +optional = false +python-versions = ">=3.13" +groups = ["main"] +files = [ + {file = "pyyaml_ft-8.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8c1306282bc958bfda31237f900eb52c9bedf9b93a11f82e1aab004c9a5657a6"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30c5f1751625786c19de751e3130fc345ebcba6a86f6bddd6e1285342f4bbb69"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3fa992481155ddda2e303fcc74c79c05eddcdbc907b888d3d9ce3ff3e2adcfb0"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cec6c92b4207004b62dfad1f0be321c9f04725e0f271c16247d8b39c3bf3ea42"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06237267dbcab70d4c0e9436d8f719f04a51123f0ca2694c00dd4b68c338e40b"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8a7f332bc565817644cdb38ffe4739e44c3e18c55793f75dddb87630f03fc254"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7d10175a746be65f6feb86224df5d6bc5c049ebf52b89a88cf1cd78af5a367a8"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:58e1015098cf8d8aec82f360789c16283b88ca670fe4275ef6c48c5e30b22a96"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:e64fa5f3e2ceb790d50602b2fd4ec37abbd760a8c778e46354df647e7c5a4ebb"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8d445bf6ea16bb93c37b42fdacfb2f94c8e92a79ba9e12768c96ecde867046d1"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c56bb46b4fda34cbb92a9446a841da3982cdde6ea13de3fbd80db7eeeab8b49"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dab0abb46eb1780da486f022dce034b952c8ae40753627b27a626d803926483b"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd48d639cab5ca50ad957b6dd632c7dd3ac02a1abe0e8196a3c24a52f5db3f7a"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:052561b89d5b2a8e1289f326d060e794c21fa068aa11255fe71d65baf18a632e"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3bb4b927929b0cb162fb1605392a321e3333e48ce616cdcfa04a839271373255"}, + {file = "pyyaml_ft-8.0.0-cp313-cp313t-win_amd64.whl", hash = "sha256:de04cfe9439565e32f178106c51dd6ca61afaa2907d143835d501d84703d3793"}, + {file = "pyyaml_ft-8.0.0.tar.gz", hash = "sha256:0c947dce03954c7b5d38869ed4878b2e6ff1d44b08a0d84dc83fdad205ae39ab"}, +] + +[[package]] +name = "rich" +version = "14.1.0" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.8.0" +groups = ["main"] +files = [ + {file = "rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f"}, + {file = "rich-14.1.0.tar.gz", hash = "sha256:e497a48b844b0320d45007cdebfeaeed8db2a4f4bcf49f15e455cfc4af11eaa8"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + +[[package]] +name = "shellingham" +version = "1.5.4" +description = "Tool to Detect Surrounding Shell" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, + {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, +] + +[[package]] +name = "six" +version = "1.17.0" +description = "Python 2 and 3 compatibility utilities" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] + [[package]] name = "sniffio" version = "1.3.1" @@ -1138,6 +1376,69 @@ anyio = ">=3.6.2,<5" [package.extras] full = ["httpx (>=0.27.0,<0.29.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.18)", "pyyaml"] +[[package]] +name = "strawberry-graphql" +version = "0.282.0" +description = "A library for creating GraphQL APIs" +optional = false +python-versions = "<4.0,>=3.9" +groups = ["main"] +files = [ + {file = "strawberry_graphql-0.282.0-py3-none-any.whl", hash = "sha256:6671cf90fd3630ae7d50aae2d8a06808ada6ce55d02ee01b7b7cba0026dfed18"}, + {file = "strawberry_graphql-0.282.0.tar.gz", hash = "sha256:f15610e4944210c15f83be814bfcd6ac1024b4293c18c9f4eee8345639795d1c"}, +] + +[package.dependencies] +graphql-core = ">=3.2.0,<3.4.0" +lia-web = ">=0.2.1" +libcst = {version = "*", optional = true, markers = "extra == \"debug-server\""} +packaging = ">=23" +pygments = {version = ">=2.3,<3.0", optional = true, markers = "extra == \"debug-server\""} +python-dateutil = ">=2.7,<3.0" +python-multipart = {version = ">=0.0.7", optional = true, markers = "extra == \"debug-server\""} +rich = {version = ">=12.0.0", optional = true, markers = "extra == \"debug-server\""} +starlette = {version = ">=0.18.0", optional = true, markers = "extra == \"debug-server\""} +typer = {version = ">=0.7.0", optional = true, markers = "extra == \"debug-server\""} +typing-extensions = ">=4.5.0" +uvicorn = {version = ">=0.11.6", optional = true, markers = "extra == \"debug-server\""} +websockets = {version = ">=15.0.1,<16", optional = true, markers = "extra == \"debug-server\""} + +[package.extras] +aiohttp = ["aiohttp (>=3.7.4.post0,<4)"] +asgi = ["python-multipart (>=0.0.7)", "starlette (>=0.18.0)"] +chalice = ["chalice (>=1.22,<2.0)"] +channels = ["asgiref (>=3.2,<4.0)", "channels (>=3.0.5)"] +cli = ["libcst", "pygments (>=2.3,<3.0)", "rich (>=12.0.0)", "typer (>=0.7.0)"] +debug = ["libcst", "rich (>=12.0.0)"] +debug-server = ["libcst", "pygments (>=2.3,<3.0)", "python-multipart (>=0.0.7)", "rich (>=12.0.0)", "starlette (>=0.18.0)", "typer (>=0.7.0)", "uvicorn (>=0.11.6)", "websockets (>=15.0.1,<16)"] +django = ["Django (>=3.2)", "asgiref (>=3.2,<4.0)"] +fastapi = ["fastapi (>=0.65.2)", "python-multipart (>=0.0.7)"] +flask = ["flask (>=1.1)"] +litestar = ["litestar (>=2) ; python_version ~= \"3.10\""] +opentelemetry = ["opentelemetry-api (<2)", "opentelemetry-sdk (<2)"] +pydantic = ["pydantic (>1.6.1)"] +pyinstrument = ["pyinstrument (>=4.0.0)"] +quart = ["quart (>=0.19.3)"] +sanic = ["sanic (>=20.12.2)"] + +[[package]] +name = "typer" +version = "0.19.1" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "typer-0.19.1-py3-none-any.whl", hash = "sha256:914b2b39a1da4bafca5f30637ca26fa622a5bf9f515e5fdc772439f306d5682a"}, + {file = "typer-0.19.1.tar.gz", hash = "sha256:cb881433a4b15dacc875bb0583d1a61e78497806741f9aba792abcab390c03e6"}, +] + +[package.dependencies] +click = ">=8.0.0" +rich = ">=10.11.0" +shellingham = ">=1.3.0" +typing-extensions = ">=3.7.4.3" + [[package]] name = "typing-extensions" version = "4.15.0" @@ -1444,5 +1745,5 @@ files = [ [metadata] lock-version = "2.1" -python-versions = ">=3.13" -content-hash = "9038dab5a7728f2acda5734399ba73f4bdbbbbe148a8ee01d16bd42c5277b50d" +python-versions = ">=3.13,<4.0" +content-hash = "7e55f8e0fe3f4adf29967a44546d309dcb1fdfb4b6ad7da9ed9bf773b3d17ffa" diff --git a/tasks/pyproject.toml b/tasks/pyproject.toml index dd257fa..e69ff43 100644 --- a/tasks/pyproject.toml +++ b/tasks/pyproject.toml @@ -5,7 +5,7 @@ description = "" authors = [{ name = "Powermacintosh", email = "ak.powermacintosh@gmail.com" }] license = { text = "MIT" } readme = "README.md" -requires-python = ">=3.13" +requires-python = ">=3.13,<4.0" dependencies = [ "fastapi (>=0.116.1,<0.117.0)", "uvicorn[standard] (>=0.35.0,<0.36.0)", @@ -15,6 +15,7 @@ dependencies = [ "alembic (>=1.16.5,<2.0.0)", "black (>=25.1.0,<26.0.0)", "aiokafka (>=0.12.0,<0.13.0)", + "strawberry-graphql[debug-server] (>=0.282.0,<0.283.0)", ] [tool.poetry] diff --git a/tasks/tests/unit/test_task_repository.py b/tasks/tests/unit/test_task_repository.py index 081415c..bc3ef9d 100644 --- a/tasks/tests/unit/test_task_repository.py +++ b/tasks/tests/unit/test_task_repository.py @@ -3,7 +3,7 @@ from typing import AsyncIterator from core.models.task import Task, TaskStatus from core.repositories.task import TaskRepository -from api_v1.rest.tasks.schemas import TaskCreate, TaskUpdate, TaskUpdatePartial +from core.schemas.tasks import TaskCreate, TaskUpdate, TaskUpdatePartial class TestTaskRepository: """Тесты для TaskRepository""" diff --git a/tasks/tests/unit/test_task_validation.py b/tasks/tests/unit/test_task_validation.py index c6fd6a5..3a14aad 100644 --- a/tasks/tests/unit/test_task_validation.py +++ b/tasks/tests/unit/test_task_validation.py @@ -3,7 +3,7 @@ from typing import AsyncIterator from pydantic import ValidationError from core.repositories.task import TaskRepository -from api_v1.rest.tasks.schemas import TaskCreate +from core.schemas.tasks import TaskCreate class TestTaskPydanticValidation: """Тесты валидации данных задачи.""" diff --git a/tasks/worker.py b/tasks/worker.py index 903c387..1b568a4 100644 --- a/tasks/worker.py +++ b/tasks/worker.py @@ -1,8 +1,8 @@ import asyncio, json from aiokafka import AIOKafkaConsumer, TopicPartition, ConsumerRecord from api_v1.rest.tasks.dependencies import unit_of_work -from api_v1.rest.tasks.service import TaskService -from api_v1.rest.tasks.schemas import TaskCreate +from api_v1.service.task import TaskService +from core.schemas.tasks import TaskCreate from core.config import settings import logging.config From 1af573f96aa43a0c576d22b51e803c15b6b9ec98 Mon Sep 17 00:00:00 2001 From: Powermacintosh Date: Mon, 22 Sep 2025 14:09:18 +0300 Subject: [PATCH 8/9] =?UTF-8?q?test:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=20Graphql=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Написание тестов для Graphql API. - Небольшие правки в Makefile, README.md, tasks/main.py и в тесте производительности. --- Makefile | 2 +- README.md | 2 +- tasks/main.py | 2 +- tasks/tests/integration/test_graphql_api.py | 236 ++++++++++++++++++ .../performance/test_performance_rest_api.py | 7 +- 5 files changed, 243 insertions(+), 6 deletions(-) create mode 100644 tasks/tests/integration/test_graphql_api.py diff --git a/Makefile b/Makefile index b973829..bd2dbfb 100644 --- a/Makefile +++ b/Makefile @@ -9,5 +9,5 @@ build: test: docker compose -f docker-compose.test.yml up --build -d - docker compose -f docker-compose.test.yml exec -it tasks_app_test bash -c "pytest -v" + docker compose -f docker-compose.test.yml exec -it tasks_app_test bash -c "pytest" docker compose -f docker-compose.test.yml down -v --remove-orphans diff --git a/README.md b/README.md index ff8bbd4..20a0343 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ make test - Swagger UI: http://localhost:5000/docs/ ![gateway/static/swagger-custom.png](gateway/static/swagger-custom.png) -Также API Gateway предоставляет возможность работы с API через GraphQL. +Также API Gateway предоставляет возможность работы с API через GraphQL: - GraphQL UI: http://localhost:5000/api/v1/graphql ![gateway/static/graphql-interface.png](gateway/static/graphql-interface.png) diff --git a/tasks/main.py b/tasks/main.py index 850ed8a..149d522 100644 --- a/tasks/main.py +++ b/tasks/main.py @@ -40,7 +40,7 @@ graphql_app = GraphQLRouter( schema=schema, context_getter=get_context_wrapper, - graphiql=True, + graphql_ide='graphiql', multipart_uploads_enabled=True ) diff --git a/tasks/tests/integration/test_graphql_api.py b/tasks/tests/integration/test_graphql_api.py new file mode 100644 index 0000000..af9757c --- /dev/null +++ b/tasks/tests/integration/test_graphql_api.py @@ -0,0 +1,236 @@ +import pytest, asyncio, httpx +from typing import Dict, Any, Optional +from httpx import AsyncClient +from core.config import settings + + +class TestTaskGraphQLAPI: + """ + Тесты для GraphQL API менеджера задач. + """ + + GRAPHQL_ENDPOINT = '/api/v1/graphql' + + async def wait_for_server(self, url: str, timeout: int = 30) -> bool: + """Ожидает подключения к серверу.""" + base_url=f'http://tasks_app_test:{settings.api_v1_port}' + start_time = asyncio.get_event_loop().time() + while True: + try: + async with httpx.AsyncClient() as client: + await client.get(base_url + url) + return True + except httpx.ConnectError: + if asyncio.get_event_loop().time() - start_time > timeout: + raise TimeoutError('Не удалось подключиться к серверу за отведенное время.') + await asyncio.sleep(1) + + async def execute_graphql_query( + self, + httpx_client: AsyncClient, + query: str, + variables: Optional[Dict[str, Any]] = None, + headers: Optional[Dict[str, str]] = None + ) -> Dict[str, Any]: + """Выполняет GraphQL запрос и возвращает ответ.""" + response = await httpx_client.post( + self.GRAPHQL_ENDPOINT, + json={ + 'query': query, + 'variables': variables or {} + }, + headers=headers or {} + ) + return response.json() + + @pytest.fixture + async def test_create_task(self, httpx_client: AsyncClient) -> Dict[str, Any]: + """Фикстура для создания тестовой задачи через GraphQL.""" + await self.wait_for_server(self.GRAPHQL_ENDPOINT) + + create_mutation = """ + mutation CreateTask($input: TaskCreateInputGQL!) { + createTask(input: $input) { + id + title + description + status + } + } + """ + variables = { + 'input': { + 'title': 'Test Task', + 'description': 'Test Description' + } + } + response = await self.execute_graphql_query( + httpx_client, + create_mutation, + variables=variables + ) + + assert 'data' in response, f'Ошибка при создании задачи: {response}' + assert 'createTask' in response['data'], f'Ошибка в ответе: {response}' + + task = response['data']['createTask'] + assert task['title'] == 'Test Task' + assert task['description'] == 'Test Description' + assert task['status'] == 'CREATED' + + return task + + @pytest.mark.asyncio + async def test_get_task(self, httpx_client: AsyncClient, test_create_task: Dict[str, Any]): + """Тест получения задачи по ID.""" + task_id = test_create_task['id'] + + query = """ + query GetTask($id: ID!) { + task(id: $id) { + id + title + description + status + } + } + """ + + response = await self.execute_graphql_query( + httpx_client, + query, + variables={'id': task_id} + ) + + assert 'data' in response, f'Ошибка при получении задачи: {response}' + assert 'task' in response['data'], f'Ошибка в ответе: {response}' + + task = response['data']['task'] + assert task['id'] == task_id + assert task['title'] == 'Test Task' + assert task['description'] == 'Test Description' + assert task['status'] == 'CREATED' + + @pytest.mark.asyncio + async def test_get_tasks_list(self, httpx_client: AsyncClient, test_create_task: Dict[str, Any]): + """Тест получения списка задач.""" + query = """ + query GetTasks($status: TaskStatusGQL, $offset: Int, $limit: Int) { + tasks(status: $status, offset: $offset, limit: $limit) { + tasks { + id + title + status + } + total + pagesCount + } + } + """ + + # Получаем все задачи + response = await self.execute_graphql_query( + httpx_client, + query, + variables={'status': 'CREATED', 'offset': 0, 'limit': 10} + ) + + assert 'data' in response, f'Ошибка при получении списка задач: {response}' + assert 'tasks' in response['data'], f'Ошибка в ответе: {response}' + + tasks_page = response['data']['tasks'] + assert isinstance(tasks_page['tasks'], list) + assert tasks_page['total'] > 0 + assert tasks_page['pagesCount'] > 0 + + # Проверяем, что созданная задача есть в списке + task_ids = [task['id'] for task in tasks_page['tasks']] + assert test_create_task['id'] in task_ids + + @pytest.mark.asyncio + async def test_update_task(self, httpx_client: AsyncClient, test_create_task: Dict[str, Any]): + """Тест обновления задачи.""" + task_id = test_create_task['id'] + + update_mutation = """ + mutation UpdateTask($id: ID!, $input: TaskUpdateInputGQL!) { + updateTask(id: $id, input: $input) { + id + title + description + status + } + } + """ + + variables = { + 'id': task_id, + 'input': { + 'title': 'Updated Task', + 'description': 'Updated Description', + 'status': 'IN_PROGRESS' + } + } + + response = await self.execute_graphql_query( + httpx_client, + update_mutation, + variables=variables + ) + + assert 'data' in response, f'Ошибка при обновлении задачи: {response}' + assert 'updateTask' in response['data'], f'Ошибка в ответе: {response}' + + updated_task = response['data']['updateTask'] + assert updated_task['id'] == task_id + assert updated_task['title'] == 'Updated Task' + assert updated_task['description'] == 'Updated Description' + assert updated_task['status'] == 'IN_PROGRESS' + + @pytest.mark.asyncio + async def test_delete_task(self, httpx_client: AsyncClient, test_create_task: Dict[str, Any]): + """Тест удаления задачи.""" + task_id = test_create_task['id'] + + delete_mutation = """ + mutation DeleteTask($id: ID!) { + deleteTask(id: $id) + } + """ + + # Удаляем задачу + response = await self.execute_graphql_query( + httpx_client, + delete_mutation, + variables={'id': task_id} + ) + + assert 'data' in response, f'Ошибка при удалении задачи: {response}' + assert 'deleteTask' in response['data'], f'Ошибка в ответе: {response}' + assert response['data']['deleteTask'] is True + + # Проверяем, что задача действительно удалена + query = """ + query GetTask($id: ID!) { + task(id: $id) { + id + } + } + """ + + response = await self.execute_graphql_query( + httpx_client, + delete_mutation, + variables={'id': task_id} + ) + assert response['data']['deleteTask'] is False + + response = await self.execute_graphql_query( + httpx_client, + query, + variables={'id': task_id} + ) + + # Задача не должна быть найдена + assert 'data' in response, f'Ошибка при проверке удаления задачи: {response}' + assert response['data']['task'] is None diff --git a/tasks/tests/performance/test_performance_rest_api.py b/tasks/tests/performance/test_performance_rest_api.py index bbce04a..7f033a0 100644 --- a/tasks/tests/performance/test_performance_rest_api.py +++ b/tasks/tests/performance/test_performance_rest_api.py @@ -7,9 +7,10 @@ class TestPerformanceTaskRestAPI: """ Тесты производительности для REST API менеджера задач. """ - @pytest.mark.skipif(sys.platform == 'linux', reason='Тест работает только на Linux') - def test_only_on_linux(self): - # Тест, который работает только на Linux. + @pytest.mark.skipif(sys.platform not in ('darwin', 'linux'), reason='Тест работает только на MacOS или Linux') + def test_only_on_macos_or_linux(self): + # Тест, который работает только на MacOS или Linux. + print(f'Текущая ОС: {sys.platform}') assert True def setup_method(self): From de629cd18f1ada1076fe3523a2dd43076a6510ca Mon Sep 17 00:00:00 2001 From: Powermacintosh Date: Mon, 22 Sep 2025 14:33:57 +0300 Subject: [PATCH 9/9] =?UTF-8?q?fix:=20=D0=BF=D0=BE=D0=B4=D0=B3=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BA=20=D1=81=D0=BB=D0=B8=D1=8F?= =?UTF-8?q?=D0=BD=D0=B8=D1=8E=20=D0=B2=20main?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test.yml | 8 ++++---- Makefile | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3f63a75..da6a316 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -2,9 +2,9 @@ name: CI on: push: - branches: ["main"] + branches: [main, experiment/workflows] pull_request: - branches: ["main"] + branches: [main] jobs: tests: @@ -17,8 +17,8 @@ jobs: - name: Build and start test services run: docker compose -f docker-compose.test.yml --env-file ./tasks/.env.test up -d --build - - name: Run pytest inside tasks_app_test - run: docker compose -f docker-compose.test.yml --env-file ./tasks/.env.test exec -T tasks_app_test pytest -v + - name: Run tests + run: docker compose -f docker-compose.test.yml --env-file ./tasks/.env.test exec -T tasks_app_test pytest - name: Stop and remove test services if: always() diff --git a/Makefile b/Makefile index bd2dbfb..b973829 100644 --- a/Makefile +++ b/Makefile @@ -9,5 +9,5 @@ build: test: docker compose -f docker-compose.test.yml up --build -d - docker compose -f docker-compose.test.yml exec -it tasks_app_test bash -c "pytest" + docker compose -f docker-compose.test.yml exec -it tasks_app_test bash -c "pytest -v" docker compose -f docker-compose.test.yml down -v --remove-orphans