From 9ee0de9d55f0b8a63e475568c39e6a6f9cc9f3bf Mon Sep 17 00:00:00 2001 From: Johan LEROY Date: Thu, 24 Sep 2026 15:55:08 +0200 Subject: [PATCH 1/3] =?UTF-8?q?docs:=20r=C3=A9aligne=20la=20documentation?= =?UTF-8?q?=20sur=20l'=C3=A9tat=20livr=C3=A9=20au=20gel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Trois environnements et un frontal SNI au lieu de deux, certificats Let's Encrypt par DNS-01, sept DAGs, index des ADR complété jusqu'à 0020. Les exemples de l'ETL passent en bash et n'utilisent plus l'option --limit, retirée. L'adresse de la machine est masquée dans l'arbre, les ADR 0009 et 0014 portent une note datée sur l'approbation de la production. --- .env.example | 11 +- README.md | 37 +++--- apps/frontend/TESTING.md | 6 +- docker-compose.prod.yml | 4 +- docs/README.md | 11 +- docs/adr/0005-modele-prediction-lightgbm.md | 12 +- ...ux-environnements-compose-sur-la-vm-eni.md | 2 + .../0011-enervision-procedure-deploiement.md | 8 +- ...-enervision-deploiement-rec-prod-vm-eni.md | 8 +- ...ne-ci-unique-et-deploiement-conditionne.md | 1 + ...ublics-certificats-dns01-et-frontal-sni.md | 2 +- docs/architecture/00-vue-ensemble.md | 69 ++++++---- docs/architecture/10-infra.md | 33 ++--- docs/architecture/20-backend.md | 2 +- docs/architecture/30-frontend.md | 10 +- .../31-contrat-authentification.md | 6 +- docs/architecture/40-data.md | 46 ++++--- docs/architecture/50-cicd.md | 43 ++++--- docs/architecture/README.md | 12 +- docs/architecture/owasp-traceabilite.md | 21 ++-- etl/README.md | 119 ++++++++++-------- infra/proxy/README.md | 28 +++-- .../vm-eni/terraform.tfvars.example | 2 +- monitoring/README.md | 2 +- scripts/README.md | 32 +++++ 25 files changed, 315 insertions(+), 212 deletions(-) diff --git a/.env.example b/.env.example index 56198db..3218698 100644 --- a/.env.example +++ b/.env.example @@ -82,16 +82,15 @@ GARAGE_SSE_KEY=change_me PUBLIC_HOST=enervision.local ACME_EMAIL= -# Deux environnements sur la même machine (ADR 0009) : un dossier, un `.env` et un projet Compose -# chacun. Le nom de projet préfixe volumes, réseau et conteneurs et l'emporte sur `name:`. +# Trois environnements sur la même machine (ADR 0009, 0017) : un dossier, un `.env` et un projet +# Compose chacun. Le nom de projet préfixe volumes, réseau et conteneurs et l'emporte sur `name:`. # Vide sur un poste de développement : le projet reste `enervision`. COMPOSE_PROJECT_NAME= # Origine publique, avec le port si le proxy HTTPS n'écoute pas 443. Vide : https://PUBLIC_HOST. -# Recette : PUBLIC_HOST=rec.enervision.local et PUBLIC_ORIGIN=https://rec.enervision.local:8443. +# Sur la VM, provision-host.sh pose https://, sans port (frontal SNI). PUBLIC_ORIGIN= -# Ports publiés par le proxy. Vides : 80 et 443. Recette : PROXY_HTTPS_PORT=8443 et -# PROXY_HTTP_PORT=127.0.0.1:8081, la redirection vers 443 n'ayant pas à être joignable de -# l'extérieur. Décaler aussi POSTGRES_PORT, MAILPIT_UI_PORT et AIRFLOW_PORT (5434, 8026, 8082). +# Ports publiés par le proxy. Vides : 80 et 443. Sur la VM, provision-host.sh les pose sur 127.0.0.1, +# derrière le frontal SNI, et décale aussi base, Mailpit et Airflow par environnement. PROXY_HTTP_PORT= PROXY_HTTPS_PORT= # Écouteur PROXY protocol du proxy, que seul le frontal de la VM joint (infra/front, ADR 0018). diff --git a/README.md b/README.md index 42f2eb5..448c665 100644 --- a/README.md +++ b/README.md @@ -16,26 +16,27 @@ series temporelles energetiques, deployee sur une machine on-premise. Ce que la documentation apporte à chacun : [docs/architecture/00-vue-ensemble.md](docs/architecture/00-vue-ensemble.md). -## Stack cible +## Stack | Domaine | Technologie | Emplacement | Etat | |------------|-------------------------------------|---------------------|---------------| | Backend | FastAPI, Python 3.14 | `apps/backend` | En place | | Frontend | Angular 22, Node 26 | `apps/frontend` | En place | | Base | PostgreSQL 17 + TimescaleDB | `db` | En place | -| ETL | Apache Airflow | `etl/airflow` | Cinq DAGs | -| Infra | Terraform (k3s single-node) | `infra/terraform` | Initialise | -| Reverse proxy | Nginx, TLS | `infra/proxy` | En place | +| ETL | Apache Airflow | `etl/airflow` | Sept DAGs | +| Infra | Terraform (VM ENI ; module k3s) | `infra/terraform` | VM appliquée, k3s écrit non appliqué | +| Reverse proxy | Nginx, TLS, frontal SNI | `infra/proxy`, `infra/front` | En place, certificats Let's Encrypt | | CI/CD | GitHub Actions | `.github/workflows` | En place | | Monitoring | Prometheus, Grafana, Alertmanager | `monitoring` | En place, profil Compose | | Stockage objet | Garage (S3), un par environnement | `infra/garage` | En place, archives de `reading` | | Tests e2e et de charge | Playwright, k6 | `tests` | En place | | ML | LightGBM, MLflow | `ml` | En place | -Le backend, la base et l'infrastructure (Terraform/k3s) sont initialises a ce stade. Le frontend -sert un tableau de bord sur `/dashboard`, dont les données proviennent de fixtures : les endpoints -correspondants restent à écrire côté API. Les autres dossiers portent l'arborescence et un README -de cadrage, leur contenu fait l'objet d'un ticket dedie. +Toutes ces briques tournent sur la machine du groupe, en trois environnements (production, +recette, dev). Le frontend sert le tableau de bord, les vues sites, recommandations et +supervision des capteurs, toutes branchées sur l'API réelle : les fixtures sont coupées +(`useMockFixtures: false`). Le module Terraform k3s reste une cible, écrite et validée, jamais +appliquée. L'etat detaille de chaque brique et les vues d'architecture sont dans [docs/architecture](docs/architecture/README.md). @@ -53,11 +54,12 @@ L'etat detaille de chaque brique et les vues d'architecture sont dans │ ├── roles/ Roles PostgreSQL hors schema (supervision) │ └── seeds/ Jeu de demonstration des tests ├── etl/airflow/ -│ ├── dags/ DAGs d'orchestration (pipeline ML, alertes, imports, dérive) +│ ├── dags/ DAGs d'orchestration (pipeline ML, alertes, imports, dérive, rétention) │ ├── plugins/ Operateurs et hooks maison │ ├── include/ Requetes SQL et ressources des DAGs │ └── tests/ Tests d'integrite des DAGs ├── infra/ +│ ├── front/ Frontal SNI de la machine : ports 80 et 443, aiguillage par nom │ ├── garage/ Stockage objet S3 : configuration sans secret │ ├── proxy/ Reverse proxy Nginx : terminaison TLS et routage │ └── terraform/ @@ -72,13 +74,13 @@ L'etat detaille de chaque brique et les vues d'architecture sont dans │ ├── e2e/ Parcours Playwright contre la stack │ ├── garage/ Tests de fumée S3 joués par la CI contre Garage │ └── load/ Scenarios de charge k6 -├── docs/ ADR et vues d'architecture +├── docs/ ADR, vues d'architecture, runbook de pilotage, livrables de rendu └── scripts/ Outillage local ``` ## Demarrage -Prerequis : uv, Docker, Node 24 LTS (npm fourni). Le poste doit disposer de Python 3.14, que +Prerequis : uv, Docker, Node 26 (version de la CI et de l'image frontend, npm fourni). Le poste doit disposer de Python 3.14, que `uv` installe seul. ```bash @@ -148,16 +150,19 @@ L'overlay emploie `!override` et `!reset`, donc **Docker Compose 2.24.4 ou plus ```bash make tls-selfsigned PUBLIC_HOST=enervision.local # certificat de démonstration -make stack-up PUBLIC_HOST=enervision.local # nginx en 80/443, rien d'autre n'est publié +make stack-up PUBLIC_HOST=enervision.local # nginx en 80/443, le reste sur 127.0.0.1 ``` -Le navigateur avertit d'un émetteur inconnu : Let's Encrypt reste hors d'atteinte tant qu'aucun -nom de domaine public ne résout vers la machine. Routage, mode ACME et renouvellement dans +Le navigateur avertit d'un émetteur inconnu : sur le poste, le certificat est auto-signé. Sur la +machine, les certificats viennent de Let's Encrypt par défi DNS-01 +([ADR 0018](docs/adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md)). Routage, mode ACME et renouvellement dans [`infra/proxy/README.md`](infra/proxy/README.md) ; la décision et ses motifs dans [l'ADR 0007](docs/adr/0007-terminaison-tls-et-reverse-proxy-nginx.md). -Sur la VM ENI, deux environnements cohabitent, recette sur `dev` et production sur `main`, -chacun dans son dossier et son projet Compose : `scripts/provision-host.sh` les prépare, le +Sur la VM ENI, trois environnements cohabitent, production sur `main`, recette sur `dev`, et +`dev` pour toute autre branche lancée à la main +([ADR 0017](docs/adr/0017-environnement-dev-a-la-demande.md)), chacun dans son dossier et son +projet Compose, derrière un frontal SNI commun : `scripts/provision-host.sh` les prépare, le workflow `deploy.yml` les redéploie par un runner auto-hébergé, une fois la CI du commit poussé verte ([ADR 0014](docs/adr/0014-pipeline-ci-unique-et-deploiement-conditionne.md)). Ports, noms d'hôte et garde-fous dans [`docs/architecture/10-infra.md`](docs/architecture/10-infra.md) et diff --git a/apps/frontend/TESTING.md b/apps/frontend/TESTING.md index 7db5d36..018c662 100644 --- a/apps/frontend/TESTING.md +++ b/apps/frontend/TESTING.md @@ -24,14 +24,14 @@ it('devrait faire X quand Y', () => { ## Ce qui doit être testé en priorité - Services (`core/services/`) : logique métier, gestion des erreurs - Guards et interceptors (`core/guards/`, `core/interceptors/`) : chaque branche de décision -- Composants avec logique (formulaires, conditions d'affichage) — pas nécessaire pour +- Composants avec logique (formulaires, conditions d'affichage), mais pas nécessaire pour un composant 100% template, sans logique `core/services/`, `core/guards/` et `core/interceptors/` n'existent pas encore : c'est l'arborescence cible, décrite dans [docs/architecture/30-frontend.md](../../docs/architecture/30-frontend.md). -## Gabarit — tester un service avec appel HTTP +## Gabarit · tester un service avec appel HTTP ```typescript import { TestBed } from '@angular/core/testing'; import { provideHttpClient } from '@angular/common/http'; @@ -61,7 +61,7 @@ describe('MonService', () => { }); ``` -## Gabarit — tester un composant standalone +## Gabarit · tester un composant standalone ```typescript import { TestBed } from '@angular/core/testing'; import { MonComposant } from './mon-composant'; diff --git a/docker-compose.prod.yml b/docker-compose.prod.yml index e9c2608..b50aa71 100644 --- a/docker-compose.prod.yml +++ b/docker-compose.prod.yml @@ -5,8 +5,8 @@ # moyen de dépublier 8000 et 3000 : sans lui, l'API resterait joignable en clair à côté du proxy. # Piège : pas de `:?` sur `PUBLIC_HOST`. Compose interpole tout le fichier, y compris pour # `stop` et `logs` : la garde vit dans `make stack-up`, qui la compare au certificat servi. -# Pourquoi : ports du proxy et origine publique en variables, pour que deux environnements -# cohabitent sur la même machine, chacun dans son projet Compose (ADR 0009). +# Pourquoi : ports du proxy et origine publique en variables, pour que trois environnements +# cohabitent sur la même machine, chacun dans son projet Compose (ADR 0009, 0017). name: enervision diff --git a/docs/README.md b/docs/README.md index 07b06cf..74ead45 100644 --- a/docs/README.md +++ b/docs/README.md @@ -2,6 +2,11 @@ - `adr` : décisions d'architecture, une par fichier, numérotées et immuables. - `architecture` : les vues du système. Point d'entrée : [architecture/README.md](architecture/README.md). + Le pilotage des traitements automatisés a son runbook : + [architecture/70-pilotage.md](architecture/70-pilotage.md). +- `livrables` : rapports de rendu, le rapport collectif EC02 et le rapport de sécurisation EC04 + avec ses preuves. +- `dailies` : points d'avancement versionnés. ## Décisions en vigueur @@ -15,7 +20,7 @@ | [0006](adr/0006-moteur-de-regles-dans-le-backend.md) | Le moteur de règles de recommandation vit dans le backend, pas dans `ml/` | | [0007](adr/0007-terminaison-tls-et-reverse-proxy-nginx.md) | Terminaison TLS par un reverse proxy Nginx, en Docker Compose | | [0008](adr/0008-airflow-execute-le-code-du-backend.md) | Airflow exécute le code du backend en sous-processus, dans son propre environnement | -| [0009](adr/0009-deux-environnements-compose-sur-la-vm-eni.md) | Deux environnements sur la VM ENI, un projet Compose chacun, déployés par un runner auto-hébergé | +| [0009](adr/0009-deux-environnements-compose-sur-la-vm-eni.md) | Un projet Compose par environnement sur la VM ENI, déployé par un runner auto-hébergé (deux environnements à l'origine, trois depuis l'ADR 0017) | | [0010](adr/0010-terraform-provisionne-github-actions-deploie.md) | Terraform provisionne la machine, GitHub Actions déploie l'application | | [0011](adr/0011-enervision-procedure-deploiement.md) | Procédure de déploiement, telle qu'exécutée le 22/09/2026 | | [0012](adr/0012-enervision-deploiement-rec-prod-vm-eni.md) | État de la recette et de la production sur la VM ENI | @@ -23,3 +28,7 @@ | [0014](adr/0014-pipeline-ci-unique-et-deploiement-conditionne.md) | Un pipeline CI unique appelle les workflows de composant et conditionne le déploiement | | [0015](adr/0015-tests-e2e-et-de-charge-contre-la-stack-compose.md) | Les tests de bout en bout et de charge visent la stack Compose déployée | | [0016](adr/0016-supervision-en-profil-compose.md) | La supervision vit dans un profil Compose, active en prod | +| [0017](adr/0017-environnement-dev-a-la-demande.md) | Un troisième environnement, `dev`, déployé à la demande depuis n'importe quelle branche | +| [0018](adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md) | Noms publics, certificats Let's Encrypt par DNS-01 et frontal SNI sans port | +| [0019](adr/0019-stockage-objet-garage-et-cycle-de-vie-des-mesures.md) | Stockage objet Garage par environnement, et cycle de vie des mesures : export puis suppression | +| [0020](adr/0020-chiffrement-au-repos-coffre-luks-et-sse-c.md) | Chiffrement au repos : coffre LUKS des volumes Docker et SSE-C des archives | diff --git a/docs/adr/0005-modele-prediction-lightgbm.md b/docs/adr/0005-modele-prediction-lightgbm.md index cb39524..4919176 100644 --- a/docs/adr/0005-modele-prediction-lightgbm.md +++ b/docs/adr/0005-modele-prediction-lightgbm.md @@ -13,7 +13,7 @@ contraintes non négociables cadrent le choix, discutées dans l'issue #89 : 1. **EC06** (grille de notation individuelle) exige un modèle **entraîné, versionné avec MLflow**, exposé via un endpoint fonctionnel, avec **surveillance du drift** en production. 2. **Aucun GPU dédié** : l'infra tourne on-premise sur une VM à 4 CPU / 8 Gio RAM (ou - `Standard_B2s`/`B2ms` côté Azure, 2 vCPU max) — Azure Machine Learning est de toute façon + `Standard_B2s`/`B2ms` côté Azure, 2 vCPU max) ; Azure Machine Learning est de toute façon bloqué par la politique Azure du projet. 3. **Délai serré** : le jalon J3 arrive à échéance le lendemain de la décision, J4 concentre déjà 26 issues sur 4 jours. Un modèle long à mettre en œuvre retarde la chaîne complète (service de @@ -32,7 +32,7 @@ déjà dérivées. | Régresseurs exogènes | Oui, mais doivent être connus dans le futur au moment de la prédiction | Oui, via lags/moyennes glissantes sur le passé | Oui, natif | Difficile en multivarié | Aucun support | Contexte de prompt seulement, non appris | | Coût de calcul (VM sans GPU) | Faible | Faible | Élevé (deep learning) | Faible | Faible | Élevé à prohibitif | | Versionnable MLflow | Oui, nativement | Oui, nativement | Pas de support direct | Oui, générique | Pas de support direct | Rien à versionner (pas un modèle entraîné) | -| Granularité | Un modèle par site (ou par site × métrique) | Un seul modèle global sur tous les sites | Un par site | Un par site | Un par site | — | +| Granularité | Un modèle par site (ou par site × métrique) | Un seul modèle global sur tous les sites | Un par site | Un par site | Un par site | - | | Effort avant l'échéance | Faible | Moyen (feature engineering) | Élevé | Moyen à élevé | Faible en soi | Élevé, ou factice | ## Décision @@ -40,7 +40,7 @@ déjà dérivées. **LightGBM, un seul modèle global** couvrant tous les sites, plutôt qu'un modèle par site (Prophet) ou par famille de site. Cible : `consumption_kwh`, avec `period_minutes` comme feature d'entrée plutôt que comme étape d'agrégation post-prédiction. Suivi et versioning via **MLflow** -(tracking + registre de modèles), sur le magasin local par défaut dans un premier temps — +(tracking + registre de modèles), sur le magasin local par défaut dans un premier temps ; l'hébergement sur l'infra k3s reste une question ouverte, non bloquante pour démarrer. Raisons retenues, au-delà du tableau ci-dessus : @@ -53,7 +53,7 @@ Raisons retenues, au-delà du tableau ci-dessus : `humidity_percent` et `solar_irradiance_wm2` sont des mesures passées, pas des prévisions, et aucune source de prévision météo n'existe dans le projet. LightGBM s'en sort avec des features de lag/moyenne glissante calculées sur l'historique déjà présent dans `reading`, cf. - `ml/enervision_ml/features.py` — un choix qui vaut aussi bien à l'entraînement qu'au futur + `ml/enervision_ml/features.py`, un choix qui vaut aussi bien à l'entraînement qu'au futur scoring. - **Apprentissage direct sur `consumption_kwh`** avec `period_minutes` en feature, sans étape d'agrégation intermédiaire que la sortie continue de Prophet aurait demandée. @@ -92,9 +92,9 @@ ValentinDeFaria), actée en réunion d'équipe du 2026-09-17 et validée par l'e - **SARIMA** : ne gère pas nativement plusieurs régresseurs exogènes ; réglage (p,d,q,P,D,Q) plus long que le délai disponible. - **NeuralProphet** : fait tout ce que fait Prophet et apprend en plus des motifs autorégressifs, - mais coûte plus cher en calcul (pas de GPU disponible) et n'a pas d'outil MLflow direct — piste + mais coûte plus cher en calcul (pas de GPU disponible) et n'a pas d'outil MLflow direct : piste d'évolution possible, non engageante à ce stade. -- **Holt-Winters** : écarté d'entrée, pas seulement différé — aucun support de régresseurs +- **Holt-Winters** : écarté d'entrée, pas seulement différé : aucun support de régresseurs exogènes, alors que la météo et l'irradiance sont nécessaires ici. - **CatBoost** : même famille que LightGBM, gère nativement les colonnes catégorielles (comme `site_type`) sans encodage manuel. Non rejeté, différé : candidat à comparer si LightGBM diff --git a/docs/adr/0009-deux-environnements-compose-sur-la-vm-eni.md b/docs/adr/0009-deux-environnements-compose-sur-la-vm-eni.md index 6b32e89..cf6ee61 100644 --- a/docs/adr/0009-deux-environnements-compose-sur-la-vm-eni.md +++ b/docs/adr/0009-deux-environnements-compose-sur-la-vm-eni.md @@ -2,6 +2,8 @@ - Statut : accepté - Date : 2026-09-21 +- Complété par : [ADR 0017](0017-environnement-dev-a-la-demande.md), troisième environnement `dev` +- Note du 24/09 : l'approbation annoncée avant la production n'a jamais été activée. L'environnement GitHub `prod` n'accepte que `main`, sans relecteur requis. ## Contexte diff --git a/docs/adr/0011-enervision-procedure-deploiement.md b/docs/adr/0011-enervision-procedure-deploiement.md index fb74241..b18bbc1 100644 --- a/docs/adr/0011-enervision-procedure-deploiement.md +++ b/docs/adr/0011-enervision-procedure-deploiement.md @@ -1,7 +1,7 @@ # EnerVision · procédure de déploiement (22/09/2026) Terraform provisionne la machine, GitHub Actions déploie (ADR 0010). Deux environnements Compose -sur la VM ENI `10.101.200.37` : `rec` sur la branche `dev`, `prod` sur `main` (ADR 0009). +sur la VM ENI `` : `rec` sur la branche `dev`, `prod` sur `main` (ADR 0009). | | recette | production | |---|---|---| @@ -13,7 +13,7 @@ sur la VM ENI `10.101.200.37` : `rec` sur la branche `dev`, `prod` sur `main` (A ## 0. Avant toute commande -1. **Clé SSH déposée** sur la VM : `ssh-copy-id -i ~/.ssh/id_ed25519.pub root@10.101.200.37`. +1. **Clé SSH déposée** sur la VM : `ssh-copy-id -i ~/.ssh/id_ed25519.pub root@`. Terraform ne gère **pas** l'authentification par mot de passe (elle finirait dans le state). 2. **L'utilisateur propriétaire existe déjà** sur la VM (ex. `enervision`) : il possède `/srv/enervision` et fait tourner le runner. Terraform échoue tôt s'il manque, il ne le crée pas. @@ -42,7 +42,7 @@ runner_version = "2.330.0" # épingler depuis github.com/actions/runner/rel runner_token = "..." # jeton d'1 h, à retirer du fichier après l'apply ``` -Défauts utiles : `ssh_host = "10.101.200.37"`, `ssh_user = "root"`, +Défauts utiles : `ssh_host = ""`, `ssh_user = "root"`, `ssh_private_key_path = "~/.ssh/id_ed25519"`, `racine = "/srv/enervision"`, `runner_labels = "eni-g3"` (ciblé par `deploy.yml`), `runner_dossier = "/opt/actions-runner"`. @@ -134,7 +134,7 @@ curl -k https://localhost/api/v1/health/ready # production, sur la VM Depuis un poste, ajouter à `/etc/hosts` : ``` -10.101.200.37 enervision.local rec.enervision.local + enervision.local rec.enervision.local ``` Les deux noms sont obligatoires : le cookie `__Secure-ev_refresh` est posé par hôte et non par diff --git a/docs/adr/0012-enervision-deploiement-rec-prod-vm-eni.md b/docs/adr/0012-enervision-deploiement-rec-prod-vm-eni.md index 8d01d39..a1d7569 100644 --- a/docs/adr/0012-enervision-deploiement-rec-prod-vm-eni.md +++ b/docs/adr/0012-enervision-deploiement-rec-prod-vm-eni.md @@ -1,7 +1,7 @@ # EnerVision · Recette et production sur la VM ENI, aujourd'hui État au lundi 21 septembre 2026, 15h. Cible : deux environnements qui tournent sur la VM -`eadl-2025-nantes-g3` (`10.101.200.37`) avant vendredi 25/09 9h, déployés automatiquement depuis +`eadl-2025-nantes-g3` (``) avant vendredi 25/09 9h, déployés automatiquement depuis GitHub. Ce document donne la solution retenue, ce qu'elle change dans le dépôt, et le déroulé de l'après-midi avec qui fait quoi. @@ -37,7 +37,7 @@ prod à chaque connexion sur la recette. - **Un projet Compose isole tout.** Volumes, réseau, noms de conteneurs sont préfixés par le nom du projet. Casser la recette ne touche pas la prod, ce qui est la raison d'être d'une recette. - **Le runner sur la VM est la seule façon d'atteindre une IP privée d'école depuis GitHub.** Les - runners hébergés par GitHub ne voient pas `10.101.200.37`. Le runner se connecte en sortie + runners hébergés par GitHub ne voient pas ``. Le runner se connecte en sortie vers GitHub, aucun port entrant n'est nécessaire. C'était le choix 16 du dossier EC01 : il redevient tenu. - **La promotion existe déjà dans la stratégie de branches** : `dev` puis `main` par PR. Le @@ -71,9 +71,9 @@ Ce qui ne change pas : `docker-compose.yml`, la configuration Nginx, `infra/terr | # | Qui | Quoi | Durée | |---|---|---|---| | 1 | **ineszang** (seule admin du dépôt) | Environnement `prod` : branche autorisée `main`, un relecteur requis. Environnement `rec` : branche `dev`. Settings > Actions : « Require approval for all outside collaborators ». Générer le jeton d'enregistrement du runner (Settings > Actions > Runners > New self-hosted runner, Linux x64) et le transmettre à Johan | 10 min | -| 2 | **Johan** | Déposer sa clé sur la VM : `ssh-copy-id -i ~/.ssh/id_ed25519.pub root@10.101.200.37`, mot de passe du compte administrateur local des postes de l'école | 2 min | +| 2 | **Johan** | Déposer sa clé sur la VM : `ssh-copy-id -i ~/.ssh/id_ed25519.pub root@`, mot de passe du compte administrateur local des postes de l'école | 2 min | | 3 | Johan + Claude | **Fait à 15h** : branche locale `feat/deploy-rec-prod` avec tous les changements du §3, image frontend reconstruite avec succès, fusion Compose vérifiée pour les deux environnements. Reste : commit, push, PR vers `dev` | fait | -| 4 | Claude, par SSH | `scripts/provision-host.sh` sur la VM. Écrire les deux `.env` (secrets générés sur la VM, jamais dans git). Certificats : `PUBLIC_HOST=rec.enervision.local PUBLIC_IP=10.101.200.37 make tls-selfsigned` dans `rec`, idem avec `enervision.local` dans `prod`. Puis `make stack-up` dans chaque dossier | 20 min plus la construction des images | +| 4 | Claude, par SSH | `scripts/provision-host.sh` sur la VM. Écrire les deux `.env` (secrets générés sur la VM, jamais dans git). Certificats : `PUBLIC_HOST=rec.enervision.local PUBLIC_IP= make tls-selfsigned` dans `rec`, idem avec `enervision.local` dans `prod`. Puis `make stack-up` dans chaque dossier | 20 min plus la construction des images | | 5 | Johan, sur la VM | Installer le runner sous un utilisateur non-root membre du groupe `docker`, label `eni-g3`, en service systemd (`./config.sh --unattended --labels eni-g3`, `sudo ./svc.sh install && sudo ./svc.sh start`) | 10 min | | 6 | Équipe | Merger la PR dans `dev` : la recette se redéploie seule. Ouvrir la PR `dev` vers `main` : la prod se déploie après approbation dans l'onglet Environments | 15 min | | 7 | Tous | Vérifier depuis un poste de l'équipe, `/etc/hosts` renseigné : connexion, tableau de bord, Airflow par tunnel SSH | 15 min | diff --git a/docs/adr/0014-pipeline-ci-unique-et-deploiement-conditionne.md b/docs/adr/0014-pipeline-ci-unique-et-deploiement-conditionne.md index 97681cc..e918566 100644 --- a/docs/adr/0014-pipeline-ci-unique-et-deploiement-conditionne.md +++ b/docs/adr/0014-pipeline-ci-unique-et-deploiement-conditionne.md @@ -2,6 +2,7 @@ - Statut : accepté - Date : 2026-09-23 +- Note du 24/09 : au gel, les règles de branche ne sont pas posées : `prod` n'accepte que `main` mais sans relecteur, `rec` et `dev` n'ont aucune règle, aucune branche n'est protégée. L'approbation des workflows externes n'est pas lisible avec les droits d'un membre. - Complète : [0009](0009-deux-environnements-compose-sur-la-vm-eni.md), qui reste en vigueur ## Contexte diff --git a/docs/adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md b/docs/adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md index 27b6928..2c01053 100644 --- a/docs/adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md +++ b/docs/adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md @@ -12,7 +12,7 @@ Chaque poste devait éditer son `/etc/hosts` et accepter trois avertissements du rien de présentable à un jury, et rien d'utilisable par quelqu'un qui n'a pas la main sur son poste. -Contraintes : la VM n'a qu'une IP privée, `10.101.200.37`, que ni Internet ni Let's Encrypt ne +Contraintes : la VM n'a qu'une IP privée, ``, que ni Internet ni Let's Encrypt ne joignent, et le réseau de l'école ne doit pas être touché. Vérifications faites le 23/09 : les résolveurs de l'école rendent bien une adresse privée pour un nom public, la VM sort en HTTPS vers Let's Encrypt et vers l'API de dynv6, mais le filtrage de l'école bloque duckdns.org, site diff --git a/docs/architecture/00-vue-ensemble.md b/docs/architecture/00-vue-ensemble.md index 056fd9a..1687113 100644 --- a/docs/architecture/00-vue-ensemble.md +++ b/docs/architecture/00-vue-ensemble.md @@ -19,22 +19,22 @@ parce qu'ils disent ce que le projet doit prouver, et donc à quoi sert chaque d ## Contexte -Statut : `Cible`. Les acteurs et les sources de mesures ne sont pas arrêtés, c'est l'objet du -jalon J2. +Statut : `Fait`. Les sources de mesures ont été arrêtées au jalon J2 : le dataset historique +fourni par l'école (CSV et métadonnées JSON, 2023 et 2024) et l'API Mock, interrogée chaque heure. ```mermaid flowchart LR exploitant["Exploitant
consulte les courbes"] admin["Administrateur
exploite la plateforme"] - sources["Sources de mesures
à définir en J2"] + sources["Sources de mesures
dataset CSV et API Mock"] subgraph systeme["EnerVision"] plateforme["Collecte, stockage,
analyse et restitution
de séries temporelles"] end - sources -.-> plateforme - exploitant -.-> plateforme - admin -.-> plateforme + sources --> plateforme + exploitant --> plateforme + admin --> plateforme ``` ## Conteneurs @@ -46,7 +46,8 @@ flowchart TB navigateur["Navigateur"] subgraph machine["Machine on-premise"] - proxy["Reverse proxy Nginx
:80 et :443"] + frontal["Frontal SNI
:80 et :443"] + proxy["Reverse proxy Nginx
un par environnement"] front["Frontend Angular 22
apps/frontend"] api["API FastAPI
apps/backend"] db[("PostgreSQL 17
TimescaleDB")] @@ -55,10 +56,11 @@ flowchart TB grafana["Grafana
profil monitoring"] end - navigateur --> proxy + navigateur --> frontal + frontal --> proxy proxy --> front proxy --> api - front -.-> api + front --> api api --> db airflow --> db prom --> api @@ -66,15 +68,18 @@ flowchart TB grafana --> prom ``` -Le lien `front -.-> api` reste en pointillé : le frontend appelle bien une API, mais un -intercepteur répond à sa place tant que les endpoints n'existent pas. Voir -[30-frontend.md](30-frontend.md). +Le lien `front --> api` est en trait plein : les fixtures sont coupées (`useMockFixtures: false` +dans les deux fichiers d'environnement Angular), et chaque service HTTP du frontend interroge +l'API réelle. Voir [30-frontend.md](30-frontend.md). Sur la machine, un frontal SNI reçoit les +ports 80 et 443 et aiguille chaque nom vers le proxy de son environnement +([ADR 0018](../adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md)). -Le lien `airflow --> db` est maintenant en trait plein : six DAGs tournent, deux pour +Le lien `airflow --> db` est maintenant en trait plein : sept DAGs tournent, deux pour l'entraînement et le scoring du modèle ML (issue #115), un pour la détection d'alertes et la génération des recommandations (issue #116), un pour la surveillance de dérive (issue #45), -`historical_import` pour le dataset historique (issue #119) et `mock_api_import` pour l'ingestion -horaire de l'API Mock (issue #15). La réconciliation entre les deux sources de lectures (issue +`historical_import` pour le dataset historique (issue #119), `mock_api_import` pour l'ingestion +horaire de l'API Mock (issue #15) et `retention`, qui exporte les chunks anciens de `reading` +vers Garage avant de les supprimer (issue #36). La réconciliation entre les deux sources de lectures (issue #15) est tranchée : le trou entre la fin de l'historique (31/12/2024) et le début de l'ingestion API Mock est accepté comme définitivement perdu, aucune mesure réelle n'existant pour cette période. `mock_api_import` refuse toute fenêtre qui recouvrirait des lectures déjà importées du @@ -93,14 +98,14 @@ ailleurs ([ADR 0016](../adr/0016-supervision-en-profil-compose.md), | Domaine | Technologie | Emplacement | Statut | Ce qui existe réellement | |---|---|---|---|---| | Backend | FastAPI, Python 3.14 | `apps/backend` | `En cours` | Factory, configuration, journalisation, 2 sondes de santé, `/metrics`, contrat OpenAPI versionné, routes `sites`, `alerts`, `recommendations`, `stats/summary`, `readings`, `sensors/status` et `predictions` en lecture (endpoints → services → repositories → models) | -| Frontend | Angular 22, Node 24 | `apps/frontend` | `En cours` | Tableau de bord sur route `/dashboard`, authentification complète (garde de route, intercepteur de jeton), cinq services HTTP, graphiques Chart.js. `stats`/`alerts` sur fixtures, `predictions` branché sur l'API réelle | +| Frontend | Angular 22, Node 26 | `apps/frontend` | `En cours` | Tableau de bord sur route `/dashboard`, authentification complète (garde de route, intercepteur de jeton), huit services HTTP, graphiques Chart.js, vues sites, recommandations et supervision des capteurs. Tous branchés sur l'API réelle (`useMockFixtures: false`) ; l'intercepteur de fixtures ne sert plus qu'au développement hors ligne | | Base | PostgreSQL 17 + TimescaleDB | `db` | `Fait` | Bootstrap de l'extension, base de test, chaîne Alembic. Schéma applicatif créé (`site`, `dataset`, `reading` en hypertable, `prediction`, `alert`, `recommendation`) | | ML | LightGBM, MLflow | `ml` | `En cours` | Pipeline d'entraînement et de scoring (`enervision_ml.train`/`.score`, features par lags/moyennes glissantes partagées entre les deux, baseline de persistance saisonnière, suivi MLflow local), exposé en lecture via `GET /predictions`, orchestré par Airflow (`ml_train`/`ml_score`). Voir [ADR 0005](../adr/0005-modele-prediction-lightgbm.md) et [ML-START.md](../ML-START.md). Surveillance de dérive livrée côté backend (`app.monitoring.drift`, table `drift_report`, `GET /monitoring/drift`, DAG `derive`), voir [ADR 0013](../adr/0013-surveillance-de-derive-dans-le-backend.md) | -| Infra | Docker Compose, Nginx, Terraform, k3s single-node | `infra`, `docker-compose.prod.yml` | `En cours` | Reverse proxy et overlay de déploiement écrits et validés, jamais lancés sur le serveur ([ADR 0007](../adr/0007-terminaison-tls-et-reverse-proxy-nginx.md)). Provisionnement de la VM par Terraform, qui installe Docker, prépare les deux environnements et enregistre le runner, jamais appliqué ([ADR 0010](../adr/0010-terraform-provisionne-github-actions-deploie.md)). Module d'installation k3s jamais appliqué, aucune ressource Kubernetes déclarée | +| Infra | Docker Compose, Nginx, Terraform, k3s single-node | `infra`, `docker-compose.prod.yml` | `En cours` | Reverse proxy et overlay de déploiement en service sur la machine, un proxy par environnement derrière un frontal SNI ([ADR 0007](../adr/0007-terminaison-tls-et-reverse-proxy-nginx.md), [ADR 0018](../adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md)). Provisionnement de la VM par Terraform, appliqué : Docker installé, trois environnements préparés, runner enregistré ; le coffre LUKS n'est pas appliqué, la machine étant un conteneur LXC ([ADR 0010](../adr/0010-terraform-provisionne-github-actions-deploie.md), [ADR 0020](../adr/0020-chiffrement-au-repos-coffre-luks-et-sse-c.md)). Module d'installation k3s jamais appliqué, aucune ressource Kubernetes déclarée | | Stockage objet | Garage, S3 | `infra/garage`, `docker-compose.yml` | `Fait` | Un Garage par environnement, `--single-node --default-bucket`, secrets par l'environnement, ports sur `127.0.0.1`, fumée S3 et SSE-C en CI. Reçoit les archives CSV gzip du DAG `retention`, chiffrées SSE-C, avant `drop_chunks` ([ADR 0019](../adr/0019-stockage-objet-garage-et-cycle-de-vie-des-mesures.md), [ADR 0020](../adr/0020-chiffrement-au-repos-coffre-luks-et-sse-c.md)) | | Monitoring | Prometheus, Grafana, Alertmanager | `monitoring` | `Fait` | Profil Compose `monitoring`, actif en prod : Prometheus et trois exporteurs (PostgreSQL, hôte, conteneurs), neuf règles d'alerte testées par `promtool`, Alertmanager vers Mailpit, trois tableaux de bord Grafana provisionnés. Voir [60-observabilite.md](60-observabilite.md) | -| ETL | Apache Airflow | `etl/airflow` | `En cours` | Webserver et scheduler avec LocalExecutor via Docker Compose, sur une base PostgreSQL dédiée. Six DAGs en sous-processus `uv run` : `ml_train`, `ml_score`, `alertes`, `historical_import`, `mock_api_import` et `derive` (quotidien, surveillance de dérive). L'import historique reste manuel et l'import API Mock s'exécute chaque heure. Réconciliation entre les deux sources (issue #15) : trou temporel accepté, recouvrement refusé à l'ingestion et dédupliqué en défense côté ML, voir [40-data.md](40-data.md). | -| CI/CD | GitHub Actions | `.github/workflows` | `En cours` | Un orchestrateur `ci.yml` qui n'appelle que les composants modifiés ([ADR 0014](../adr/0014-pipeline-ci-unique-et-deploiement-conditionne.md)) : lint, typage, tests avec seuil de couverture bloquant, tests d'intégration sur TimescaleDB réel, audit de dépendances, SAST Bandit, quality gate SonarCloud, intégrité des DAGs Airflow, Terraform, Compose et supervision, parcours Playwright et tirs k6 contre la stack de prod ([ADR 0015](../adr/0015-tests-e2e-et-de-charge-contre-la-stack-compose.md)). Déploiement vers la VM ENI par `deploy.yml`, appelé une fois « CI ok » vert, `dev` en recette et `main` en production après approbation ([ADR 0009](../adr/0009-deux-environnements-compose-sur-la-vm-eni.md)), mais jamais exécuté : le runner n'est pas enregistré sur la machine. Détail dans [50-cicd.md](50-cicd.md) | +| ETL | Apache Airflow | `etl/airflow` | `En cours` | Webserver et scheduler avec LocalExecutor via Docker Compose, sur une base PostgreSQL dédiée. Sept DAGs en sous-processus `uv run` : `ml_train`, `ml_score`, `alertes`, `historical_import`, `mock_api_import`, `derive` (quotidien, surveillance de dérive) et `retention` (quotidien, export vers Garage puis suppression). L'import historique reste manuel et l'import API Mock s'exécute chaque heure. Réconciliation entre les deux sources (issue #15) : trou temporel accepté, recouvrement refusé à l'ingestion et dédupliqué en défense côté ML, voir [40-data.md](40-data.md). | +| CI/CD | GitHub Actions | `.github/workflows` | `Fait` | Un orchestrateur `ci.yml` qui n'appelle que les composants modifiés ([ADR 0014](../adr/0014-pipeline-ci-unique-et-deploiement-conditionne.md)) : lint, typage, tests avec seuil de couverture bloquant, tests d'intégration sur TimescaleDB réel, audit de dépendances, SAST Bandit, quality gate SonarCloud, intégrité des DAGs Airflow, Terraform, Compose et supervision, parcours Playwright et tirs k6 contre la stack de prod ([ADR 0015](../adr/0015-tests-e2e-et-de-charge-contre-la-stack-compose.md)). Déploiement vers la VM ENI par `deploy.yml`, appelé une fois « CI ok » vert, `dev` en recette et `main` en production ([ADR 0009](../adr/0009-deux-environnements-compose-sur-la-vm-eni.md)), et toute autre branche à la demande dans `dev` ([ADR 0017](../adr/0017-environnement-dev-a-la-demande.md)). Sept déploiements de production réussis, le dernier sur le commit gelé ; l'environnement `prod` n'exige aucun relecteur (relevé du 24/09). Détail dans [50-cicd.md](50-cicd.md) | ## Flux bout en bout @@ -122,7 +127,6 @@ sequenceDiagram S->>A: mesures horodatées A->>T: insertion dans l'hypertable - T->>T: rafraîchissement de l'agrégat continu U->>API: GET /api/v1/... API->>T: agrégation sur la fenêtre demandée T-->>API: lignes @@ -146,8 +150,9 @@ consolidée. vraie VM, mais la machine ENI est un conteneur LXC sans device-mapper : le chiffrement de son disque relève de l'hôte Proxmox, demandé à l'école. Ce qui est couvert et ce qui ne l'est pas : [ADR 0020](../adr/0020-chiffrement-au-repos-coffre-luks-et-sse-c.md). -- **Interdire par défaut.** Toute route exige un jeton, sauf quatre exceptions listées dans un - fichier de test qui interroge réellement chaque route sans identifiant. +- **Interdire par défaut.** Toute route exige un jeton, sauf huit routes publiques listées + nommément dans `tests/api/acces.py`, et un test interroge réellement chaque route sans + identifiant. - **Révocation immédiate.** Le compte est relu en base à chaque requête : une désactivation ou un changement de rôle prend effet à la requête suivante, pas au bout de 15 minutes. - **Limitation de débit à fenêtre glissante** sur trois clés, évaluée avant le hachage. Pas de @@ -167,7 +172,9 @@ consolidée. jeton, exigé dès que la supervision tourne, sonde de disponibilité qui ne publie plus la version de TimescaleDB. - **CI backend bloquante** : format, lint, typage strict et tests avec seuil de couverture. - **Conteneur backend non-root**, déclaré dans `apps/backend/Dockerfile`. -- **Terminaison TLS au frontal** : un reverse proxy Nginx est le seul service publié, il redirige +- **Terminaison TLS au proxy de chaque environnement**, derrière un frontal SNI qui est le seul + composant publié sur la machine et aiguille sans déchiffrer. Certificats Let's Encrypt par + DNS-01 ([ADR 0018](../adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md)). Le proxy redirige 80 vers 443, sert le SPA et l'API sous la même origine, pose **HSTS** et **CSP** que l'application refuse délibérément de poser, et ajoute une **limitation de débit au frontal** distincte de celle de l'application. Voir @@ -185,9 +192,9 @@ consolidée. arrêteraient une application compromise. Même raison de report. - **Portée par site** dans l'autorisation : les rôles sont globaux, un opérateur du site A peut agir sur le site B. C'est la limite connue du modèle. -- **Certificat reconnu** : aucun nom de domaine public ne résout vers la machine, donc le défi - HTTP-01 de Let's Encrypt ne peut pas aboutir. Le certificat servi est auto-signé, le chemin ACME - est livré et documenté mais pas exercé. +- **Approbation humaine avant la production** : l'environnement GitHub `prod` n'accepte que + `main` mais n'exige aucun relecteur, et aucune branche n'est protégée. Réglage réservé à + l'administratrice du dépôt. - **Analyse des images de conteneur** dans la CI. Celle des dépendances, elle, est en place (`pip-audit`, `npm audit`, Dependabot sur 5 écosystèmes), de même que le SAST Bandit. Voir [50-cicd.md](50-cicd.md). @@ -206,7 +213,15 @@ Elles vivent dans `../adr/`, pas ici. | [0006](../adr/0006-moteur-de-regles-dans-le-backend.md) | Le moteur de règles de recommandation vit dans le backend, pas dans `ml/` | | [0007](../adr/0007-terminaison-tls-et-reverse-proxy-nginx.md) | Terminaison TLS par un reverse proxy Nginx, en Docker Compose | | [0008](../adr/0008-airflow-execute-le-code-du-backend.md) | Airflow exécute le code du backend en sous-processus, dans son propre environnement | -| [0009](../adr/0009-deux-environnements-compose-sur-la-vm-eni.md) | Deux environnements sur la VM ENI, un projet Compose chacun, déployés par un runner auto-hébergé | +| [0009](../adr/0009-deux-environnements-compose-sur-la-vm-eni.md) | Un projet Compose par environnement sur la VM ENI, déployé par un runner auto-hébergé (deux environnements à l'origine, trois depuis l'ADR 0017) | | [0010](../adr/0010-terraform-provisionne-github-actions-deploie.md) | Terraform provisionne la machine, GitHub Actions déploie l'application | +| [0011](../adr/0011-enervision-procedure-deploiement.md) | Procédure de déploiement, telle qu'exécutée le 22/09/2026 | +| [0012](../adr/0012-enervision-deploiement-rec-prod-vm-eni.md) | État de la recette et de la production sur la VM ENI | +| [0013](../adr/0013-surveillance-de-derive-dans-le-backend.md) | La surveillance de dérive vit dans le backend et écrit sa propre table | +| [0014](../adr/0014-pipeline-ci-unique-et-deploiement-conditionne.md) | Un pipeline CI unique appelle les workflows de composant et conditionne le déploiement | +| [0015](../adr/0015-tests-e2e-et-de-charge-contre-la-stack-compose.md) | Les tests de bout en bout et de charge visent la stack Compose déployée | +| [0016](../adr/0016-supervision-en-profil-compose.md) | La supervision vit dans un profil Compose, active en prod | +| [0017](../adr/0017-environnement-dev-a-la-demande.md) | Un troisième environnement, `dev`, déployé à la demande depuis n'importe quelle branche | +| [0018](../adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md) | Noms publics, certificats Let's Encrypt par DNS-01 et frontal SNI sans port | | [0019](../adr/0019-stockage-objet-garage-et-cycle-de-vie-des-mesures.md) | Stockage objet Garage par environnement ; les chunks anciens de `reading` sont exportés en CSV gzip puis supprimés | | [0020](../adr/0020-chiffrement-au-repos-coffre-luks-et-sse-c.md) | Chiffrement au repos : coffre LUKS des volumes Docker de la VM, SSE-C des archives | diff --git a/docs/architecture/10-infra.md b/docs/architecture/10-infra.md index 2cd38f9..3b8d1c1 100644 --- a/docs/architecture/10-infra.md +++ b/docs/architecture/10-infra.md @@ -7,8 +7,8 @@ dans quel contexte, quelles décisions sont arrêtées, et ce qui manque encore |---|---|---| | Docker Compose | Développer et recetter sur le poste | `Fait` | | Docker Compose plus reverse proxy | Déployer sur la machine on-premise | `Fait` | -| Deux projets Compose sur la VM ENI, recette et production | Déploiement continu depuis GitHub | `En cours` | -| Provisionnement Terraform de la VM | Préparer la machine et enregistrer le runner | `En cours` | +| Trois projets Compose sur la VM ENI, dev, recette et production | Déploiement continu depuis GitHub | `Fait` | +| Provisionnement Terraform de la VM | Préparer la machine et enregistrer le runner | `Fait` | | k3s single-node | Cible à terme | `En cours` | | MLflow (`ml/`) | Tracker les expériences et le registre de modèles en local | `Fait`, non relié aux autres topologies | @@ -179,7 +179,7 @@ du `docker-compose.yml` principal (réseau, volumes et démarrage séparés). | `mlflow` | Construite depuis `ml/` | Expose l'UI et l'API MLflow sur `127.0.0.1:5000`. Artefacts sur volume `mlflow-artifacts`, tracking store sur `mlflow-db` | Portée actuelle : environnement de tracking et de registre de modèles pour le développement -local uniquement. Ce compose n'est relié ni à `docker-compose.prod.yml`, ni aux deux +local uniquement. Ce compose n'est relié ni à `docker-compose.prod.yml`, ni aux trois environnements Compose de la VM ENI, ni à la cible k3s. Le magasin utilisé par Airflow pour `ml_train`/`ml_score` (SQLite, volume `airflow_ml_state`) en est distinct : les deux MLflow ne se voient pas tant que `MLFLOW_TRACKING_URI` n'est pas posé côté Airflow. @@ -199,8 +199,8 @@ d'entrainement Airflow et locaux n'a encore ete identifie. ## Machine cible, exécution Docker Statut : `Fait`. Défini par l'overlay `docker-compose.prod.yml`, appliqué par-dessus le -`docker-compose.yml`. Écrit et validé sur le poste, **jamais encore lancé sur le serveur de -l'école**. Décision et motifs dans l'[ADR 0007](../adr/0007-terminaison-tls-et-reverse-proxy-nginx.md). +`docker-compose.yml`. En service sur la machine du groupe, une stack par environnement (sept +déploiements de production entre le 23/09 et le 24/09). Décision et motifs dans l'[ADR 0007](../adr/0007-terminaison-tls-et-reverse-proxy-nginx.md). ```mermaid flowchart LR @@ -225,8 +225,9 @@ flowchart LR sup -->|"alertes par courriel"| mail ``` -Le proxy est **le seul service à publier des ports** sur le réseau. Backend et frontend ne sont -plus publiés du tout, la base et l'interface Mailpit sont ramenées sur `127.0.0.1`, donc joignables +Sur le poste, le proxy est **le seul service à publier des ports** sur le réseau ; sur la +machine, même lui n'écoute que sur `127.0.0.1`, derrière le frontal SNI (section suivante). +Backend et frontend ne sont plus publiés du tout, la base et l'interface Mailpit sont ramenées sur `127.0.0.1`, donc joignables par tunnel SSH et pas autrement. Le détail du routage, les deux modes d'obtention du certificat et la commande de validation hors exécution sont dans [`infra/proxy/README.md`](../../infra/proxy/README.md). @@ -239,7 +240,7 @@ Deux conséquences se propagent jusqu'à l'application, et elles ne se devinent ### Trois environnements sur la même machine -Statut : `En cours`. Décision et motifs dans +Statut : `Fait`. Décision et motifs dans l'[ADR 0009](../adr/0009-deux-environnements-compose-sur-la-vm-eni.md), étendue à un troisième environnement par l'[ADR 0017](../adr/0017-environnement-dev-a-la-demande.md) ; noms, certificats et frontal sans port dans l'[ADR 0018](../adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md). @@ -274,7 +275,9 @@ la VM aligne le dossier sur la branche poussée et lance `make stack-up`. ### Provisionnement de la machine -Statut : `En cours`. Décision et frontière dans +Statut : `Fait`. Appliqué : le state local porte Docker, les trois environnements et le runner ; +le coffre LUKS n'est pas appliqué, la machine étant un conteneur LXC +([ADR 0020](../adr/0020-chiffrement-au-repos-coffre-luks-et-sse-c.md)). Décision et frontière dans l'[ADR 0010](../adr/0010-terraform-provisionne-github-actions-deploie.md) : **Terraform provisionne la machine, GitHub Actions déploie l'application**. La racine `infra/terraform/environments/vm-eni/` fait trois choses, et rien d'autre. @@ -317,10 +320,10 @@ la migration. Runbook, joué en root sur la VM, coupure des trois environnements minutes : ```bash -scp scripts/coffre-luks.sh root@10.101.200.37:/tmp/ -ssh root@10.101.200.37 'COFFRE_TAILLE=30G COFFRE_MIGRER=1 bash /tmp/coffre-luks.sh' -ssh root@10.101.200.37 'findmnt /var/lib/docker/volumes && lsblk /dev/mapper/enervision-coffre && docker ps' -ssh root@10.101.200.37 'curl -k https://localhost:10443/api/v1/health/ready' +scp scripts/coffre-luks.sh root@:/tmp/ +ssh root@ 'COFFRE_TAILLE=30G COFFRE_MIGRER=1 bash /tmp/coffre-luks.sh' +ssh root@ 'findmnt /var/lib/docker/volumes && lsblk /dev/mapper/enervision-coffre && docker ps' +ssh root@ 'curl -k https://localhost:10443/api/v1/health/ready' ``` Ensuite, dans cet ordre : sauvegarder `/root/enervision-coffre.key` hors de la VM (sans elle, les @@ -388,7 +391,7 @@ Ces arbitrages sont pris. Ils ne vivaient jusqu'ici que dans des commentaires de | Terraform provisionne, GitHub Actions déploie | Deux chemins pour le même acte de livraison, c'est ce que la revue de #141 relève sur la VM | [ADR 0010](../adr/0010-terraform-provisionne-github-actions-deploie.md) | | Connexion SSH par clé, jamais par mot de passe | Une variable de mot de passe finit en clair dans le state, ou dans les `triggers` qui y sont persistés | `environments/vm-eni/variables.tf`, `modules/k3s/main.tf` | | Terminaison TLS par un reverse proxy Nginx en Compose | L'ingress k3s supposait un registre et des manifestes qui n'existent pas, à quatre jours du rendu | `docker-compose.prod.yml`, [ADR 0007](../adr/0007-terminaison-tls-et-reverse-proxy-nginx.md) | -| Certificat auto-signé par défaut, chemin ACME câblé | Aucun domaine public ne résout vers la machine : le défi HTTP-01 ne peut pas aboutir | `scripts/tls-selfsigned.sh`, `infra/proxy/acme-deploy-hook.sh` | +| Certificats Let's Encrypt par défi DNS-01 sur la machine, auto-signé sur le poste | La machine n'a qu'une adresse privée : le défi HTTP-01 ne peut pas aboutir, le défi DNS-01 ne demande qu'un enregistrement TXT dans la zone publique | `make tls-dns01`, `scripts/provision-host.sh`, `scripts/tls-selfsigned.sh`, [ADR 0018](../adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md) | | Un projet Compose par environnement, sur la même machine | Une seule VM, et l'isolation par nom de projet ne demande ni cluster ni registre | `.env` de chaque dossier, [ADR 0009](../adr/0009-deux-environnements-compose-sur-la-vm-eni.md) | | Runner GitHub Actions auto-hébergé sur la VM | Les runners hébergés par GitHub ne joignent pas une adresse privée d'école | `.github/workflows/deploy.yml` | | Secrets dans le `.env` de chaque environnement, sur la machine | Ni dans git, ni dans GitHub : le runner n'a rien à recevoir | `scripts/provision-host.sh` | @@ -422,8 +425,6 @@ question à trancher, avant toute ressource Kubernetes. - **Quel ingress** remplace Traefik le jour de la bascule k3s. Qui termine le TLS est tranché par l'[ADR 0007](../adr/0007-terminaison-tls-et-reverse-proxy-nginx.md), mais la réponse vaut pour la topologie Compose, pas pour Kubernetes. -- **Quel nom de domaine public**, sans lequel Let's Encrypt reste hors d'atteinte et le certificat - reste auto-signé. - **Quel registre d'images**, et comment il est alimenté sans CI. - **Quel stockage persistant** côté Kubernetes pour PostgreSQL, et si la base tourne dans le cluster ou à côté. diff --git a/docs/architecture/20-backend.md b/docs/architecture/20-backend.md index fa0dd4d..1d15dff 100644 --- a/docs/architecture/20-backend.md +++ b/docs/architecture/20-backend.md @@ -488,7 +488,7 @@ Quatre fichiers méritent d'être connus avant de toucher à l'authentification - **Rôles PostgreSQL cantonnés** pour l'ETL et le travail d'apprentissage, plus le `REVOKE` sur `audit_log`. Dette assumée, décrite dans les ADR 0003 et 0004. - **Pagination et fenêtrage** : posés sur `GET /readings` (fenêtre plafonnée à 90 jours, - `limit`/`offset` plafonné à 2000), mais toujours en `limit`/`offset` simple — pas de curseur ni + `limit`/`offset` plafonné à 2000), mais toujours en `limit`/`offset` simple : pas de curseur ni de plan de secours si un `offset` élevé sur une fenêtre dense devient lent en pratique. `statement_timeout` reste absent au niveau de la connexion, donc rien n'empêche une requête individuelle de tourner longtemps si les plafonds au-dessus d'elle s'avéraient insuffisants. diff --git a/docs/architecture/30-frontend.md b/docs/architecture/30-frontend.md index 4969b0b..5705c8c 100644 --- a/docs/architecture/30-frontend.md +++ b/docs/architecture/30-frontend.md @@ -4,8 +4,9 @@ Application Angular 22, 100 % standalone, testée avec Vitest. Source dans `apps ## État actuel -Statut : `En cours`. L'application sert le tableau de bord, la liste et le détail des sites, la -supervision des capteurs (admin) et le flux des alertes actives, tous branchés sur l'API réelle. +Statut : `En cours`. L'application sert le tableau de bord, la liste et le détail des sites, les +recommandations, la supervision des capteurs (admin) et le flux des alertes actives, tous +branchés sur l'API réelle. Ce qui est en place : @@ -13,10 +14,11 @@ Ce qui est en place : - `app.config.ts` fournit `provideBrowserGlobalErrorListeners()`, `provideRouter(routes)` et `provideHttpClient(withInterceptors([authInterceptor, mockApiInterceptor]))`. - Des routes en composants différés (`/dashboard`, `/sites`, `/sites/:siteId`, - `/monitoring/sensors` réservée au rôle `admin`) et une redirection depuis la racine. + `/recommendations`, `/monitoring/sensors` réservée au rôle `admin`, et les pages + d'authentification) et une redirection depuis la racine. - `core/services` porte un service HTTP par domaine (`StatsService`, `AlertsService` avec ses filtres `site_id` et `severity`, `PredictionsService`, `SitesService`, `ReadingsService`, - `SensorsService`, `AuthService`), `core/interceptors` l'intercepteur de fixtures et l'intercepteur + `RecommendationsService`, `SensorsService`, `AuthService`), `core/interceptors` l'intercepteur de fixtures et l'intercepteur d'authentification (jeton porteur, rafraîchissement sur 401), `core/guards` la garde `authGuard`. - `features/` porte une page par domaine. `shared/components` porte la jauge de consommation et les graphiques Chart.js, le widget `app-alert-feed` (flux d'alertes filtrable par site et diff --git a/docs/architecture/31-contrat-authentification.md b/docs/architecture/31-contrat-authentification.md index 4ad3dcf..6e34807 100644 --- a/docs/architecture/31-contrat-authentification.md +++ b/docs/architecture/31-contrat-authentification.md @@ -136,8 +136,10 @@ origine, en HTTPS**. C'est cela, et rien d'autre, qui rend le cookie `__Secure-e utilisable : servi en HTTP simple ou depuis une autre origine, il n'est jamais posé et l'authentification ne survit pas à un rechargement de page. -Ce qui reste à surveiller : le certificat est auto-signé tant qu'aucun domaine public ne résout -vers la machine. Un navigateur qui refuse l'exception refusera aussi le cookie. +Sur la machine, le certificat vient de Let's Encrypt par DNS-01 +([ADR 0018](../adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md)) : le navigateur n'a +aucune exception à accepter. Sur le poste, il reste auto-signé, et un navigateur qui refuse +l'exception refusera aussi le cookie. Et au moins une fois avant la soutenance, lancer le front **sans le proxy**, en cross-origin réel : c'est le seul moyen d'exercer le préflight CORS et `SameSite`, que la même origine masque. diff --git a/docs/architecture/40-data.md b/docs/architecture/40-data.md index 81f5387..d20cdc8 100644 --- a/docs/architecture/40-data.md +++ b/docs/architecture/40-data.md @@ -74,10 +74,10 @@ Les mécanismes d'ingestion sont maintenant implémentés pour les deux sources - le dataset historique CSV/JSON avec `historical_import.py` ; - l'API Mock avec `mock_api_import.py`. -Les traitements sont actuellement exécutables directement depuis le backend. +Les traitements restent exécutables directement depuis le backend, et Airflow les orchestre : +`historical_import` se lance à la demande, `mock_api_import` chaque heure à la minute 45. -L'orchestration avec Apache Airflow reste une cible, tout comme les agrégats continus et la -compression. La rétention est faite : le DAG `retention` exporte chaque chunk de `reading` plus +Les agrégats continus et la compression restent des cibles. La rétention est faite : le DAG `retention` exporte chaque chunk de `reading` plus vieux que `READING_RETENTION_DAYS` vers Garage, puis le supprime. ```mermaid @@ -88,8 +88,8 @@ flowchart LR hist --> hy[("Hypertable reading")] api --> hy - airflow["Airflow"] -.-> hist - airflow -.-> api + airflow["Airflow"] --> hist + airflow --> api hy -.-> agg[("Agrégat continu")] hy -.-> comp["Compression"] @@ -542,7 +542,7 @@ Cinq garde-fous, tous dans `mock_api_import.py` : | Garde-fou | Mise en œuvre | |---|---| | Timeout | `APP_MOCK_API_TIMEOUT_SECONDS`, dix secondes par défaut | -| Taille de tableau plafonnée | `MAX_SITES` sites, et au plus `--limit` mesures par site | +| Taille de tableau plafonnée | `MAX_SITES` sites, et au plus `limit` mesures par site, dérivé de la fenêtre par `limit_for_window()` | | Bornes physiques | `PHYSICAL_BOUNDS`, une plage par grandeur | | Frontière d'anti-corruption | `build_site_row()` et `build_reading_row()`, qui ne recopient que les champs attendus | | Refus de recouvrir l'historique | `refuse_if_overlaps_historical_dataset()`, voir ci-dessous | @@ -622,9 +622,10 @@ imputed_values = NULL imputation_method = NULL ``` -### Validation de l'import API Mock +### Validation initiale de l'import API Mock (18/09) -Un scénario de validation a été exécuté pour les 7 sites sur la période : +Un premier scénario de validation a été exécuté le 18/09, avant la clôture de la réconciliation +(#15), pour les 7 sites sur la période : ```text 15/06/2024 12:00 UTC @@ -646,6 +647,10 @@ Résultat : 420 lectures récupérées ``` +Ce scénario ne se rejoue plus tel quel depuis le 23/09 : la fenêtre recouvre le dataset +historique, donc `refuse_if_overlaps_historical_dataset()` la refuse, et `limit` n'est plus +fourni par l'appelant (une lecture par heure, voir plus haut). + Les données ont été chargées dans PostgreSQL/TimescaleDB puis contrôlées directement en base. Les contrôles ont confirmé : @@ -673,9 +678,9 @@ Les tests automatisés couvrent également : - la conservation des données sources ; - l'idempotence en base. -## Évolution prévue +## Orchestration par Airflow -La prochaine étape consiste à orchestrer les deux mécanismes d'ingestion avec Apache Airflow. +Les deux mécanismes d'ingestion sont orchestrés par Apache Airflow (`etl/airflow/dags`) : ```text CSV / JSON ----------------+ @@ -696,18 +701,11 @@ historical_import.py mock_api_import.py PostgreSQL / TimescaleDB ``` -Airflow servira à : +`historical_import` n'a pas de planification (lancement à la demande) ; `mock_api_import` tourne +chaque heure à la minute 45. Airflow planifie, ordonne, suit l'état et remonte les erreurs ; il ne +remplace pas la logique ETL : les scripts Python restent responsables de l'extraction, de la +validation, de la transformation et du chargement, appelés tels quels par des `BashOperator`. -- planifier les traitements ; -- définir leur ordre d'exécution ; -- suivre leur état ; -- gérer et remonter les erreurs ; -- faciliter les exécutions récurrentes. - -Airflow ne remplacera pas la logique ETL déjà implémentée. - -Les scripts Python resteront responsables de l'extraction, de la validation, de la transformation -et du chargement des données. - -Le pipeline servira ensuite de base à la préparation des données nécessaires au modèle -de Machine Learning. +Le même Airflow porte la suite de la chaîne : entraînement et scoring du modèle (`ml_train`, +`ml_score`), alertes et recommandations (`alertes`), dérive (`derive`) et rétention +(`retention`), soit sept DAGs. diff --git a/docs/architecture/50-cicd.md b/docs/architecture/50-cicd.md index 3b692c9..81ba240 100644 --- a/docs/architecture/50-cicd.md +++ b/docs/architecture/50-cicd.md @@ -6,14 +6,15 @@ vérifié, ce qui bloque, et ce qui ne l'est pas. | Étage | Sert à | Statut | |---|---|---| | Intégration continue | Interdire le merge d'un code qui casse la qualité, les tests ou la sécurité | `Fait` | -| Livraison continue | Déployer chaque branche d'intégration sur son environnement de la VM ENI | `En cours` | +| Livraison continue | Déployer chaque branche d'intégration sur son environnement de la VM ENI | `Fait` | Le **D** de CI/CD est écrit depuis le 21/09 : `deploy.yml` déploie `dev` en recette et `main` en production sur la VM de l'école, par un runner auto-hébergé (issue #21, [ADR 0009](../adr/0009-deux-environnements-compose-sur-la-vm-eni.md)). Depuis le 23/09, il ne part plus qu'une fois la CI du commit verte ([ADR 0014](../adr/0014-pipeline-ci-unique-et-deploiement-conditionne.md)). -Il n'a encore rien déployé : le runner n'est pas enregistré sur la machine. Statut à -basculer sur `Fait` au premier déploiement vert. Sa limite, nommée ici plutôt que découverte en +Le runner est enregistré sur la machine (`null_resource.runner_github` dans le state +Terraform) et l'environnement `prod` compte sept déploiements entre le 23/09 11h37 et le 24/09 +11h12, le dernier sur le commit gelé. Sa limite, nommée ici plutôt que découverte en soutenance : les images sont construites sur la machine à chaque déploiement, aucun artefact n'est publié puis promu d'un environnement à l'autre. @@ -103,7 +104,7 @@ n'est ouvert. Il n'a pas de déclencheur propre en dehors de `workflow_dispatch` | Événement | Environnement GitHub | Dossier sur la VM | Garde | |---|---|---|---| | `push` sur `dev`, « CI ok » vert | `rec` | `/srv/enervision/rec` | aucune de plus : la recette suit `dev` | -| `push` sur `main`, « CI ok » vert | `prod` | `/srv/enervision/prod` | approbation d'un relecteur dans l'environnement `prod`, branche `main` seule autorisée | +| `push` sur `main`, « CI ok » vert | `prod` | `/srv/enervision/prod` | branche `main` seule autorisée ; **aucun relecteur requis** (relevé par l'API le 24/09), l'approbation prévue n'est pas activée | | `workflow_dispatch` sur toute autre branche | `dev` | `/srv/enervision/dev` | droit d'écriture sur le dépôt, seul à pouvoir lancer un workflow ([ADR 0017](../adr/0017-environnement-dev-a-la-demande.md)) | Le job aligne le clone sur **le commit testé** (`fetch`, `checkout`, `reset --hard $GITHUB_SHA`), @@ -134,20 +135,23 @@ de `pull_request` dans `deploy.yml` ne suffit donc pas. Ce qui protège vraiment - le dépôt exige l'approbation des workflows de tous les contributeurs externes (Settings, Actions, « Require approval for all external contributors ») ; -- les environnements `rec` et `prod` n'acceptent que leur branche (`dev`, `main` avec un - relecteur), ce qui bloque un job qui les déclare avant qu'il atteigne le runner ; +- l'environnement `prod` n'accepte que `main`, ce qui bloque un job qui le déclare depuis une + autre branche avant qu'il atteigne le runner. `rec` et `dev` n'ont, eux, aucune règle + (relevé par l'API le 24/09) ; - le runner tourne sous un utilisateur dédié membre du groupe `docker`, jamais root. -Les deux réglages de dépôt restent à activer par l'administratrice. Tous les autres workflows -restent sur `ubuntu-latest`. +Restent à activer par l'administratrice : l'approbation des workflows de contributeurs +externes (non vérifiable sans droit d'administration), un relecteur requis sur `prod`, et la +restriction de `rec` à `dev`. Tous les autres workflows restent sur `ubuntu-latest`. -Cet utilisateur dédié doit posséder `/srv/enervision` : sinon git refuse les deux clones pour +Cet utilisateur dédié doit posséder `/srv/enervision` : sinon git refuse les clones pour propriété douteuse et le `.env` en `600` lui échappe. `PROPRIETAIRE=` passé à `scripts/provision-host.sh` fixe ce propriétaire. La machine se prépare avec `scripts/provision-host.sh`, qui vérifie Docker et Compose 2.24.4 ou -plus, clone les deux branches, génère les secrets de chaque `.env` et les certificats -auto-signés, et ne démarre rien. Le détail des trois environnements, ports et noms d'hôte, est +plus, prépare les trois clones (`prod` sur `main`, `rec` et `dev` sur `dev`), génère les secrets +de chaque `.env`, obtient les certificats Let's Encrypt par DNS-01 (un auto-signé ne reste en +place qu'en cas d'échec) et planifie leur renouvellement, et ne démarre rien. Le détail des trois environnements, ports et noms d'hôte, est dans [10-infra.md](10-infra.md). ## Ce qui bloque un merge @@ -171,6 +175,8 @@ dans [10-infra.md](10-infra.md). | Formatage et validité Terraform | infra | `fmt -check -recursive`, puis `init` et `validate` par racine | Bloque | | Verrous uv à jour | backend, ml, airflow | `uv sync --locked` : un `uv.lock` qui ne suit plus `pyproject.toml` échoue | Bloque | | Fichiers Compose | infra | `docker compose config` sur la stack de dev et la stack déployée, tous profils | Bloque | +| Frontal SNI | infra | `docker compose config` et `nginx -t` de `infra/front` | Bloque | +| Stockage objet | infra | fumée S3 sur Garage démarré par Compose : aller-retour, suppression, lecture refusée sans clé SSE-C (`tests/garage`) | Bloque | | Supervision | infra | `promtool check config`, `promtool test rules` (un cas par alerte), `amtool check-config`, JSON des tableaux | Bloque | | Workflows | infra | `actionlint`, shellcheck compris sur les blocs `run:` | Bloque | | Parcours de bout en bout | e2e | 18 parcours Playwright contre la stack de prod (proxy TLS) | Bloque | @@ -187,8 +193,8 @@ Deux seuils portent une décision qu'il faut savoir défendre : sans bloquer. Sans cette seconde passe, un constat LOW disparaîtrait du journal sans trace. Le revers à connaître : cette seconde étape porte `continue-on-error`, donc le job reste **vert** même quand elle relève quelque chose ; un LOW ne se voit qu'en ouvrant le journal. Au - 21/09/2026, les deux modules sont à **zéro constat, tous niveaux confondus**, sur 5 904 lignes - analysées. + 24/09/2026, les deux modules sont à **zéro constat, tous niveaux confondus**, sur 6 858 lignes + analysées (6 136 pour le backend, 722 pour le ML). - **La version de Bandit est épinglée** (`uvx bandit==1.9.4`) dans les deux jobs. Sans épingle, une nouvelle version passerait la CI au rouge sans qu'une seule ligne du dépôt ait changé, et le rejeu à l'identique promis plus bas n'existerait pas. @@ -209,7 +215,7 @@ partie de la suite, et son taux n'aurait aucun sens face au seuil de 85 %. ### Pourquoi le job d'intégration ML installe aussi le backend -Le schéma de la base n'a qu'une source, les six révisions Alembic de `apps/backend/alembic` : le +Le schéma de la base n'a qu'une source, les sept révisions Alembic de `apps/backend/alembic` : le backend est propriétaire du schéma, `ml/` n'en est que consommateur. Reconstruire ce schéma à la main dans le job ML donnerait un job vert sur une base qui n'est pas la nôtre, exactement l'erreur qu'évite déjà le choix de l'image `timescaledb-ha` plutôt qu'un `postgres` nu. Le job installe @@ -281,7 +287,7 @@ les tests ne se merge pas. | Préfixes de branche | `feat/`, `fix/`, `chore/`, `docs/`, `test/` | | Messages de commit | Conventional Commits | | Branche d'intégration | `dev` ; `main` est la branche par défaut du dépôt public | -| Revue | Toute PR passe par une revue écrite avant merge | +| Revue | Relecture écrite par un autre membre avant merge : 55 PR de fonctionnalité sur 62 au gel (89 %). Convention d'équipe, non imposée par une protection de branche | | ADR | Toute décision structurante porte son ADR dans la même PR | | Vues d'architecture | Toute PR qui change un composant met à jour sa vue **dans la même PR** | @@ -354,7 +360,7 @@ du runner qui l'a écrit, sans remappage automatique. depuis le début. Corrigé par `sudo chown 1000:1000` du fichier avant de le passer à `644`. - Ce `chown` déplace la propriété du fichier hors de l'utilisateur du runner : un `chmod` qui suit sans `sudo` échoue alors (« Operation not permitted »), et le `-e` implicite des étapes - bash de GitHub Actions arrête toute l'étape avant même `docker run` — un scan « réussi » en une + bash de GitHub Actions arrête toute l'étape avant même `docker run` : un scan « réussi » en une fraction de seconde, sans le moindre journal ni rapport produit. Les deux commandes doivent passer par `sudo`. @@ -427,6 +433,9 @@ voir `tests/load/README.md`. | Tir de charge nominal automatisé | #47 | Seul le smoke tourne en CI ; la charge à 50 utilisateurs se lance à la main en recette (`make load-test`), rec et prod partageant la VM | | Cache de couches Docker en CI | aucune | Le job E2E reconstruit les images backend et frontend à chaque run, deux à quatre minutes de plus | | Scan d'image de conteneur | aucune | Les images sont construites par le job E2E, pas analysées | +| Scan de secrets et d'IaC en CI | aucune | gitleaks, Trivy et Checkov ne tournent qu'à la main, pour le rapport de sécurisation : un secret commité ne serait vu qu'au passage suivant | +| `pip-audit` sur les verrous ML et Airflow, `npm audit` sur `tests/e2e` | aucune | Seuls les verrous du backend et du frontend sont audités en CI : la CVE-2026-41016 d'`apache-airflow-providers-smtp`, relevée le 23/09, y reste invisible | +| Approbation humaine avant la production | aucune | L'environnement `prod` n'exige aucun relecteur : un push sur `main` au CI vert part en production sans autre garde | ## Reproduire la CI en local @@ -437,7 +446,7 @@ Les tests d'intégration demandent une base **migrée**, et `db/init` ne crée ` vide : ```bash -make db-up migrate-test # la base de test reçoit les six révisions Alembic +make db-up migrate-test # la base de test reçoit les sept révisions Alembic make test-integration # backend, marqueur `integration` make ml-test-integration # pipeline ML, marqueur `integration` make test-chaine # vrais binaires ML puis relecture par l'API, marqueur `chaine` diff --git a/docs/architecture/README.md b/docs/architecture/README.md index 162c784..07c211f 100644 --- a/docs/architecture/README.md +++ b/docs/architecture/README.md @@ -17,13 +17,16 @@ contredisent, c'est l'ADR qui fait foi et la vue qui est en retard. | [40-data.md](40-data.md) | Frontières `db/` et `alembic/`, cycle de vie d'une mesure, modèle | | [50-cicd.md](50-cicd.md) | Orchestrateur `ci.yml`, gates bloquantes, e2e et charge, SonarCloud, Dependabot, ce qui manque | | [60-observabilite.md](60-observabilite.md) | Métriques, Prometheus, alertes, tableaux de bord Grafana, ce qui manque | +| [70-pilotage.md](70-pilotage.md) | Runbook de pilotage des traitements automatisés : entraîner, lire la dérive, rejouer un DAG, rétention | +| [owasp-traceabilite.md](owasp-traceabilite.md) | Traçabilité OWASP Top 10 et API Top 10 : couvert, partiel, ouvert | La CI/CD a son document : un orchestrateur et ses workflows de composant, c'est assez de matière pour qu'une section de plus dans une autre vue devienne illisible. L'observabilité a le sien depuis l'issue #26, qui lui a donné de la matière : collecte, alertes et tableaux de bord. -L'orchestration Airflow, elle, en a depuis les issues #115 et #116 : trois DAGs, leur image et -leurs contraintes sont décrits dans [10-infra.md](10-infra.md). +L'orchestration Airflow, elle, en a depuis les issues #115 et #116 : les sept DAGs, leur image et +leurs contraintes sont décrits dans [10-infra.md](10-infra.md), leur pilotage au quotidien dans +[70-pilotage.md](70-pilotage.md). La sécurité applicative, elle, a désormais de la matière : la vue consolidée reste dans [00-vue-ensemble.md](00-vue-ensemble.md), le détail dans [20-backend.md](20-backend.md), la @@ -38,6 +41,11 @@ GitHub rend Mermaid nativement dans les fichiers `.md`. Un diagramme est donc du relit en revue, il se diffe, et il ne se périme pas dans un binaire que plus personne ne sait rouvrir six mois plus tard. Aucune image exportée, aucun `.drawio`, aucun `.png`. +Une exception existe, et elle est connue : le schéma de données de +[40-data.md](40-data.md) est une image, `images/EnerVision-schema-donnees.png`, versionnée le 15/09, +quelques heures après l'adoption de la règle, sans que la revue le relève. Elle se relit à côté de la description des tables qui la suit, +qui fait foi ; la migrer en Mermaid reste à faire. + ### Chaque section porte son statut Une large part de la stack n'est pas écrite. Une vue qui mélange l'existant et la cible sans le diff --git a/docs/architecture/owasp-traceabilite.md b/docs/architecture/owasp-traceabilite.md index 15618ad..e0a3a18 100644 --- a/docs/architecture/owasp-traceabilite.md +++ b/docs/architecture/owasp-traceabilite.md @@ -43,15 +43,18 @@ lecture seule ; plusieurs lignes resteront à compléter une fois les endpoints | Refus de rétrograder ou désactiver le dernier administrateur actif | `app/services/user.py` | A04 Insecure Design | | Amorçage du premier administrateur hors dépôt, mot de passe jamais dans `argv` ni dans Git | `app/cli.py` | A02, A05 | | Réponse de l'API Mock bornée avant écriture : timeout, plafond de sites et de mesures, bornes physiques par grandeur, recopie des seuls champs attendus | `app/etl/mock_api_import.py` | API10 Unsafe Consumption of APIs | -| CI bloquante : format, lint avec règles Bandit, typage strict, tests avec seuil de couverture | `.github/workflows/backend.yml` | A06 Vulnerable and Outdated Components | -| Terminaison TLS au frontal, redirection 80 vers 443, HSTS et CSP posés par le proxy, limitation de débit au frontal | `infra/proxy/conf.d/enervision.conf`, ADR 0007 | API8 Security Misconfiguration, A05 | +| CI bloquante : format, lint avec règles Bandit, typage strict, tests avec seuil de couverture, SAST Bandit à partir de MEDIUM, `pip-audit` sur le verrou du backend, `npm audit --audit-level=high` sur le frontend | `.github/workflows/backend.yml`, `ml.yml`, `frontend.yml` | A06 Vulnerable and Outdated Components | +| Terminaison TLS au proxy de chaque stack, derrière un frontal SNI qui aiguille sans déchiffrer ; certificats Let's Encrypt par DNS-01 ; redirection 80 vers 443, HSTS et CSP posés par le proxy, limitation de débit sur l'adresse réelle du client (PROXY protocol) | `infra/proxy/conf.d/enervision.conf`, `infra/front/nginx.conf`, ADR 0007, ADR 0018 | API8 Security Misconfiguration, A05 | -Note sur A06 : le jeu de règles `S` de ruff, déjà actif dans `pyproject.toml`, est le portage des -règles Bandit. Ajouter Bandit à la CI serait redondant, contrairement à ce qu'annonce l'EC01. +Note sur A06 : le jeu de règles `S` de ruff, actif dans `pyproject.toml`, est le portage des +règles Bandit. Bandit lui-même a tout de même rejoint la CI le 21/09 (PR #121), bloquant à partir +de MEDIUM sur le backend et le ML, comme l'annonçait l'EC01 : les deux se recouvrent, redondance +assumée pour disposer d'un rapport SAST dédié et d'une version épinglée. -Note sur API8 : le transport est couvert, le certificat ne l'est qu'à moitié. Tant qu'aucun nom de -domaine public ne résout vers la machine, le défi HTTP-01 de Let's Encrypt ne peut pas aboutir et -le certificat servi reste auto-signé. Le chemin ACME est livré et documenté, pas exercé. +Note sur API8 : le transport et le certificat sont couverts. La machine n'a qu'une adresse privée, +le défi HTTP-01 ne peut pas aboutir : les certificats Let's Encrypt sont obtenus par défi DNS-01, +sur un domaine public dont la zone publie les enregistrements de validation (ADR 0018). L'auto-signé +ne sert plus qu'au poste de développement et aux tests e2e. ## Non couvert, et pourquoi @@ -60,9 +63,9 @@ le certificat servi reste auto-signé. Le chemin ACME est livré et documenté, | **API1 Broken Object Level Authorization** | **ouvert** | Les rôles sont globaux, il n'y a pas de portée par site : `GET /sites/{site_id}` et `GET /recommendations/{recommendation_id}` répondent à tout compte `lecteur` pour n'importe quel site ou recommandation, sans vérifier une affectation compte-site qui n'existe pas encore. Un opérateur du site A pourra agir sur le site B dès que les endpoints d'écriture métier existeront. Correctif prévu : table d'affectation compte-site, contrôle d'appartenance dans la même dépendance que le contrôle de rôle. | | **API4, lectures de séries temporelles** | **partiel** | `GET /readings` plafonne la fenêtre temporelle (90 jours) et la pagination (`limit` ≤ 2000), voir plus haut. Reste ouvert : pagination en `limit`/`offset` simple plutôt qu'en curseur (un `offset` élevé sur une fenêtre dense reste coûteux), et aucun `statement_timeout` au niveau de la connexion pour borner une requête individuelle si les plafonds au-dessus s'avéraient insuffisants. | | **API10 Unsafe Consumption of APIs** | **partiel, et spécifique à ce projet** | L'API Mock de l'école n'a aucune authentification, tourne en HTTP clair sur le réseau de l'école, et expose un endpoint mutatif à quiconque. Sa réponse est traitée comme une entrée hostile par `app/etl/mock_api_import.py`, son seul consommateur à ce jour : les quatre garde-fous attendus sont en place, voir la ligne correspondante plus haut. Reste ouvert : le plafond de taille s'applique après désérialisation de la réponse, borner le corps HTTP lui-même demanderait une lecture en flux ; et `APP_MOCK_API_BASE_URL` n'impose pas `https`, donc les identifiants Basic partiraient en clair sur une URL en `http`. La conséquence la plus sérieuse n'est pas la fausse alerte, c'est l'empoisonnement du jeu d'entraînement du modèle de prédiction. | -| **A08 Software and Data Integrity Failures** | **partiel** | La CI vérifie le code mais n'analyse ni les dépendances ni les images. `.terraform.lock.hcl` reste ignoré par git, ce qui contredit une chaîne d'approvisionnement maîtrisée. | +| **A08 Software and Data Integrity Failures** | **partiel** | La CI audite les dépendances du backend (`pip-audit` sur le verrou figé) et du frontend (`npm audit`), et les `.terraform.lock.hcl` sont versionnés. Restent ouverts : les verrous ML et Airflow ne sont pas audités (une CVE MEDIUM de `apache-airflow-providers-smtp` y reste invisible), aucune image n'est analysée, aucun scan de secrets ne tourne en CI, et les images sont reconstruites sur la machine plutôt que promues par empreinte. | | **A10 Server-Side Request Forgery** | **sans objet aujourd'hui** | Aucune URL sortante n'est pilotée par une donnée utilisateur. Le jour où l'adresse d'une source devient un champ de configuration, il faudra une liste blanche de schémas et d'hôtes, sans suivi de redirection. | -| **Cantonnement des accès ETL et ML** | **dette assumée** | Le compte applicatif porte l'identité, le rôle PostgreSQL porterait le cantonnement. Voir ADR 0003. Plus coûteuse depuis Airflow (#115) : ce service publie le port 8080, détient les identifiants Postgres complets (`ML_DATABASE_URL`, mêmes que le backend) et permet de déclencher l'exécution de code depuis son interface. Un compte Airflow compromis atteint donc toute la base, pas seulement `reading`/`site`. Aggravée par #116 : le conteneur reçoit aussi `DATABASE_URL` et exécute le code du backend en sous-processus (ADR 0008). Atténuations en place : le compte admin Airflow est distinct des `app_user` et son mot de passe passe par l'environnement, jamais par `argv` ; et l'`APP_SECRET_KEY` donnée à Airflow est distincte de celle de l'API, pour qu'une compromission ne livre pas la clé de signature des JWT. | +| **Cantonnement des accès ETL et ML** | **dette assumée** | Le compte applicatif porte l'identité, le rôle PostgreSQL porterait le cantonnement. Voir ADR 0003. Plus coûteuse depuis Airflow (#115) : ce service publie le port 8080 (sur le poste de développement ; sur la machine, sur la boucle locale seulement), détient les identifiants Postgres complets (`ML_DATABASE_URL`, mêmes que le backend) et permet de déclencher l'exécution de code depuis son interface. Un compte Airflow compromis atteint donc toute la base, pas seulement `reading`/`site`. Aggravée par #116 : le conteneur reçoit aussi `DATABASE_URL` et exécute le code du backend en sous-processus (ADR 0008). Atténuations en place : le compte admin Airflow est distinct des `app_user` et son mot de passe passe par l'environnement, jamais par `argv` ; et l'`APP_SECRET_KEY` donnée à Airflow est distincte de celle de l'API, pour qu'une compromission ne livre pas la clé de signature des JWT. | | **Non-répudiation de l'audit** | **dette assumée** | Les déclencheurs arrêtent les accidents, pas un compte détenant `ALTER TABLE`. Voir ADR 0004. | ## Ce qu'il faut répondre, et ne pas répondre diff --git a/etl/README.md b/etl/README.md index f5d69f5..14c43c3 100644 --- a/etl/README.md +++ b/etl/README.md @@ -1,4 +1,4 @@ -# Pipeline ETL — EnerVision +# Pipeline ETL · EnerVision ## Objectif @@ -236,11 +236,11 @@ apps/backend/ exécuter : -```powershell -uv run python -m app.etl.historical_import ` - --csv ..\..\data\raw\all_sites_combined.csv ` - --metadata ..\..\data\raw\dataset_metadata.json ` - --source-timezone UTC ` +```bash +uv run python -m app.etl.historical_import \ + --csv ../../data/raw/all_sites_combined.csv \ + --metadata ../../data/raw/dataset_metadata.json \ + --source-timezone UTC \ --dry-run ``` @@ -250,10 +250,10 @@ Aucune donnée n'est écrite dans la base pendant cette exécution. Depuis `apps/backend/` : -```powershell -uv run python -m app.etl.historical_import ` - --csv ..\..\data\raw\all_sites_combined.csv ` - --metadata ..\..\data\raw\dataset_metadata.json ` +```bash +uv run python -m app.etl.historical_import \ + --csv ../../data/raw/all_sites_combined.csv \ + --metadata ../../data/raw/dataset_metadata.json \ --source-timezone UTC ``` @@ -303,7 +303,7 @@ Une nouvelle exécution du même import ne crée donc pas de mesures supplément Depuis la racine du projet, vérifier le nombre d'enregistrements avec : -```powershell +```bash docker compose exec db psql -U enervision -d enervision -c "SELECT COUNT(*) AS datasets FROM dataset; SELECT COUNT(*) AS sites FROM site; SELECT COUNT(*) AS readings FROM reading;" ``` @@ -317,7 +317,7 @@ readings = 122647 Vérifier la source des mesures avec : -```powershell +```bash docker compose exec db psql -U enervision -d enervision -c "SELECT source, COUNT(*) FROM reading GROUP BY source ORDER BY source;" ``` @@ -384,7 +384,9 @@ end_time limit ``` -Le paramètre `limit` doit être compris entre 1 et 1000. +Le paramètre `limit` doit être compris entre 1 et 1000. Il n'est plus fourni par l'appelant : +`limit_for_window()` le dérive de la fenêtre demandée, pour obtenir une lecture par heure, +alignée sur l'heure pile. ### Configuration de l'API Mock @@ -485,8 +487,13 @@ data_quality = "degraded" L'import ne s'interrompt pas pour autant : le mock émet des anomalies par construction, et `raw_data` conserve la réponse d'origine. -La taille des réponses est plafonnée : au plus `MAX_SITES` sites, et au plus `--limit` mesures -par site. Au-delà, l'import échoue au lieu de charger. +La taille des réponses est plafonnée : au plus `MAX_SITES` sites, et au plus `limit` mesures par +site, une par heure de la fenêtre (`limit_for_window()`). Au-delà, l'import échoue au lieu de +charger. + +L'import refuse aussi une fenêtre qui recouvre le dataset historique +(`refuse_if_overlaps_historical_dataset()`) : le CSV couvre 2023 et 2024, une fenêtre de l'API Mock +doit donc commencer après le 31/12/2024, et démarrer pile sur une heure. Enfin, seuls les champs attendus sont recopiés vers la base. Une clé supplémentaire renvoyée par l'API n'atteint jamais une colonne. @@ -495,30 +502,36 @@ l'API n'atteint jamais une colonne. Le mode `--dry-run` permet de tester la connexion, la récupération des sites et la récupération des mesures sans écrire dans PostgreSQL. -Depuis `apps/backend/` : +Depuis `apps/backend/`, sur une fenêtre de deux heures postérieure au dataset historique (une +lecture par heure et par site) : -```powershell -uv run python -m app.etl.mock_api_import ` - --start-time "2024-06-15T12:00:00" ` - --end-time "2024-06-15T13:00:00" ` - --limit 60 ` +```bash +uv run python -m app.etl.mock_api_import \ + --start-time "2026-09-24T08:00:00" \ + --end-time "2026-09-24T10:00:00" \ --dry-run ``` +Les heures sans fuseau sont lues en UTC. Seuls `--start-time`, `--end-time` et `--dry-run` +existent. + ### Chargement réel depuis l'API Mock Depuis `apps/backend/` : -```powershell -uv run python -m app.etl.mock_api_import ` - --start-time "2024-06-15T12:00:00" ` - --end-time "2024-06-15T13:00:00" ` - --limit 60 +```bash +uv run python -m app.etl.mock_api_import \ + --start-time "2026-09-24T08:00:00" \ + --end-time "2026-09-24T10:00:00" ``` -### Résultat validé pour l'API Mock +En fonctionnement normal, cet import n'est pas lancé à la main : le DAG `mock_api_import` le +joue chaque heure (voir la fin de ce document). -Le scénario de validation utilisé couvre la période : +### Validation initiale du 18/09, antérieure à la réconciliation + +Le premier scénario de validation, joué le 18/09 avant la clôture de la réconciliation (#15), +couvrait la période : ```text 15/06/2024 12:00 UTC @@ -526,9 +539,11 @@ Le scénario de validation utilisé couvre la période : 15/06/2024 13:00 UTC ``` -avec une limite de 60 lectures par site. +avec une limite de 60 lectures par site. Il ne se rejoue plus tel quel : depuis le 23/09, cette +fenêtre est refusée parce qu'elle recouvre le dataset historique, et l'option `--limit` a disparu +au profit d'une lecture par heure. -Résultat obtenu : +Résultat obtenu à l'époque : ```text sites récupérés : 7 @@ -581,7 +596,8 @@ Les tests de l'import API Mock couvrent notamment : - la récupération des sites ; - l'appel à `/api/v1/readings` ; -- les paramètres `site_id`, `start_time`, `end_time` et `limit` ; +- les paramètres `site_id`, `start_time`, `end_time` et `limit`, dérivé de la fenêtre ; +- le refus d'une fenêtre qui recouvre le dataset historique ; - la gestion des erreurs HTTP ; - la validation du format de la réponse ; - la transformation des mesures ; @@ -594,48 +610,43 @@ Les tests de l'import API Mock couvrent notamment : Exécuter les tests ETL : -```powershell -uv run pytest tests\etl -v +```bash +uv run pytest tests/etl -v ``` Exécuter les tests unitaires de l'import API Mock : -```powershell -uv run pytest tests\etl\test_mock_api_import.py -v +```bash +uv run pytest tests/etl/test_mock_api_import.py -v ``` Exécuter le test d'intégration de l'import API Mock : -```powershell -uv run pytest tests\etl\test_mock_api_import.py -m integration -v +```bash +uv run pytest tests/etl/test_mock_api_import.py -m integration -v ``` Contrôler la qualité du code : -```powershell -uv run ruff check app\etl tests\etl +```bash +uv run ruff check app/etl tests/etl ``` Contrôler le typage : -```powershell +```bash uv run mypy app ``` Exécuter la suite complète avec le seuil de couverture : -```powershell +```bash uv run pytest --cov-fail-under=85 ``` -Lors de la validation de l'import API Mock : - -```text -8 tests unitaires passés -1 test d'intégration passé -``` - -La suite backend complète a également été validée avec une couverture supérieure au seuil de 85 %. +Lors de la première validation, le 18/09, le fichier comptait 8 tests unitaires et 1 test +d'intégration. Il en compte aujourd'hui 42, dont 2 d'intégration (`pytest --collect-only`), après +l'ajout des bornes physiques, de la réconciliation et de l'alignement horaire. ## Suite du pipeline Data @@ -663,10 +674,12 @@ mock_api_import.py La logique d'extraction, de transformation et de chargement est donc disponible pour les deux sources de données du MVP. -Airflow tourne désormais réellement (`etl/airflow/`, `make airflow-up`) et orchestre cinq DAGs : +Airflow tourne désormais réellement (`etl/airflow/`, `make airflow-up`) et orchestre sept DAGs : le pipeline ML (`ml_train` et `ml_score`, issue #115), la détection d'alertes et la génération des recommandations (`alertes`, issue #116), l'import historique (`historical_import`, -issue #119) et l'import périodique de l'API Mock (`mock_api_import`, issue #15). +issue #119), l'import périodique de l'API Mock (`mock_api_import`, issue #15), la surveillance +de dérive du modèle (`derive`, ADR 0013) et la rétention des relevés, exportés vers Garage puis +supprimés (`retention`, issue #36, ADR 0019). Le DAG `mock_api_import` s'exécute chaque heure, à la minute `:45`, sur une fenêtre qui part de l'heure pile précédant son déclenchement jusqu'à l'instant du déclenchement lui-même (pas @@ -681,7 +694,7 @@ Les deux pipelines normalisent leurs données vers les tables communes `site` et conservant leur source (`csv` ou `api_history`). La réconciliation entre les deux sources (issue #15) est close : voir `docs/architecture/40-data.md`. -Airflow permet de planifier les traitements, gérer leur ordre d'exécution, suivre leur état et remonter les erreurs. Il ne remplace pas la logique ETL Python existante : les scripts actuels restent responsables de l'extraction, de la validation, de la transformation et du chargement. `etl/airflow/dags/ml_train.py`, `ml_score.py`, `alertes.py`, `historical_import.py` et -`mock_api_import.py` montrent le patron retenu (des `BashOperator` qui invoquent le script tel quel, dans l'environnement `uv` que l'image embarque pour lui). +Airflow permet de planifier les traitements, gérer leur ordre d'exécution, suivre leur état et remonter les erreurs. Il ne remplace pas la logique ETL Python existante : les scripts actuels restent responsables de l'extraction, de la validation, de la transformation et du chargement. `etl/airflow/dags/ml_train.py`, `ml_score.py`, `alertes.py`, `historical_import.py`, +`mock_api_import.py`, `derive.py` et `retention.py` montrent le patron retenu (des `BashOperator` qui invoquent le script tel quel, dans l'environnement `uv` que l'image embarque pour lui). Le pipeline Data servira ensuite à préparer les données nécessaires au modèle de Machine Learning. diff --git a/infra/proxy/README.md b/infra/proxy/README.md index 0630576..23b92d4 100644 --- a/infra/proxy/README.md +++ b/infra/proxy/README.md @@ -1,7 +1,9 @@ # Reverse proxy -Terminaison TLS et routage de la stack déployée. Seul composant publié sur le réseau : il -écoute en 80 et 443, et rien d'autre ne sort du réseau Compose. +Terminaison TLS et routage de la stack déployée. Sur un poste, seul composant publié sur le +réseau : il écoute en 80 et 443, et rien d'autre ne sort du réseau Compose. Sur la VM, il +n'écoute plus que sur `127.0.0.1`, derrière le frontal SNI `infra/front`, seul composant exposé +([ADR 0018](../../docs/adr/0018-noms-publics-certificats-dns01-et-frontal-sni.md)). - `nginx.conf` : bloc `http`, journalisation, compression, zones de limitation de débit. - `conf.d/enervision.conf` : redirection 80 vers 443, terminaison TLS, en-têtes de sécurité, @@ -15,11 +17,13 @@ configuration est montée en volume par `docker-compose.prod.yml`. L'overlay emploie les marqueurs `!override` et `!reset`, qui demandent **Docker Compose 2.24.4 ou plus récent**. Sur une version antérieure, la fusion échoue au lieu de dépublier les ports. -Les ports publiés sont `PROXY_HTTP_PORT` et `PROXY_HTTPS_PORT`, 80 et 443 par défaut. Quand deux -environnements partagent la machine ([ADR 0009](../../docs/adr/0009-deux-environnements-compose-sur-la-vm-eni.md)), -la recette publie `8443` et ramène son port 80 sur `127.0.0.1:8081` : la redirection ci-dessous -renvoie vers `https://$host` sans port, donc vers la production. `PUBLIC_ORIGIN` porte alors -l'origine avec son port pour le CORS et le lien de réinitialisation. +Les ports publiés sont `PROXY_HTTP_PORT`, `PROXY_HTTPS_PORT` et `PROXY_FRONT_PORT`, 80, 443 et un +port aléatoire de la boucle locale par défaut. Sur la VM, trois environnements partagent la +machine ([ADR 0009](../../docs/adr/0009-deux-environnements-compose-sur-la-vm-eni.md), +[ADR 0017](../../docs/adr/0017-environnement-dev-a-la-demande.md)) : `scripts/provision-host.sh` +place les ports de chaque proxy sur `127.0.0.1` (HTTPS en 10443, 8443 et 9443 pour la production, +la recette et le dev), et le frontal aiguille chaque nom vers le sien. Les URL publiques n'ont +donc plus de port, et `PUBLIC_ORIGIN` vaut `https://` suivi du nom de l'environnement. ## Routage @@ -55,15 +59,15 @@ make tls-selfsigned PUBLIC_HOST=enervision.local make stack-up ``` -Le navigateur avertira d'un émetteur inconnu : c'est attendu, et c'est le seul mode exploitable -tant que la machine cible n'a pas de nom de domaine public. +Le navigateur avertira d'un émetteur inconnu : c'est attendu. C'est le mode du poste de +développement et des tests e2e ; la VM utilise Let's Encrypt par DNS-01 (plus bas). ### Let's Encrypt Le défi HTTP-01 exige un nom de domaine **résolvable publiquement** et le port 80 joignable -depuis Internet. La cible documentée aujourd'hui (`ssh_host = "10.0.0.10"`, serveur de l'école) -ne remplit ni l'une ni l'autre condition : le chemin ci-dessous est livré et documenté, il n'a -pas été exercé. +depuis Internet. La VM de l'école ne remplit ni l'une ni l'autre condition : ce chemin reste +livré pour une machine publique, et n'a pas été exercé. La VM passe par DNS-01 (section +suivante). ```bash make stack-up # nginx doit tourner pour servir le défi diff --git a/infra/terraform/environments/vm-eni/terraform.tfvars.example b/infra/terraform/environments/vm-eni/terraform.tfvars.example index e5e8ec4..49f68e7 100644 --- a/infra/terraform/environments/vm-eni/terraform.tfvars.example +++ b/infra/terraform/environments/vm-eni/terraform.tfvars.example @@ -1,4 +1,4 @@ -ssh_host = "10.101.200.37" +ssh_host = "" ssh_port = 22 ssh_user = "root" ssh_private_key_path = "~/.ssh/id_ed25519" diff --git a/monitoring/README.md b/monitoring/README.md index b29bf92..75d2040 100644 --- a/monitoring/README.md +++ b/monitoring/README.md @@ -18,7 +18,7 @@ Les interfaces n'écoutent que sur `127.0.0.1`. Depuis un poste, on passe par un comme pour Airflow : ```bash -ssh -L 3001:127.0.0.1:3001 -L 9090:127.0.0.1:9090 enervision@10.101.200.37 +ssh -L 3001:127.0.0.1:3001 -L 9090:127.0.0.1:9090 enervision@ ``` ## Démarrer diff --git a/scripts/README.md b/scripts/README.md index 8914c5d..33a8eda 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -19,3 +19,35 @@ Rejouable, en root sur la VM : `COFFRE_TAILLE=30G COFFRE_MIGRER=1 bash scripts/c `COFFRE_MIGRER=1`, le coffre est préparé mais les volumes existants ne sont pas déplacés : la migration arrête Docker le temps de la copie. Variables : `COFFRE_IMAGE`, `COFFRE_CLE`, `COFFRE_MONTAGE`, `COFFRE_TAILLE`. La clé est à sauvegarder hors de la VM : perdue, tout est perdu. +Le script refuse de démarrer dans un conteneur LXC (`systemd-detect-virt`) ou sans device-mapper : +c'est le cas de la machine ENI, où le chiffrement du disque relève de l'hôte Proxmox. + +## provision-host.sh + +Prépare la machine et ses trois environnements, `prod` sur `main`, `rec` et `dev` sur `dev` +([ADR 0009](../docs/adr/0009-deux-environnements-compose-sur-la-vm-eni.md), +[ADR 0017](../docs/adr/0017-environnement-dev-a-la-demande.md)), sans démarrer aucune stack. Pour +chacun, sous `RACINE` (`/srv/enervision` par défaut) : un clone du dépôt, un `.env` en `600` dont +les secrets sont générés sur place et jamais réécrits s'ils existent, l'adressage réaligné, un +certificat Let's Encrypt par DNS-01 si le jeton dynv6 est dans `RACINE/dns.token` (auto-signé +sinon). Lancé en root avec `PROPRIETAIRE`, il pose aussi la tâche cron de renouvellement et donne +les dossiers au compte du runner. Joué par Terraform (`infra/terraform/environments/vm-eni`) ou à +la main : `PROPRIETAIRE= bash scripts/provision-host.sh`. +Rejouable. Variables : `REPO_URL`, `RACINE`, `DOMAINE`, `PUBLIC_IP`, `PROPRIETAIRE`. + +## tls-selfsigned.sh + +Écrit un certificat auto-signé dans `infra/proxy/tls/` (`fullchain.pem`, `privkey.pem`), là où +nginx lit toujours ses certificats, quel que soit le mode d'obtention. Sert au poste de +développement et aux tests e2e ; sur la machine, il ne reste en place que si Let's Encrypt échoue. +`make tls-selfsigned PUBLIC_HOST=enervision.local`, `FORCE=1` pour écraser. Variables : +`PUBLIC_HOST`, `PUBLIC_IP` (ajoutée au certificat), `TLS_DAYS` (365 par défaut). + +## comptes-test.sh + +Réservé à une base **jetable** (CI, e2e, charge sur le poste) : crée un administrateur par la CLI +du backend, puis un lecteur et un opérateur, leur fait passer le changement de mot de passe +obligatoire, et écrit leurs identifiants en JSON dans `COMPTES_FICHIER`. Appelé par `e2e.yml` et +par `make e2e-prepare`. Variables : `BASE_URL` (`http://localhost:8000` par défaut), +`COMPTES_FICHIER` (requis), `APP_CLI`, `ADMIN_SUPPLEMENTAIRE=1` pour la base du poste, qui a déjà +un administrateur. Nécessite `curl`, `jq` et `openssl`. From 7ecc0b2e64fa0fdcdbde9f3aefdb51a8fd9299fd Mon Sep 17 00:00:00 2001 From: Johan LEROY Date: Thu, 24 Sep 2026 15:55:17 +0200 Subject: [PATCH 2/3] =?UTF-8?q?docs(architecture):=20ajoute=20le=20runbook?= =?UTF-8?q?=20de=20pilotage=20des=20traitements=20automatis=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Carte des sept DAGs et de leurs planifications en UTC, lecture du verdict de dérive, réentraînement sans perdre le modèle en service, rétention et reprise après incident. Renvoie aux vues et aux ADR qui portent le détail. --- docs/architecture/70-pilotage.md | 105 +++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 docs/architecture/70-pilotage.md diff --git a/docs/architecture/70-pilotage.md b/docs/architecture/70-pilotage.md new file mode 100644 index 0000000..4ae0bbc --- /dev/null +++ b/docs/architecture/70-pilotage.md @@ -0,0 +1,105 @@ +# 70 · Pilotage des traitements automatisés + +Ce document dit à l'opérateur quoi surveiller, comment lire ce qu'il voit et quoi faire quand un +traitement déraille. Il ne redit pas le fonctionnement : la table des DAGs vit dans +[10-infra.md](10-infra.md), la chaîne de données dans [40-data.md](40-data.md), la dérive dans +l'[ADR 0013](../adr/0013-surveillance-de-derive-dans-le-backend.md), la rétention dans +l'[ADR 0019](../adr/0019-stockage-objet-garage-et-cycle-de-vie-des-mesures.md), la supervision +dans [60-observabilite.md](60-observabilite.md). + +## Carte des traitements + +Les planifications sont en **UTC** : Airflow n'a pas de fuseau configuré. En heure de Paris +l'été, ajouter deux heures. + +| DAG | Planification (UTC) | Ce qu'il fait | Même traitement à la main | +|---|---|---|---| +| `mock_api_import` | chaque heure à :45 | importe la mesure de l'heure pile de l'API Mock, une par site | `python -m app.etl.mock_api_import --start-time … --end-time …` | +| `ml_score` | chaque heure pile | score le pas horaire suivant, écrit `prediction` | `make ml-score` | +| `alertes` | chaque heure à :15 | détecte les alertes internes, puis génère les recommandations | `make detect-alerts`, puis `make recommendations` | +| `retention` | 03:20 | exporte vers Garage les chunks de `reading` de plus de 1 095 jours, puis les supprime | `python -m app.etl.reading_retention` | +| `derive` | 05:30 | calcule le rapport de dérive du modèle sur 168 h | `python -m app.monitoring.drift` | +| `ml_train` | manuel | réentraîne LightGBM et **écrase** le modèle | `make ml-train` | +| `historical_import` | manuel | importe le jeu historique CSV | `python -m app.etl.historical_import --csv … --metadata …` | + +Les modules `app.*` se lancent depuis `apps/backend` (`uv run python -m …`). Tous les DAGs ont +`max_active_runs=1` et `catchup=False` : un retard ne rejoue pas les heures manquées. + +## Où regarder + +Sur la machine, chaque environnement vit dans `/srv/enervision/` et n'écoute que sur la +boucle locale : on y accède par tunnel SSH. + +| Quoi | Production | Recette | Dev | +|---|---|---|---| +| Interface Airflow | `127.0.0.1:8080` | `127.0.0.1:8082` | `127.0.0.1:8084` | +| Grafana (production seulement) | `127.0.0.1:3001` | - | - | +| Mailpit, où arrivent les alertes | `127.0.0.1:8025` | `127.0.0.1:8026` | `127.0.0.1:8027` | + +```bash +ssh -L 8080:127.0.0.1:8080 -L 3001:127.0.0.1:3001 -L 8025:127.0.0.1:8025 root@ +``` + +En ligne de commande, depuis `/srv/enervision/` : + +```bash +compose="docker compose -f docker-compose.yml -f docker-compose.prod.yml" +$compose exec airflow-apiserver airflow dags list-runs derive # derniers passages +$compose exec airflow-apiserver airflow dags trigger ml_train # lancement manuel +$compose logs --tail=100 airflow-scheduler # les tâches tournent ici +``` + +**Aucune alerte ne signale l'échec d'un DAG** ([60-observabilite.md](60-observabilite.md)) : +un coup d'œil quotidien à l'interface Airflow reste nécessaire. + +## Lire le rapport de dérive + +`GET /api/v1/monitoring/drift` (rôle `operateur`) rend le dernier rapport par site et une ligne +globale. Le verdict suit cet ordre (`app/services/drift.py`) : + +| Verdict | Condition | Ce que ça veut dire | Quoi faire | +|---|---|---|---| +| `indetermine` | moins de 24 prévisions vérifiées sur la fenêtre | pas assez de recul pour conclure | attendre ; si ça dure, vérifier `ml_score` | +| `derive`, couverture | moins de 80 % des prévisions ont trouvé leur mesure réelle | **le pipeline**, pas le modèle | vérifier `mock_api_import` et `ml_score` dans Airflow | +| `derive`, erreur | MAE au-delà de 1,25 fois celle de la fenêtre de référence | le modèle se trompe plus qu'avant | réentraîner (ci-dessous) | +| `derive`, biais | biais absolu au-delà du seuil, désactivé par défaut | le modèle se trompe toujours du même côté | réentraîner, après en avoir cherché la cause dans les données | +| `stable` | aucune des conditions précédentes | rien à faire | - | + +## Réentraîner sans perdre le modèle en service + +`ml_train` reste manuel parce que `train.py` écrase le modèle sans comparer ses métriques à +celles de l'ancien ([10-infra.md](10-infra.md)). Garder une copie avant de lancer : + +```bash +$compose exec airflow-scheduler cp /opt/ml/state/models/lightgbm-consumption.txt \ + /opt/ml/state/models/lightgbm-consumption.txt.avant +$compose exec airflow-apiserver airflow dags trigger ml_train +``` + +Comparer ensuite les métriques des deux derniers runs, que `train.py` enregistre dans le magasin +MLflow du volume (`/opt/ml/state/mlflow.db`). Aucune interface MLflow n'est servie sur la +machine : `ml/README.md` décrit `mlflow ui`. Si le nouveau modèle est moins bon, remettre la +copie en place : le prochain `ml_score` l'utilisera. + +## Rétention et archives + +`retention` supprime de la base les chunks de `reading` plus vieux que +`APP_READING_RETENTION_DAYS` (1 095 jours), **après** les avoir exportés en CSV gzip dans le +bucket Garage de l'environnement, chiffrés en SSE-C. Il est idempotent : une reprise ne réécrit +pas un objet déjà exporté et ne retrouve plus un chunk déjà supprimé. + +- **La clé `GARAGE_SSE_KEY` du `.env` est la seule qui déchiffre les archives.** Garage ne la + garde pas. Perdue, les archives sont illisibles : elle se sauvegarde hors de la machine. +- Restaurer un chunk : `get_object` avec la clé SSE-C, `gunzip`, puis + `COPY reading FROM STDIN CSV HEADER`. La contrainte `uq_reading_source` refuse les doublons + ([ADR 0019](../adr/0019-stockage-objet-garage-et-cycle-de-vie-des-mesures.md)). + +## Reprendre après un incident + +| Situation | Reprise | +|---|---| +| `mock_api_import` a manqué des heures | relancer à la main avec `--start-time` et `--end-time` sur la fenêtre manquante ; le module refuse toute fenêtre qui recouvre le CSV historique | +| `alertes` a échoué | relancer : les deux tâches sont idempotentes (`ON CONFLICT DO NOTHING`) | +| `derive` a échoué | relancer : un index d'unicité par fenêtre empêche les doublons | +| `retention` a échoué | relancer : idempotent, voir plus haut | +| `ml_score` en échec répété | lire les journaux du scheduler ; deux tentatives et un plafond de 30 minutes par passage | From 182a2f4a6c1bf94410aca314148d5f78b5575a29 Mon Sep 17 00:00:00 2001 From: Johan LEROY Date: Thu, 24 Sep 2026 15:55:17 +0200 Subject: [PATCH 3/3] =?UTF-8?q?docs(livrables):=20verse=20le=20rapport=20c?= =?UTF-8?q?ollectif=20EC02=20et=20le=20rapport=20de=20s=C3=A9curisation=20?= =?UTF-8?q?EC04?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sources Markdown et versions figées PDF, relevés du 24/09 sur le commit gelé 9f343e9, et les quatorze preuves anonymisées du rapport de sécurisation, chacune avec la commande qui la rejoue. Porte la déclaration d'usage de l'IA et la section anonymisation et RGPD demandées par #154. --- ..._EC02 - Rapport Collectif HEADL_015B-G3.md | 396 ++++++++++++++++ ...EC02 - Rapport Collectif HEADL_015B-G3.pdf | Bin 0 -> 465585 bytes ...ADL26_EC04 - Rapport - LEROY Johan (G3).md | 431 ++++++++++++++++++ ...DL26_EC04 - Rapport - LEROY Johan (G3).pdf | Bin 0 -> 451087 bytes docs/livrables/EC04/preuves/01-bandit.txt | 142 ++++++ docs/livrables/EC04/preuves/02-pip-audit.txt | 27 ++ docs/livrables/EC04/preuves/03-npm-audit.txt | 15 + docs/livrables/EC04/preuves/04-checkov.txt | 28 ++ docs/livrables/EC04/preuves/05-gitleaks.txt | 23 + .../EC04/preuves/06-trivy-config.txt | 66 +++ docs/livrables/EC04/preuves/07-trivy-fs.txt | 55 +++ .../livrables/EC04/preuves/08-tests-acces.txt | 7 + .../EC04/preuves/09-terraform-validate.txt | 16 + docs/livrables/EC04/preuves/10-proxy-tls.txt | 78 ++++ .../EC04/preuves/11-terraform-state.txt | 11 + .../EC04/preuves/12-constats-machine.txt | 99 ++++ .../EC04/preuves/13-github-reglages.txt | 42 ++ docs/livrables/EC04/preuves/14-dast-zap.txt | 21 + 18 files changed, 1457 insertions(+) create mode 100644 docs/livrables/EC02/EADL26_EC02 - Rapport Collectif HEADL_015B-G3.md create mode 100644 docs/livrables/EC02/EADL26_EC02 - Rapport Collectif HEADL_015B-G3.pdf create mode 100644 docs/livrables/EC04/EADL26_EC04 - Rapport - LEROY Johan (G3).md create mode 100644 docs/livrables/EC04/EADL26_EC04 - Rapport - LEROY Johan (G3).pdf create mode 100644 docs/livrables/EC04/preuves/01-bandit.txt create mode 100644 docs/livrables/EC04/preuves/02-pip-audit.txt create mode 100644 docs/livrables/EC04/preuves/03-npm-audit.txt create mode 100644 docs/livrables/EC04/preuves/04-checkov.txt create mode 100644 docs/livrables/EC04/preuves/05-gitleaks.txt create mode 100644 docs/livrables/EC04/preuves/06-trivy-config.txt create mode 100644 docs/livrables/EC04/preuves/07-trivy-fs.txt create mode 100644 docs/livrables/EC04/preuves/08-tests-acces.txt create mode 100644 docs/livrables/EC04/preuves/09-terraform-validate.txt create mode 100644 docs/livrables/EC04/preuves/10-proxy-tls.txt create mode 100644 docs/livrables/EC04/preuves/11-terraform-state.txt create mode 100644 docs/livrables/EC04/preuves/12-constats-machine.txt create mode 100644 docs/livrables/EC04/preuves/13-github-reglages.txt create mode 100644 docs/livrables/EC04/preuves/14-dast-zap.txt diff --git a/docs/livrables/EC02/EADL26_EC02 - Rapport Collectif HEADL_015B-G3.md b/docs/livrables/EC02/EADL26_EC02 - Rapport Collectif HEADL_015B-G3.md new file mode 100644 index 0000000..3d996ca --- /dev/null +++ b/docs/livrables/EC02/EADL26_EC02 - Rapport Collectif HEADL_015B-G3.md @@ -0,0 +1,396 @@ +# EC02 · Management de projet : rapport collectif + +**Groupe 3 (HEADL_015B) · Projet EnerVision.** + +| | | +|---|---| +| **Fichier source** | `EADL26_EC02 - Rapport Collectif HEADL_015B-G3.md`, encodage UTF-8, aucun média externe | +| **Version figée** | `EADL26_EC02 - Rapport Collectif HEADL_015B-G3.pdf`, produite par la chaîne Markdown → HTML → CSS de pagination → PDF | +| **Dépôt** | Devoir Teams, à côté du ZIP du dépôt Git, **et** dans le dépôt Git lui-même (`docs/livrables/EC02/`) | +| **Échéance** | Vendredi 25/09/2026, 9h00 (gel technique) | +| **Relevé** | **24/09/2026 à 14h25**, sur le commit gelé `9f343e9` (`dev` = `main`) et par l'API GitHub : dépôt, tracker, board, jalons, PR et revues relevés au même instant, heures en heure locale (CEST) | + +Chaque chiffre de ce rapport est reproductible par une commande citée en fin de document : le +critère officiel est un compte rendu d'activité « complet et **honnête** ». Les chiffres du +rapport du 23/09 (board du 18/09, tracker du 21/09) sont remplacés, pas complétés. + +--- + +## 1. Organisation de l'équipe + +Le pilotage passe par un **GitHub Project** (« EnerVision », projet n°2), avec assignation +nominative, et par le dépôt `ProjetPiscine_EnerVision`, branche d'intégration `dev`, branche de +production `main`. + +### Activité par membre + +| Membre | Compte GitHub | Commits sur `dev`, hors merges | PR mergées, auteur principal | PR mergées par lui | Board : Done / En cours / Todo | Domaines observés dans ses PR | +|---|---|---|---|---|---|---| +| Johan LEROY (Tech Lead) | `JohanLeroy` | 172 | 34 | 59 | 36 / 0 / 0 | Socle backend (auth, RBAC, audit, contrat OpenAPI), moteur de règles, vues frontend, reverse proxy et certificats, déploiement continu et trois environnements, Terraform, CI unifiée, e2e et charge, supervision, Garage et rétention, tests d'intégration, dérive, documentation | +| Dorian PESCE | `phyri0s` | 42 | 11 | 11 | 16 / 0 / 0 | Terraform k3s, endpoints, pipeline LightGBM, scoring, alertes internes, DAGs ML, DAST, en-tête CORP, réconciliation des sources | +| Inès ZANG | `ineszang` | 54 | 4 | 5 | 5 / 2 / 0 | Terraform initial, pipeline CI, SonarCloud, administration du dépôt, procédures de déploiement | +| Meryem EL GHAM | `Meryemel-gham` | 23 | 6 | 2 | 7 / 2 / 0 | Schéma de données, imports historique et API Mock, DAGs d'import | +| Valentin DE FARIA RODRIGUES | `ValentinDeFaria` | 20 | 8 | 4 | 12 / 0 / 0 | Frontend et ses tests, auth frontend, audit de dépendances, supervision des capteurs, registre MLflow, amorce Garage | +| Dependabot | - | 12 | 12 | - | - | Mises à jour de dépendances | +| *(remontées `dev` → `main`)* | - | - | 6 | - | - | - | +| *(non assigné)* | - | - | - | - | 1 / 0 / 1 | - | + +Totaux : **323 commits** hors merges sur `dev` (458 avec merges), **81 PR mergées**, 69 éléments +au board. Méthode : l'**auteur principal** d'une PR est l'auteur majoritaire des commits de sa +branche. Deux PR ouvertes par Valentin reviennent ainsi à Johan : #73 et #164 (5 commits sur 6, +sur une amorce de Valentin). Les six remontées de `dev` vers `main` ne sont attribuées à +personne. Le nombre de commits mesure une activité, pas une valeur : les pratiques de découpage +diffèrent d'un membre à l'autre. + +**Correspondances nom / identifiant.** Établies par Git : `Dorian`, `Dorian PESCE` et +`Phyrios` sont le compte `phyri0s` ; `ineszang` et `ineszang44` partagent la même adresse, +`Valentin` et `valentin` aussi. + +**Rôles principaux** (Tech Lead, Cloud/DevOps, Data & IA, Fullstack Dev, PO). Seul celui de +Tech Lead a été nommé au départ ; les autres se lisent dans les PR de chacun : + +| Membre | Rôle principal exercé | +|---|---| +| Johan LEROY | **Tech Lead** : architecture, intégration, relecture, sécurité, déploiement | +| Dorian PESCE | **Data & IA** : modèle LightGBM, DAGs ML, scoring ; premier relecteur de l'équipe | +| Inès ZANG | **Cloud / DevOps** : Terraform initial, pipeline CI, SonarCloud, administration du dépôt | +| Meryem EL GHAM | **Data** : schéma de données, imports historique et API Mock, DAGs d'import | +| Valentin DE FARIA RODRIGUES | **Fullstack Dev** : frontend et ses tests, supervision des capteurs, registre MLflow | + +Le rôle de **PO** n'a pas eu de titulaire nommé : les arbitrages de périmètre ont été pris aux +points d'avancement, dont la coupe du 21/09. Le formateur demandait une **rotation** des rôles +sur les deux semaines : elle n'a pas eu lieu. Chacun est resté sur son domaine d'origine, ce qui a +favorisé la vitesse au détriment de la polyvalence. + +### RACI + +Reconstitué depuis l'historique des PR mergées, chaque PR étant rattachée aux chantiers dont elle +touche les fichiers : *Responsible* = qui écrit, *Accountable* = qui valide le merge, +*Consulted* = qui relit (revue ou commentaire), *Informed* = toute l'équipe, par le board et les +points d'avancement. + +| Chantier | Responsible | Accountable | Consulted | Informed | +|---|---|---|---|---| +| Backend / API | `JohanLeroy`, `phyri0s`, `Meryemel-gham` | `JohanLeroy` | `phyri0s` | équipe | +| Frontend | `JohanLeroy`, `ValentinDeFaria`, `ineszang` | `JohanLeroy` | `phyri0s` | équipe | +| Data & ML | `phyri0s`, `Meryemel-gham`, `JohanLeroy`, `ValentinDeFaria` (registre) | `JohanLeroy` | `phyri0s`, `JohanLeroy` | équipe | +| Infra / CI-CD | `JohanLeroy`, `ineszang`, `phyri0s`, `ValentinDeFaria` | `JohanLeroy` | `phyri0s` | équipe | +| Sécurité | `JohanLeroy`, `phyri0s` (DAST) | `JohanLeroy` | `phyri0s` | équipe | + +Lecture : le Tech Lead valide l'intégration de tous les chantiers, et `phyri0s` en est le premier +relecteur. Le RACI n'a pas été posé en amont : il se lit a posteriori dans les merges et les revues. + +--- + +## 2. Méthodologie, backlog, user stories + +Constat factuel tiré du GitHub Project, du tracker d'issues et du dépôt : + +- **Méthodologie** : **Kanban à jalons**, pratiqué sans avoir été nommé en amont. Le board a + **3 colonnes** (`Todo` / `In progress` / `Done`), découpé en **2 itérations** (« Première + semaine », « Seconde semaine ») et **6 jalons datés**. +- **Priorisation MoSCoW** appliquée à chaque ticket, et **respectée dans les faits** : au + 24/09, **56 `Must` faits sur 56**, 5 `Should` sur 5, 4 `Could` sur 6. Au 18/09, 66 % des + `Must` étaient faits contre 0 % des `Should` et des `Could` : aucun ticket de confort n'a été + pris avant un ticket essentiel. +- **Estimation en taille de tee-shirt** : 48 S, 13 M, 5 XS, 3 sans taille. +- **Traçabilité ticket → PR → commit** : chaque ticket livré porte ses PR liées. +- **Revue de code avant merge.** `JohanLeroy` a relu par écrit **23 PR d'autres membres** : + 15 revues formelles (8 `APPROVED`, 5 `COMMENTED`, 2 `CHANGES_REQUESTED`) et 8 revues publiées + en commentaire. `phyri0s` a posé 17 approbations formelles, `ValentinDeFaria` 2. Au total, + **55 des 62 PR de fonctionnalité (89 %)** ont été relues par un autre membre avant merge, par + revue formelle ou commentaire ; les remontées de `dev` vers `main` ne portent que des PR déjà + relues. +- **Intégration.** **81 PR mergées** : 62 vers `dev`, 19 vers `main` (6 remontées, 1 réglage + Sonar, 12 Dependabot). `JohanLeroy` en a mergé 59, dont 42 vers `dev` ; parmi elles, 13 PR + écrites par d'autres membres et 12 PR Dependabot. +- **Décisions écrites.** **20 ADR** : 17 rédigés par `JohanLeroy` (0001 à 0004, 0006 à 0010, + 0013 à 0020), 1 par `phyri0s` (0005, LightGBM), et 2 procédures de déploiement versées par + `ineszang` (0011, 0012), qui relèvent davantage de la note d'exécution que de l'ADR. +- **Points d'avancement** les 15, 17, 18 et 21/09, chacun terminé par une décision ; ceux du 15 + et du 18/09 sont versionnés dans `docs/dailies/`. Le compte rendu du 18/09 a été rédigé après + coup, le 21/09. +- **Étiquettes par domaine** sur les issues (`feature`, `backend`, `frontend`, `ml`, `infra`, + `ci/cd`, `test`, `securite`, `pipeline ETL`, `accessibility`). +- **User stories formalisées** (« en tant que... je veux... afin de... ») : non retrouvées + telles quelles, le besoin fonctionnel est porté par le corps des issues. + +--- + +## 3. Planning, jalons, gestion des risques + +### Jalons internes du projet + +À ne pas confondre avec la numérotation J1 à J10 du calendrier de formation : ce sont deux +échelles différentes. + +| Jalon projet | Échéance (API) | Fermées / total au 24/09 | État | +|---|---|---|---| +| J1 · Environnement et dépôt | 14/09 | 5/5 | clos le 15/09 | +| J2 · Périmètre et choix technologiques | 15/09 | 4/4 | clos le 16/09 | +| J3 · Ingestion et backend | 21/09 | 22/22 | tout fermé, jalon laissé ouvert | +| J4 · Architecture, sécurité, frontend | 22/09 | 24/24 | tout fermé, jalon laissé ouvert | +| J5 · Robustesse et livrables | 23/09 | 5/6 | reste #154 (déclaration IA et RGPD, portée par ce rapport) | +| J6 · Amélioration possible | 28/09 | 7/9 | créé le 21/09 pour le périmètre coupé (§5) ; restent #11 et #54 | + +Le point d'avancement du 21/09 donnait le 18/09 et le 21/09 pour J3 et J4 ; l'API donne +aujourd'hui le 21/09 et le 22/09. L'API ne garde pas l'historique des échéances : l'écart est +signalé, pas expliqué. + +### Calendrier institutionnel + +| Jalon | Contenu | Date | +|---|---|---| +| J1 | Rendu EC01, dossier de conception individuel | fait, 14/09 | +| J9 | Oral EC01, 15 min + ~10 min de questions | jeudi 24/09 | +| J10 | Gel technique 9h00, rendu EC02 à EC06, oral EC02 (15 min + ~5 min de vidéo + ~5 min de questions) | vendredi 25/09 | + +### Risques identifiés et leur traitement + +| Risque | Impact | Statut au 24/09 | +|---|---|---| +| **`main` en retard sur `dev`** | `main` est la branche par défaut et celle de la production | **Traité.** Six remontées (#125, #152, #160, #161, #163, #165) ; au gel, `main` et `dev` portent le même commit. Sept déploiements de production réussis, le dernier sur le commit gelé | +| Tickets sans assigné (17 au 21/09) | Aucun responsable identifié | **Traité par arbitrage** : coupe du 21/09 (§5), puis assignation. Restent 2 issues ouvertes sans assigné, #55 et #154 | +| Jalon J5 sans assigné (#41, #45, #46, #47) | Preuves attendues pour EC03 et EC04 | **Traité** : les quatre livrés et assignés, DAST (#140), tests d'intégration (#147), e2e Playwright et charge k6 (#148) | +| Aucun scan de code dans le pipeline | Note DevSecOps EC03 / EC04 | **Traité** : SAST Bandit bloquant (#121), DAST OWASP ZAP (#140). **Restent hors CI** : Trivy et gitleaks, joués à la main pour le rapport EC04 | +| Aucun déploiement | Attendu explicite d'EC03 et EC04 | **Traité et constaté** : trois environnements sur la machine du groupe (production sur `main`, recette sur `dev`, dev à la demande), certificats Let's Encrypt, runner auto-hébergé (ADR 0009, 0017, 0018) | +| Montée de version majeure d'Airflow par Dependabot (#135) | Provisionnement et déploiement cassés | **Traité le jour même** (#143) | +| Trois PR immobilisées par un quality gate mal configuré | Blocage de la chaîne de merge | **Traité le 18/09**, en configuration et non par contournement | +| Mémoire de la machine (8 Go) insuffisante pour trois stacks | Arrêts par manque de mémoire | **Traité** : portée à 32 Go sur demande à l'école (ADR 0017) | +| Chiffrement au repos (#42) | Données en clair sur le disque | **Partiel, découvert le 24/09** : la machine est un conteneur LXC où LUKS est impossible ; seules les archives sont chiffrées (SSE-C, ADR 0020), demande adressée à l'école | +| Production sans approbation humaine, branches non protégées | Un push non relu part en production | **Ouvert** : annoncés par l'ADR 0009, laissés à poser par l'ADR 0014, jamais activés ; seule l'administratrice du dépôt peut le faire | +| Services hors dépôt sur la machine : k3s et trois serveurs Vault, installés depuis une branche de travail non fusionnée | Surface exposée que le code livré ne documente pas : l'API k3s et les trois Vault écoutent sur toutes les interfaces, k3s redémarre en boucle depuis le 17/09 | **Découvert le 24/09**, à arbitrer par l'administratrice : le code livré n'en dépend pas (rapport EC04, constat 1) | + +--- + +## 4. Compte rendu d'activité honnête + +### Indicateurs, depuis la baseline + +**Baseline : 57 issues créées le 14/09**, jour 1. Série quotidienne relevée par l'API : + +| Jour | Issues créées | Périmètre | Fermées | Cumul fermées | Ouvertes | PR mergées | Cumul PR | +|---|---|---|---|---|---|---|---| +| 14/09 | 57 | 57 | 5 | 5 | 52 | 3 | 3 | +| 15/09 | 1 | 58 | 10 | 15 | 43 | 7 | 10 | +| 16/09 | 1 | 59 | 8 | 23 | 36 | 10 | 20 | +| 17/09 | 6 | 65 | 10 | 33 | 32 | 9 | 29 | +| 18/09 | 2 | 67 | 6 | 39 | 28 | 9 | 38 | +| 21/09 | 5 | 72 | 16 | 55 | 17 | 11 | 49 | +| 22/09 | 1 | 73 | 2 | 57 | 16 | 18 | 67 | +| 23/09 | 3 | 76 | 11 | 68 | 8 | 12 | 79 | +| 24/09 | 0 | 76 | 4 | 72 | 4 | 2 | 81 | + +| Indicateur | 16/09 | 18/09 | 24/09 | +|---|---|---|---| +| Board : Done / In progress / Todo | 19 / 6 / 26 | 33 / 6 / 21 (16h) | **66 / 2 / 1** | +| `Must` faits | 45 % | 66 % | **100 %** (56/56) | +| `Should` et `Could` faits | 0 % | 0 % | 100 % et 67 % | +| Issues fermées / périmètre | 23 / 59 | 39 / 67 | **72 / 76** | + +**Deux lectures à défendre.** La priorisation est tenue dans les faits : le premier `Should` +n'a été fermé que le 23/09 à 11h10, quand 54 des 56 `Must` l'étaient déjà. Et le périmètre a dérivé de +57 à 76 issues (+33 %), dont 19 créées en cours de route : la dérive a été absorbée par la coupe +du 21/09 (§5) plutôt que laissée ouverte. Le 22/09 illustre la limite du comptage : 2 issues +fermées, mais 18 PR mergées, le déploiement continu et Terraform, les plus lourdes du projet. + +### Livré depuis le 18/09 à 16h00 + +| PR | Mergée le | Auteur principal | Contenu | +|---|---|---|---| +| #113, #118 | 18 et 21/09 | `phyri0s` | Détection des alertes internes ; entraînement et scoring LightGBM orchestrés par deux DAGs | +| #114, #124 | 21/09 | `JohanLeroy` | Moteur de règles de recommandation (ADR 0006) ; DAG d'alertes et de recommandations (ADR 0008) | +| #112, #138, #146 | 21 et 22/09 | `Meryemel-gham` | Import depuis l'API Mock borné ; import historique, puis import horaire, orchestrés par Airflow | +| #107, #123 | 21 et 22/09 | `ValentinDeFaria` | Supervision des capteurs par site ; enregistrement du modèle dans le registre MLflow | +| #117, #121 | 21/09 | `JohanLeroy` | Reverse proxy Nginx et TLS (ADR 0007) ; SAST Bandit et vue CI/CD | +| #136, #137 | 21/09 | `JohanLeroy` | Flux d'alertes du tableau de bord ; vue recommandations | +| #139, #143, #144 | 22/09 | `JohanLeroy` | Déploiement continu, runner auto-hébergé (ADR 0009) ; réalignement Airflow 3 ; Terraform provisionne la machine (ADR 0010) | +| #140 | 22/09 | `phyri0s` | Scan dynamique OWASP ZAP de l'API | +| #147 | 22/09 | `JohanLeroy` | Tests d'intégration API, base et ML ; surveillance de dérive (ADR 0013) | +| #148 | 23/09 | `JohanLeroy` | CI unifiée (ADR 0014), e2e Playwright et charge k6 (ADR 0015), supervision Prometheus, Alertmanager, Grafana (ADR 0016) | +| #149 | 23/09 | `phyri0s` | En-tête `Cross-Origin-Resource-Policy` sur toutes les réponses | +| #151 | 23/09 | `JohanLeroy` | Troisième environnement, `dev`, déployé à la demande (ADR 0017) | +| #156, #159 | 23/09 | `JohanLeroy` | Noms publics, certificats Let's Encrypt par DNS-01, frontal SNI (ADR 0018) | +| #162 | 23/09 | `phyri0s` | Réconciliation des deux sources de relevés | +| #164 | 24/09 | `JohanLeroy` | Garage par environnement, rétention exportée des relevés, chiffrement des archives (ADR 0019, 0020) | +| 6 remontées, #142, 12 Dependabot | 21 au 24/09 | - | Mises en production, analyse Sonar sautée sur les PR Dependabot, mises à jour de dépendances | + +### Ce qui n'a pas été livré, et pourquoi + +- **#11 Responsive et #54 comparateur de scénarios** : `Could`, en cours au gel, jalon J6. + Démonstration sur poste, sans usage mobile dans le scénario du client pilote. +- **#55 Bouton de pic fictif** : ni assigné, ni au board, rien dans le code. +- **#43 Accessibilité** : fermée en doublon le 23/09, au motif qu'elle serait couverte par les + tests Playwright ; **aucun test d'accessibilité n'existe**. La fermeture est à corriger dans + l'outil, pas à défendre. +- **#42 Chiffrement au repos** : fermée comme faite, livrée **en partie** (archives seulement), + pour une raison d'infrastructure découverte le 24/09 (§3). +- **Loki, Trivy et gitleaks en CI, approbation de la production** : prévus ou annoncés, non + faits. +- **Rotation des rôles** : elle n'a pas eu lieu (§1). + +Lecture honnête : tout ticket assigné à quelqu'un a été mené au bout ou reste en cours au gel. +Le retard du 21/09 n'était pas un problème d'exécution individuelle mais de **répartition** : il +a été traité par la coupe et l'assignation, puis rattrapé. Les faiblesses restantes sont de +rigueur de processus, pas de livraison : fermetures d'issues trop généreuses (#42, #43) et +réglages de protection jamais activés. + + +--- + +## 5. Périmètre coupé + +**Un périmètre coupé et argumenté est un acte de management ; une issue laissée ouverte sans +rien est un trou.** La coupe a été faite le 21/09, jour de l'échéance du J4, et tracée dans +l'outil : un jalon **J6 « Amélioration possible »**, échéance 28/09, donc après le gel. Elle a +servi à ordonner, pas à renoncer : une fois les `Must` faits, une partie du J6 a été livrée +avant le gel. + +| Issue | Sujet | Raison de la coupe au 21/09 | Au gel | +|---|---|---|---| +| #11 | Responsive | Démonstration sur poste, aucun usage mobile | en cours, non livré | +| #24 | MinIO, couche bronze | La charge brute est déjà en base (`raw_data`) | **livré autrement** : Garage, jugé plus léger (ADR 0019) | +| #26 | Monitoring Prometheus et Grafana | Classé bonus par le sujet | **livré** (#148, ADR 0016) | +| #36 | Rétention des données | Jeu de démonstration borné | **livré** : export vers Garage puis suppression (#164) | +| #42 | Chiffrement au repos | Données synthétiques, priorité au chiffrement en transit | **partiel** : archives chiffrées, base en clair (ADR 0020) | +| #43 | Accessibilité | Hors des critères de notation technique | fermée en doublon, **non livrée** | +| #54 | Comparateur de scénarios | Confort (`Could`) | en cours, non livré | + +Les tests e2e (#46) et de charge (#47), dont la coupe était proposée le 21/09, ont finalement +été livrés (#148). Deux sacrifices restent assumés : **Big Data**, hors de portée dans le temps +imparti, et **RPA avancé**, au-delà de l'orchestration Airflow. + +--- + +## 6. Écarts entre conception (EC01) et réalisation + +Le guide d'évaluation le dit : **les écarts entre conception et réalisation font partie du +compte rendu d'activité**. Chaque écart ci-dessous porte sa trace. + +| # | Choix du dossier EC01 (14/09) | Réalisé au gel | Verdict | +|---|---|---|---| +| 1 | FastAPI / Python pour l'API | FastAPI, contrat OpenAPI versionné et testé | ✅ Tenu | +| 2 | PostgreSQL 17 + TimescaleDB | Identique, relevés en hypertable (ADR 0001) | ✅ Tenu | +| 3 | JWT + Argon2id, RBAC à 3 rôles | Identique, plus rotation du jeton de rafraîchissement (ADR 0002, 0003) | ✅ Tenu | +| 4 | Une valeur nulle n'est jamais effacée | Qualité de donnée et imputation tracées, gravées par une contrainte `CHECK` | ✅ Tenu | +| 5 | Contrats d'interface figés | Contrat OpenAPI testé, table `prediction` comme frontière ML | ✅ Tenu | +| 6 | Docker Compose plutôt que Kubernetes | Compose, un projet par environnement (ADR 0009, 0017) | ✅ Tenu | +| 7 | On-premise plutôt que cloud public | Machine de l'école, aucune ressource cloud | ✅ Tenu | +| 8 | Traefik en terminaison TLS | Nginx par stack (ADR 0007) et frontal SNI (ADR 0018) | 🔁 Substitué | +| 9 | Prophet + IsolationForest | LightGBM, un modèle global (ADR 0005), alertes internes par règles, dérive surveillée (ADR 0013) | 🔁 Substitué | +| 10 | APScheduler pour l'ETL | Airflow, 7 DAGs : imports, entraînement, scoring, alertes, dérive, rétention | 🔁 Substitué | +| 11 | MinIO, couche bronze | Garage par environnement (ADR 0019) | 🔁 Substitué | +| 12 | Ansible, durcissement et déploiement | Terraform et script rejouable (ADR 0010) ; durcissement non automatisé | ⚠️ Partiel | +| 13 | SOPS + age pour les secrets | Secrets générés sur la machine, hors de Git | ❌ Non fait | +| 14 | Trivy, Bandit, gitleaks en CI | Bandit (#121) et un DAST ZAP non prévu (#140) ; Trivy et gitleaks hors CI | ⚠️ Partiel | +| 15 | Prometheus, Grafana, Loki | Prometheus, Alertmanager, Grafana actifs en production (ADR 0016) ; pas de Loki | ⚠️ Partiel | +| 16 | Runner auto-hébergé, déploiement automatique | `deploy.yml` sur runner auto-hébergé, sept déploiements de production | ✅ Tenu | +| 17 | Deux réseaux Docker, données jamais exposées | Un seul composant exposé, le frontal ; tout le reste sur la boucle locale | 🔁 Intention tenue, autre moyen | + +**Décompte sur les 17 choix du dossier : 8 tenus, 5 substitués, 3 partiels, 1 non fait.** Au +23/09, il était de 8 tenus, 4 substitués, 3 partiels et 2 non faits : MinIO est passé de « non +fait » à « substitué » par Garage. + +**Hors de cette liste**, le dashboard était prévu en React / Vite ; il est en **Angular 22** +depuis son initialisation le 14/09 (commit `49f4697`, PR #52). Sans effet sur le reste de +l'architecture, puisque le frontend ne connaît que le contrat d'API. Motif : choix de Valentin, développeur +full stack de l'équipe, qui maîtrisait Angular ; aucune objection dans le cadre du projet. + +--- + +## 7. Usage de l'intelligence artificielle + +Déclaration exigée par le formateur : outils utilisés, tâches réalisées, valeur ajoutée, +limites constatées, vérifications humaines. + +### Déclaration de Johan LEROY (Tech Lead) + +| | | +|---|---| +| **Outil** | Claude Code (Anthropic), en assistant de développement dans le terminal et l'IDE | +| **Tâches** | Aide à la rédaction de code backend, d'infrastructure et de tests, relecture de PR en amont de la revue humaine, rédaction et mise à jour de la documentation d'architecture et des ADR, analyse d'écarts entre le dépôt et les attendus, relevés chiffrés de ce rapport | +| **Valeur ajoutée** | Vitesse sur le travail répétitif (gabarits de tests, migrations, documentation), et surtout **recoupement systématique** : détection d'incohérences entre documentation et code qu'une relecture humaine laisse passer | +| **Limites constatées** | Des **chiffres plausibles mais faux** quand ils ne sont pas recalculés ; des **références à des fichiers inexistants** ; une tendance à **présenter comme acquis** ce qui n'est que prévu (l'approbation de la production, annoncée par deux ADR, n'a jamais été activée) ; des **horodatages en UTC recopiés comme heure locale** | +| **Vérifications humaines** | Tout code généré passe par la CI (lint, typage, tests, couverture, SAST) et par une revue de PR. Tout chiffre publié est réobtenu par une commande (`gh`, `git log`) au moment de la rédaction. Les décisions d'architecture restent prises et signées en ADR par un humain | + +### Déclarations des autres membres + +Non transmises au moment du gel. Le gabarit reste celui de la déclaration ci-dessus : outil, +tâches, valeur ajoutée, limites, vérifications. + +--- + +## 8. Licences logicielles + +**Licence du dépôt** : aucun fichier `LICENSE` au gel. Faute de licence explicite, le code reste +sous le régime par défaut : tous droits réservés à ses auteurs, aucune réutilisation accordée. + +**Dépendances, relevées le 24/09** par `pip-licenses` (verrous figés, sans dépendances de dev) +et `license-checker --production` : + +| Périmètre | Résultat | +|---|---| +| Backend, ML, Airflow (Python) | MIT, BSD, Apache 2.0 et PSF pour l'essentiel. **Aucune GPL ni AGPL embarquée.** À noter : `psycopg` (ML) sous LGPL 3.0, utilisé comme bibliothèque, sans obligation sur le code appelant ; `certifi` et `pathspec` sous MPL 2.0, copyleft limité au fichier, non modifiés ; `text-unidecode` (Airflow) sous double licence Artistic ou GPL, retenue sous Artistic | +| Frontend, dépendances de production | 12 paquets : 10 MIT, 1 Apache 2.0, 1 0BSD | + +**Composants exécutés à côté du produit**, chacun dans son conteneur, sans modification : + +| Composant | Rôle | Licence | +|---|---|---| +| Nginx | Reverse proxy, frontal SNI | BSD 2-Clause | +| PostgreSQL · TimescaleDB | Base, séries temporelles | PostgreSQL License · Apache 2.0 pour le cœur, Timescale License pour certaines fonctions de l'image utilisée | +| Apache Airflow, MLflow | Orchestration, registre de modèles | Apache 2.0 | +| Prometheus, Alertmanager, exporteurs, cAdvisor | Supervision | Apache 2.0 | +| **Grafana, Garage, k6** | Tableaux de bord, stockage objet, tirs de charge en CI | **AGPL 3.0** | +| acme.sh | Certificats Let's Encrypt | GPL 3.0 | +| Mailpit | Courriel de développement et d'alerte | MIT | +| Terraform | Infrastructure as code | **BUSL 1.1** : usage interne autorisé, redistribution concurrente interdite | + +Les composants AGPL et GPL tournent sans modification, dans des conteneurs séparés : ils +n'imposent rien au code du produit. Point de cohérence : l'ADR 0019 écarte MinIO en citant +notamment sa licence AGPL, que Garage partage ; les autres raisons de l'ADR restent. + +--- + +## 9. Anonymisation et conformité RGPD + +- **Les données du projet sont synthétiques.** Les séries de consommation proviennent des CSV + fournis par l'organisme de formation et de l'API Mock simulée. Aucune donnée de consommation + réelle d'un client identifiable n'est présente dans le dépôt. +- **Les sites sont désignés par identifiants** (`SITE001` à `SITE007`), sans raison sociale ni + adresse. +- **Les comptes applicatifs** de test utilisent des adresses de domaine fictif et des mots de + passe de test. Le compte du scan DAST est un compte `lecteur` jetable. +- **Aucun secret dans le dépôt, vérifié** : scan gitleaks sur tout l'historique le 24/09, 342 + commits hors merges, 8 constats, tous faux positifs après tri ligne à ligne ; aucun `.env`, + clé, certificat ni state Terraform jamais commité (rapport EC04, preuve 05). C'est le ZIP + `.git` complet qui est remis au jury : le contrôle porte donc bien sur l'historique. +- **Adresse de la machine** : l'adresse privée de la machine du groupe apparaît dans des + documents d'exploitation de l'historique git. Adresse non routable, joignable depuis le seul + réseau de l'école ; elle est masquée dans l'arbre livré. +- **Journal d'audit** : les accès sont tracés en ajout seul (ADR 0004). Cette table contient des + identifiants d'utilisateurs applicatifs : sur un déploiement réel, elle relèverait d'une durée + de conservation définie. Elle n'est pas fixée à ce jour : à arrêter avant tout déploiement réel. +- **Dans ce rapport et les supports d'oral** : aucune URL, adresse IP, identifiant de connexion + ou coordonnée personnelle n'est reproduite. Les identifiants GitHub sont des pseudonymes + publics, conservés parce qu'ils sont la seule clé de traçabilité vérifiable. + +--- + +## Sources + +Relevé du 24/09/2026 à 14h25, commit `9f343e9` : + +- **Git** : `git rev-list --count origin/dev` et `--no-merges` · `git log origin/dev + --no-merges --format=%an | sort | uniq -c` (alias regroupés) · `git log --no-merges + ^1..^2` (auteur principal) · `git ls-tree --name-only origin/main docs/adr/` · + `git rev-list --count origin/main..origin/dev` +- **API GitHub** : `gh issue list --state all --limit 300 --json + number,state,assignees,milestone,createdAt,closedAt` · `gh project item-list 2 --owner + ineszang --format json` · `gh api repos/ineszang/ProjetPiscine_EnerVision/milestones?state=all` + · `gh pr list --state all --limit 300 --json number,author,mergedBy,mergedAt,baseRefName,reviews` + · `gh api .../deployments?environment=prod` +- **Licences** : `uv run --frozen --no-dev --with pip-licenses pip-licenses --from=mixed` dans + chaque projet Python · `npx license-checker@25 --production --summary` dans `apps/frontend` +- `CONSIGNES-PROJET.md`, documents officiels 01, 02 et 05, points d'avancement des 15, 17, 18 et + 21/09, rapport de sécurisation EC04 diff --git a/docs/livrables/EC02/EADL26_EC02 - Rapport Collectif HEADL_015B-G3.pdf b/docs/livrables/EC02/EADL26_EC02 - Rapport Collectif HEADL_015B-G3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ac38cdf54b66018e4dd8b30d918a83981937dd6c GIT binary patch literal 465585 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.`. Le dépôt, lui, a porté l'adresse privée de la machine +dans des documents d'exploitation : elle est masquée dans l'arbre livré, mais l'historique git la +conserve (section 3). + +--- + +## 1. Synthèse + +| Axe demandé | État | Ce qui le prouve | +|---|---|---| +| Scans IaC et code | **[Prouvé]** onze contrôles rejoués le 24/09 sur le commit gelé, **aucune vulnérabilité haute ou critique dans le code ni dans le produit livré** ; DAST : 0 échec sur 118 règles | Bandit, pip-audit, npm audit, Checkov, gitleaks, Trivy, `terraform validate`, `nginx -t`, OWASP ZAP | +| Gestion des secrets | **[Prouvé]** aucun secret dans l'historique git (342 commits hors merges, toutes branches) ; seize secrets générés sur la machine, jamais transmis | gitleaks, `git log` sur les fichiers sensibles, `scripts/provision-host.sh`, gardes de `config.py` | +| Règles réseau | **[Prouvé] [Constaté]** la plateforme n'expose que le frontal SNI, en 80 et 443, tout le reste sur la boucle locale ; **[Constaté]** la machine expose en plus SSH, k3s et trois Vault, hors code livré ; **[Absent]** pare-feu hôte | ports calculés par `docker compose config` et `provision-host.sh`, relevés par `ss` sur la machine | +| Authentification | **[Prouvé]** JWT court, rafraîchissement opaque avec rotation, Argon2id, RBAC à 3 rôles, **matrice d'accès testée** | 86 tests rejoués le 24/09, ADR 0002 et 0003 | +| Audits d'accès et d'infrastructure | **[Prouvé]** journal d'audit en ajout seul garanti par la base ; historique des déploiements ; supervision Prometheus active en production | ADR 0004 et 0016, state Terraform, API GitHub | + +**Sept constats à traiter**, aucun bloquant pour le produit livré, détaillés en section 2.2 : + +1. **La machine expose plus que la plateforme** : SSH en root avec mot de passe, l'API k3s et + trois serveurs Vault écoutent sur toutes les interfaces, sans pare-feu hôte. k3s et Vault ne + viennent pas du code livré (`12-constats-machine.txt`). +2. **Aucune approbation humaine avant la production**, contrairement à ce qu'annonce l'ADR 0009, + et **aucune branche protégée** (`13-github-reglages.txt`). +3. **Le chiffrement au repos est impossible sur cette machine** : c'est un conteneur LXC, où LUKS + ne peut pas fonctionner. La base est en clair sur le disque ; seules les archives sont + chiffrées (SSE-C, ADR 0020). +4. **Une vulnérabilité MEDIUM** (CVE-2026-41016) dans une dépendance transitive d'Airflow, que + **la CI ne peut pas voir** : son audit de dépendances ne porte que sur le verrou du backend. +5. **Le jeton de réinitialisation de mot de passe passe dans l'URL**, et le journal d'accès du + proxy l'enregistre en clair pendant ses quinze minutes de validité (`14-dast-zap.txt`). +6. **Du code non relu peut tourner sur la machine de production** : toute branche d'un membre, + par l'environnement `dev` (ADR 0017), et le workflow qu'apporterait une PR de fork, si son + exécution n'est pas soumise à approbation. +7. **Des fichiers sensibles dans l'arbre de travail du poste** (clé TLS locale, `.env`, state et + variables Terraform), ignorés par git mais **qui finiraient dans un ZIP fabriqué à partir du + dossier**. Le ZIP du rendu part donc d'un clone. + +--- + +## 2. Scans de sécurité + +### 2.1 Résultats + +Tous les contrôles ont été lancés le 24/09/2026 entre 14h45 et 15h00 sur `9f343e9`. Checkov, +Trivy config et `terraform validate` portent sur un export `git archive` du commit, pour +qu'aucun fichier ignoré du poste ne s'y mêle ; Trivy fs porte volontairement sur l'arbre de +travail, pour le constat 7. + +| # | Outil | Périmètre | Résultat | Preuve | +|---|---|---|---|---| +| 1 | **Bandit 1.9.4** (SAST Python) | `apps/backend/app`, `ml/enervision_ml`, `etl/airflow/dags` | **0 constat, tous niveaux**, sur 7 110 lignes (6 136 + 722 + 252) | `01` | +| 2 | **pip-audit** (verrou figé, sans dev) | backend 50 paquets, ML 94, Airflow 128 | backend **0**, ML **0**, Airflow **1 vulnérabilité** (PYSEC-2026-24) | `02` | +| 3 | **npm audit** (`--package-lock-only`) | frontend 511 dépendances, tests e2e 26 | **0, tous niveaux**, dans les deux verrous | `03` | +| 4 | **Checkov 3.3.19** (IaC) | Terraform, Dockerfiles, workflows GitHub, secrets | Terraform **0 ressource évaluable** · Dockerfile 268 réussis, **3 échecs** · workflows **596 réussis, 0 échec** · secrets 0 | `04` | +| 5 | **gitleaks** (secrets) | **tout l'historique**, toutes branches | 8 constats, **8 faux positifs** après tri ligne à ligne | `05` | +| 6 | **Trivy config** (IaC) | dépôt entier | **3 LOW** (HEALTHCHECK), Terraform propre | `06` | +| 7 | **Trivy fs** (dépendances et secrets) | arbre de travail du poste | la même CVE Airflow, et la clé TLS locale (fichier ignoré par git) | `07` | +| 8 | Tests d'accès du backend | matrice rôle × route, protection des routes, durcissement, JWT | **86 réussis**, 5 tests d'intégration désélectionnés (joués en CI) | `08` | +| 9 | `terraform fmt` et `validate` | les deux racines | **formatage conforme, deux configurations valides** | `09` | +| 10 | `nginx -t` et ports fusionnés | proxy de stack, frontal SNI, `docker-compose.prod.yml` | **deux configurations valides**, un seul composant exposé | `10` | +| 11 | State Terraform local | racine `vm-eni` | 3 ressources appliquées sur 4 déclarées | `11` | +| 13 | Réglages GitHub | environnements, branches, secrets, runs | voir constat 2 | `13` | +| 14 | **OWASP ZAP 2.17.0** (DAST) | l'API en fonctionnement, authentifiée | **0 échec, 0 avertissement, 118 règles passées**, 4 alertes informatives | `14` | + +**Ce que la CI rejoue**, sur chaque PR et chaque push vers `dev` ou `main`, filtré par chemins, +derrière le check unique « CI ok » (ADR 0014) : Bandit bloquant à partir de MEDIUM sur le backend +et le ML, `pip-audit` sur le verrou du backend, `npm audit --audit-level=high` sur le frontend, +`terraform fmt` et `validate`, actionlint et shellcheck sur les workflows, validation des +fichiers Compose, `nginx -t` du frontal, `promtool` et `amtool` sur la supervision, une fumée S3 +sur Garage avec chiffrement SSE-C, les parcours Playwright et deux tirs k6 (fumée et contrôle du +429 par le proxy), et une analyse SonarCloud. Dependabot suit sept entrées chaque semaine. Le +DAST tourne chaque lundi, à la demande, et sur les PR qui modifient son propre workflow. +**Ne sont pas en CI** : Checkov, Trivy, gitleaks, `pip-audit` sur les verrous ML et Airflow, +`npm audit` sur le verrou des tests e2e. Ils ont été joués pour ce rapport. + +### 2.2 Lecture des constats + +**1. La machine expose plus que la plateforme.** Relevé par `ss` le 24/09 : outre le frontal en +80 et 443, écoutent sur toutes les interfaces SSH (connexion root et mot de passe acceptés), +l'API **k3s** en 6443 et **trois serveurs Vault** 2.1.1 en 8200 à 8205, initialisés et +descellés. Aucun pare-feu ne filtre : la table nftables est vide, en politique `accept`. Ni k3s +ni Vault ne viennent du code livré : `git grep vault` ne trouve rien sur le commit gelé. Vault +est visé par le Terraform d'une branche de travail non fusionnée. k3s, installé +le 17/09, redémarre en boucle depuis (51 678 redémarrages) sans porter aucun pod. Correctif, sans +commit : arrêter k3s, restreindre Vault à la boucle locale ou l'arrêter, puis un pare-feu +n'ouvrant que 22, 80 et 443, et SSH par clé seule. C'est l'infrastructure de l'administratrice +du dépôt : la décision lui revient. + +**2. Production sans approbation, branches sans protection.** L'environnement GitHub `prod` n'a +qu'une règle : il n'accepte que la branche `main`. Aucun relecteur n'est requis : le dernier +déploiement est passé de l'attente à l'exécution en une seconde. `main` et `dev` ne sont pas protégées, aucun +ruleset n'existe : trois commits ont été poussés directement sur `dev` (`c2f360c`, `cbbfaf4`, +`6c09bee`), relus ensuite seulement par les PR de remontée #161 et #163. L'ADR 0009 annonçait une +production « après approbation » ; l'ADR 0014 en faisait un réglage restant à poser par +l'administratrice. Il ne l'a jamais été : les deux ADR portent désormais une note datée du +24/09. Correctif : deux réglages, que seule l'administratrice du dépôt peut activer. + +**3. Chiffrement au repos.** La commande `systemd-detect-virt` répond `lxc` : sans +device-mapper ni périphérique loop, LUKS est impossible. `scripts/coffre-luks.sh` le détecte et +refuse de démarrer (ADR 0020). La base TimescaleDB et les métadonnées de Garage sont donc en +clair sur le disque du conteneur. Ce qui est chiffré dès aujourd'hui : les archives exportées +vers Garage par le DAG `retention`, en SSE-C, avec une clé que Garage ne conserve pas. Le +chiffrement du disque relève de l'hôte Proxmox, donc de l'administrateur de l'école, à qui la +demande est adressée. + +**4. CVE-2026-41016, MEDIUM, `apache-airflow-providers-smtp` 2.3.2.** Le `SmtpHook` d'Airflow +négocie STARTTLS sans valider le certificat. Dépendance **transitive** d'`apache-airflow` 3.3.2. +**Exposition actuelle : nulle**, aucun DAG n'envoie de courriel et aucune connexion SMTP n'est +déclarée dans Airflow. Correctif : `providers-smtp` 3.0.0 ou plus. **Le vrai constat est +ailleurs** : la CI audite le verrou du backend et pas ceux du ML ni d'Airflow, qui portent 222 +paquets, et Dependabot ne suit en `uv` que le backend. La CVE était déjà relevée le 23/09 et elle +est toujours là : c'est exactement ce que produit un angle mort. + +**5. Jeton de réinitialisation dans l'URL** (ZAP 10024, informatif). `GET +/api/v1/auth/reset-password/validate?token=…` : le jeton est stocké haché, valable quinze +minutes, à usage unique, caviardé des journaux de l'API, et `Referrer-Policy: no-referrer` est +posé. Mais le journal d'accès du proxy enregistre la requête complète, donc le jeton en clair, +lisible par qui administre la machine pendant sa validité. Correctif : passer la validation en +`POST`, ou journaliser `$uri` sans ses paramètres sur cette route. + +**6. Du code non relu peut tourner sur la machine de production.** Le troisième environnement, +`dev`, se déploie par `workflow_dispatch` depuis n'importe quelle branche (ADR 0017). Il vit sur +la même machine et le même démon Docker que la production : tout membre qui a le droit +d'écriture peut y exécuter du code non relu. `deploy.yml` n'a jamais de déclencheur +`pull_request`, mais cela ne suffit pas, l'ADR 0014 le dit : une PR de fork peut apporter son +propre workflow qui cible le runner. La seule protection est alors l'approbation des workflows +des contributeurs externes, un réglage que l'API refuse de lire avec les droits d'un membre +(403) : non vérifié. Risque accepté pour une équipe de cinq, à fermer avant tout contributeur +extérieur. + +**7. Fichiers sensibles du poste.** Trivy fs trouve la clé du certificat auto-signé local, et le +poste porte aussi, ignorés : deux `.env`, le state et les variables Terraform, les journaux de +session. Tous sont ignorés par git et n'ont jamais été versionnés (`05`). **Conséquence +opérationnelle pour vendredi : le ZIP du dépôt, `.git` inclus, se fabrique à partir d'un clone**, +jamais en compressant le dossier de travail. + +**HEALTHCHECK absent** (Checkov CKV_DOCKER_2, Trivy DS-0026, LOW) sur les images frontend, +Airflow et ML. Le backend en porte un, et c'est lui que le proxy attend avant de démarrer ; la +base, l'API Airflow et Garage ont le leur dans `docker-compose.yml`. Reste le frontend, un nginx +statique qui tomberait sans être signalé. Impact faible. + +**Terraform : Checkov n'évalue aucune ressource.** Les six ressources du dépôt sont des +`null_resource` qui agissent par SSH, pour lesquelles Checkov n'a aucune politique. Ce scan ne +prouve rien, dans un sens comme dans l'autre. Les garanties réelles sont ailleurs : validation en +CI, clé SSH seule, jeton du runner en variable `sensitive` et hors des triggers (`11`, ADR 0010). + +**gitleaks : huit faux positifs.** Six viennent de la règle `generic-api-key` qui prend +`api_history` et `api_current`, deux valeurs de la colonne `source` des relevés, pour des clés. +Les deux nouveaux sont des valeurs de test : un identifiant S3 factice (`settings_s3()`) et le mot +de passe provisoire simulé d'un test Angular. + +--- + +## 3. Gestion des secrets + +| Mesure | Preuve | État | +|---|---|---| +| Aucun secret dans l'historique git, toutes branches ; aucun `.env`, `.pem`, `.key`, `.tfvars`, `.tfstate` ni jeton DNS jamais commité | `05` | [Prouvé] | +| `.env`, `*.pem`, `*.tfvars`, `*.tfstate` ignorés par git ; seuls les `*.example` sont versionnés ; `infra/garage/garage.toml`, versionné, ne porte aucun secret | `.gitignore`, `05` | [Prouvé] | +| **Seize secrets générés sur la machine** par `openssl rand` (base, API, jeton des métriques, cinq pour Airflow dont sa clé Fernet, six pour Garage dont la clé SSE-C, Grafana, rôle de supervision), `.env` écrit sous `umask 077` puis en `600`. Les secrets existants sont conservés ; le reste du fichier est réécrit à chaque passage pour réaligner hôte, ports et profils | `scripts/provision-host.sh` | [Prouvé] le script · [Constaté] les droits | +| Refus d'écrire le `.env` si une valeur d'exemple `change_me` subsiste, hors identifiants de l'API Mock posés à la main | `provision-host.sh`, fonction `preparer` | [Prouvé] | +| L'API **refuse de démarrer** si `APP_SECRET_KEY` fait moins de 32 caractères ou vaut une sentinelle, si `APP_DEBUG` est vrai hors local, ou si les origines CORS sont en joker ou absentes | `apps/backend/app/core/config.py` | [Prouvé] | +| Secrets typés `SecretStr`, clés S3 et SSE-C comprises, donc jamais journalisés ; jetons, mots de passe et cookies caviardés dans les journaux | `config.py`, `app/core/logging.py` | [Prouvé] | +| Compose exige par `${VAR:?}` les secrets de la base et de l'API ; ceux d'Airflow, de Garage et de la supervision sont gardés par `airflow-init` et par les gardes du `Makefile` avant tout démarrage | `docker-compose.yml`, `Makefile` | [Prouvé] | +| Clé de signature d'Airflow **distincte** de celle de l'API | `docker-compose.yml` | [Prouvé] | +| Côté GitHub, **un seul secret** (`SONAR_TOKEN`) ; le déploiement n'en consomme aucun | `13` | [Prouvé] | +| Terraform : clé SSH seule, jeton du runner en variable `sensitive`, absent des triggers | `11`, ADR 0010 | [Prouvé] | +| Jeton du scan DAST éphémère et caviardé des journaux publiés | `dast.yml`, `scripts/dast-token.sh` | [Prouvé] | + +**Ce qui manque.** Le dossier EC01 prévoyait **SOPS + age** : non fait. Les secrets vivent en +clair sur le disque de la machine, protégés par les droits du fichier seulement, et la rotation +est manuelle. Le 23/09, ce rapport jugeait la situation acceptable pour deux environnements, +mais plus pour trois : **le seuil est franchi**, avec trois `.env`, un jeton DNS et une clé SSE-C dont +la perte rendrait les archives illisibles. L'ADR 0019 demande de sauvegarder cette clé hors de la +machine : c'est une procédure, rien ne le vérifie. Enfin, l'adresse privée de la machine figure +dans l'historique git (ADR d'exploitation du 21 et du 22/09) : adresse non routable, joignable +seulement depuis le réseau de l'école, masquée dans l'arbre livré. + +--- + +## 4. Règles réseau + +### 4.1 Surface exposée + +Sur la machine, `provision-host.sh` ramène tous les ports des trois stacks sur la boucle locale +(`10`) : + +| Composant | Publication sur la machine | Joignable depuis | +|---|---|---| +| **Frontal SNI** (`infra/front`, nginx `stream`) | réseau de l'hôte, **80 et 443** | le réseau | +| Proxy Nginx de chaque stack | `127.0.0.1` : 10443, 8443, 9443 (HTTPS) et l'écouteur PROXY protocol du frontal | la machine seule | +| Base, Mailpit, API Airflow | `127.0.0.1`, un port par environnement | la machine, donc par tunnel SSH | +| Garage (S3 et administration) | `127.0.0.1`, un port par environnement ; pas encore en `dev`, resté sur le commit du 23/09 | la machine seule | +| Prometheus, Alertmanager, Grafana (production) | `127.0.0.1` | la machine seule | +| Backend, frontend, scheduler et processeur Airflow, exporteurs | aucune | le réseau interne de Compose | +| *Hors plateforme* : SSH, API k3s, trois Vault | toutes les interfaces : 22, 6443, 8200 à 8205 | **le réseau** (constat 1) | + +**Un seul composant exposé par la plateforme.** Le frontal lit le nom demandé (SNI) sans +déchiffrer et relaie la connexion, en PROXY protocol, vers le proxy de la stack visée : l'adresse +réelle du client arrive jusqu'à la limitation de débit. Les trois environnements sont trois +projets Compose distincts, sans réseau ni volume partagé (ADR 0009, 0017, 0018). Sur la +machine, `ss` confirme les ports de la plateforme, mais relève aussi les services hors plateforme +du constat 1. [Constaté, `12`] + +### 4.2 Reverse proxy et TLS + +| Directive | Valeur | Effet | +|---|---|---| +| Certificats | **Let's Encrypt par défi DNS-01** (acme.sh, domaine dynv6), vérifiés chaque nuit par une tâche cron et renouvelés à échéance ; l'auto-signé ne sert plus qu'au poste et aux tests e2e | chaîne de confiance publique, sans port 80 ouvert pour le défi (ADR 0018) | +| Protocoles | TLS 1.2 et 1.3, tickets de session désactivés | pas de protocole obsolète | +| Redirection | 80 vers 443 | pas de trafic applicatif en clair | +| `Strict-Transport-Security` | `max-age=31536000; includeSubDomains` | le navigateur refuse ensuite le HTTP | +| `Content-Security-Policy` | `default-src 'self'`, `frame-ancestors 'none'`... | limite l'injection de script et le clickjacking | +| En-têtes de l'API | `nosniff`, `X-Frame-Options: DENY`, `Referrer-Policy: no-referrer`, `Cross-Origin-Resource-Policy: same-origin` | défense en profondeur si le proxy manquait | +| Limitation de débit | `api` 20 req/s, `auth` 30 req/min sur les routes qui vérifient un secret ; contrôlée par un tir k6 en CI | freine la force brute sans pénaliser la navigation derrière le NAT de l'école | +| `server_tokens off`, corps limité à 2 Mo | | pas de version publiée, pas de requête démesurée | + +Les deux configurations sont validées par `nginx -t` sur l'image de production (`10`). +Certificats servis : Let's Encrypt (émetteur YE1) sur les trois noms, échéance au 22/12/2026, et +les trois sondes de santé répondent 200 par le nom public avec un certificat vérifié, sans `-k`. +[Constaté, `12`] + +### 4.3 Accès à la machine et déploiement + +- Le **runner GitHub Actions** auto-hébergé initie lui-même la connexion vers GitHub : **aucun + port entrant** n'est ouvert pour déployer. [Prouvé] +- `deploy.yml` ne se déclenche **jamais sur `pull_request`** : sur un dépôt public, une PR venue + d'un fork exécuterait sinon son code sur la machine. Il n'est appelé qu'après une CI verte sur + un push, et refuse de revenir à un commit plus ancien que celui déployé. [Prouvé] +- La production n'accepte que `main`, **sans approbation humaine** (constat 2). [Prouvé, `13`] +- Terraform se connecte par **clé SSH**, jamais par mot de passe. [Prouvé] + +**Ce qui manque.** **Aucun pare-feu hôte** n'est configuré ni documenté : la restriction repose +sur la publication des ports et sur le réseau de l'école ; la table nftables est vide, en +politique `accept` [Constaté, `12`]. **SSH n'est pas durci** : connexion root et authentification +par mot de passe acceptées [Constaté, `12`] ; Ansible était prévu au dossier EC01 et n'a pas été +fait. Pas de +réseaux Docker nommés : l'intention du dossier EC01 (la base jamais exposée) est tenue par +l'absence de publication, plus fragile à la relecture qu'une politique explicite. Azure n'est pas +utilisé, par choix d'architecture on-premise : il n'y a ni NSG ni Application Gateway à auditer. + +--- + +## 5. Authentification et autorisation + +| Mécanisme | Détail | Trace | +|---|---|---| +| Jeton d'accès | JWT HS256, **15 minutes**, algorithme épinglé, `aud`, `iss` et `typ` vérifiés, `alg: none` rejeté, gardé en mémoire côté navigateur | ADR 0002, `app/core/security.py` | +| Jeton de rafraîchissement | chaîne **opaque de 256 bits**, stockée hachée, **rotation à chaque usage et détection de réutilisation** ; cookie `HttpOnly`, `Secure`, `SameSite=Strict`, chemin restreint | ADR 0002, `app/services/auth.py` | +| Mots de passe | **Argon2id** (m=19 456 Kio, t=2, p=1), re-hachage passif si les paramètres changent | `app/core/hashing.py` | +| Réinitialisation | jeton haché, 15 minutes, usage unique ; voir le constat 5 | `app/models/password_reset_token.py` | +| Force brute | limitation à fenêtre glissante sur trois clés, **évaluée avant le hachage** ; pas de verrouillage de compte, qui serait un déni de service | ADR 0002, `login_attempt` | +| Énumération de comptes | message et temps de réponse identiques quelle que soit la cause | `app/services/auth.py` | +| Autorisation | **RBAC à trois rôles ordonnés** (`lecteur`, `operateur`, `admin`), décision prise sur **la ligne en base relue à chaque requête**, jamais sur le claim | ADR 0003, `app/api/deps.py` | +| Révocation | immédiate : compte désactivé ou mot de passe changé invalide les jetons antérieurs | `credentials_changed_at` | +| Refus par défaut | **16 routes sous rôle**, 3 authentifiées sans rôle, 1 par cookie, 8 publiques listées nommément (dont `/metrics`, gardée par son propre jeton) ; un test appelle réellement chaque route sans jeton | `tests/api/acces.py`, `test_route_protection.py` | +| Matrice d'accès | chaque route gardée croisée avec les trois rôles, sur les routes réelles, puis rejouée avec de vrais jetons contre une vraie base en CI | `test_matrice_acces.py` | +| Garde-fous d'administration | refus de rétrograder ou désactiver le dernier administrateur ; premier administrateur créé hors dépôt | `app/services/user.py`, `app/cli.py` | + +**Preuve d'exécution** : 86 tests d'accès, de protection des routes, de durcissement et de JWT, +réussis le 24/09 (`08`) ; le DAST authentifié ne relève ni échec ni avertissement (`14`). + +**Ce qui reste ouvert, et c'est écrit dans le dépôt** (`owasp-traceabilite.md`) : **pas +d'autorisation par objet** (OWASP API1). Les rôles sont globaux, un compte `lecteur` lit tous les +sites. Sans conséquence tant que les routes métier sont en lecture seule ; à corriger par une table +d'affectation compte-site avant la première route d'écriture. + +--- + +## 6. Audits d'accès et d'infrastructure + +### 6.1 Traçabilité applicative + +- **Journal d'audit en ajout seul, garanti par PostgreSQL** : deux déclencheurs refusent + `UPDATE`, `DELETE` et `TRUNCATE` sur `audit_log`. Les champs de détail passent par une liste + blanche ; l'acteur est dénormalisé pour survivre à la suppression d'un compte (ADR 0004). + [Prouvé] par les tests d'intégration · en production, 5 créations de compte et 3 changements + de mot de passe [Constaté, `12`] +- **Tentatives de connexion** journalisées à part (`login_attempt`). [Prouvé] +- **Limite assumée** : les déclencheurs arrêtent l'accident, pas un compte qui détient + `ALTER TABLE`. Le journal n'est pas une preuve de non-répudiation. + +### 6.2 Traçabilité de l'infrastructure + +- **Provisionnement** : le state Terraform porte trois ressources appliquées (Docker, les trois + environnements, le runner). La quatrième, le coffre LUKS, n'a jamais été appliquée (`11`, + constat 3). +- **Déploiements** : chaque déploiement est un run de `deploy.yml` rattaché à un environnement + GitHub. Sept déploiements de production entre le 23/09 11h37 et le 24/09 11h12, le dernier sur + le commit gelé (`13`). [Prouvé] +- **Dépôt** : une seule administratrice, aucune branche protégée (constat 2). + +### 6.3 Supervision + +**[Prouvé]** dans le dépôt, active en production (profil Compose `monitoring`, ADR 0016) : +Prometheus lit `/metrics` avec son jeton, ainsi que la base, l'hôte, les conteneurs et Garage. +Neuf règles d'alerte sont testées par `promtool` en CI : API indisponible, erreurs serveur, +latence, base indisponible ou saturée, mémoire, disque et CPU de l'hôte, cible injoignable. +Alertmanager les envoie à Mailpit. Trois tableaux Grafana couvrent l'API, les données et +l'infrastructure. En production, les sept cibles sont `up` et les neuf règles chargées +[Constaté, `12`]. + +**Ce qui manque** : aucune règle sur des **événements de sécurité** (pic de 401, de 403 ou de +429) ; des alertes qui restent dans Mailpit et ne réveillent personne ; pas de Loki, donc aucune +centralisation des journaux ; aucune alerte sur l'échec d'un DAG. + +--- + +## 7. Écarts avec le dossier EC01, et leur coût + +| Prévu au dossier EC01 | Livré | Coût | +|---|---|---| +| Traefik en terminaison TLS | **Nginx** par stack (ADR 0007), plus un **frontal SNI** (ADR 0018) | configuration écrite à la main, mais explicite et validée en CI | +| Trivy, Bandit, gitleaks en CI | **Bandit bloquant en CI** ; Trivy, gitleaks et Checkov joués pour ce rapport | un secret commité demain ne serait vu qu'au prochain passage manuel | +| SOPS + age | secrets générés sur la machine, jamais transmis | secrets en clair sur disque, sans sauvegarde vérifiée | +| Ansible pour le durcissement | rien | pare-feu et SSH non durcis de façon reproductible | +| Deux réseaux Docker | un seul composant exposé | propriété portée par une absence, fragile à la relecture | +| Prometheus, Grafana, Loki | **Prometheus, Alertmanager, Grafana** actifs en production ; pas de Loki | journaux dispersés, aucune alerte de sécurité | +| Scan d'image de conteneur | aucun | les images construites sur la machine ne sont pas analysées | +| Chiffrement au repos | **SSE-C des archives** ; LUKS écrit mais impossible sur LXC (ADR 0020) | base en clair sur le disque du conteneur | + +--- + +## 8. Plan d'action + +### 8.1 Avant le gel du 25/09, 9h00 + +1. **Fabriquer le ZIP du dépôt depuis un clone**, `.git` inclus, et vérifier qu'il ne contient + ni `.env`, ni `*.pem`, ni `*.tfvars`, ni `*.tfstate`. +2. Activer, par l'administratrice : un relecteur requis sur l'environnement `prod`, et la + protection de `main`. Deux réglages, sans commit. +3. Arrêter k3s, qui redémarre en boucle, et restreindre les trois Vault à la boucle locale + (constat 1). Sans commit, sur décision de l'administratrice. + +### 8.2 Après le gel, par ordre de valeur + +1. Pare-feu hôte n'ouvrant que 22, 80 et 443, et SSH par clé seule, dans un script rejouable. +2. `pip-audit` sur les trois verrous, gitleaks et Trivy en CI ; montée de `providers-smtp`. +3. Validation du jeton de réinitialisation en `POST`, ou journal d'accès sans paramètres. +4. Chiffrement du disque par l'hôte Proxmox, ou une vraie machine virtuelle pour dérouler le + coffre LUKS déjà écrit. +5. Environnement `dev` sur une autre machine, ou limité aux branches relues. +6. Règles d'alerte de sécurité et Loki ; seuil bloquant sur le DAST. +7. Autorisation par site (API1) ; SOPS + age ; HEALTHCHECK du frontend. + +--- + +## 9. Contribution personnelle + +Attribution vérifiée par `git log` sur chaque fichier cité. + +| Sujet | Auteur principal | +|---|---| +| Authentification, RBAC, journal d'audit, gardes de configuration, caviardage des journaux, ADR 0002 à 0004 | **Johan** | +| Matrice d'accès et protection des routes, et leurs tests | **Johan** | +| Reverse proxy Nginx et TLS, `docker-compose.prod.yml`, ADR 0007 | **Johan** | +| Trois environnements, `provision-host.sh`, `deploy.yml`, Terraform `vm-eni`, ADR 0009, 0010 et 0017 | **Johan** | +| CI unifiée (`ci.yml`), e2e et k6, supervision, ADR 0014 à 0016 | **Johan** | +| Certificats DNS-01 et frontal SNI, ADR 0018 | **Johan** | +| Garage par environnement, rétention, SSE-C, coffre LUKS, ADR 0019 et 0020 | **Johan**, sur une amorce de Valentin | +| Scan DAST OWASP ZAP (`dast.yml`, `dast-token.sh`) | Dorian ; ma part est la revue, trois points bloquants dont une fuite du jeton dans les artefacts | +| En-tête `Cross-Origin-Resource-Policy`, module Terraform k3s | Dorian | +| Workflow frontend, configuration SonarCloud, administration du dépôt | Inès | +| Ce rapport et les contrôles du 24/09 | **Johan** | + +--- + +## 10. Usage de l'IA + +| | | +|---|---| +| **Outil** | Claude Code (Anthropic), en assistant dans le terminal | +| **Tâches** | lancement des scans et mise en forme de leurs sorties, recoupement entre la documentation, le code et l'API GitHub, première rédaction de ce rapport | +| **Vérifications humaines** | chaque chiffre est lu dans une sortie de `preuves/`, rejouable par la commande en tête du fichier ; les huit constats gitleaks et les quatre alertes ZAP ont été triés ligne à ligne ; les constats sur la machine viennent de commandes lancées par l'auteur | +| **Limite constatée** | l'outil tend à présenter comme acquis ce qui n'est que prévu, et à conclure avant d'avoir vérifié (une première lecture de l'alerte ZAP citait des codes HTTP non relevés) : d'où les trois marqueurs et le tri ligne à ligne | + +## 11. Licences + +Outils de ce rapport : Bandit, pip-audit, Checkov, Trivy et OWASP ZAP sous licence Apache 2.0, +gitleaks sous licence MIT. Aucun n'est embarqué dans le produit. Composants ajoutés depuis le +dossier EC01 : Prometheus, Alertmanager, les exporteurs, cAdvisor, Playwright et boto3 sous Apache +2.0 ; acme.sh sous GPL 3.0 ; **Garage, Grafana et k6 sous AGPL 3.0**. Ils sont utilisés sans +modification, chacun dans son propre conteneur, ce qui n'emporte aucune obligation de publication. +L'ADR 0019 écarte pourtant MinIO en citant notamment sa licence AGPL, que Garage partage : +l'argument ne tient pas, les autres raisons de l'ADR restent. Le recensement complet est dans le +rapport collectif EC02. + +--- + +## Annexe · Index des preuves + +| Fichier | Contenu | +|---|---| +| `01-bandit.txt` | Bandit, seuil de la CI puis tous niveaux, trois modules | +| `02-pip-audit.txt` | pip-audit sur les trois verrous Python | +| `03-npm-audit.txt` | npm audit, frontend et tests e2e | +| `04-checkov.txt` | Checkov, quatre frameworks | +| `05-gitleaks.txt` | gitleaks sur tout l'historique, constats caviardés et tri | +| `06-trivy-config.txt` | Trivy config sur le commit | +| `07-trivy-fs.txt` | Trivy fs sur l'arbre de travail, clé retirée | +| `08-tests-acces.txt` | tests d'accès et d'authentification du backend | +| `09-terraform-validate.txt` | `terraform fmt` et `validate` sur les deux racines | +| `10-proxy-tls.txt` | `nginx -t` du proxy et du frontal, directives, ports | +| `11-terraform-state.txt` | ressources appliquées sur la machine | +| `12-constats-machine.txt` | relevés en lecture seule sur la machine | +| `13-github-reglages.txt` | environnements, protection des branches, secrets, déploiements | +| `14-dast-zap.txt` | dernier rapport OWASP ZAP et tri des alertes | + +Chaque fichier donne en tête sa date, le commit analysé et la commande exacte pour le rejouer. diff --git a/docs/livrables/EC04/EADL26_EC04 - Rapport - LEROY Johan (G3).pdf b/docs/livrables/EC04/EADL26_EC04 - Rapport - LEROY Johan (G3).pdf new file mode 100644 index 0000000000000000000000000000000000000000..162ff267bb8c9cb7b21dab7fa0a1b1628d95eba7 GIT binary patch literal 451087 zcma&NbC4%b^es4TyQgj2wr$(CZQHgnZQGn_+qUs(bNl<-xBKG#v$0W?aqFHuH}ghj zMMdO|Q=|$aVzi8OEYPG27iW9Wj06k>_C{9FJUsL&mM%7?1UzD*Vqy#oEUZ6`nStTw zW?*JvU|{;OLhS#yW&Ls37#SFT-2Z88KYaEdjQxM{*nTYAPyBx|>^}pDa{l-~mi-6& zkH_}o|A+t282@qq>;D;pP4xeq=f52O!~PrVzc^O5pXdK4_WzCHgQgdDGBtFucOsyW zwfC~Lu`#4)rDGt_q0nGtK^gqi>VEe=V>G_|uEbZ+?3|&kKC`7oJ7?{`?IGI=&nVH!b z8L1f<$bar1o~*se|2Kt?58BkueWY)HTeO)n%%Krd(SWNT>ize()>n&bkPxybF zA;|B1%58n!^22unCL@0+^se4WzjVz;t0I6~T?=aAc3*F08rNt|Whe9b9$gzbs$ni< zCAWSU1UE#Rd{VIdg76E#a3cIHxEAxKZeIHq!epR|oi&xTe$g*&O?PiLgOXm<8;m&uTV3~q;!AiaBBL#)MGO>+gF%)Bk!rdT!hKIPU6u|7hD8BlCaXIJw~$FGX^sH9FBWEg5^s9gi1` z;UClAZ;C{rqfhA7WZgYe?0TvgdkV`xpuc-o^{xUBDVk}ynlZ9*^a=Efvaep>WZC!e ziQ{iJZ?kgo_#X&cmz9WE`cAGS&A9jg=8oLUc{@;DkjD3~_ z;O$(ocUl%+rUpw{xj2V%!9gT9Prt7}Y@oi?Qp9pQLgLpGT#q1vE14ghL@a#53%Dl2 zP?J{dPi|hZ_SNE@b|e)`O**Vx-2$=m^LnhER>KmEa{0e5vqcj6zU%nE7QVmEzI#9H ziKFa98nR$jxVyjE8+$C)qvvuC>GO`nHrnSRS2Jc4aCLo^GahP@;d?J8y11fHz0|3E z!EVC%ycrvHz0lyWJ!3w8za909-Ekgg)wBf?nlgu4U zU(Q9KFP)Z@s^ijkMa$7D&K00;Mu}i`L6@7Co1*)2W8XG++xSJ@XPaJDp(e1tBeGrp z+Pd~F@l#f=`LVQ&q3wU36m+=W$mqbH_lv`P>EsWd6<9$&<+6=7tn@YdzN zTv^XZ(Wal`J7uOZV&FIHxz-Emot~&GR4?wAc$+@|jr_bYm#52?_ByQdZ~It~egra4 z(6qr4-$&_*{RkZ;^xP^~*)Njq!Yf)i>^M`Am#81Btu+rYo1BimRT0Z zWtB$CH9k0+EKBQPXFJwGi{@NF`DztXR{Gx3lBEXmS`e=3t=ERGN0Psqq5-$aPmJG! zg%Ze*0;i^kg;md*?8_fizZtg&T@7lgec{)B1y8&~e5YDezsc*#e7IKgVL23kkl@~& zAFyt-a4_p9p%a`5Y-oL4Z@|!Rx2NbM%t>KBkZNJBRMCfBi0~|-?gAuau)$OT94bWQ zQlKGSK9H2lrkNsDh0ThJ@R)56!X+^&{)`S=eOPNWx~bPtwg=j&V;hFg{;L=xxo)C@ z#hlI3IaH)j4G`%Z%K;chmE%VNqIa&nVw5QE4W2?G^oOn0)vv~eZoC8#$KT5&KpzUQ zjp~r4Ev+n6xNK*1c&J?S91QK$F!ZPtk zD9IBPKtL7nv~hW*dd7~76lD|YbvW8Mxdnr2_^6iD0R1tTctcO?zBDoQZg!N!1vJ~< zZPeL=fsh5NSNgG=+%9VpF>lONSE)wSG_?O|_%Ui@;sELf9NTYqokO3jQja;VjcLMQ zxBS<|*YlI_w>Ccu%Jl)t+~sqJbS7l=9Y4BXnXMi3+j>O(o5>fOB<(JFI!w!>u?2T| zdT}MNY<~F#OxG2EEs+YP<``Get?p}y+h*r7_4d=ek)-VgF)^RZp#IcEm}#0!cWKZx zfB{Y9FNRdvS0wN`6ZXi&l4@M_zb)2D_H$sMkBRPhW0~Zz1s;rp_?ii4$ypKb&XuTo zz1@?9&S*%^(4VbICi*Dtk)8QaWu*!SgElXFF}mStcfeqFAApb+C?;0E#z3A5>!2T8 zmZG{>=0d|NgEBjM1RkUW$Vr?*e4wzLS05{((cnpE>W3tuaR)+2#PFT!s5xt9@<#CwG;9~LK3h39DqfX-_pG`5^c=m5T&jS3n=Z?6n+0F$>a z{Dibw@pRf%#t@04t`^bUiqXoRlbZZxMru`)JnAr+6G2b9Rn)#ED4--_#h?f&B^8a$ z3`+bs8iQA3s}$na91kf&PhlsGl<-h>q?W!+_gEwILmx6@!W_kk$#*t02Ld#`1s>Yo}898BtV>i+KE?&8d&o2X!RyXDlO~a@a*zbd5{6ShE^&@v7*}9=oGuyn%ybmJ^4jKgLor6CZIl^E4$&CTlzlG<=WKv z+GpBqWd&4RM4JcJ)HacE^XZ6Vwvb*|jJb7`+f{tdAyScIBu}xTax68rB#{&XuGPse z8jj6#a!(xAD);s)VFWxru}mJDFRQa+8-h4ZQP<>`GP)TQwkwjp6c0NNC1S$M0z6T4 z!SLTSX?9@b32icP*^*U|P(x(#5nHtMT2LD7M!N9Wgm_f&K+6!FZtTL0-U9MkdKnzP z74(PA$529=>PIjjd>nF&n%1|Vfab{&hGIyc0(u#pF>7DJdJ5A;ha7=^q7u$~Nmv@n z(WJS`aqwFDNehzMbhAbDk18@nr*|q)I`4l9A-G4V*ly{THh#JDa@~RB_xG?;3!hcM2|30UCDMuaAgF|k@n`=E$L9(X=RA6a zc*)gSDa@}6`VEHPVOA!^Kozw?>ScfZC3h)-!|nIROHp@VIU}{8=ydoFPd#_RS12~N z?|(Q(xfv_$GJZ3G6wB(bAhtOy*h`ybM{lTlY&2av=(7F*8s2lcT}&0j$r|N3ndWX+ z*a3X~#XUJCHRrUzn!R9~$zL!ToHOArdpZi&NTGg6_&v@HsHh}tJ{4$RxaBJsWnsiC z_JOpzkJrXJHfWtbo`NvzER-)Glq0leLuw57#!~^$0^EX-;J||L>_gy>hMY1;P;9f} zT(U?K<{=Iea)qsOZnt<{Q%QPl4dqFz3Bw~L0z>W^*5GKaf$+iCTn2)?{zIE=*WydX zFLAOm%yPYjzMam$GIa^X2n0W20GMJc=e;xN;P8MPG6DT=6NFgSgQ?^;!L8#+s!`dw4Q~bG=i-604CrK zZ)Yvy8Fm@E26{u#&Mqz<+HosQcxl3d{I<~q)b36sORGRCJ-{)Vi&xs(x*uvUDPwb`+F;w27psn-%vjhe zL;o@cuUf#e=$_}>ms!#}fgJ}Q%xsCxY;w)U(FcY_@abSlxeHx#m_R2a2GOsNHSn=y z{}*?^o1_5Ra#_ZLINHHuS9V19r#}GSL1sg)enUo?!CdH?f{ZkdlxsM(VSbogXtnSe zmus#3^O3y!rr>ZalG)rO&*(R|cIU2;DKGv#yzKGW!c31t2BxqdS0<30PhMfU?d4fY z3<_vIU$D3)hez{5*AR?2jIYQ-Be1v6Hp{wkp4K7Au(=Ka-mk9s_#AjR+Cb)5<2fo} z3!wf5au=5f_{=yORgZqJCBx%FX268bJpk5Wm*jdJ_1JgcOWEJgT>D~>dl@=|uHUur z{WYXA81&QIWL{7*eh9x0B6kKIupY~*>U7;KF#;!FnW`fEn_Zlz!Va8AY|yaHJL)7g zva(XSkgv{j$atNHXP=jQRL9CMbWo7cAMin`$>-|7tCq)?s)ol>ssM*Jo@NAuG8Q?U z4pwCZ@bfBWuzfQA3p2IzYGc?AnhHS@Nv2LFguJ8hL2ObW`<{ZGP{zovABhM zFc2&5RqQ`S5(bEb- z3kwPj75IsK1R5bbD2vCL#7*vd3NC_A7R)-ALOXR*ASi%vg#_@st;V8?wNDB!;A5aaI_pBj6;JckLUlRHf55nf+l zH^DnC8WW9uZhT+rgskeM&a{8Ru2U*-(lI?-Z$zwN3F0xMhHY<;PhQWQ>M=jRM!VnV zg`}PRM~%%!$+b}yll3K7gs*TC+p|0r3b0Tmsac9n#WwsZ05qPF&e$J9cSM$M`ORl= zYczx$4LFV*hg$|U@26!?D=LG_;-cUxK|6t5;(Q_YSIA8sj9J=ckfDyIW|WTcSpJ;; z`3Tg7g$gs9NK4WDivKd`kh7<~2P+EBIYgj%;_HWRj6oTt5X{5xn`6-7ECrUu#X&>U ztU?GyA{yW!s%ta}poLEU@)wZcX)W4(N}7X^UD|R}88aER^XHI5=w196byj%@U)5oA zPD7u3@+*MS3rO)Tc4OPvP{p4-_ywe{{{d;Xt+W;s=dIV(!FY-zWio4&oZ%3Mq`oRj zF(4sgaWYA8*r<7IQw2dQYCk$pgb;%>SvpJ6WhZD%G&r3YW33rtZL8e~sn6I=E?sD$ z>C7pg|Hkjoqf!zSbzVRIDl>Vr9V_$?ZwOSEbz&~yX#~J}?j9VoWTMi-_E-!3C~TM@ zTN8igV122X4c|6;9b}4tGB#KP(}0CFTjt591NBaOY&^V+2_Ch@S* zd=N5bx*R;c{d6YQ6aQSo6O>E6)iArW6cM?3q z4dn>TQUVrbYz*}3#c@^1c}CUJ7e@;PE4pY7}5EavX9!zB6BKK$@)$B z0jCYKhEnmMBc{ZM7TVBws4V8B$$hO{hs?ZtmNQB}K~5qlxQCCVJZIUdht{RiOEPQv zL8mYAE6%C)tQ4yK4UDB&1J3f0Dbhiwx4#V5ovg&A*9;#b7^Te^apIkk#IHNxG2#|< zDeIEL1uC~GinCl|rf-vsbRM2YI|@e1LcrEp$k`P}tk}Y!M@prhu%^vo=~SyWYDj4l zrcJNn7^P$#K|Mi~#`Em2Q$cf(6SmBo;u>^}a{BC4q84~`#l?)FnV2=Q$7!Q5Wauz< zIrDvII7=JX-DBc&9nJA=&d&MjC*E;^y+T~IZ&Lp_9(||Q!hH36r&$%LGfyvCBe*%k zL;WSulD4OWq%2y)hDCO&KK>ymJ{*b;uTS($UFe-OoeUI8?_r?M~+|==@ z{q$P9;2gb(ZfmLgm|Y`)JTF2eq=$uLt_hN=0{E4tVr|4nPb2I-q`! zJwdE2K?kkTsHgtTqWim7eH=ap?T3@|u3WhsCsf?it+$Om;i@;S+4& ze7oicRb@5xUwT3Zo!ltw?TcV&?JFp!muJK38aa&nIZk$D9Nn#n33p;#*YE}%$%5Ui zieWQh_xnbGPPkJ&R3g&s^!Ah6qU*C0!SRApW2c3Q1s!=)a126eJqg6JK&3rP#fGpE zDzts7dfD0B-VgWQJ??`qx6ZKh+zNWEJ*nHY_ikeilpU$A@iT&YEV-e>s_LcNV@UPT z*)kt`Z@IC>$n@&{9e_N$u;q z+$RRuy3#v6uk|HOoD0A!racGJc z?4kyuuMp5KD$5!G`;F2?4MMLX1PIXI#l^|mjjZC_4b7c74bPq6F}wZ>Sq-HSEMAwr zT{xZ{rHL#n8Rv$e^Hxte4~9SMG-MOHw98;!WkBa28}5Ax@y5O`ac}FhGkV{c3*b#f z-{u3_>T$s4@E>{gapkx8J0lj0e{b(o%FVKSHo{|7&MuFChm}Mv&b=`Lc&?MbNge5e zUlIV)9$gIG7*2T}z)VXDFXlfv5UmzkN%!;?;*4Dis) zC>(@Bk05!E4^|CN!Uu~z3+VLl7YOe-q+VzPJF7BhPM`)nW$M<=Z0wiET#Moz_Xl|5 z*`r|n4Kn>{BL~U@lP$`Un;4RH(2rv~Anpf|WKGhpBu_*nJ_;4#6wf$F{IZ(I8gn_^ z7>98GxpA>LXGA&#ZDbF$TO)EYaxs}N0$kkir$qyhf6ds4?OP88B_ljoym zFQJ!(Phaevbk!BOCem=dJSmJM_0JXlb&pe_ zXA-h?|4|}ss~A3=W({`wO3Iu3y;Nqtr{gs1wTw4#&kEjczUR|%TM(aU@M;9gmJT_g zP64~%M#z~1GNurcXw1bRgG?hX?VR&d;K`a3^N{O#QxS%mcRqC&Up%>VzpepO#Ca^$ zP8C>+of<`-9|51 zEY?vVWdT}jcb=-qj~LIqZL!0EXJyN5cTjxlvoB98RoaO`xWN88jpb#S*PiR`ZAG2{6(D7((B@);QRuSry2 z$D=){6&)bXN6wYM1KcM($0$+ZNpe3Va!|9G|4Kh;@4o*6evL3kIfdP}V_((kw(k&= zyvzr!xO%BlCJobLtId~|*>S6J(t|*~)6N-~v8b zaa8tQ^iC3LQAzwC6|S?)hZT`V!G0L>#h_D~J?9!P#{jcvt-;O09^Xw-Y;UQv`L@|W zCmwDEF0&atrTk>~LKyf1w{f(?*Q%@Diu~BVA?{xXRoEk7A;? zs>4mLgXFB2jt2v-5K5N|65MN29ckM4na@jh*`(Bd%iKuctD}X+%#d zUQ#D*uf*|eH5#QJ;!!JAsd8|yG91JrEWi24rc~zAy^<@|$zMn}o74$(*R`D4;{J}| zOm}#S-cqD}RxGcfD z(JL4&X|@;Ny)CObBQkC`Ta^QUpk`vnQRWxh3|6elyxP3`=-&=jJuJuyWc%#y31>mW zqZ6XWS<)+fs5#!Mvg0#kG2X!NWz>&Cpr0{k*|ek^z%KF3lHXwUzBdnRUa%O`*Kr3K zj^urN2*Xwz;pnNWDte9xl=&K`DIoZZs6CmlY_J@hWbL=`o=6F>b=yQF1(?G*u;vLs zU4oqBu>iJ;DZ6miX(dmjE41~|(Xi6_CmYFn=aKb%f7vUDl8g*}`nk2wdWGrlUR}C$ z%-87&9}5lj;7nw9EiF%&0)~P=#f?{s*_=!QdW5?33+`b3IlB6MO-pNnrQGG!H#$OC z0@muPN#EeXk{wbtRyjAz=>nF$!}i66p?InVnZw_wQC$DcVU7d*b!>gBmR*#betu|wxbzCjK`JYOMPk8HpWoi+E^RG$rc9JL1ucfn1GQ?i z5iy`cKiBz3taU$@f}A3dB8EyxR|+b!j&x`}mJBHi zLUh&%Bofl}7AY<79`x*NB6+EkARteF-dT>m$XuFLqZso)?LO)4(>Gs%Us%I$_J5hj(i7*2D6yxoU(GB?OlO z>`ljUqco^_z69Nw8k7pG#Wn31N(EJlYC!ie&VJ;eiH7_vUD{p!OmwZYbML=RV6O2^ z-hnTa_^IQC9C0UVjG1Xlx!&*z1RY7It@A*pOoRfUvPDz8v$4z|QFLkzJ@L;OJF9LQWr{1zhBu>>HsY|xiUU?Z)zNQ z^e@&bnOpQYbxJQt{My53lN7}se9TzO#Nk%pD|S0DHBDny)?=jZD|uF@?kbb^1*tUT zpch>_sxY*%Qo_<`0$%$$EqQ|*6~EHORo~c#{(zY*lQ(%kZ}bK&2cxU3+_F(+D8w!9 z`nELz(Rj$iv)7=jW$?MM&K@}bE9Pjrs_h0@Il|%c%S5;uD3tCRtA!9odGmBSNYvLh z$>Bb}I7@WI{jHuyE7yfvramHWvWO!6g1rrga6`oJ7`t7)IlS-q<>8RWeFB14%RLh6 zn<7(uH3{Z4e2^gEvGN81pXn`ojsJwg#tZK0kq0;~)*^&1>!}402A;&<8a5Bzjd0U4 z*1?c2N1U9{^AE%=P2jvbc;ycm(8CUAtmHTx>7o7lMrwKGfhih^GUgqK%^89i`klw{ zvG?jIO>SbrZ~ZmFIw+1l_;J+?U{@@hgrFHaW@NJ7%~il#i8LP12at_#!!JyMKRwtk z<%@&%XXhZ*zAd)2Avu?E6Q63nUdP;)<(MNka}amap5*CuoX6a@<|H6j<0YXq=af=O zo1cMFK-3~7@FH#h?qdr46P{VXmHSPleADn)tAiv}@6}RHpNA0C;%(DIkKTdY`~vS& zQ9gMVHh(Tz`g2SYYhkt$bMa_G*ap7gUHYU;F)4Fyh)Zhy_ zPG-|W?Xw<&4{T&FGD!IKdYet0Rq&e9ojiQ%m9;HtKCV1F{@;uH^ivL6Fki^#AsdfX}s zB?qpr38|-S_R&4pB8e+KbNJ~SKz!EOWIu<$3BRqvUSyH%b13LGJI@#4*ZYoq1Fw?g zG1-~Fm!{p}8fzQ>=hs>O_xaP<3;0%-EixHEpQ)EPv|HTt4q$k3)U{K&f&X=qh_paN z1*|CUMjVzGdnP7R@tla#jKMgN5&>=R!fGV6dUlNWmDBxh6dq&ah!Uv!6*{r@Wib8H0Wr<{TGKKUWl;=hETO&E z+r&DSeBzGfOevUkmVNJ|NIfd&ia4s^*4j=OULh+@!4$(_W0HA$eP>l`SQ8{oR!t#m zP?VANY1<$D>FqPrLeV-`FR?%9J#4oE%hs8)+zWq46j>xxEUg#`|FC*ys3TZOOjjYe zjPBrlA`!OanKLidVc8J#$5kKBz;^r8i*>_;@k*c3`}#%Ux;SP{yiO2|CZkZ7cd@IfHc7y0B4mH5Du z==pdxMTDVAR0qq*yDlW>X%aBLmxbmxwmN56A#>ZJ(iEh|wu$yOdbU7nh5?~TO(-k{ z*iYLh=~Wj)jZbtEi=|%rxu{%^MNsl$28sndJUrOM%#4H?w?=-88~2VnV>IS?bVBh0 zT$1l~Pltt>WK?fNenS_~U zNi--Tf>Mj~y5fOSnG4wrs{JED2 z&+@05lu6ceRYtH%;ZY`uZ$HCw1~|_o!v*14C@KD9p5>DAB$FKH{X?u=L{;*DA#FJ;apj~y4{ag&^)nG^Ic>{1^3$32FH^UxR%QU6d|C zCWpS?>7auvjs~oMz{nt<$?BQ63L!62BuB2Vi)PNz80^^)W6whMuiP$lDNSAKqaiUz z)!Vh83qXt)SJ2DvuFF+Z;2<0exsoa6p*j6(E&pn}zLX#(PR#Q!WLfV(rH=r$qfobz zk2Fy0fVE(7o9sgTLuQS8avNsE6==AW*I%!*$uYIeJjVy64Rjqe5!y=&u@v4pix7** z%Y6wqwbWG4w9dVBeGrF9x%)1XEoaPwb%v@qT_+-MN4*t}f=0!_TRLFY<-!|=@=`M@ zlsl|QaZ7v(^INgF430v~lia#UWDa|B7%5PRTzy!GRfExTPfzM~vnK^z-C&Rp!GBT0 zz){s!OzU;q;4-%?ru9u3Z-6@D9@z)V*F5d)tP+n9?!J)J3c+A1#;v4J2Y}BspA3LX zqc>6tNKFKmW=92n$2!f6Ns>txpfS!mNdo_-cRH)NL?IQBL$&lI0kr}GA&nm%4Mmaa z53owiK~hmtaiW5HwXIB2lr{TXNx}qVy(}F~2=`j)5$UWc(O1%^H?L2~rp{zJ&;7~S zh8SYQiCJ0<`Y-R0jVS1mB%aGHXxSx!OEl=Wypwns;#Trz1KA(t+(Na8b4fcEL}_;t zccaKst|UywDtTX%ka)~+tf$X~L@74vb~1j$O1>N!pyDDw0e+bkmEjJ2z_p7;1axO- zx$s11kTGLX)JvcRtqT>=X139F3G} zqKHr<7WwgyNHt>p@pUEgn?!xqLAg|d31S{8$T>2t@ND-gR9dkWq}n--m`3d)x`=^f zM5o9(VsjbwGUUAg5|bpJrTx4z42tYbZFpp(z0O40JgE$egg%k&IR#U7Xynt~zgeb^ z^=_hSGapu15seu*>vkn+IFu`n*m^9o^#puFUYTYkN?_|ZEn?yUsT2$1mZICrfAILs zQY@F|xvs?ZT?c#u32?1;LyT?S`<*GIv*d0)>F2VFDTR0{*`oET56+%?orcXc*{Kr0 zX`Jbd^&2YxnErA5x56e^_4ZVwVU9}rCo)Rqi@v->B{PZI|6fwKQmMRGgBE&im=YZo z`4EGlSUpb#-Q#4D^g2bPsMjB{_$tE~nTRrh0Wy&q6;YRmCrC8(MtrVTCHoSJfyTpA zr4$2ACkINb-_nUVx>3k9(s6X6P-=(hLo9+TN{eE|t;#igj}%he<1=qM2jtq`vQCY8 znTICEHc81-rIK=N)?}QRep!bm9zOtKj-;Ge78w`jUDl}ys9aGpqX2S24DUL7Osv*M z=oT7#Oc7I=(Shm5#_{ zsG^(T%Sn`nU44bc zUZ?nHVM0VlUHA?>u%(oeMRA-cs-UCr=2JP0!N1 zlygs=OUHKcpHLseVEaG9C((TKg22}DA!hwec}Mf8YS=|OSw>aNi7mCG45pgY4lbMH zTGU{@QD*ABG+bOLA(srA)FBLmr8hctR6;YcFF$9$Y@Z1*Re>|x^bH13e9;c} z;F*0nf!xGZph;*56@sz0(}$ z?@^Z`=hST|&Kg%M6yFXaul6BaDi+?4Wy4O@arTE-T~eXE@FC$JjX`~UPM}hp48;4N z`~xLY691{P|Cf6Df9bP1|9?uanV1+k{}1W4uXa2sr_;9gXB2?OV1}$t5;z*{kGGi` zI1NZ6#B39*R*m69bwTRK_tY+HhG*};80EF49&34!V6Mc>ZV^z-f%dyv*~#y%w1*pZ z_a|lz*LbQ?hxenEbbo(F_flQIs*lq2qq5XqZm(*)hnv3dJ+-fwiF`f3cL?YA1^@2Z z_w6oior5cSf1lT%7@t|x&s3}q?DB&vyXA+kEsb>SO%U;ed_TX}EBU9gv@Um+Q-}9g z{RM@4nMGUO$t?wd71Z4mppL#z8|}!?|NYg!@8boq*LKI}-;wcA+AH4Y(e?JQJ@f5U zOvdV=(8qBt9r{yDV_y)k{aW2BeqsaX?&RhKvG;W5I;>mn(o(a}xtOxl$A3BfDAMEy zhcf^}AP8H|z|ZJv8lb+2>tleA`A5{u!J_jaPz(VNyHaDX?DgGGq_ajKS_F86DHhgb z2K#!0as}dZsIca+fA5I<`?6G9#fyVdhCE1c4Xh;T>&q5W1?~oa2AydAufk{DYHPpR z6Jq&CfW0nlp^k^$skiK)ue+`|xxeoVmGyM(|JJpUABgi33%|TGlw~@=yWVU#)@>_Z z<+44}R^Jf${dCgT_j&E!_ZdF(eH6ZUeB=Lp7CvK%9&Ok`X=>jY6^sA92Y4v6vZqSl zVYLdqIe)8Vr)={* zbG)#6UoVEYyhZ5LISVDJ0q?&YW9U&CP0-tjHT0^9A?#_z9%_{~UB(56Y8@dM&@j#< z|JvyLeD(i0(f^vE|6Y3?bn8{1bL@Hcd)vKn^2K)b_;9v{`C^BR6f4+{c&m=>jWTREu%%*EOf?TP*?%Z z9xbJcK`0s&i|=3@TNWFg0;P<|5HOubsgQ91KU$M1c#tD91YS)A8Vq9tP?z;Kl}>%A zjRN(wmQIy13Q7Cf3TMBz#87(u*w5YI9T|EXPFuf`MR&KR%x$VBC~vt9mNaveryRCE zH8T{qoK|cfnW@Pfu>{(3B%29K%+@`Ypjf;cX`Kh!PyUkcP?v|o(w@+k(w-e7Rg|+= z*c2_*XVnGFaar?%gl1ZKElEC{)L;cg*`X~j++-(amqK|}1ZT^s$`KpY&d=aKY*{V} zE(2OEOK-{Rr$KrLa@?EjM`<4fxJT7e&{+U&)wcn1XxAXGI`YtxE5hn5Wers>Sx)Ob zkeWT^D;5fS6)j}!*qu!j+ZxB?;o;?C!*%7MX0q*-DTWJ6cX?mV#9S~7Hz1^AW(#QM zdHK^opLTG#HXNBtUfkxZ&U%pYG`ZQ4w)9zS64#uPCkNgt(kr2bAisW3hlU!+s(so5 zIw48?tAyk9W-PSPK*bMHZU}JnsZMTRea4D^AP)QX3X3q$$YM$W;#KAt!RD`DWPYKW z4LEy7ydzsyy4Qq+Lk>FqU^V_8GQI#Uk;qPZKTXc0$#ojIW$YU_v}6b$AP(3jFdYi` z1l0S(peMfWkwU)Rpa5&R?ZtA@2;uIv{*j1^KrfD2wj_@SDxXqccx9;jI6=t3cTAsv zBIKKw{Bk@z{eXc#WqhX&{Js76xV3ZYEL3+6 zRZXJx5?61Blg|i$P)zEotsoSD9l;*;R$r+He}4#hHpoR$yg;$4{@#bM24DqwvnF}cKXchE-V@d&-}-Zqq{ z%>5Au^#`8=SwmTbsg4hUDDjjE#WB+>6aGF|B~(SP)1V+Kxj<+IMX%Pm3Ql@~Xy6f+ z6^x21C)`=Tm5V7!6B?`>W#F-ZrZhbVtfb$1fhoaAiNzpuAiRQv=*p~vNDmiEji}4V{a(B0L9}@X0S>^AWE~*cp0E#& zi%dw3lQ#fQf~nj<&l@{(g2=0fhj$608(vNn?h&AF$gHWG>|pUO9u# z7~1s;@P<)B<1;dTkBEJb?19U|87|AEwxnx|kF4=bz;PlIB!UD4`55<3n>rm{b{gTy zpI%fTY@#+ZNtR-pAS3+#z@MoEl?h_V-Q~h&OUZQjD>xnO>mSmAVHaowlG+aAgBCgg zbjL8v)#~jhZ4NTHhqR(!PkWGyPo!ImPoN&`lB#Pt9gZ_@lmT)?w?1^#LvqXnvr)dnS265J)-BGbi{U}2_FRzAK8pxvn)T%) zhgBcS+id=+C0?7dK$W)^fcW}IUcY}=ySe~5m(~*7$l_isZAFofX)6DM*S@qlNjSX3 z*>hC+XqVbb4e(a`D*%=7uiZ7B((Gm#^uTzP`JwX^V_6X9LJ=S9v2Ye-6%{MBWuD#u z-yx_@>kaIBb7`b5NI#g5G5%VWZwsRAmGHv0SP;J{uMq|C_}Gg}c#I*z!t!vP{Ip%R zFe0bxGn$z3Cw&z5M~X32M|!zcIxmL<@0h2MkHj2t7N`jP9$|r5klE)aw3=F{6+*oVA@X<5?)eufqWWc^))ON> zf>`KNlI3yLc4<6M*WcSRgOhrM?nk)GtddBc+wa_+x?zBVMUx7247A@|tY{a#U&i5* z|K|z4u+ppYk8D7&>(8Y^sm)pC;83=(e>=%GV$KC+ZtUSPM)(($g`k7$E^fnUTct~d zM$lG1D1kPw$1M~bj1`eYZnFKAN9n*4>~GBq-@#0N>PWmvoU2;ZT1c@_?zRfb#W9oz z0f0x4_(*%w#ghk0ti3fjLP7+~qi4;l=@`Gg4a(kPtte9U>p0gFbgTF@#~<$!ftaBt zA|C~Wj=Q`Pc`n92Ys}~trw+Mr{Bc&6@jwZr`tPE=xt0(`bQe=jf?RImm*oDs;6sD zf%IDq(+9{n)pIpC02W7^%(2UN|CIM#{jSG(9vc8QJ%zmIWJp%8MUQw32F>eh^`zoj z7CVUc3ePLCvY^~Zinn|{S%22tTwvw)_se8G*u8#mWLB;Qx>2fi?W2gen?}YWbKWu{jF)TCw znq25I)UA+18&G;DYdNc&(J_e*U_pD^T)1@_p$(d^pPH&=K`55aen>W}`uR0+B3f@b zCVpN;2pCAMrs5hM=mGiKi}B(gHfg~#Uqz*V&v4hgif9U4Y5-ksolkyp3nqq@(0IlL{8vKdBs?hsJH$S}dZfk?OmV#kp5p`|YB>}T z4xl~b84L4nb^Sxg-})bk5%xMsmhVA68c^a#>tXOc1GZG9T)Oi(r8d9lLLkbYK#qNl zZyHZF8|Wy-H)7V6#aueX?+^u9mAxF_oq}9SYqXBz_en+BVkRXl`u2>=S^h) zd%5p=i-2s9olX&(O7bgDWIlO`Q3jHo@+( zduh(Ds?M-wC1<=Xp{itsRK9=Q1*Z{yY5O4gb$Zy%fvIoUjFis~2P{~+%um;A9A)l$ z-{rXY7l-8eOsMi0C38Ye;To0}!x044Yb9zXo8x&tho(i5?dsK85C=O>1m|NzJ&UZLb(OtlUU|7^mavF-qbHx>=)tK&7VLg0K1bN2P7! zzZYNSvWC~`b`6Ke{xAxJZqe0G(B%3f0Hi_tn>d4D#&YP%T`$MDGpC@F+3J#lpYYj* zB{Di0>E2P;{t!J&|ADKAZsRiw^-8Q_Xg~BZPURDDT)H=#BOwCgRNbUOubhfbhF&Bu zA4Amvm-;^YRAWay!CzGBNnJsXesnnnykGHnGFS^LU3=oUyZ>Ui92?iTn?lJ-Kgk20 zsNXqKX9geqyXOla!ssg~TLkk`J#>+ex?IMS*T8Oumxk43Ikf94(Y}Z)doo`IV|qmR zqUQ8I_1~w-S>raK_dsx0gF{o5j$W138nUXB>8e?|@$lQ5p{}YP4b|sw1}fT_^K)Q* z@!(zK93Dev@W2I%=*f&J%g3}w=WXZajE&DCq{J-AZy3_@s3|fYkNMy|rrT#55Qxtl zaDZv5g2Y0r1pZRr2_~bl1PN-Vw^!iT9)Ml=^gC2r8gu-%0J*>rU}F?d4_kF^0e?)Q zIJCGhne;^Etry4VIa-k!hG-X%$ZC`)e~$EU9?&mH4df1g2d{Pm69@ah_YNJGrrOW7{~fZQHi($@_h?*37I~Ge4?#b@#5SUfpM_y6QRI`~`vd zMdV{K-pRO!&zfsn9wa+@JMa>=Q~~{+2<>VR64?=&huHTn9sVj79!NZOchQU5!sNDp zpOh^g^E8_h`60!woyzX+3`=T^qQsH56Has7I0DgIn9rNz*_#IA! zc6S5T>Vdo@nwS#Lt%QA0i2Nj+j8wM|O)sE4bKHlwPm8kDDp|A<%u1vom&}^*uXfJ^ zMU`MU`PNr_COZ;@OU+(2+bVL7E@#Ccjumdb|04Xi?-s&Uee#eHK{KFu2}MFT6aVBy@Upg&^>K+U{oz(S&304R-tJu1-aL*DKMNra9W;f zYh6|nK1rID(zq7yXbf{tr`PFqGJZ#E;mr@KlWKB3Kb!2<5Q>5J;7=E~V8zCJaC8<& z(1M)9Xo?B51(T=;Y1hbE{#M&uP09mqjSnAetmZBjLA|))!)#9ZDS#oxX z0cuXmT(iacd2{BxsWwU?Orp6qT|h}gKF1?hg0O`?LmwZN&C#5~)YC1V)|7NR=QnFA zB=c+TRo0h6wJVs~Nl~6E7VA-jPs|JSud*i-%Fxl&;ybzr)VibIjv_|Aurp zhIqUU_;+)qU2C$1s%`Rei1%M*mctaQnFk9x%!S7W%k3DJKiZ*(gU>@0@NsucO&d64 z>XOx~lI=*>{eBIdcq}%cKca(Ka#vjfqqb*mxU#S;iNd!yob1B6?U8DxjTxIwCB_({ z-$~!`o(ccPMf@&Y_Hd22KFw{FeAgoKccVlqxy`9*X%5}51f_Vl{WE!2X#38T%A>2K z1NRK2j%lwj7xr=kV+qc^*pvE8SQhCotp|43pTqXB>#SO5y8{01>LM-g*clWAf7tt8 zzFM%GcWW71d?ke

f-)GJgXr#i7)Chw2_Dh295M-s0*A|Edo{fm3NImt&fCj*uN^ zAYG^V%M`T0ISr3!a7{X61+pX@F6{uox)xM+&3$ea&$?Me8O8Q{yba!=Vw$1tXqeYI zOk=ta)CL`D-Df?P$g+!aMnKG~S$oF75w&&F^5Ij$9hL!!zzCOt(dSTxxBRoOC5OQ2 z8mi5)f_sJyu`Rx1;1S4Q*L2;$1e4#k^1C{KX<^pibONJELZ-l>2VkV_a%{@>2_)`x z*XCp($j)Ntf9PE^WWeE=7d|wY<)w8Vq!fyQ>u{8dcc0Hyi_4xeG&pouNa;|J-=pbK z`fQlbSk7qb__Z#F!c#t%{)O*-2BwEI-wm>%JRfA(aCk){a+1f$a;(?4+mMl6H?QA3 zG8~OzAP&RnS%OA;Yak@ui%dWdq<#<{H*!1AO}CG+0?PW!6C#e}9nsQ~0@+B_cNp*~ z3yvcYk+0v1lnENIM>pSj&jb5uI1em`G#veiZ^>AZP69L}aC4*k^>%eCr;li%TMmTA zKKe&u?6AIk4+oJ6 z`|jyxz=}k!q}>Q#HX)W;KZo*7M^bC8$Dal&cOHLwe0iIkGa{5ijZ>o#pm8RVSZJ%0 zXkEa265*-qo~q$8eIp$vd#%b{!IIIsVWUM2*LnuI{5};$C zq~wg>P7G3#%6TPk9ctgul8l;q5x4u5gM>QuR_BQTR$UE{d}gfgKTQiZB*TrGF3?Fp znrGS^b&v%#!F1b|DQ^v;Hz#V*ha`5;SC+3WiS%KCFPgblo=T0c?v0N>s301d zTt0J0y{NDFh2Aj3&*!5qgDfDZ2KoxZ6gj! ztlK5*!To~4K|mkHkas{o%W*J0$7AR+Hrl1x7@qvsIUPq27Yg4M%60Ujc+PP&o-i9k zzbo5rQN>PW2ly-X2Yd_P0|q(!TIy^|x&-T%=llizofspKPwkVwDye-{T+!o?e@AiK zN2RAhMCt}F)f8Rtk+!<%b1u~pnxKZ^sRPg77f^KNsJLE(L*VWb@aoSWKf!}I-Hz}kP=qTJv=?{>Q~cg zF{Oy}wNY9*xg^4PHPDpxa=H%1OD#?712^7%>_NUZ0ae72+Y=1#XmQXd^5xp1p;4k5`Ys9*onO$lM@~pVSlV~hFvM^eDBke&x`v6YwAZ#dksMuC_ylv z5Re&_W4l9EaqQd|ELaH1TX-?WRG+{w_2`3on%*ns-3iSgC*qW2d<-H!;gwd!&5vvV z(#K@jW0%(O*s0|pL^H&b`<24ykAixv{s)QEd+dk+e^oT+`MHMHbXswgkN}tS9=G-V z{+iYJnT(T7hF(p0X77?6fYu=~hSkc!T$(cUTmJcxoPm>&d1d*74FsLQ4I)LkrO>Q- z?+=)@hZ7hXhB-ugx{(;aW6BT+&8hp+iz@zK|HW64Ve6^UNye91lKoDQIB z(CXCujFpPum5Oba`TQVisoo`M0RWO{SYod?nr~a{+rtpQ#N6O0Eh|kkG+M8ycM7T~ z21UqOh@ZRzgg2ZVjX)$pG7=KZPmTDMo8+&;SX2M!nBc*5Q}hP&Y`RcKMV7n~AP zimyu?au0;$9qD+hREOeIJ(a8aj>oYupI>eD4ldWryK6XRm%Ow97)+3rz|&Gg>WYFS zTES3nfF}39mGY~DOxHlEj<<6I8>&7_xReP$p~)J>uK+c^KuDOyq(1Pf84LzT{>Qa? zbHMQ!S5c9R-k1-k^_XKMd0U8t?xuim0qD|_5f9?qVl@}T{ZrmHhVWYvs|_XTyY#H) z?Wfrlv-=GaIZGx6#gjW9Ui~dEX+HQRiAKDtq|$G3$AN181wD-8VuD zu9w&R5;+7zmV?})0oLjSW&;rk0Y%31(GMaey!`lmr=c+GpP(|0q^~^PLog!QlTxYY zAW4WUpO>fGT%!f=FIos!LAjrmPL<02SI2Cmo14JfW0wGlLker_txefs078%fMxp}L zf><||W`C^0#uiMPf)N)UtRSr=VkorEWfWO;lfxETJl-`6LCUA06d}_XEZR8lzB_Byr?|=O+VZ!OVO+!gpFb{! zw$zT9V_=@GnZl`Lgn~}}Vesu^9cu!GZXI8gp^(#aIdj4rj>Eh0vEBDt&fJ*DoMdYi38)gkhsX8>zDnY)@aC*nXnpv=hoTI z`QF(Tf7aTySl35-GX8q?uer%qWb>O?f0GJ8z_T2uiIov9XLSU@xhnk}^=jf&Fo zGH9gZLfj9{|G{Cw;+ozm&%1~F!s*wKTKh?7YMYL%55V;el$Mds-Y1S< z0PMNF9+@Mc+^3F1F{43*-TmsyTwhjx$^#H#yb(6F?x|iPx4?HCklKN7!v#LKH3JFo z_dV58HgACCOd;)FmalUnktQKqWGd1X6~IQ`2dp>mIPsjLT>AZ$SZ!N5DwRUOodZtf<{!Gh*> zL3`dyk#SprYqJ@W@q`ilAQNLhACW9Vmffw`n1|lXf_lW(bf>i1h5VPq6!dvb-T=~A ze8Q=dkP_FEAR43Xp)H)2+7kO+l@=VUB_~`bVQgT!HkMUi2kAqb-spZGqV(6mcJ{Tc z;#h)9lunE27sy2U-)tJQpe-N2z8`En-$Mio&XB~~>3Ji&ISyuR=qOf}(7Cv6Zs5&S z$Kx&?4F2p`+Vq0Hgq$*ac^zcQ1uBMFRgm(4r@~HNo3|%o+Z)ZG>k;9G~&-ICfehRK0x@#ulssNq%i%BNXP z)Bv=Qpv*g|)btyvQK44)^gFDUX)AxXgN_}dUK&Dxq|9J%3xz=!3w3VhgSmyi`Gl|B zTDe&qtR_*+-jRABEX`yQLEn&qrXL4y_*z{|B`=ZnrehR4=lJ|GIQ>dzlMiI=md!xw zO@}m}(1Bd^5rLNht61K2^+v7~g~ymUe{#83Qo%NnckyGke;g zlUARfRbGa{5oXzh?hnPWaapdl5YgJ?f&-p)h5RL?GJ%nBf+J=@qn0W?5?eiZ?#Lvf z2I9p@T2Qe?BYLG?9f1XhG|odEWU!`&V%BuTi4qea{joMQfz>`SIblUu&|BK}_sx?M zllr`>rZRAifxb^5#G;ceP=>l)!F3CP&LK3!-Q7=I(5}={1_SGEUGEkYQ$4EBv+|EK zl;^0gFyg@Cr2Yd!_HcvvfF=J%u{SSzu}9=eob&7HXCO5dU5jAZ=`y&Q`UG*W$WGP{ zOym|cUEn3ST5e?VvV=8KsjzW9sZ>wr3XF4!Ys|gzIuI~reDF0Um=_@cssl|6dT0>+ zGjjkPn5<3&2te?}wmLQ1X69v0K(QYA9<@?Ec{KI(979G1$;8HPSh3?n4ZsdbgE~u^ zFf31OkEohLNL+zw!Y0Ac%1esQ98je|BV#wDPBKjTX)dxnBmoFg+P5NUmX zvM9-n&_A-8m7zJ3PH9+%Xx1l6RpnmLG(j;)RDCTDs8@OX>{H{SGy{;F0Jh8-sy+OD zjhfh9#VU)xxM_O?f-I`o9AzrnW?i;m=#VsT8BRl>s~mLw6>=DqQS3GyZwX`LLT)h` z0zo471Acg5f*&3qstRl)y9sK^PW`}3Y6X@SjV!OIPt=^Who(_EEm+mcX^p)Hj+R|0`a8bY-PHbNaWs^JakR&O)x{n30q@Lo7#msEjg-ETN*}!2 z>FU}9Jt-B@1-*CxRZo4lR<7yt+cC%DUYcoOC`5PtX62MH!W|p94;7FFd-T&`kaqSA{^b1n2$&+~lwTtp`BL3ifwV$CojGn5~ z=n6?sj@i_)@WuD$6dxleR;)Em?0MqFF>b9T&RgLm*<=e}kM-^B_nk^n^JLILbPkU= zSm~kU9i*vEb4nE3IrO zlq5v{h`7;ScA)Zbibveo^{&9)HVYr9T^lFK3t{MWAY!ve+)HCRWH_)$gjc zvhowHXjr2)(RCivyNaj zEtecD@rD-s5cQs*NwOnq>`(E~`&>RQ2;9eQiC%|xuh$jJ%A26||>WaS~q5T5f zZ^EbYW?Fi(OOy5>26vW5b1^sWdUC~QsstEUS{Nyijm_lYQm!zJkAy*t*I^n;e_5N! z!nx8KAWsMi)#7^hSaX7{XP`j0v67QvvXjqEk7kPdk7lOvVY-&j9@U!PZiQW1MLDgE z40(sLM$37xY(hkY`q1q=7|GH=ZKtDf8-!Ze&%{oIWeqK6u6XD(ks~`>$x3Ii?Dok7 z**jmxH8*fFLW}f;>>mjS+DwN3XDmohk^)%FBJeN{H0A@0x)(ZA61t^{%yeZa9kV07 zDjY1WGJKzUNUhUlD8K|0$I1||)?jIXt7bGwm+=?5)gC{ZmIQdwd<1pNwmJ%RGMUw0 z?os0zeH|H<3+Bx5L^wC?MF8jR%wEY97HlXdBOPs#99{?ng$tcQEl!;1`ifO-WhjRZ zDvn7PtXDo)s+aiD6?{U>M0nY}pY-?F=OCq6Q@fq%Z6lp+%vpnif!o_{Dqq*f{PyNo zrY^PoS(y^C~-|J&z?Z+j-#HHN#t-L8L4_2h-0>7)%<(w^5j?-*ohJmtuN22_sW9Sx9MO{ag8M1Cn=MSR%D0ntL=ee~b8(WYMYGhcjzi$Kn*w zQh!bidX00V=BG4&JRGOqnQ1RYMcr=sFNE&xSpi|6GlDjJlm->7uz~=La~Kf=Q?v=# z3_wzh2|_aqVF2(c#0fp5V9|M*{y$|rd7W)Lm4D*@G$CcV7X;_ZWGX(b_AL$Mqz3{} zN)$13q)^!;bc&d3|5nLetz}jb&>lQ8)J7lG9Lu1Jz%E1jz-Q3R*|w(hfm8TafN#Xy zbDeU>zl5bt%n^2})#J9Egnmd^89AEyY%WkaFyMDF2;$Bn7Qi3g`)5ijbY7vu3UmY4 zoVk8|O-fFrD|hRi=cHSPdM;C!xdB~rRL}ukOUXQ?`7PZ?T&p}lr?3Gkt7|%ExCO>N zOfJ!Op;L;&=$|X&2qRGQ+YhQ{!gNiubDeLeCc|`Nv-LIHUmb^~wzi@z9jC%@-F3QD zMM&Nl015@?0i-DemmLXyL%!O(dIRM<^(mK%vDDUZ&?)x2W0-H|Rpo8087hH?8OARk zD3y3>n8l@p)~e^QqWAgIwfUbI8|xsJ!(gI?V6>1hqCdDmL6F1%Qi*ksz42#ig+{J! zm!f;K&9;Lw8v8_!2i7yEDf=7-^JY+%ow(xpR3Uw-q7CWR9(e*S}Zye*%f35IcH_p7&>5b~ti%(0p%&Y0P7XLNa-jC9{=E9Ufm>uwWVKuW*7IT$Tgl(N(};s)GF$&} zMWk63>N`Fipk~_faAt8#(9Vaa>99x7EGExm88{v~7ob|TYt^h!l;>HYU~SnLTI+7Q z4>9yySi`Apk__8x+PH-pb!)zws>wD(GD*7j|0ZVFz#vzXWn^ax#nOWx!mdI@Hy#ol zs@z=RaQB?BV&EI**CPd0F=B*IdQusVin8`Vpo%v6Q_4yEX{F8iHiJE)&56i@ZXaph zR4-rijZud#Ao%}I0bu;ULF)hi!mqP(uyXuAa{$(>e{ujey?h2e*m8MBtrGkRbIZLX zpMu~h}7=lzG4I0U>_h zd%%8NwD`L2*IQo?(>Y($47aqGN(Yn1z-alk#`>zzt?`7#`-#(vtr z=%}AiDN|#!ZZc)o?Cg0o^T2#UUQ1pNrEA{gaYb=OZNmCq$t>)A@BS`n_A{6Y=w|S3 zXf&9kyK-5n@!4qVL}#+yBd)sK^?Nzw>;62{``WeheWT|KBl|w9>H7FU$s*f&VaNK$ zkc;N~nv~m2B;qRrJe0~7_p2V*rY%K=!HO;RYqW-a ztMS$u6oRuAvV9MKe>@>JX(VPuN4GI7F^sL4lFj6z{PwnX7fw#?W4{yf*my}|@FE(O zNgYng>Pr3h3!nKh(WCMu4ehnAR&Y#dw~_axV?FPlN~x{-Dtzft${5>~XnqaD$mpT- z=5YU7#MC7g_o*jF4$sZJB`(u7s^5&YO4`E@Is9FPyQWqzjO` z4`7Fp0n2HfFH64>OZtmCUwY6KWU}JIAQH4KuFUh_v1#do(`?Ct+eE_H=)u_+iMX)g zIr9&S5vSu2T(U^d)!1S`;X|{b*$277*%{(}^U$IHRr_h=!1A!dkluRFE4zdctT6W` zrtE8qE%U659i2mJV@?w@G@Y=-mm<1PE|I}S|F{&X%U}^Y`w(0DF~O1kRmOqsX^lHM zgBeZ6%NAAaM-vl@k0Z+LwzX>DJ{47Pim&kc&w^!B$%18SqTm!KvLJ7GXx2HlXg2ug z7?q_a`3Ngf_J111mHAf2h38?5F*T18MIpcuo##Ur6N-f|_{VK`$nb~yKfxcXEa_Ke zEa@#q@c*mt8%J!OCq)zmA4iPYRoBj!B#PVl`)59WjORrBk2$#LS^hnve)G5CJ@b>F znRGgiK2?bp$5M_K$5D~l4 z>=kK!xiSb`EUwl+#C4{^=qHd9FR~{d6SB@O8{gj)pAB#zp_RZHT*y99U2E~&8EMv*FZ`C%MzA@Qp$g052h4zcu z)CzeY`s(vdMHyxV9o<}3iz6`{Ba#S3*eDBz^D$p zu(fNU_4Hxl+~wu8D8_i#9?}XZQY*Tgwvp82d+^AIrvSP25!McLK!Z}`h^tIr`t|G{C z?Q^7SN0)0h)!wl&`(ozV@p#PSrUfGp3ryT-P~nZu)B~%CfbmkSgS<+_p5_kpg;$*Q z^*Wh+f&sO*X8~42#(ir8uz?w+q(}Kf5vNVh48i@$KN{DwY}0V=BrNri5@2> z`jzIxN=7a_CingJOp7iuhP{tmg?t}}%6mV3YX^hibK#YiVYhqzDR5tiqH-lGy5n*` zM45jXySXl&VA~v?ul(|sQ(6^N)T=>tU%X?c<|6E2wrFBh@$`QZAIIFyE;=axiDcJlGw zEWT1i7^dkhaEXXD0jQP{Jg;=g_vL9iz!&r+x8mz31f8USK@GeGOTTBj1;GEwR93u} zB#Z=^4370WFwVUsdZ@Y4K1}s-pXy)uWsxaxC$_ACP;&}jxU*jJBwL7#v86d*$b~`; z_waj;hVxR9T+t5HgZA>tOr14?CLq&kDf0ppp zV<&*tqIIB1fx~!f4TdT+xM-=agH9qXv(4E6x&82~MDF|CrMu+9-bPBxOW)?W6dJt) z^ETEqj?-?TtI6kjVfJ^;@7W#URgs#&j(LEFbN)i{quJGraTCarldB zV7Y~+9uYykH(R@sc%R*cF2_UifYr?>>{xZ{Hv7=UI@~HEi$L`TFugjkk_Ep`4#i$U zMR(pO7v;UVSflpO9fnK7%_2*j*oh5_F3BY=Gg)^Spwa7DJ&-k}CVehDIrAF>ga0CB)kND!Ag0adREV9O(kZ&N5oN$+y?5}N1u2&a%B zA(Twe1$u7>K&Nnd<5|D0$<=2Y_bFYk;)~9g+~DMjry1ER+F{6v!F`i;S^g zq!s=ZKuiR))bHQwC21$rU8zP1a0N=dV8VH3sN~PkPvGbFmv9xK4@V$_ZiN0J&@|%` z9m!S%vftQ6`1{UbVP2IazdS1oyTAigv>=g!ef?{T@!k9-u+z?h`Ret-q^WB38C9|Y zBB^QJi2f2;Wa@)1T|3!t+&uQGSof(tc>HNBT=xaY6RXOyL!) zuH9Z}GoEws#qa)+GShsPv<};m7E>)TR;ivg+vtKA3-;wJF4Gn>;brPj)`{HYpDBcw zxt8{GuOTR5@#PF5r&~Yk$Q#ABtP~hJ6CwXic+K#k2?u;)S4&MZ{A;9Ug2;ebdEr#E z#WdO~uxs$#DgZX7au94N7__XFpv#oHKa`b<9rJFAA^e-8c`N&bZhe8^A3GoiQ#Y$$ zGecE(lK6WQQm7vAJ;uJGOUv#O7G22R7%wcJHzNuo_8t%|ypYQb(--%Dz3B#I;- zg4diS0Zit(*m*gUKO>q%pn)4xLKr8SB!5yg0Sbi^`+qB!dEr~)L}%tCB5V32Az#m; zKZbweXu%VH))DJx9UGVM+4HJFK~Evk8%-2Fz$?n`8mqYUd1Z)iSrf8DLmyd{8Xfww$$B?SKWeNlE{5%# zjW>^DxE;W=gIZlQwV|ipbv&*fo4m89psJ*ja~xca&#z`pGP5ye4vVwxU2AD>qZVqp z-W+}VxWv@uUQx!lD+=h_4X1l}eBhAOuKNCyf~U(9|x`nyh$|tvMBsH5Qym4=#CQ@42*{=_*p?GF>i% z%%Iut9+U2h9Xf#+F7bK_Z4eodEEzzhgMUQD<`BTQ3`cs;>68E5rqx2L$f%=Ef z1R&|dG(zhW4fL3VSq1@vusXY51CiZHfn?@h05O0IA~J~hIf2qyW&k<#ECa)peS*yt z#z5{Qv)uRqr4dE4Z39b(CuV(f*Lj1aooxWAD<3m}NSb8B_9!3ZLZ&rlb=(;EWp~^N za|5L{W&o32n)*w$6Z=cNW9iQ=xDR{%;NO#8nz{efb(z+I=>OUHr=DpMsx`U9@t;7B zSYFwooN!UZd1Lx&5hcsjCQ$LMM}Q9X&s8dcNwvtDG+$f;r*6QsEZF0tYjc77SHG5H zw~!3}8Xsx40kDb}v3>?Gn=E>33{!BNSBBe*p=IULK95so{gDI!G-$Cqoy5Bi+95G=x>n8Zav$oV71=8o%z~%s+K>pkX zZ{K#o1(72Y**@gZxup&=rS5Yq1-;n`e`J^OFR~Tuspwx-kO2^2?=r@8&;(O@A6=wv zc+gM772Ws<5Q)QHz%14;0K_r*vWO{>gLF8Bj26oGaeiipWLvviO^QjH>H1k>PI(U3 z;R$HZ9@xHG5tQv4smr)}{XvTw%RWra1e(-;i7DF7zqDoZ%vu4J`k(3KJn#KXLQDPl zkJID*JL>LwcFTwjF4IUj@7|Dw7A%74iVq$lj@)C^L}zJgBB3YmnnH#LY^3N& z76UBdYzFC$87Pr|*$mT#GZcCJt`xyp_t%`KP$CIyj^qr=LUawtLh(Z#(gHazh-F=iP}NYD zy3g0Y^yrJtqdEwrH*B{Vjp(Q_e`p%8=YLzvGMK5nP+YI|)XbkgM8lt+3)>KPM0w#} z$15JhA_G6yZUjrKo5z8#R1hTp}eBH?V4M1q=G|E-)Z(@n1F2vf## zd25noWTKJ~!;!@`yiiUewnd`3C7^=LAxABI%%Oues3^?1z?rQ^4h#rSdS<{Q&AMU; zUuaoBZ6QjMW_e45pq!7~#mf`cR`&AU(JGvoYxqZ$6g55%ZJzSCF~O<52vV@D<)A94 z3pxG?;@Ci5xX@<6tsg^j7~YJ%hmr{UY)@Cik~n@2SZCKqJ52a7V{6ZFj`NEH*@B*d zAx97^&B=4#U)=kBp*u-Pwf#sY#%3@(4I6yjW$nOy)z+O1VreY~rC4;wRl0#wz1gUy zD0hnsNz0e++GMkE6_;XTvT_n>FbhZ>MpzW94)t#old`Um2K8l-JRm#wVGTDdN-=w= zxb5-R>aPY?heOoRT^Q=j!J-v1U<{jo)wT}D9+!Y1FV`g{GX?!}HmY7jmqcdnh6dG3 zmyh1GMS^l#_RpQx;)A$crVi424WcQV0M2hxZ;HL8{ z|N8e?V6@VCV3SL4e(>~kISQ*I6snoxA3~6&s5q_a;{S$k;Y08Mk>WG@E<0y>YqLe_lAXze50MWKEIfuxt!SDkXX6 zIPbF9Cnk9lxR_qT)y};;P+`(85#ps3uhTDKQrbXr-pHP=0-^ajb55C6+`xJu2mvHU!oC{ZK zGG`5+lV0^;8%E6M?)YAFj(C91lRB*$GM9_wN~DCMKUOoe2}(kW735tra5nMr^6Mlz ztd88xi+>coUdIWt#I5 zjb6|hARzU39~~9uR(JDof!rPz$%yA*VHg9*quK^U6kZRKM(gK9n?L?B=LMN>Lqt96 zu%#g*9lT>@HEHOEpDqXmd_51Gk3beK*AqVqfA{L9{hSxkw$lQ`6@<$m_R}^gm`%n2 z>tPqmbVj`pjAC&d^#*2~_h;pIL02cZqseiU=LO_QdDc&FTuA-4KaDy`vQllzM3O>m zW!Rv_QPdmTzdcvnaXJsE2@lav4Yn$s$6uvY)|Vf&73>>62D2`?0Q`TqVIxs|{H7y& zMURmX`OPLp1(c_Vaaex-6E8x>L+1xI!cNQQqi#Eh@&D8IBS6fwFJ?US{6AtJznS(C zf|0HDAoWqu2$uE}5Hd%fLggf#3ZxCX%|u=2{iA}$V-Z?7X$S%=rqKGHfX|wm zi`p==2sI+5|6YTeEVT(W{fiDz+u>0#)ekM@eX5f&E`;xiT7%FJg~DS{+6HMYuVM!d zw)HPOx(fWWED&(ee`64>EZVDC4i};VSsC`IK@Pp-kTqd@xZTiR?GC*rs&;t-4fHzk z*^@_at+WVejoOJU3GnnnD%}p;cyVUcF&YvpB;$*(pB`e**~al=92b({1o?4OR*Wpf z{_-ChAN8fRfZpX+XJH@uU|!Lz4!`HQ?K+eiTN;0?F$LlQ?ybFR<3&4HVN6xpU3I9% z`lNcaB;~(3Kc_m=<@ZIJwxNuON&iA`qbSR3W(5R{NOVecF(03d6y#C_0tvfj4+`=9 zLV+SoxThInqkst{I+P^2{@`GTwq994@=vL|6RCS%zm1by2wS+*DO9lMuL=7scLGIXnxS{ zuz4J`rhc)srjQ>GQEVVAOsr#bJydNxcg9j1ZeI9_wL?BDF2^$BL6jh9p&vs;`_a&E zOx4sI752QhEke}g)8|$=qDyYBHHJ$AoE2A3B|W24R&NR3pFmZi-vd-uUJp^3z*XVW zqgd9UhLA?@QuY}=PvXL~>_Ao|>q#!#9CgM86)atm3oY$YkyttR2gcxBoV=!JnqtMo zdK25+`eaFJSG~C&#;RQ;&D3BTegQm#EGj#sNXHbgjc7Zo?dDP3itMG+Rtn03HsvxL znx;J9{k9vsfjFMWRCzS!n;HApAX#75<|xBZYzkh!cI?l)1Dk(X7NRZ0Yit7ma{S2? z({Zl(;?c@;$M40@m;5US?eGQC?akiMx9X}WZ=QItCP1Sj8`VcIaKaOYDnn4EIdELU zzjykc?kgGsP=HvN+jv4vX->zX zf_)LWl?w7JD6x2F~?oz9u<2)OFy;JG2wFQnFW$k2YcKoHa?yk4h;7tnDS!jC?@ox^l#N z{L?1g3nQX-#1B}WE6Snor6u-_5%#Q~bJrR1_sx`8jSlrX;lY~>`dHg-+q9GXJ)i9h z2RN}E{pV{8i;nX+;f5~wSr{DorY#hh{UG%3Jq066Y}YrfWftpQoj^lm)_}?_ay{bN zJG?;Q$Q#*wlfSILEaZydm5*7h^JkYbEEs_UkP|HuUBgq9&fLklD)rNgg{{k6?hwd-E{9yB$pZ}Mjq7K; z^@ZZ>_!}3z*k5L~Ib8UxKXJ?ET60JC2VB{@W4~h`vc1oH#xZM23op`S2TrQPR>K<& z(2HCd<{z>_CH{M8GHUhh)Y=duw`p?4Tf8O>T%~7nMD;Uq_F`h`Taq!=j~!&17?+K* z|1muhdzf87HP0kVOe}IBlaVbSI%VS;lSY9OdZUDq_JIYf03Z-SeF7O&@j&EN6NBE` z{pkr&YzcuaxBmg9Eld5ght0}KfV1rQZ`Sv7JHM!9o&{d=dwZc}neKS%_AfbXc0D7c z8IsPG<{Y@@jSQM*nCFsRuzF>|qi{(5VY=S4Nm8Yr|0H^(ZkOL`rgl)*FC2RUu@#HX znm;Z26}+^NAUALtv<}_6=kKSZ?lRqqcyC5;OzgROd57waiZP_)`WIE8%K0L~;5@SEB(^la)zXk>*NT8Fm`3CJD znmxX;(*sO0>+~;UNWx#|q4#ms#u8|_ObN3Ne^ad$_z-5BQj8IxlSF+H%vtWJvy(TYp70FrVygv@Et3u; zM4uf3)h3H>uOX9C5zb7dy-RxQoJ_{l&(okl;}q?~EZ7hMwUn7+NT(eQ<|ap9J$tY& zhcjwp(8`DEOR2kT?l*%NO%(=`HebL?u`T!G;c-+?6gxzXo?P!%!Z>%`RJDrh`LlX+ znOD9fwOjnsU6C+*XvkOjp@m%~REICmx=-rYW(iM?SFE3u+MA9umD~Ab`~2ME`JH=P zo*vjkuWR)?Nb{Hnn1{zJyf=g=?~I0EROYfI;J#OgxdVwJMs)+*wCH zR`V&Q{*S?k&%s=aZRG@om+?`YYtbozp)2OqP|mh(#xXt z1bSbgJIXV-`Cc~=+ya>dn^b_t1_Waom>RXC6Oz zp6;p++fAl%aj$7y8`AxON`4>f8(~cULpj;`*^OXxHH{&7u>3qrIRwtudF>*Sw|1y| zoCtm#cae1sNFFowegkEXBR4G<##SWCP($hPvA?R(y0?CAL!UKI(#a&k_DoDFjB5v0yp2B|Gbbnpx#Y+-h^uQ2IZ*v?aj||nzhX0 zz#Djd`u@CGwW;~k>>5^e4@5(J29;t_f9kc(7r$`uv254|$Pg!17j1;5neQt;TL$9$ zMXTBkksD~vtS-8ML<7qLHhwaVKtn7DnKFoh4K=@JZ4d9;3CvxU0}o`mZy}F_&=DXR zEduX7mU-bwhdeD-OC$61-QFY-RhMs)&#bNro(DSaJoa|g!<1Fu&s{4$USQSUlv#7R z#NdmP!`giUuv_G7u}|Kmq=;O*kJ zZ=vOScXD>cCQ}=8?(AyyjbCehcyp;!70(q9Vhjr0jlVIKM_;#c<_|Y#( zTw1w`oOS7maQ$CBQ)~4drrI>tCR5i#BTqpFg|P&j;{!fFI}b+Em1MJr zcC`s32yx#n$LX5rmH;(3W2o?|7D?qlXgbvB*xy@PP4cu-SorzHb3B@ZMoeTrNnY9% z988%d|5B`g!40R(p@ODFf+%d6On86MqG8N&Wgq-g9s31tIaNI4)%6@~&UqeaURE2= zrV_qlh0Lf>X6BV&Y$&mo5`{>GEa8XVM4BS6>RJ;qDXS1AJQ7ZN3w|znC1Ew+Rxa7Q zTt)v%Q|K=#+eCLwe7q?Zd0y!;--lWyVeUbm{@Esb zD9x>58TII)xq@=yC5HOhmw$aK>AYN%UR!!qp%tU3n~v}EC# zNqq?>@GGB)%I+{S2@NEs$X$1#f^Q!kUqm^|rfqk>P9gwU^I5Nc>5o5^YqGhFKS?+$ zH=B5=*c7#yypu%0G!y%^{4iTE%^WoqtZL1I|5bx%*PpcjKay?Zo$K}C@^DN1e^oUB z7E&3)<0k7n=f<~a+^r9Z=KCo!jUMA<{Y)i%s`w(H&MWodY<8={c+D5$IK_-BU7IOc zU$$CoT}mk&0386xg~)n+UAM{jkV7&p4(ANO`aos19#(EWCClSyh#XQTN`v7v8T3=G zYxST1I|_oIk=u_$XjEyjjW}=Cf9|HhpBLJ$)@GljTp~7G`_=x>SpC9i-y1`_^83j5 z(MMCojOe$y%I-e4ba}bpW1jCQ2Fex|sE;fL`$`C4aPh#X>|b*6`(8k;9P8S?k6nJE zkUibCE{H2Fmd-|}M90<>G)IG=w!ts+^ImdJhd@S&`_9QbNMKR!GjapZ^%A^Y05 z7JTM<*dK@MDLcB4n%ONh(f$v{zA4C)C+K!;d&jnIYsa>^W81cE+nycUw(Z||cC0)9 z`*I_0d=KA4S9NAbboWD7R@bS_b8K8|IiU|suR(8N-dP?(QwaRU94oEqbh+iAH>+}R zAm8tBX*nic;8}4U>T$(5;=J()QMW?Jzx$wr_FQ9d<2exHO$+zp_3+c#;p$#u@^m3C zuSaX+To~u=cMas_S2nctvnOc-fGhg|L4g3)K3#VIPnK2Prx?sQTQ?*Rdi*2Xti&q<>lHm^@?ZhDd1 z={02J_wqVb7l}ePBP964M*r1}S!daOu0}nWI>UC7n_M^@1XV2rDKH=s|hS9GhcNiq$gPz@WKG z_@Cg>v4NZH=OU{mNg6aB`FwQF@qhR*{cZBMvFpyzhUGR{)5!{98?ZrSOjdrfRXLiY zrtI3+Fx9w>8qrPn6U~h|DP^TgPt{!<8lcTHiR;X^pr{s>s`KoddokUQ7(jNCzZ*?`H#ck!G|UAVWu)5g9{oax^Hun8&W3LW%?-zn z@)rm@j`zW)nN)D+(}+@E`yW{Dqf!=7OHGrd~Q|m$Y{H@#U+117! zbt&vsO3Oj^x~yx7(n&P4B^hHHIkOCEl`G`YAb)Q_O-OsxpjI#VQUuq~j zV0{Wc9>rS8`+>1pm8k3gC6FT)#n>_EC0f^WSeSZ#x6s?6cAX-547TrPxo?9&mWHN4p1TlOmPXo-qejNu8EE$QRwhEM+?;RTaS7xP zxac&Ig{mK+7O#QeZ2nS?JBADPZ<+hw?h_(OqSR}m@9oGqISD+jNq=59#<+0{k2QW_wGj;w zi!G}lAk#_gs>q?#5HiP{ijvv<9=H_UV2lzUlSBP^H(9t{Dhl>i-B{O4vBjbKUNOTy z2lQzWuDN8SBh`8J__E(MLOUFvkmMDAq&Q>5N(TPQDXI~|GjBue7MFCX7Q;Mt5&P*f zC@3h~31v>kD_m~wIRv1w?+a634w0=cG3aEQM%p8%Ra|0z$xf_VBq$wN)VbA+x-_cu zI||(1iCb@bJjqEv9RfD?9OvJi&VEOWX~&`aH%Hsl0q^F~-5(&U5_d#zbdXSgZpTuR zSV@^~ZY`++FLXdx)(}?IYgg8Y?zQ-++K{z(T=h!fW-EwJ18>^MBR1obtv&gYA;wY` zhE9tfI257|dPWPFGQ1Q9sSHS8*SaExk(t6p)8!d%@ZvJ%PVDaZ>+K|lmVNKfdi>$l%%k95OoWqT{?J7-Q!W({?$g1RC0GH+>ZL2%`Znl3CPv3!wL zdwk?rp)EfzdJ>F_(?8^m!YqdR<_ebw?AAJfcU?iS?S=PuLFoROw{qb%MD0UPB(_HJ z!*&#eM#TeNOsR3l%rh5uI)2Tw1-6TGX=SPk*7pis1=7wuxOQNxOMiYoW=DbQoPG{T zuDuSo{(Lm<96S}M-g#gJu)GV%j{kE9urs4{2cZXJLIzQKdY1 za#qLG?*7=@lpHe*qVFEAD*$21sY@=FZ9JoTm{M5Hb?PNvvQ&RLqqTa%M?Wuvc1M-u zZISVFTTTQNxuw!mTWiQ{-8QDYAjd|Z-H0FV=d7^uEl5kI0%UgH8v~muF9brz45mxX z3pjS-uc@fpk1IRGO#M?+5{wgey4EV*)`n#+aub4IZvB2xQ?fa*VR>Jn_QM$?b9*KJ zaH3F+?x4rb-0-b4C*(zLoxkC#aoUJsBQ*MxPMagP z%KC0Bz!i(IZlWQ8S2hgxz6Vd3Q~J1hAcD3Gd!|)xfIB;clHsw2T&=|+Uf?VgYgRb< z^#5%N8}Y*!jsqVW+N@9ovgwp5d50w_1t7ou1YCyA-)05 ze{=5e_vI(30Eo}P@mPFWXH#hPIFry?T@^?dOYqQkro5ut9)$L7z~>ED?^_41T>Ktd z2ku=6{&|7l8jk*Z_f`Sha8_}5`#Cu9(0AMdDZE|j^z^c8Q&Jqe=zdISD;Or50uxuEA6G- z`i8xZDXb_$b2o~Is;lae#fDeHvrXKHCUqy5oXPq>ht@?!;QRPknD{hL71oAI3Gguj zTy(;U*Yck&771`keq8i=@e560tBPFo`is4K|3^(kSdG!g`m>cU*{~m~7FrNxCm&Q6 z{rI~e+t0(}g091%m4_Skkf$`*A^v$?_8Tuguh8KMO_j`HBDzrH)%idDx3;-w8J8)rpm!nB{A?+GkfQb5qTs=Mw2KXNJK{bW-L$}t<55o>#m;A9f z;_n1K8?xh=M~RkD z7q=~+VWAhw=wrA^oNfo*ae(oP9#8tT{MPN9dJLJMJ(?EQ3Do67=}8CGWw0a`5^^=JLdsk8>KP{os9NtfWYPP2 zimYQcX&@CCRj0B2#X_^?J)Al2*&!`1PQ#7ffd{Gcu4#ES7s{rKDg350ol`wU_X#Hr z*J0asI=2mgOrPf54@!9u3*1G%*=el|q_Batxt>fTD zJUeu(8_1=)W!6e!Mk-##pE9&)}yF(OyVbS z;L~kUYpCDUE?eum;jR^Jn%UJaXnJ3dB=%wsB-n|u(i7PVm_V<%D8vDGcMz}Ov5wyx z`_MI2g@QYBS{z!1F)*wnNd8r6e<4FZHMQ^}D>2@?CWHMeGPoAUz|mrx;9@`>dDg;P za(#$-pG?1U!#Alc1#9!*4_dh6l&{=-I_a8rEgQooXKe4Zh>&7{mP-+jj(~Gm2Zp|d z=%aP$#nG?DC0d53!#H94d(wBRiH+ay;~b#9n{{K=!XM)&X=McDcDRt^@}jDSy%@TzGuI-?}stPdr?aAv(D_GVZSKJq6lG ztj|dCpnFHWaFE9;m+}R7(~iw;ZXAP1d<396gslzTYhll!<&t}GDU*7fSdlMtOqgWH zRkw0F?8~8dVZn*YrhjC^p~;~iW{W?UOUul$@ziov%oJ^S zE8sg<cn!3R)QfPe{$Th0Ct-1H#(;8*v2v7P=VH$R@woZ!BwJj z5EkY+A}h(va&yoL#~q^;-}-oe%IfbsUbIUB@Kd%v}YRC=vvC`-ly z9V4p$_#fj#NO@l1aV$WLUB^{G0qa#Hd9%)>t!~L-_v2*^3&-2@ zUmg<=8!O%C9tQX1=W{)%@tzk50Yw1@n*1%%yKUXmYfr^WoVIH9!f*N!@CSMb*CPO} zAqSV7_s}``(*!~;$>6oZ%qgB!GQcP34ZE6?&6l1MMd+MyFV%E+EIN00EVR&%vWmS$ zespRpxpfLLgQr*vpwVK1)bNUvF;8AiM8fW}e|X9HuZJ69Fed05g2!GMpuA@kELgFU#;Y1c2ej+sHr8^T4qt z68JE3zhmHfGz;-c5SM1N{!WF~i?2o#s+jd!W!!_&NH^z|9 z-Q#g{UT>!{XU2#Gq)ytf%Ry+-Pet$|F2T{auCIUcM%e~slvXC~(RfO_JBil2JJVGX0>j{k;uYyM>V|<{$pCaS3w8Jc4F#|tO45!il6U{(> z6wK~73kD6F8IuethB8tcFzCjF3BBKg8-*GCIhWb9w)#hf1g$uP;sN%8M}|MlO4LyX z$f{}sj-aK31J#S5u;yJ3I~5GfmYaGEFtAzb}J&Q>QeSdE1W7|Hbb0_ z#jRs!5lt5d*V>t{UksFG?cfx>K=d_cpnI4w_uE|W_B?Br%t2|?P0|+aHGY4DlWP0! z*9+9Aj(V~~&!U#6c^0-#;->l z6@Db|PAbk%jD0{gc7M?qk3L)b4U~kUi!iF6M-)rYt6RKh`!RBBcw)rcN2l{lql0l= z8OH6fgdLF$2__q&&EB8@w4)LcT<9@?;VW6=5oM+ZaN+9bx*Z>OPY-fb4d6QsD*P?Hn@M= zq~p%e)X&mrPYpAJ09A?Z_>h6ft0??R86i#}d#X=B|=R)*LtjHhK=AsALS5kf{& zfkOP2@7qyo>{~(sj+z`j>Kqdw+8|kC()u`~Hk7-|fm~^UaSSQpozBLB`VPk_NB%+{>xnA&<<2X@u<=pXqs5M)HF& z{{bJ_Ia0*dbVzA(Tc2sW} z*T{&g7FmMDLLJ*CZ(VDqAnNtGzj>lX{@}fX_TiF$&$R^{8%jRtZv20XvNrPm()>*d zLoMl~oGzyV(=Yjx&xacEFD}>uEi1U9l!NTQk-05R9}014r~5#!OTYR&v}_N0)->q= zy}hObXMn^}NtzZXWgZ z%$xs`tk>IaTd!uC9`?T#u=g6206z3~*N&t~6QtEnlt;VmsjEDFYmt?2e_s8Jd?qv8_K?48ta=n{+hp7Q z@`R?IahNy|keB$=U5?p0w%e@?x46qA`n7@0si6{iJ5`L05;IdO$3|+@lTvrVB8uZ8 z5-B(J{1Ff;x`e`@nM_r9OnY1Ctk`ZWhY9&e8>(<3IbArWSZ@k_GS!eqw#GsomN^nX zC{*Mq8H_@Y4VBqN&Q;jl{JR;&Yon)ja8)|l@|rwBiqYy9{Jdiif3&tThm*hcKGM7t zq0K(&ywsSDDHpP|wQWY0B+dzA^F~F;`AsRt0gqTvUu#rpK+Yd(XxBDM2F~ijBSO$j z_TXx2PgKX|Gxf3e((rv+^b~lC#&TEAP1{+fPBDBPm@k`qr5)kF)HOw5t-kr?srW^b zX$b|l9Qb?8R9gebN0w0b+HMHK{?ETDhEjCQn)N@QDML<#p>Ch@W0YMy_s!)dc`D%R zl^XotA-n+h9g*X{UHI4>ONuXV{L(w~cGE5P=j}_f80X3qyE$5mj&rxDz(JG8D7lix zJ@Vu4-6|FC#JRC_evdQ5Fp~y5sH%c#bjWJosH+X~ZSZ#>0_j)I#+orWF_kW9myo45 z+Z{XUnVqbT$JITJ;B@LC`#!YR?8Bal5Uw?KS*2L{=GiHyutzgq{A*STD^Z5^-CDiU zCVa&I&^O-;Q4^mH>UJMHy_aWFinF3@Cozi}d0L%%t{wxEstImK=AIsTin(9@ZIE?y z807*K`!03MXzS>4gVle?q{L=*U`yL)Yi1!I9k?+}gb-xu%!O(@D_0NA*Z30RJ}zQg zJ|{|Ncd#9I@d({G&vj+%eGZ8G9=+iC_j=YSP%u+(&NQD#>NBLRO-?+EX$gpC>9<_E zJ-G;8mX}@6$$NNO_D!YlwXi2!RHR*xX|2)-l$OvtSLwn2_Mo;` zOgo@^&`p8&zfGM76EtRcV*-vkE9wC&%>(2sf;na+L3?SB+_`z1q46z1vF! z_~pH`+mqz?)m9FG)mh)Ps1C^KDB1HP-=AMaL@JrOlyEJ&4+lk|Z#}ZY+JJ@Um?9dd zqS-OsE1Z+a^P5!7F{}Qx8QA`H1l` z>}AgBg1~{EI=996+=A@j^%2bV&|Xu~t4K;$1%95%5GNAS>-l;3?eTgXS9Vj{ z_BuV7%<-swAJ*1?+WUSe&@~XB`C8EJ@I{Bdo6OghL2fxYc}-_wr`&w#WNV{hcW%#} z+BT5I9mp~BxZi9i@N)D~FzyD&5zzP1XGB?iALQZ0?rFOHiZjC0)QGEv%c1)PIsLhp ze%^6wEamsn@7Ug`7%6(Xi6cJRVNU(A>2{4e1snU$+G+d#Q;L4qA8H_fI;0#iNcat% zDs}O&9>2|YIjY&wIL79p#vi5S#%YD$_oj+#rU|0t0p;uy{DPsAN_k>`eie>w^1S=q zw)%ey$HT`vIqD`gZ(WN;dQZONUcZentO$qg3`N4f_x(Nqy&rYoFAv|Jj{{EntB)#$DD<=J$A|gj(#cqA7C5-bvz0{rxZJ}?wiRD@ zkjj4Hc1)#v**zr%Udr=f<%e{ELeVsbP$!#T-!CGY!EQUZQ`{RX4R$M{hss@K@1rjD zO_nC#FQ8EM0YFQjc}t zbG%3#cQy7%cs&% zPts9L$}-w*bb2!)Wy~-)eObi{?rtETRlCdsz{P)1NOyX#JeLQrQR{o^Jj;vJ6#@?5 z!OEkZi4NolGCf0tUOkD)=^ezvH(6 zUcT&hKbUi+$j;@fUE{ir7Byj9R-VsSG8ZrpQp zqgxSdHSYijAg_;S1{k8c&i@$%O3TB$|CPhXg#OI96y#wCa<%t*Qc|;Srg+sS(_`n? ziOdv=e>K^l(E@sd@jQKxsS%FYe3Bu(AFm>|QZHMFt8Vz~y%4EL)li$9tWyb(Gr>|e0U$5%m zUEFv-EL^d+5#4xU~ETdzVa0&Dh;yqhJ5Tuxr4lFSb0?q-M>U+yQ)tY0|Q zYNI(Qm!s<(M`erxx^f&ZPciQh?}Pd*6x2L4bs3r!c?mqeGQRB=kfc0bg-xhl5JjwH zFR>jXUww(&l8=S3AB1N5uN>~;$T#e2gGR4!mn&oid(Tmn9+EdsvWzQ(OwQeP{O`5T zRCNI0%;9_1ccWg^sSk z!KWg=VfV)B>4zG#m~{CeC_Xcg3iRrZBu4By(pmnmRK%n5lN$>4f0*2ha3E|H^XR5n zl%f`TUiV@ynRCg8n!}9|2P}hvzoJ+!SkRVQB`d({3m1?aO9lTR+<*_D-Z1>jQBa9s zm&4&fOBs}Jg3{$Gcz~CUDgeO9ZWdrc>CzRp!^j2{Qo@&>Wue}SsKZcY2rF(Hv;-v< zRJbK?#aKZ}fN8T27-W25AJ_2nAB!-fPc-_h1h>6koUs#z=WCZ9M%&iL>U1DOEQd z^g+I}x^d~XuR|1nBltnVJQp!yGvt%=d6458q;E!Q=9(8}UAyKbcETu)>`I(Iq3$C~ zuMMHt7B9XiO83x>Nf_%2#FoKSXmv2Zi`R0tJ<$(wwc)0@H zE<$RA=YJ|$4cf2^XY4@NmqWhn1<{xJ0Bm4SW>J4q3Pic3H?cWg0L<8a!m8omUG9w@ zfTI|+zs)Ifca3(3kz@FpSVCRC)$$+mxo=$p03$N9+|w zq70YwM2HieLgp7Xrnsg6vUcAZX+;*uh?&$j3S+A-aj1WTP=cH@2?^inbnh@+yxcU9 z|I(3hao9BrJn)4^BN$Mpr#d{w`I7NaUNA-5Kv;15z*_P}F`iNvKO$9a%Nr$-bIXsO zHDz-T$uO`d%`mVl&2WpYYmH{M#e+~JsCDXr)+UbI4uhlsdB#6cs-BsR%x6t@1Ty8j2o{R7StV1v^izRA&(7E z>Nh4O{5BKp-MvgOr$-sA1G6jUfenUj>VZj*Ze*K_2lX%x!~pFuPAzZB0a%G{BqLM%;V8n@hd zEzXZID@V~7$HQ0F-76MO<3m0ST=8pkLPou;4;nBA4R9u}p3bay_3*>58hHDq9tlh2 zAulgwjhm)dP~YGprqpxhtI-Ut zO=wqpv@jwueg2e#oQ2yMqMJ#v(TqdN37g=D2|CwiL^{#1adcdaz)B|9PmxBAc1EVX zF}{=Oa8>lNFeL+Bw1|f>vIrJ}9Eq{JtcfFy^{8R<{Ecn&_=+qdg&w` z`7$W7e}3?urMAkKZh|s6(L;uOQ0n>c9U>vRUmnIHfcTdwL*&sP0o(nvOuRtrM>tUS z_Jq-2Ft{ucad4n3nL{%FrsX)Hi{V=0{e(!>Ap#!7P=PT;SQcdx8AYm8bH}EzD1@>J zs&vc84Q&Q!!+-^k>e=sta3R(txTDXBvT0to$82R8*t z`zj0K3vu(?9NYVB!_!kPej}`!i@}AALUPHBj_}EvGqnoLtRnvo0Njff6G9A-`XH(2 zLQ#uWkfGEN2^9Z+QDiR2E>0E=kQ&!LW;6_^4uu|cW|G0Gk~SO&6oo?7yJB{)cTVdI zevSYl?<}6wZ_Mg=v3a)@7uYV)eM!vOGQDYje;(U$r}i@D$F8nB)xhk|O{kBQMrw@k z3c`!@37V9%Y7G;MOu}%Wot^=nX zNag`eo4K@t{}`#PF6+dH{O1}4Tgq+e-=@K4+eO^nRD&^A$iF1%tkZcnT8B13bpg^Yy&;Q}!x#vzX{FD=)! z46*9U40e_68J>6;clTP#{3$4Z9E5pL?!u+?d(dQ^{uDo>%^X4m4OsqHX|EVoRh*ng{8Z4bW!{~^ zc@N{jI~cf0nzKp5_ELh>6P}R3dO?nY358prT&G{0cboY=UcIHX5?X?5wdXY8DSM}; zU4#BhbdQ$x>PHXMt&M!wkjES8R=~l`sR7Z$m^yVUsEH|8``Rmhb7SPx6~&9^d393rtxC*LJCKD)Ya^=VXJ=r${Pcr=}44acgo>-4Q*8TiWaG>K_LEV z1`%hqAAyX1hKk{Hgd7#nXAS;}ub92oemf{{lo=&$b1M+evCPpbgRfm7<{ju`v$EI& z#jlpA7w&Dm_^}36GJ3yq#_=&bg`<4!^rF%FJ~NtDkMlbj4s+3+2t=Bn>fG8xZ4c(6 znl#QAdsy=goN0KOVal*G^^bH@RfWm(L{gK#)YIKLZ{! zv_izY;cqEr%iA>2R|QxHe~yOGcZC56zlp&L&6#7x0R*x+PKj>8zgl#NJ4rOZ4h}zX zDC+5PXR0rgc5RN2m3r<`JPMrgt5R>(9n`{5F(DJ04ni`W?hDqm$c?`K+K=wT4BJ)L zw>M<(VUNyd(tdC~vV^&&HhYJp_(*?v$>IBFE&3qtml?9+F8@w zy!JQ^6TI@ey>2UR$lm@WEo<6xcnj`W)W6{WfY(hYH%(sVQm2=(GAGJg94{w#)F$CU z(f*}41$z$~SNGDZNOuq$cSA9qM(Qz9y)HM5_(o*TTM=#n;yeYwBVAHsQIkWnZyz}Q`n3OhIlmT(isLW2!u zA%c7RhT>XKV64JSeloC3e95>l&#TQyn@y34gFju+B1?5y$eP+Br3l?hOJmKGVnEBA zdM%`!nTAy`xPr_;=zw%dNPhK18 zR2RfLF*IPfL3`vBph5rb0B3)rYly_MKCL0jM5akbVN3T}BsF(Gq8p%Q@r>36m-QYx z?3U@men#7t={9TURbrjd4j?rWLr4gqP^KnO^1$fbOe`({Wa#2EMHFSvuDrf_LkQa3Yv|jzu#(~}gsd<+zO~aVlZzBC zI=4`lluSC@&D>e*zS;AF!YvZ=Q0oo^B@l0u@d`tF=)6ga`^k(td618?c$7&yF}tR{ znP41w6Fyu~Kx?WCI6y&+t&7?(%QFQo`fmJi#2GupSLEdd$A4y%E!CE>?1y=Bqx$}` zW9w;j{x=fvKnqb7`-+f?55S(1XJTv}?^|Az11&Q?RJ@F%<33|;z0W^w{(NS=;;q?( z)_CLyb7EoINqF7$^A`QwW7MG8%UI{vS4I@TgT|?Oyw7Lwn3$AP4`_FL4ylg~YUPP1fujIHg!lYQLmB6ejBIUkU6;mI6mL_`8T?o}VBr!&|gwiRCYFq*G_Ei=vBYVOM5Rhc+K|K7xc~zjXb>Oey43j-98bLsk{>xuK-`E#r$$^DS$T%u!RWDvzM9hI0Ph1xU}WL>#c12 zvbXzIXI~?3Uzr;doZAX0r@QXf?@Z(yYNp5$bc7|uKJ@Gs738VWfkk&{aYdC=SZkuM zXbh3hHqqThxo>+vE=W;PFGYG+eE7jX%EKO(iou**LD0xKcoKI4tLk)=LYj;%qE{(Gc3zt>uK*)0#5FT^)AHW zJ|z_CLDbsL`WbFQJ8LV-?75p`f`Dhm|BsO>tiVyhvjbe^FS1Hn0hZ^nHC-hQvpF}Kv+O&z%%LB?t@Igp$*rEfSI-HsllHKA=@{y8q#17zj<-ur$~2QLHH0! z0ti%Jo46eetAiYJ1vnBxsW`4m!y4^Uews}y&&Mt1>GVLR=WR-i?qHOIf_S*dZbm%PVHXsV%Emi_G1w0A{uLua(n6=QUzz@v%s0Uv zx+i2yR6?RBt26-aVmz3Nv{cUt<+fyJo_q}*2= zfVd+vq1(A>np8qcQ_TOAQfu2(EL~>G9B^vcDs}FyZ=9X*7Q99pRoN}BgP}LM7gcNY zcNhRrcjf4pvV23s<~7>*s%zjCaVivR4N=rnW_t!YMR(~Xzp8@BOAx$)~I&=`%BLfz|sFZtGE zSV>Sy>dlW7jh65Og7Go`aPBT>0%=7e2tvN6J{7uDWBB;DB(wUnZ3+l#Q^%|nctQiM zNUZ=>H}j}689Ctiw~Ukn*_hh1l70xns`@WmasdU3SIrUOU+(k-YDuX1w}KJ-r|#5H z0-Gqox@C4mEAMt+!wfRMQi$$_es8SrinP)cGXup!(n)?15+A1_v0i%?kjuZ`an z7BHAV!gvE#4()HFG~PcO3$)FYFkU7}_@$gWlA?G*z?r`Z))2Bug;ISmB8~T5+a05g zMkUt9tmM4&rR~k|)a(kDzua*^ghxTU8J#6dak%N0N6Kq6er6;l;Z&VPWiGmIx7hqykm3Ti(a-jkfVbxG26jgkw>q1J!P|8RYQ!MW&W{e+Q zQhS*oM{2orM^^gi`!7M@ZL)CMjx3}K=UsTdh-(E>wC!=pIgjU?`J@kvXqaTdtl*+` zUo)Q%AtxymzuP9R=iclb6f5w8hg59=%;Sbl>$gj-)Y+WOBW)>cA7dGa`*0u+ZNwdV zy1E6D`tD8~@m|!^prvU_u4Y3|qwT8~TjDkKr7Hyj*z6{OTlD;)$LyZwLfo6ql+%BW zCTW{H&ujr(zch*BwAWYd&xE`A9T3N0F|21ks2D1|h<0Uno~18U^x75eA+>Zm&d!f^ z3hC#|L{1uFNM1@2D5Np|*&1xx)i)jN?pZ$^lJ3>FVWe6%Vt9}${{w!m=f9nMoGV}$ zM+40UtPZ|ezdz2stffdrk!$32+*{16WEqy1ZWu02E2#XT%k(3H=%VVum>$|cqi)25 zIEJ$U-Yuc^Vd68#!ltlkQh*GJfCUm(b`5PE0{2%da+}+xhiMD^SgQj~zno)$>p8M1 z_N^N8M_JIbe19SW4(3R{yQ_XO{%ep;=C4)L*n{Q2fBc7b6Jq;nI-JnIh1&uz0cbF4 zU6AWXS++$k8>ExS=nII5waXleq^oz%&GPf$R%*1?H1<@p-9dop!Nom^2;k^`NQ7m7 zXe(-ee2XEbaBlljl z!NBsy&%*7ez}0QGJ%u)r7CRht5$NICDfBF{V}^if)p}(VI8o+W+-|^kc`cf>HD7C4 zHZka%tvo~@yq`T(v@?(M_sP)QumE&?LSTOS4eeq|=zc z<&5rGbzs-Estye`pWx>|%E6rt<~Jjb<~qWWyxh;iD08ksoV2`aXc-`tZnZ>ij#TY( za}nAEX`+rNK-5VSQ#_#?8f8{Bgz&OG`2rfp_~Sac?ET4|gU4M+moqeZ&9dA}bL<3+ z_l9s#<;4|QFMCw3p!#0a>;)V3L?K|Y*K5%dY*Gy9UQ(B4rAFbBuOKjUX7SVzQD{*< z#74o^@W^n(mq-%fKiO@?29s%w;;o`%m2YLsmZetV)w1YIQ&!kAj9PeC$CjHkrPxkG zAd_+R{By>W#$N}DMdZ@%reKHof_;=nIHYmvm*NQsu!7}@iqV3`5So!`2H*svI=~QW zRq1D$vDlQEC&vVA#m(soJe9H7Uf3Z07U!v|o%tx2plEOok3Mjw{FX;n3&F*6YL@Xh zJI%qrcJxcrP{h?2_EAF(4`htMjfTi`T&}tm%(qw7vslxi(Jh9el&Z<#=t|CHv4S=v z6|Lcf3{< zWZ5>DzZ&kwt~7ba|0%19n@&LP?cePjRv&>y$6OP{YC!q)pLU#3{`6 z)>xi7VAQyh-n%oEO)?J!Wq*<|m@<*A?jn06l@US#a~$B%?jaI?7ni2CIxzV=l+&{8 zTowEDvI3Wp^O>iVqmq3-Nv_)X%Y!FIRC-y6T(hmgZK?;W91`F|uL;M2&xDxz7hy!JNo`$P zPi9|0ozb}^#6#po{Zida96kyXRN}-Tx&lC(ukEnht}ki*ZxqOGzef z{M~Xuim#ze83PJITe|+TM?nlit+4Nc*tn{9&@W#$p@CY8)}!c9MH`TD zs$%s^)z^uG0SJ=@pwxsVLy)V3H{Sl_R3s4mo99+0=`GjeH@Z!^FeQh8q*jVIx~;q@ zp@ERE(mOD+?H`XeG1l%)M8G@5M^V*q=|49J*U(pyTUei93IGN%~x<&BdW{xMO=_Z*@S^PNH{q zH3H>sua&L|-&?TxOL3!jrbK&VGNjpr52y8795cCFuAz=>6=A9?CJ=$y&h#QDw-IA> z2Mvz)+F87I@*0hAjydIGE#zmb#*+hn>DQg6G>2 zFHoe$ZB=PZvbP50&>#}XaNX4x!O`wXI`SP_ca*VYtsUhQSK>YUe;E6Q;LN(H-Pr1mZQHi(r777-fKT1hqRH=*fXrAZz14JWvgze<P5)`oHX@QD49}Oj_%gH2&X8qdNqb ziSue-%_rWE-9HoO{NL}q=wM>Y{m?c9k@z}DhpQP^0bxxUw4D~DEcxe0veg-|MEx`1 zyUz4^@pkU2^K)?ah#|D{1u2xbOHV|v?Zn~WDoG-)D;Z3 zBCOKt2oPcmJGdh>m`s{DG@t)*w=@U3BgJgTx?SZ0@1bl59n2J3yuv)2Xpq~%>^C(I&@O*c z)~{Y*@}d=QeHC>q+zY;;zj38c9~7)YAYjZEbhRP;i$Mmq#GFUJ!bCN{-QiU0Sz5D;<~O+FtlarK4^+mug7h%qeT1 zoGwyKAuD@Fe5V?0K!!l5O!0bRoOviI3c-5}o%h98V%_R7{_YYIz6*iA8cY|PU?19k#}i2+*dkDb=Xsfn>}jq_TxMLzV&LH zWhcL;p{Dnpkb+oxYf^zTv5cUKDQn#rO*$-3=D;ae;C7SB1RmEkM9`GJd#w=C+Hc=K{Hvh6y2^1uYD5@mCOR|Bul<-O^vw9>X( zKn-(s)DhO-{cVNVF?5batp(Zh-c@DLICBQ)XO1<)3WA<5f2mjjbto@=8V*C%1fe7B zkyXmjAa#QEnc)Sl4jOW0(1&Kt(iZaT{Ec1zNu^V*s?wQBrLUa@D2lJfSqC3Qzj74! zwQCk8FxS2a$dcV#8_`cwfmNe*w$sl}{CAHgz7I9dGlM4=Veer zpDD!uJL#%0N6gf!{uGT80|B!8%G(|1u9hk+c3U#I5`zx15+(B^G7MVAbL1mw>-Mr0 zY!;3vMjbffx#M0Sha-~ zp0k~U+njR>gjW7|zl9U0{_?_E`~Cp4p)j4EIzabS#8&iZOW&#h zqlpU6YCjI!9&nF(PVn;g)!$jG#s$R%*Q+&cn{?9MQvopUI0Dk_EQ@vV-PnZau2#`P z+rm>6F}=}+6y8l=HY*3c@w?tj^Qh z|IXa7%96~AS>FcV+Ca`8gVi?&9TGW513A_9SWIUsA^s=x&7P8wTY6#S9HX8|Lsva& zd-e`>?9Xlm98x>&3s~5hI{`Ov(ql_+ptG5dEC#gJ*X%TglIrlaLN1`HuL_9EE6;O1c@%y7-mvzJde7)JtvL z%ymdB@VBC@ew(=D$YaC9bjnZd^Kbgdx*V(iE3yx%zMBiIXI4*dG5hgqo8@-;oZaT! zSKgz|zKibP1b;SfY?IBnJG6?xz1m=^6!V7=9a}}OQ%V~Ha;>?6v@Y?00x|JG=qrEL zZW~kcN_);WnHsefBv8Y)D&gq-KTIGnh%@|=ZuM}0n_in`XsW>1zmPt)$k5nD>`4F* zfBr6fqCQc?Zsr;Eb{Be`B<}*>=@RT<)|Phe6GJ4$7%*1^XE$M%FsV^}VQ?+Ofi%nJ zTaDGEP2?RN3Xl20lPSuWV6;U27NsP?S_spM_=K~mZ4FcaDv!w$oXv$=-Q^Ws+4~Ic z+V|MF##n!B*=B@Q-=Hp<1UWwcSplR9r^@yUgujDhc(_7U;cx{&N$EVI|5|AO^(Y;7 zpb0Z7A`v=8CG|)BHRL9UT8^%d<&$?z=My#wdDNKVC&WVe=qj=R+keO3Ha&)^trN$i z^+e5y_#@qRU5>G>m)nB8v}SnRM7~qo1YMP0ou68RJZ?9WJjC&|At({wjd;V*$uhf* zy0CVLhhF5xrUL)ty)IR+WmRv{6px#P5mjoLb{TQ>jR#@$OWWAOr!1O1Yyuo$G0P}v z=9glMClUi%!SYFPr~7{Pl#M9nXS!-I`U`}>uHf8$&Rh@o%7+UD7=~A7WVNufSe%Hb z39i$F$TV-W0BFn~3J4C>4?W?07R-C%$Eq{X9#3feSCo8@hAC1A9EtRIwpvn*TZN)w`xrwY?wEnZYGF5POBtfv zN~}!ajYY%c!o7y&XB_X{ixW^|L%(4T zr4<~++Vd{S4SXDL`$`C)ntOZChj3=FC-%NXFKs-N&e|R3b10*2eOw6#*BNm34Ze&x%1DU2F+_oES4q@er@#}*hilh+i`38wCGD8my|~XtL}?( ziT-C9E=nFZGYUqR)uspZwzsf$WSx>*l0TFKYRX){6!1g2kOO{ehj;g)n%AtSNYasDrESUO)N$f;WRNrwZ7fc*|G?PFPGF!9MF&+c0wa)$MkxZlXYo-VXybGs zkjQYNa$t-VwTlK@-=u*IqIx7@puj#NltdsaTq39`;0QE=e?Lq?g<1R%1*|RRAmlB* z6K;h_@H6q*+JZ_oMmj*z{?>z=f0o1aF@_{q`KE8*^p; z6E7@xm(uVNI~8tP>#PM43yv~Tb`=0}+inSWL&xTTBS%^EiW=b8eqJNM6?F;BM}c^p zp|OClBs&t&KHmYsn}DXwZy|IE>bn9%Yo=6!0H!k>ID926H;9^zKtm7yL+=(i_k<|X z6r=`YDv~N|ZyH`!t;|K;Oe>P=99GbaDg$qbsK6dqYxGmQWg`esq0KcR7W_vA-q4V( zSfzCN7X`}xXHE5kL_$OrdS<%yZsT?5Gq?kEh6sOj#of0_W`YscFOS=EVj1@`llUA2 zP)Wwd0L1W6gs7bykT-bCrvOuSmR1gPg7 z)*$T*&7gvh%RrDRwztf?FR0-ChZc&A5~nj4FY2N!PPOU^_GujIA{3vs0nK&!$$Ol| z&3!F!J6nNejjueU0kC2e|G-aJY@P>XLiF7CrWPw}D2 z0|CWQN!6dThDoRCxIT2k-sJE`9a&^3+?zJNnN@M>TAAL%W9eK>Rf`eqexok2M z>|=L42&@MQ;U1V`)m{#oE%WTuP@G_>P+3e#!myQYDq0<~WGoci zSP^WQ5IyK+m2T3NZcE&v2yE(|4XD2hF)U?e^}vf-93;pLpw$!V7GT9$=BK>^{nV75 zAZ0|*XFw18OFv}p+|V4WL{?wXD{!S3(#clfQWB`j%x*dloSW7fY18p3TC?b7`<4c* zUuYI_sYfrDVi**|_vGFcVpvWm_+i5dL`C+sg035Nxwx&x7-dVKmj!{6n&%N032v{? zi=ubWI7|Lwup=h4r0Pm8?%uFDEVx}$bc8VzUsnsY*4!E&bu>HYG z)OSykzK3`yiua<(Q-%sOHa6 z&`qDTiRU!lj(ek8H_9|Uk)9{)Sn93S9}(GCwnAA`MzmxVx!y)6Rf~~ML%K`F4@awx z45FpMCRZK|nm=i*(35xY{0k+4n_3)%=3|L}<8k_BBjnn(ubA>(G}0~*!{gUzNAAD@ zf?`}kK1|W038bnn*&x|yc>gaRr~%x>IT%bIsUx{W$Pf|kJ|70!I84aEB0uh+oVSQL zzy~dS$@Y0+Z^c3)#5D>RBOa)oK3zcapy9LRkdkM)83^I7K;x;y` z5d|9m1B1x@z#xW{5JLtsiowThgA{l-D9^&Exhg`1{=a`G!%AJ|Cn)$(P(dH2RwW>H zol!yW_Anxjm2()4&9^X(eS$(dG*CoCp&FWYHi}8 z=U9|quXk~@CZg6G$@nxd>Xx?mlyg6qaaD^Xs#F__`NJNu6AT!u{z3?w zc(4#-UiK;c*I$jIW24z}bp7)EGIM?Q4vKoI+S8z%-}Fmw{j7q+AgfjnGuovWlCBz> z4gq#WgH?}bA-LcMo7jWhf!kLs0-0gul&_%tFkKf#sDpn2CA41Y=uI*9dMIMm8Xn+I zR?HKdRIcBp^!Y>v6E~@yGTbo=n-SKj|6}^k?)G|EDZiX=T9miqH#&T9Ym}v_{&7?u zymANxBH>*V}vLAR7{i=^-4D)!i{g`RDV znJ!5@4*l+TbI%GO@JvWik<(?cRuKCd2z?>Sn+>^Djig$It#xZo@Fn6>cMu}jR|@$i z^gWMf=_8Q)w&RW@BqP0S=!XpD0I*pQZ`&2SOjv{7{Y=djy9NOc#Ynt)`i?b5p}=oN95YP9A`^8H_n+;x;jcT zY|I=!6QDO)_lkKmcm(NVQ}dj7t17(DhGF)Xc`oT|NjtTjTnLq^nI3KMDcvlIEbf?Xgq{GgD2s2!Ul^~T{`zi0UVQ`kK`1wIrN57_@hAIKt^|7rcvRbBtd0H_Vel9xsJ;^VPl4fn-RmbyZ-4#@kFLi~~xr;#98%acrMe zjctL~N2`vNi|35pR=)KGY%V(`3{7*-JG1Qaad6G}fi&Ofh&2M>X9(9z{zRn7jTP z6XOC8u}S_!B@}~O=z9Zz4AVLP`p=b_{oB_D4*7fTEekY2;#%iX=sX>I9R{L*%3%#9 z1{}uu1ojF<=N$!~rwqLHTg5^+4B-#fe|n~QX-sX;)45$8a~;=H6(%HUta*#}6-%sn za8rF+OPTn1f52iI(Nv+@Qko$LXx_D5K`;y|N>W)1iPQLwN*TTKUfTi;wldz$41Q8w zc<5JdQuGb$m@NmN$pjF2#%;LSz}y0-TCszjcZ zMBU@*xpT`!i$Yvp;T0TDKHBKXF@Ea1oW8Y2w3n6X`HeKv24>F4PVcZk5ZvvLBY*I7 zPzV_a6>U{hxy3YieMwuqm&Y*sVLJ@+o2j?;tK0W1d$1itUu34uE~a2-eY!`7j#5!) zaesAlJ3`{MeeeL{?|7#7LNjKDLO(3`PD-LRbkQrIt%s(`H-C>lYWqkgt-~!%#gZ=L zVr#cmM?I~U{zy2WO3+5j;cTLazvY!v!;a^oZ@CSJ{dumu3;dGT?GMfQJz!%Y;b;I? zGVU#5!L|ma(_I;Wq*%ZKSZ?8h>=!moNW!1`%QFQ2BTt>c#yw6TT6O`yd_f?HY4$;g z@{~Y3{ZTZ(ym;WZy@v5(`lqnFP&?tuIKxJ$vMpn3s7q|jwX!jwhIFBTp)+PoH9Re6 zEVqg4p2dbHc#s}X;07Z0!(gvlo6FFlG)%P#>igyUORTFee;MY$90+vA^2j+cQ_%6!5zpmMM6Ue=1PS1 zQ2qHrN7ysDLQAMK*+L9RA)LXvRJp9d`Yb9&Fuh(FO(;SIenlukLw+eJLg#KMA($IT zy>UXVh25epWwCNEu@go=BQD+UVHd^Ei2M38;)=w3FZ_~n!4c$L&B&54Mszild-sVY zCC$=MLP=`GDX!U*LMhd~^nXp_T52Oi7powP|5_|XhUUeeGBovJ!EHooFF=fzO&s!a z;ssh65D-MRU|ZUwkx-c<)xx3eABG;Km7&5gWCsaDc#$ZyL#84XKkEp(n8 zresI)&UE;ZqqY9X(LUIZ1Th<@QXQD9BJMr`{Hp|E6m79cdB*+l6Z2W&Ecx6R7M#~_ zv}Y|`6BeO&QOekre;*XL>PMf%OvWQ}P&ZUUbr3w{*>|~JS-@K%#!e+VzWT)U^e&6K zgz0U!sKR|CVI_`L3DGX!uaG)Q?J3JGCCzy2J-0_$l?=-&#o(y9rMC#TWWT}hfj>$gQpQf zcbS0?7zgi0?!7f8v6bEE7c@O+-kqqb`?=g&PoCz%{#Ec)oiX>~m;+U~F2_O$L=$}p zznYA9`m6q8ewZ=6Q0~X2{}|@1KL|dp6aMV`u*;(XE}yoRdFNI)LnnSDh(n`8351^N z@OI@2bOa=`%f>g?ABv(i!@my9BVWCY$dfVh18mj2I`7^>xVG-#DRLaoWjsSCIlqpj zeQPMiwKq0f^Y7m!^bVl+FiGk(0O&9yjw`B}r5d^r0hRLHj+wOsb(*Z+h1=Q^y-Kje z&Ki|~u$&DiA3c&iL#QRhGwq9VKi9l;bgjE++Lc=RxJ#jR+NR89=yp)SfJgfibmiAh z?xsBMzM%5KxPNfZ`r)^mil)80e{EN+kg0L$7Hsrk4aVsy_WC*<1`Wtl`F5*53T=M5 zsF5aPORyD5)&wM7p1uG|uZL})u-Boz)C!yA&uF@9k9f2i%p_H{$LWs(!g3r$>bS=L z{Nq^~@~DYiMeab%uI#6T7erT2F+rvO9nDBD|4B4N+YUTfNkNx1r6(z1A4=XAfd}5e zcA}&c%=w;8{XSL}XkAV5IUj4Lsv=j6T;PCbkp}?M6N;|v8Fp#Zo8w&e(B)MEG8#&@ zWgqcqez4sfY=q7feMm)hoPQ~ORUB{ zTit0mT6k?Ls-?xvBwrY?C9lFI{geTT8EjAO15@n<);2+kxDD-L=KvUt6D zIghlxrOgA`g3Sdl1QlrJz!VQzV9h5hJKb*++Y%8sE!7H=BZ!=(O(B;ZUt&Fj>?p<+ zY!icAl|U-h!cojrsL~oxBp8^bWup8|WQhxvx7#W3vh!);QM|xeQr}Z6Oc|D2q!FaV z-P@qC;}vMB<2l+EV7ciH4H0nW?FU^&FwpG;N5%oK0B6|8YYai5TFYL7;uOuE9|YGn zM5<^BnZ|S&3KU%f-M%B8RDQPeYZbBX_Zdq=RY#RZyB_Bgpq349S= zximHPfOo$B0p_Gw*hAt&R{X(;wPQe8cWwb9_hxd?$>7)l>>_+u?ioyb40!{Yn;5== zd-4c=P-tzcNA02^<=jQD%zM_ZnqlmAbI!li-Dp~^rTj8HYH&jOQun1m=#g(L6$WjK*bx#YgO;)7oKv zZsN?LtAK8}3=pjGk@ab{QoJ@YKv*Ee~Viy~E1S5KDZ+DQJBHp&tjk6=dF%BnFWceo4xRfLcxTF4T5((2Gw~EondNE}xa7uj}G%2Qz=s z`g{u|1$1ndX-BRV1MvX598akxkFD)SoX4@P_M+dU zHOJYRMI4bWx+xkh>QkX(9#6sM%SW7Z3G#b&+`prEtP6_--O_a=`e3igsauxz(JH#m zVfkK6dlvu0;3|=gPFrspCIJS4$K4iryFAgxj2^w+I&s_^{G0xtGYxLPGA(cu3b^{e zMcLr&rLjw2ra?#7^YFKX;f^x@RWWLG%s7KntLP9jYsMg#cJK;z}bfFqD@YdH@k-0gb*`N=KB z_n4pNE24KcDnB>(+8kbc>x;H{18^II)nVa#{!yy4%kjXTk0H+S=$?;}me??_RD@pg zriy6~=i_^Hij^A?u=qHa&V~Drs~lED7B&-KPHRsfCwxFI zH~6inE6QH-Rp*L#;5=L9KwUK?AsOj2S*kvVBlMB{``Q|@JTz~>-UsSd=m>(d(gom7 z?CsXc_nogq`7_%61#?&KBJDF$l~}@*_P-RdseqXttI|%R~Agr)y1|b zQvOn~A7U>!6{if;rJ2-M29?{$Drn8peORUvkj-ZNn>$3!lBmTA1m!~wbUv1``S}D3 zOCVhNWyZ~bD&>=1v^@)G18dM(Xp2772jHvGXitPF@Pu8rFB&p8} zvY-nyo;;U|A6M5rbBH9p8`?2-4z5Fid`vjG%LrhDlPYwiC47q946t}nc4VSt+x9%P z8TbfI;LQ<hkuQht58zVZvaeS>PPw2=G{PFAe{J0~k9 z23A&%|If*)Q!AE~GlA?0ubU_v+&b!B4kQrxY_7396t!jz;(_K-7mUyh9jo%I+ni+b zW%d)0-7ir+aW>}!x_OE=eEM(Gf`!=!puXn275ldBdk-ADnh|R#HG1v)e%$>1KIx5t zy;l9!ePQ3BWyBBix!N)B`@QV@zV&@e|NVH0|5fSvUHv_c{mD0UqpRfpo%;Rpq__3e zADDNd=NyNKZtebUSNiqU|2hNF0dl;<|KB@4_t!@+Vg6)U+uv_`XDVw_6P{cfp#{5> z@#F7$->;YWvHb_W9^dERk58%HeBRAo6@T!mIxYC6c=F|IzpkpkPqRWA#_)%*r@Kw= zLT|;L#znk6IlWM@y+?g~=sMUeA2>2E&*kusBxZvN`d2x=kfg&xgRePkKqOxSBl1+% z@HfP7II-}vyLSVasH^ix&F2@t^&9!YOxg&&v*woh-Qd;vu89~2ZbRx@$7MplAL^f= z4}){PHFcW5O(sSM50vlZkN+u4_UC>oHWuL)V{snX+twis<=)x9 zQD*l!>$v8xN>To-#pg#@eZ)WJyeY>xH~PB%9!~wH>4y*yz+D(ggPi7P5Hn7{7k^l0 zyr1BQMU5@a+07iT9?8|~Hm}g?#^AEX+;U#QDesgZRt;n|YYSMbP*ce0gUOF)@-C}C z2l@w#wuJv^v6PclTk};h-SKr16g-Y@!!-iVHfQTyHR82TCTpu zXQ9#k70QpAYze|^({Ctq!RT~) zGE14j!zM82vHyMhn6iT3N;x+ttH|!tkSAOsLOoC0ccB=mTB!A_LY`1J=Q-DumiuZP)A&{&C+3@mZgu{8O-Cn0!UtQ&=?o z&7SzHiHHIke9$VuFyYlan|~xSf*Tz&!hwzw%yW}2$-ImrgV}peJgV#N+9c-z$W_!` z_%npc!$`XBHdG!iIm!8CBgcim3h^-`M%5dnvzj~_z}?-d{&C#* zTi)?I!5vW*ce!nx5`PJA_cP~p)#sl|-+Ss?CZ7b1Qs`RJ`B49XrKeB~7&HE3Xko9l zoPCe>CPDXiwAlMi=?et!SykD<(>MxEr!WIPqDT8ev=0ra+V|hJ^}?@JmC(`!-$hri zcLO?uxU?ux0t`Ek^ADIETa`AX^%h2q`0so0_s29mMmw10ghRo{TgYQbB$xst5~WZzW8Qd4 zNO~y@BNwXPG569&5m9dr;a`KdL7Mh@osOVhT15r&UGfp4Om{%?m>N-mkuFQW9-!YmigiC>+Z#7 zwq8Wvg;l=v5ia4Yy*Dm>w7-Y+n$*9>k%xzI=-v5bC-m+;`;fa;oZ+k4ZvN`M?O>;y zY`LnbEbk+LT5|;bNC5r8@um&^y&2Uvb*vNZL%F*8B(Pf+u~aBd;X_>t`XstJ8t4aE zWl_|nRq|9#TEp1N`^pT7%Xw|IZe_vS7Gc!P7n8~II%$Ay7kzqVR_NeyEBeb9j)kRm6fV z8^&wis{R3b?M9Ef;jTYuFFKGeE+42}gBx1U`%a)=Qdl#{9EmRc2<{6%LEau^9!b4; zqr^9@+RBQVXmz6K(ojx zMEl;M@z^5zN?8MWE#-dcY3@)_G9_$yH~v_ey%Qy!^NNC1^s}@mp`ge)>Ge4&iXGdD9^$*ACc!kZw?jqQQH>bFSTM_|(aTM?J30h2Q*%!a&SAmVR9 zMQ8im2@G(FeohEB%#fK#Yo-Vs!P`PHd$aM+M?7)T>t2Y@T{Vs;CjgD^-Q2wfDFg{g zj3KZ>N;snc2lRn78X~L^R!+Y-iu31{xEm+x=Xk>~+5O;aOEHy#n$G8W_TY8w>C#r# zprOQz+x@F#p(cBR78^?y)@D)cgssCIkCoR7E}}+ARGZQ~$sKH<1VR|2 z(53!*GT_zsacJ^(>(V}LEZQq{_8C79_ddhy11`1QHrdBw5)?%k*4&Axpocsc!kq#V z5EJ});MtxeWyD-p2HP>G_qJ%R;mX5|>OBMN)2`sBQgLy#(YZOo{7-iXs#bahGhHAd z?fG$G|0T2#2uRqg`mIg&3i_BMAlyZEfP0Y^fI{~1kd@c@2I5R!!QXv7*eXb^vGN`5YY~snxq$Fpj(psciaQK^8UsaT_gIMpM;wU`=;g zC_EfoY?&=sVQYEMTbJiR`0+1EOu@>lHd?2h4_qoE-FkBLp#WF?i2+;STN5W6hFH7& zvu$w5zp$_N+34M+l=XZWRryC#zcHtYr+AoL8!#at`J~ig_t{?z4ha+d(9ljIcBt1Z zD`mJM2c~L*VpC$K5x{-s{T`$!o}b>?I32a#3V0hHf5I+vXrULDk*#OeWZJ1$8He;$ zFtN+nb!a@4Ym$?5i9w&A4jQ5y3IcU<1gIj&mgzFj1~ZtJ`jln%J9YVTWlk8J?9 zUQdHLuo1H69{dvCk`q}|Ot`-eG#(phdbVy)fk~#7S}%OkyOS%jF{LJ%!kyl5R4=)R zcJsZM-w;lIl8AKrti5{BPH$&eb3_(svUDa%J+_UBrJ#~|@^+loVPCA{znCXMvLWWB z3DNJ^jdC2D410hdD%F7BXNzin1!|oqYt*}Y`fG8bsn0z{>*|}W zW$P8%yuskIN6S7zH2G85Z&Q8-bGLDL3<<|^_!g;-Lx`lJY6t{hY&8i&2g1(PR2c)i24hBItQk@D0iRQd{R)vFr?wXB8b=(WBW!$ zG=tLEHzIeo>vo%tPJfaISkh)<=8OM47&CV`id1|G@`tF^Pc{s&dbe462~4uhf7zK2 zpAOd}+gRyEBF0f@%{x2>AsO9d*&HYKUu7vrPn$~d+bwzoWaaI*jlH=neVuVf;Qwu_ z5<_r;ly;W6a%6r=ym7j)U1q$vhJMUz0+r{IQn@I@U)Heaz9f+1l=GIHaqXtWbABc;ie}8?2S5)^X?`keV8f3YfquLQJH2G!7SMZ6!Ru zTGI2=tL?v1L6?Y`gI4@PYUHnoW2H|X|1I%hM8Zu7D{sCkA_>(OyX{TU`CI*4#jLSo%e{l)Vg11^V!jBS zZ(I>E;rf}B9=u3c^3m{Mg74re4E>Ld^!gm6y^ghZefZQ1f8~q@$_G43qsyd-gS{utVpvFVMmgBPE8P6NQV$>n*^VYRVVM z$U=BzOYb9VoLr@>+z|$=YH^gzMDEPkdycGdPFXmt$@X*I+J0YA9r8(88|yrQ+2l)5 zDUrVZQxsDwBPoKC6SIp(zA)s?1~r(9+}wA@{$-v`Oa<@NCe@wKf52wS+Z2awh1Ocx zMGJyOaS8Le@DTMSFf(xG%^ITmo_-7;Eh@<26lIxD_cMQ3rEX^aob=M7TDGT)wrjE# zzp(6UCP4f2Gv{47(p@R2I<+SSxPkKUdCtg;^S5h43=H<^nV)-viIT1-(C_FM)9+mZ6D!HVfvRfv zogn%@09;(D?-KRD0?(O0i#1`F@;s~j*7L1l7CHJ6`9JA6cu4|$@z@vO+h+_ zH6FlFBDC?qMWSexWNik>3bnM|3_>I>x@%y&n;Fo2{r=8WI~w>D2FFM;>xsi!8DXA8 zBD28RONKF^P>a!wZIb{?Q6a;Ed(5C5erFRr&vTtbs4s7RQfOU#rkk>2cJkOqZ?+yh z*IH?>vXU`lTyc;WP#=9{IMwa%``gh-wem-(Rh8`%jjIwqFh^6~CCLC*0}OQ71poV(%5D!*+&|{1e3w(Y1BRp#ecqPAdZs(Z(EQBwca?jDe^mhRi zy5sG8nL*4@ZA0xJYjjqgvA^hqcqY?>1+LckC%cN0S)d-noqJs33d{v;@BhNYQC+8U z+dL|p8I^mZ({EZR`V@I|iArQBnf^#QFXYP8T32wF8U(~aA@X-%Ir*v%fLVW9sBtS$ zx+@NXwVxP*u$gpR!IpHxlS*=I2&)iKwj8xFazRV9F>s3T2x_SYf&OOQ`I|CSBuX4> zrZ{>oEgX}&tFe>%S7xzhBE1o+I##E*$QA>&lKVnMCZK6B)%Zg$6&V_Mit@KCj>f-= zmW~l1S#IK3mPN>Lfm)^@73*eEACu=ol0fK~#$wvWakTdFm&Aurdt(Ed z1L@wzDqzp%$Hk~c3;%Lk9`aMYe2s8i=~lfeGO_#hDn_o$b2uAp*0O!6PHt(i)>;(B zkQFL)s+%>4Fu*#fECPO$S6U7}TIMu>F=qPyD~8@sP8XtHR%;%LSMP>_p#a5}Oz z^DE30&%(@QK30qm37d9Lssavoz@yX@7>~N8@<4R0*V{^Q1^lFs<>wmw&do7s%g;8@ z$j<@>&dmf?&CdWX5N0>C-D@f_&5buVB`BaU&2^47AmDz$fVhe52#F%yN5p$D$bzXm zPh+-gtbhXtiu3CudJ(GqJ&+Fu0R=4K;VpPNw1g!bU&eKFcBJgJO( zo`0lOOKnrmox9kdy};88Se>X=KjkTR2gzFG>GdFEqHE7DIu%BQA_7d?WQUOerUM|N zkZX#i<>y!c(&gDCIJK0D_xlzAEQ$<hbw zctzCjdmGrB>Uo?ZEFf2@-Wo^G%2(uiUQR;{8R%W<8jZyNtN@=*FFxZUgu#l@ChH;| zR+5*xhUf`80%2*Q)*A_4lDi9v#PY~I3Ud*xl^5zH6xcYtWmmwvr0!uNlT(q`_}uq* zg#KYI{lI=gH+UX_YIna=ms~5&gvn6Vopv;eEo(eqs}PBm5cHwJBfskpG7A|sH;;f@ zT^%~g+=Eh4auBVBU6UgaU6w(-qm%A-3y z-VE^i^Ncz>CK@PqyfpX+!bso_Bv9btpbLT4F!2H*!D*2j+xvbm#k@x#qTZ(-auQQ4 zYm8CumgoJ_OMH4M&pr90qv0lI5SXrvLc7JlRmc4IVnW{W@FHe+Q`RXwh zw1N7JMOlWD$H6J@Q8Jf-Ed8{}neM>GLuGb40%J%tlR-uH8H!+FHm|~U48xF3vl=)V zsQCBe&#q_q+aMb`v93^vvDVWx$*wN}Q*_4BRONG)lsQ8Gr@vI7v?)sO)L%s~>@x%; zlhY!7r6@o70Py)G@-%XQYJ<;YG?BULD1u`F)QG|@;pHt98?)hHwbJIql) zt0I%lL`=e?feT75NL>M#1%XC@cAOvqs6;uEHB93Ss&fyoC4XlouITp1*Qz4lwW;`| z`&XA@56G%wZkpEFz`{hDPVXI@BnHh>S|uYY*pYJ$mHz|c5=R<2lQXhu5*%rW1-bB| zfzQ}Nc-m;+8Zxskg)A(SVY=AV>%Vx%>~Pkk7?q<}y4b(t6EW#}^uwaWsr&iy~a6k4K2M7$8-^c$P~UCRDNe z*A&5V)otKfP#Pfsknm6szf7P>P%2@ZuGTO(@~Dk=P~2fTq{JY%0^NZU$D;gGO-y35zN zX8a4n4-dGiyBtRmNjfHE;AX+BTh+4|tvf_7nY@6zIi`n+NoDm%X@4ER#(|+cWg#*% ztM<6^O{mIe{3uv1xbdI5*O%T3rDXs{IEOEAe#H%IH-%oeoYmnJ&r=%4^kgEmLZ zY@oo>&Ne3z0Y9M|SaV_r?wn@?SIR|(HO@ewpK)m$>H+C5hG4_wV`Z50`USA{0a+E$K!Z0eiKu+4m`aDWket&FotB7LHO1^?VTCRtFSN=bJo%{(P(A*~=)qFzWf_y39 z=UgX$sr(%Oxcm|SwSFKOAB;EOyK$B8#Ok7_9GtK*-?}rEuf&4ltDKJ5B0H(khIHlh zo{oqO+7u2w9QQb5hO1YXP5hiQpT7Iux38o2vM>I=U%qaYzeEyq$8809PZwhh7RTH> zdwX51fLPzUz4d7`>X+YH%oE@6I>AzioIm<0l(r=pYZl{m(qX%{0K(Vxxz5=w)uDrC z?`U2b*L}ZcO$j_`MPPZ@WbsxVq3t2)WN`e4S#%7M#SR#q!Oys&h+{357!p^rDHMFBVUV-;l5pn*vc6;wo`!H*08QwHb~Qw%EM^zfxzLgm%; zh*PYU`30R7P)Vd2R>IWbl3J<8UAl3~7VaNvqZ)JTjw$_D_kQYnH@&K0)Bj=Yoq}{} zqOQTl(>6}yv~AluZQHhO+wRlGY1_7K+qSL0-*4uNn2DH+xyXuLnUzs>leII~-fQjd zW+kxIC;z{w)|4q_`0GX9WzdAnmbqOdLNTxgPzWRZzx=p|@(J0dpn%q&!U=8f9ps>o z#^iM{#K~2oq?3BW-IA1xkj9u%9A`nETj*t}jwqrNWHtXdUboYGOvra;DLIQZaJ4=9 z9oyzO>+e~Dy$hj!&SMW=GP5kYu3o_w8Z)1SNKY2cTr{1jT+qqB_cuX21svbGzhlD@ zTTN_md!(oR6eb&2*LDMJ)ORPVu(}+D@76M!CJFR~98NGvt<*4y!=bQVh?({W!Ex1X z(d+k5eY6}ZWhtH}-@BS72f?jh@{iSRTS0jMFw(Ryqm|g-y<*a#(F1k?cLbjL*%rJ; z;}cY4p{XWno~(5+=*-4lwpMwGdf2;{VR&?oKz{f4zpbpO(h`bfSEf1XVJdzQ^zGdw zTI>wPZaZWqaoFPVQ==AY87?8f1b}4#wYZKzkYcyedJ*DGI`p;(H*6vC#O$5#bfncq z%nEM`6N^UJb{E4P!CjKq4-<sFg_%2a736O(}>^RIKW?t zNn0Lj!ys#aUId!SP-yOmcUDF_ny|#Rz`SX-q0{0s6WZ2P_c=dYFVyZB}7HoUWDWZ0Uc!1i8(|9I%$t zsrua8X_!Nf7im;1rv5)h7gN7m6%1n(7^q~3eH(TNgGdUjAr>BX2=HH%kXzz|3Ht1X zt5E$Ogim_d7vZgRE0RFa?_OpsG={ouyFMi;WFnkyz@i=G&h!cocR6&1i7y;GQ z?qOx`HDz!M2_11dl`Nvg&dn}ev2GEu$9g4KiN~*OkyIT^7a;}IZbL!sgLjU3Hs&WeFRit69ehByQhq{TxE7c#8f5Q z<*X@!Y=OFy0E*&SJpLL*eRL)PjY|ts$_E2d!4?JjfkmmHmh|w~sh`z&VNQBPJtH;o zD#OIE%rZGJ0F)jcUS>|pDN--Y#9)`B%ES=XkQy#NY)(pA+nxsGa$*9qV%){DY7s;G z5jvmh#Yx7!>P~CL$eX7ZG4f{#m89efDOdB%?+c5N{3wYtABV2wc7UeN1ipC@8$*v50}X53aIDfQQ9Y$ zb_15;f;x}nOp6XeevU)xC0hd+FPC_0AnyC~8@J@dN*MadJPvv{4xSO<^HHH2?(3G1 zifUnypJ-Q6m7!C`TYv&2pJ63w|2j47LE6W3FRuAf$$cIsPNDsyg$L`2tCGs0Mv#n< zW`6!TFT2T@=jCocaQz!GijI$$xRd_xEZG=dLP+Y^3E5$^)to|F3LciYwUqlq$(;!^ zBcWXP$BIOm(O3fQc_p!O(L@R!mw1;|xm`l0I^KEHl!(1B<&Gq1O}C&vX2w9_E(6ri z)bvMNz4}JMk3Xzs8;m5tc-MAZokF{v!4Lo#%Elmx(?7ie_5nu6apLoO{l|L9oS{ZV zT!Ha$|3&%^YO@Aw$5)>Ah$F1x^xHZ$s-^={7R%4}0{m2bk1;%>%5+Liw~+EHvu%65 z%HPkUN&Q4B1>-anfG|Bt^xZ@?(AP0c9E89gG`rI@UuX^}adBR4r$ApCWYN>o(1We` zQer{+!UP2jf@qP+N_36t?L=5cZt#yNpPSjUPR*l5xKN^8W>epEe7mb;qRC3k+s=fC zG$_Y&CoR79B>2d^Tpl$&Dxr-y)2q_I^#A!R_3f^)$hP^f!OikT7W^oO#w5`W`^wRk zDY8MT+(SIY`hBHdjy_}@+qBPZO>?P-O`8+v~Qr5s@rJPui^OxjFZ@ooVihDzF8~FdK}KbQ8vUQ z1}=`X!(0qORU}?WXm)k^uW>YO@k({yHw{{^e!8pb`tU({&s5zN=T<~REhVYKzcgQ4 zFHmVc&BHU_Kk_&@K9(g~SAHar?~y%hpkAU_NXdN$PLAPC4?NGIBir;UZ>?655= zU2IdAZ7jA{$SUve{+2u+|EDGY)jy5Vpi%X?u)r8G$w=`yH2d%pj5+S1-mPlo!_zOa zENua4xs7jjYSNx%VLL&|k6AG=v*yA?*gq8bhR*{O*v+#N(Azw^1%sgJ$wupoGzf4Md?-%ss|Y6hXVNkA)jx zv8crZZfpP%-Byhjc&01>xWp-odg%FAqlh5b*hlzNv+#hhQ55hxhreMPh(Cm_&_~>l z9LKfS3me6t;7;mDg0GrAnhrTa^H1+}NX?v$FqIIWjT9*fIqqE+_z7yFvMfjr&aKGo ze1=%5m<@-1Fs1phaBGRKldk{y%eT1nLB*f@SDMQ;bGn`4EMn7Gd`vS2$`MksHKhj-F*F8+Bz)?OTEh1ee3jcn=RJ^TQ zdN2jvhR&apQQXh7Y@XQvrqnetXhL3?45~`jI-4DYuhFM2Q#=fuP+ZP;ErGcA+r%~j z8{P>;xKl`kL8e&_fbok9V3s8wGnLIv+AG3I;61ysL~Q>@F|e1c!a^A*ROtH0T>}b`C`HY zmHA&_DUrrn?-yAGU4h=6^SXT8ZwV+}QL1KqyBsePpMMq`gCFTwa@LfzwCE z*#NE#`he(pAGH>yBZEFj7uNslB{7)*0@=W{mZT;X-!+L`Ob*Wzw_r}JN z=LUsQ7^!Di_Ja|)_G93{wS3YLbK%jj2?^0ibM0yL2Vo|CafSmoz^38;09=3~^aiDf zD`Vq|$&OFW9zL1DwLta&9ndH!0*H~47hIh2tvK3i_h7(babZ8)SCl&bNf2KN_1zB8XWr{Q;yns#uwu*qGA%=Nz)12Aws?XC)V?YA3RW zwM313r8EK1LJ?ry@e?IVyha`s4zF4x|CjJEha`wRP+yM$q)0AwH#Jua?gG6Zen9Zs zB}f=CMzA=wL8jmFS`v8q_bq?lPTa%;Ze8!s?SEi3MiZ znw(H2xqN%HIiBi!#p$-3Eunmd}s=J`{XD1!^ zQ+Qax(-4d{rj9^lP={@|pB~vo1C7(We^fD>_~G(gg^Ad3^KNUpp;O%?F^x@2^G@mEFp}}$Sbb8uWbSm^;j{y_ zIkPStQ%)msL){rorpJy^WY0O3>q%4%%~Ird0t4GArILm;JwwU4bf(9JYUH=AU=OB6 z0r++O%er;y=2N6F+rddD)rO!hON+`h5gGHp!CM)n$C=4nF77(_qH%O^b26HWp%`4% zuu1w*Bg-&-uw~5~ihuR00G7wSxJ!Tdr+m^Q*{0vX>k9bqP9G z9yHmP*JMs5yGLcQ}fi||F zLp$+2B1%EOF8YVjcLKpg=Ao;c$2;euut>IdrqMa&1LXNWS1KEn->mKb+3)@cR_UU{ zr}s(_(kZ5(#T;pDJFT~N+0w`6&r;I8%O8^p7Z4pc%}fu#t|h4b1K8KXV^wF>7==z> zivCCB9X5&Y&pvLJDv6aCV zqDp*GG^8M;4AxK+DpBwi5>Y4>coP_U60o@VPHMvZ+-kD;@hj^8@>UG-otyW1U^gQ` z>qj&bi;e6|x>}?R?Ml<;vnr@9L9#;^1DznV`6B>1_%x#ZOmckjtR>Hs z_f##t0#8~peDS{N+H}AA5L<41dxphFe{YMY{9cQ&nA=`&pR|@E;QY8ipH1rPyE<@5 zrht_syY0GoMaEd5V=;WIV2ZtXx%9?Y^6GIvmtbpGl>!THSEXGO=?GVxGtZJyTreM; zaa_7{J{h=tiaG_lcFH}KujRyaoO|sgc0612Qh5)HiKE3~m7RUVooF+4$6bH5)mRL| z@lXW?wACo<DBLDs#KP%sT@8I9>0cN~4FUSLCYa z4?FPmlyhJfIXj{4o>pv4GW+sPOp6hHQ;Q9E_+abNYMvupIdU=562cXUo&>f$|H+LC z=54v-B&y)??=W&3M!7bw**A!j^9jRZdZwDx!uFhkp_5S2yGYHD>0q)7u zr3g{=Ne?NXo>PyCRV)9QXA5L~^3I*jCa;luej_VCV(q3KuC)MxGm3xVqAWQPr|vh_ z3x?f+Jy*m$aSgF|H8I}LZL(H*Es!*Z;5eGUr*wyzI^@=Q%#S{4vrL1iVny3NhtBoW zzNZwGoO})xa!n6pBBSVV!ae6c602kGKF#0QI)Iz+<~J*IAwccHJ(=Q}*iwzy-1h&a z->)ge#NqRTXNoaSCwbb-#^CKGxZe*YGaQnaWrFo-;Wo*HZrp4^zaDwGCqiF`O)s?K z`>Tbt{Ye9QEU$yjG>=fFvB>A|DKf{tduH1#DsFV^l1W-yzq9@qW7bX+3S`Zb1fZ3vE z7lWR`8kXPQgAPdaVV~cpc-vrkI&qcmqIpv|ZP3p?FoGSY-zQKf2duh$yTKF<7H}Jd zs7!FPyE|ake)x0Hg>*w6Wrp^jrY6G_+R2|3Kc8VNi^CDL5~P0(*44y_92UjRWKwTw zly%p)&{-t}LV=2`q3=SgH5i~JWH+w~qe`?yvMM?+gR`+mp4`oGX)8N%KCEDTu>IR;Z`}11~oYA$}=6k=7WCD z)h>C3Cv&-NZ2ug;BNFI;Hf=}y@8}it62q(8=zB=zt=+#aXQA(EUBmiBs-d&EjV@4b zyXkVg?|CF{;|kGHSEuKT@gZ^f(`aD(TQJ5m(;L2W9qles7#a7y{%_DQ637IO1nsov zC!8zB{XtkmkSIz^25IlgF0=o;jf$$X6Y!7Wh+N?c%pA|PI{o6*|v=P9=vL*jQhX&dVrk0aL~V`rAWAJzyV&Q>l>auT#bJZ zi#!trM;$!7#0QL8qqhs3EY2Zx#InxGs(;)@p^@DVPwLRYEQ98bp*o5kH#M%2&?T+7Y=VxFoxA%}XdI^_Kv6q;FjB9-c|f z3&j6@o7&45@Sgg6ry7d-OCIEBxMyz}knAFd)Mm(rKq>hAK7@a*-x2~f1iKk7rT^-7 zaz%=(6m<2sDQdJfIWDR|WlA{o>ZGa9Ohne~C(_JHVg@^D+hii_c7p37dVnu|665wg zg|9DW!%=cFeg6++d)JROW-{J3a}YLR--{zV=6tV*%Rq1F1W6ftN;K-JgwMbS7Xd%| z1s`~HgbZHn+-^z_>KHcJZc+~lfl;lm|HmBtUlUCPbqt9JmBc0w*Elgeh;d>->+mbP zGK#~+L5=vX@;Ierl;#YtNmIj}B~&=$ua0F=7Wsv0q9=>GlJ>B-*g|*iQB&D!%{r!_ ztB=;;l?!s6#(Oc@b(xv3M}*OY2z-**Yz_^?SVuAe<8#L&N)+^@^mqH&Lv`#!B%^v| z`g#4J`u35*Z<)y4E}GsyPxR~i@+-X)_p}lLtk=ZtxH0#DaUN_<{mZeK1^xc*(ixXl zQBN-C>5{(m&j*|(?vjhbMX278YGKvDhZ_TSjb)TK98+|}Fz#mTf?jC~YKFcVK!FXDsJe+>AHlNm zofg#4v&CHkB&)_|&zv;<+%M6ZKm1oYL?^`fgJp(l^s;(aV?=)#`{zf1OUwhnBIYyD zF!sjR?-IiEPZ8j4=gi&$6&b?Yzji95aZj;YcoRkQApZ3kjY0_&q%q!!BDVipxmFO8 zNF`jZB3P8dWNRQWm&OdI9RW_hk`*Mab@D}KMCuNi7}_V&oGQitzN_#bcXuX-M?oTI zk77inAEJrKlLIzRJ`Jv$4AO4smG(KFuSktp!2R8Y5uWAn^=VRBwqN|}dRFm3`;%Kn zGij+#p-fHUXqI=1a>(DT{d0U^RPL`Pb@d{2Yr+XtG%fthpCQ!Jr0D(7?stV3_lH zUUHDSZw#mN{7aInB$`@)rqZsPD8}NR*`#CobN1D{+jrX9^plOX?@LGn>k~_%@S8>; zDeTw@QP_UG$b+LeF`6wCYy=)h22PI&;TWdwI@A#o3b7{~Yyf%3Dlib<4ydmdik-rr ze27~i-VGwNLrw}HW8#4^h}F7MASw?@5AO!K6Rl-TWr%Eb(AhiO`S;x3JsI%Z8q}Qz z@cWRt#?1E6Kt}+fSHwT&U%Xy^5(J{mjQj&pfq4xIRHwEf*{A!E%ni<#{{Bh_%CP!K zGEVWhr>7R$Fc2azlZIdFUdzv^vmYVs4YP!w&|VDmbR-vn*aapPpR2(Sst%?bOlvTZ z=zY>0Kj$teKFeKyiO?;9_x zw(&&@Fe`w{02kl*f^p$G`%B!I8evsAl}@&5P>>%#s9FWlp8JI-)NR*wXB?ZBH_r)9Zi_>V27Hf=0s%@=c*I z*g2|dlBM-_qSBD5MECrm<|_Src*J`j9M8Mv@_EL4T?nbH6E01+ac&BMMS|5mi5i^- zlk64_-h{c%0SU)-tZ5c^d+s+82`T+PYM#)06Oid88RpgP881=-9r@wUs4Yph3glo_ zC>aG(NGHKJdRCP6map*i;Xmo9@bv3e!#JWfWzgrU*u8I5QHeM} z@=h_^4mdzLN`F=qaKMj#!r4WjGvw{@CqPETKU&d18pl%(J@CKo4z2ZnBAn`yy!0zG zq0Y1;wT#wA*6KN@r|{BxK)*OG4Kz@Rf}d*Eede!hGQFmhRi$uo zCJ}>k14Lc|itH|bzb!t5XIad^9pXlB_!r(i;xVZ1A~d@m2f9eS#E4XBn8${0G$1Fs zJp-)UJ5!CZ5MviygBiv{{PlWtX;FB3er_Ec<#`maVZ$KB%3$|x|ks^ANTw)I6ZOL zw#I4z2kZ9w;EPjYB0ST7^)fx^ED3j3TKdkU#jGPWVeupU8qjIs=_Ptk5Q4Hv@h4BEjlzFYjU_|qD28_7bQNHk7#zeIrdDrA23t7$Q&2$(Cpro+>`h)0 z4E|J|rl2A)V(+_d@S}+T*HciwD;W|0ajAWPD3p~Q7x=<*z>JIM?jQq});x`=o|zKT zM_=n_(ElQMYcP<94-F+}kfuVuDzzYtzR_Uq>v1QuI4vETXQLV^zqk+ji1CNVZJYNJ z@=QF)BWLW(JoGIjRpQrTb=I!xZ56D`(9849>s7NqA1U267dtN7l*;7QH_x?rRhv4k zgbog@=N6f{W>uNejTm zH02(5v9&|6A2)zxz5AuNIEAyJC3_=OgQSDbjcjE!4Lk(JnLruD3b%xC9vm{2HkflV zJ)hI#x^lO(VwG!$W-w;gW_53;E?n`tl&gjpQPrEpDlLBmaP_Gy=v?LtdLFLRb3ML zz1wtu{;B=;`RezsEjC?_v_j1~)z4lBb=x*6$)yk|!ljyiUCgD;)+8jHbPI8{TwS|9Da7Q2a; zz4GQ;!4B+r_jw72c<#zcD5~*VZw6g-Ap@12YYtrI=3QbEen+wvt*BUSp5JicDAfzq z%d8wxd$Qls^X8JgdX1Gr-$uwne|x=134H(JM!34g;oTUleMQ9}BRC#p*W^_n zQocoEuJX-RA)v>*V4vO3Cd5yiuh|Q6lIQ9e=%NR5Y!NH>aRjG{Pih`??w0Qa+;UK9W2+ zviyJ?QG=JBs*eq_EZPci93@mK7LI>GKP(>s#FVd@B{%I$DC{!-ZVuHhw0*Omrj8vJ zQx4-iKxWH-t^uWfl8Vn;xka?n+Yq6@JDG!Z_sZTQ%_;l*<4f@8h>@hkYY{GR1URlW zD-`V$@MNCKTNZb~bX5XHf#}@`#8Lz>6ZMqm2kN|df|i=;dzqn_*RbvkAerCr`^toB zQj}PJ96E0A5XnBuE&zM-cQ7LyD&Z(1}(i4V9_Z zFDiSjZ>8rja#mQ-oXA0}R9Q<8jJdFA2gF7|O*@IlvNQio|FKJRb-bzyPFGHscB<1Jh_2Q!F zkJs>!pUm72Pa0%|_Q#X#!|Cg0ls8&$LKm*?@{CnkrMz;6pv#R&SzY-z)6qx;EDG=F z@s#$+#dd2rXUnF|(G0JuZM5>k`BK$IXgqT36kJ&2hS+Q0{ZfgCYHb^81TEj=>&{#rh7h$zpQVarp=Pm$c(r>?MF`PerMt!@%% zLb%#svX}sdaQ3g(kUfKzhmzRcxqRLjaq8R_jH;hGY90&o`^XVQJ;)J}G%iEA?3l=c z_BYm$gSW&4eFKvIa;O!U0V)AFkTy_g1km6wA#Q1M;CmK=y=a~&l(A}=cD=}vL}nJA z2pAbqeRs{*0YPN_SxLJzHdXR%6X|zbAP^-O9clSrqZ#PnOk^?e%(W4oAPXt!=ne&pM zy5zCb=*gR;dXyKgS0miok-Xd04t%4#K0igbJ3PJ7SuuB}n_%v%2l4gMRW9naSEglg z2F8UO*4LRj$@Si|4d3hQ;Qzu~aLmHUtN%sZEsPeVL?B0MVYygUR`q@{^<2y{qPpDw zs&8(#@zUCkbV626L@l4=P1*`TNWHftj-We+=bTzX{aqT#du0Z7%u!&J9!?`tHnGmM zNzGX{VVLSZ<`iuvX%i!VRULbP*~ol?VVZ0O<}l_I#gv;M*^?cLGcPqq zB5HPEH9Sx`Or%Y=R@Y8dp?fF(FByQ#qzf*AFN0oukcq2LVm3`(tm#=|($c%O-{PHw z`~76%y;Elh;$;prC0Yh_PLx77o(dqMtEASg_K~|k`p6{pA32Sz!3e1JWKXd!9rtu5 zCi-D*>%TZfNd(w?ybN#(jD||{{{ue<+ZPl+hl$JBqUwSFSwdL`A`-|^+81IP0qUsZ ztJ3tFdm_J4smoj9X~7`LWsu8(lm}x`se8b zSsQX1wIFsd-N9Oe`9$B7?y$T(5fdq`X~nZB*AU0g%8=k_6#7OqcLQqLMzS~EVHAoM zNI$y1WneaUsrU114t>_)9Qj*{8OvOgwod8jExKA&TL$L~KeZ4#o73B?wmi9(Zdn2q zbQsB{`770LJ?u8FE>yPE72b(e8s!s`CvGbe+p^V)iUzK?Ny^?iYas4v*` zsDDmQ7>)Y6fPAitdOd724>k-213t)oiGJ-qpoNEWe1$=HjG?+Zb;0b(QpfwUp{s>f z`y8U~nQAX7++pk#p`*wBdt~vn!xl@%U4ysAyG`M&@vCQ5k3h(?XRW3KPXVKDr2B(~ zRu@;3^DCxsrmGdLu+)vcg~#L5gBOs+ZyCpXnl0rCY9AzS=HZwp=zBve4Ph?T6ku1y8HSze?|Y z##8XzIVL{~vk*)Q>mI&T_@xh4(T-$MNoNAOrvx~K9v3tPB6J(8}Zdw!4P zXS1L14&jg^@(cN`02 z1;q>Nu8sh}01eOq+WwhSxat7AAUiswIO|_+ehBCCAFfQr!qm@N0bKAIZm7un7 zS-MG5JG89OF1e?)o>6k%N70eIri^UqM)O!sEVJ9VP@T|oqH)G1uIEJ*9Z8)0W21{x z&o)B$pZw;bon-;}v7h>)HYONMqagTr4Fwp-F&PsYCsvSYJw$RzJxm%b^6Wzzfwq~x zSfH5pjS~G(B~b`tSJLTwku{0TrbYW}$44~##ZhJK0$1M*jrw}aJ{TB}^gh4hHaPi{ z*oa^dZcZmDnndC(t)l-OuV|DtVT4~?{#N<%ZYq{^QX&Zi{`))oJ?VxCJ>7MvJ5FlM zBSHTlj6`R`1XZe_f)nY<8!?fggGbmfpNfa`5#=-Fad`5Ma@NL{We})DeP3qGiF3S7 zsKj%Q&E^*xExLZ#*lLEEV>Sa^Q7$vZ-vaeJN9KLXUX=&`z=#Q;pUGgvhBmV)C>*~r z-p{M(9$e9`X1zKuBaNC>bH|c&oO45nFbR}>+c0#*fIkK}I-Z7ns#9|o=9;m_=WH$# z?u%QLUPNs;blQ4cPZKM2;6KMcJ0&4!Es08V;B9V;~aG@cp&85{Rbk#5msj;_7{;y^IFFuqy0`L_IER-PZs*q4E8XV=(QCaZBJ#nU|sbX%X8X z**~%$uRpRMlJ8FOf8FIr9volEaihpliA2buH~#QMkfJ~dr-rvieDb`Pw#?(2a~4|o zC;KoIY7iB|J!+39?L|rloa|9$Oa?@4H;c<9kqRtPYjpF;R?4FL={kk5Y!I8Bp;@+w zBU%txw$zU2c2+7B?2)Bjc3l-kcG?wFh@gtM1Z8T% zgd**P!V|K=k<12*QAS2^F%32zc&)jo-Un#4Xg$gX%6{KHUqJcrTwoj2ORz7v7r0_! zY9j>VB`@knDudH=;SqR+Y85YpuWS@w$I<~-W|ON-XPlpUl8e_Ci+*K8i@((xsnyGdq)uYKI_eSX!O@Hp3(B|IG$FFEEf&K(r;X~)s!SV)#P)qYlB)$&VgewGd^ zyoRx2v~BMHS$UA>0p-N$wz-{`|7!(u@PahSxOh)WWZ&2Oh%lFQ#GUjN9TOz6jU97Q z%@Mu)3NPYCU-|iJ!OkFS>9@xb@tw+A=%se7DScWH9|8BC!Iq8?T^C8hryFX#cBrLL(xmkDkD<-}w>(SCT&p6Mg!XXU z6ND`)TstL?&+JT9rBGogKq-Ve3Rm*rA9)1jy^}uPF$Y*xO?*9PUPq-f+Ir3SL6;-~VindsN+Qhr2d(L1wrjKXj^JwKBzm&o~%-cra(2L&t7Tfm3Qph&wpHGCA&4@AfOwJBz9%xyFHB0EHA zyKkx%Zv;DAPrt@*eLtURMp_SAV|#Lyan(&L-HK{EZaUeL&`=qR_;Fq z%bDUWrpSN)i%2R1)|rtcOZtF@MIWP*s%#bJZ0@cDV|)P^ZD`=^FYOQVtdOaTO_!d-LVtrQ@>n?r#Ne!-KH+A?>QQ_@p5aMB*>ieHmtm6 z^S<}~pw{<30*AQeYj)Y~vZ1HTS(U3aCLhKXoxj}2o+DS8{)11pTW3;~&wmE3%@=XK z7>ZV-OJ6$2K;w}PC(!_&ni1MMBQ|roV+N`jrds=F4Tqqb5LFe1=8ZBxUvj#RF7E-0 z(z9ub&Zjm}<~(VO&4qTPGPH0DLjXeY)1 zj^#TL$s^dQ%pn$h0M@HHz;Zb_h!DLF#Y&4>a3=mfIq`Dy1(Nk@nh4`iWN3c}l@lbI zSRz27F6(+G*#{`X zCbG}n6(=re5{NzGx_xHBOdDJ_|DC$K76t%P+@TH9A7$L;ID8SNO=SgB|CZu`0ZNU_ zOYuUf=NzRcA;CFQ{}~Qeo3x6!(oVQK=uV&wVndMa$!em&JMQ>+cb<_u$3t@LC?ZtC zArgu80nRa!d5FW5)0VLhp3#g`b59h((@|YHlyBbItpe^w*<*O3*h@vjyNh)m?rpss zCv-*R{x6|VI_alx(7sytiT@8-LiYcEvViYM*i%?TV#MWmVM?o9va&(5^tKnRUWm&oBa8*;)IcnwPj*xcxwY6$L!^3y(y2tt$P6a&Y2UoQ{$<_fpy(|jM#^Ur+PK3I7BDT$-HXQEDt8J&{X zpEv8K77Bq7kCFRbN^T|Y4kr9gQ+Vs53pO$OI&JmG8qQ3%GNB)TeM?5U46SWt+TVJF z&q*iW7$AWWaQUHM1)c6|9PKQchIKJuYSNL^sRhybW={OUPBgyFWo+>#!c-jNkZ0T8 zf@gD2r2M-(gtYw-sLy`Kc=}YbV;-Ac9}8vDryzpaqsK{}-A58E{9fTWpdzlKP-``^ zxHK}o2QSkt)UP8k`imY|MTUpFMH*>9iiM{*W7PirnUnnuIP%XS+33%Va>|CqB~U*V zwOcFpm0nnls@9ME^?jxL^-=8mey;m1Rv{c*hg`SzHzUEJh*8|iwjJAc8DsO>m4 zTOc?;{M_y1{dT3=)?NCR;o=a{{Tk+&&SsF!vsVF)W~tUk*!5Tq)$fD)n;M+GQ0@Lr0bWHf}1e^7}LP`{Sj3t4f@Q#u}(LzF@z# zO|G}5UPbK(2@8v7%sCLH8{EHuejo{&(~T>j zR8}Vp-7&X0OH0nEYU72|Mi!hV?Kgg)VIZH#{u_nf-gg@KeoL^>hc)m}=M<4@NW+HJ z9r~^$`+v(z>_0QGPa0X^*J(R7K$|)+bSc?iXy}HPq2YbTBc)U7p)Gro(f5DE!#%8{ z`(HGM{B<<itq4(+03f__Gd9yQddvty{N01Ik~$)*LbO_CFWn$GUOP06ut$;+AjtB ztr>l<(jClWIGmqPKU-LffX|=})Csqr(Zn7~VT6BJ`~5@vi4wB04(@M~WMrb!LA08T z{MedXF^ni(ey|n$4g!$rYxSqo+ic=5e*8l_EA&%IxycOmI3SUxnakLAHB~9hURYy! zj4i0FZ??Hi$_UMIf;HDse~sqSCBOOSF}GgibV|gVDMK4*5}z%I5Rrm~OYq0GlJ`o8 zmwzQGSUNYpe~O{4it}r#a3|;e77qx*vV`me6d8%Pgkbu~Km9K7l_5h<3wcW!Tz_1E z+ab1u3XPq^lEB$=hVq|{G!0}>u86-TVW0iTA@q}fZGa#g=HNSIMvrfCp{j^8mMf-N z0`*|$Z8QQn_+8P>OI*<|?+km0zh*X(|5{X1a^j!U@JA$hMO(~&G1|*!Ts1)jp5WANXyC z4k|V)MD@siig^7>ki06`VsrF?iiMSdSb6s6?WZXB9lLGgFUQ&}>1CHwI9JiPWSj-hg_((lX+(le2jlkO5B~P+U4o>VXr)nXHw{QS4RsM(a+l_gV;0oaY|4 z$UO39Cm^=XIFvQ-1xpB1MtnOyF3P~6VL!B<-dqp4!;k5reaSTA?V*j?2t|44b+E;9 zrH#3vbz7(J3sej5>^jB4c#WIHa2TX7we1CUH*)Aj@(B$BF0zadGe}XCa;dPmfms>$ z9%pnA#b7OTyPA?79{@*@UFpjf1L03GJ{;_{_UoVsPDp(52S3>(#+exG41ntG<=u)j ze`Gbilu~+d_i9we20N~5KAlWcgLAc~tagsUGEF!*CPZ_O8&gdg7LHUby314rcsJ4s zAfI%NDJI)}p&JI@AMauJ1cR};%V2~^#u3lhr&Mp^$UP@rU!-5dehOp;BEm#?MemfG zxaCTQ2&tJp^9fgx}3H8d!&m>H@I&X`z*1q zhC&ZXkyePec+2&78L61&kjmO%>d4V8!iY(jp@h|2=M`=i zXm4OJ$w`to~l)223m}zR6 zM{Bb`?(xQDFY&fS?>}xSNH6pF+V~rvcRAXO%;!E5ww)005<^H*;kSa-^oEEvK2v{7 zvhq&(%WRvyL()=u%xhYEQ`f9YpIUNqr4005?U|8=v^aW}gyy(7lLDxA`fo zPcsxuMb#DgAtOid!a>m#7q{}Gw0&_51^LjoHHh-fV^CbC`hL9>{3Rot=mO$3@mr?M z!I1#UIugrTn5k!V&Suk|5xUkG43(g+he-$2jiS98(*vLxPFLtpf_jO<1u&gS5PGfp zsOcGzC(0c@%n8^9_L*g~Yf1a>dbfjv8$7M_nY@crQN6tOwu#O10(_6Gu_O!ZK+&L% z%rw1v^L8z<! zH=1BFCGIu&^4N6|qzs2m3+4E4<42^PLbI421Z)+r$RYlVWfNn1GGec*S65I zUQah9g6w&iSKt$2jj7`bxy{D|Yl4wA6~QlnFmNC&t3s z>mUo_H&57(0LuiIF8eKdjUyQDg7qzzcL&O||4b!CM%EOPirc|;Ob3|jn5LKsiQ~GR ziS9}QypRBUe)q_H$lav)opFD&^(5~x`sOl(%*?1OfuM%B|7AG32>k5dYc3QzQNxM> zm=$#F^=o-Nw!HVrAc+1vFe$w7#n%P2T^K63Vwayu{00>6`TZr`y_uWg= zLNf|Jbn=mpr0rZxj_&hZt2B%gETkA5ayE8(P!d(i`d6&IBP518t&gkbu_ia$P!cj* zd&elmFC?fn*&d9Ecn07Bq{|AoVS^rhJPnA!K5qf8;c8Y3tD(*`1_VGHZEZe?(obJ* z1A;XNWFA~kxW^Z|^*s^%e)z zD{O$G2b^aeKHgi~^uY0Tn;80G1N$_NAEmRSeG3`(;-0-KM+KJQY{iDx@60F3f}Yj| z1L&y{G*3I5X(ZNJg2X03vx`~uX9Ic4$c~u*4BNq=MLC2`fP`c`Y6tGk>=N56Vaj&aP*uW z8ixVOgw7KN{j*RAT zZA>(={pEe%oBvXKOB*mM;pPCt!1=nLTxCiKfFYj zJlV9aRF*0vkczRCh*R7lgxZfZ$EcPQt(Z_gRL4#$iQ}GR`ZddkG&t?g6u`PM;D$Q{ptZOIL^rO4T?@1Bgz8uu+mM z;RdDBaSXVj1h*s~W)@HB&11^!UX;b)=f8=C$-=kT_DNXUw`388QTKIqCqPn<8>kJu2PiDS(O2fYso2zHI2eJTaMy=m11zX_}^ZKD#Uk zwUzwm{N>M|a2dEfozj6R_-2iw;2Pd$SdRH>08heOvFwA{zT6BU$+~5hFb}YQns$HZ zG4J!pi?@;}jx3!g-A78=j9;yoIL106d^bQp=524`Vu5sq5OYlS+@l$2 z4M?-gwe6=w=U8e0h1s&zjWpNz$8$4Hrb!j04IQ+G_fc`5aU23mJ`IJJ0UbV`4bU2R z#u@l>ECdyO84T3ACZAAd&4$;DFsUU!O2=2fEM?XF>1Tr=Ah8@w=^TO+Z>4IBg&ci84DbjtOk#ySKE46boXYntB#I}2hc%Zal4tO!6ANX&G%P$B+(GHpDJ78hcTl&VBG94<3U zJOGc*YcG%RGX#KAw~ET}p+c_R_0p%e88T#@GZ z9I*L`A&!-W#XCldoYcKg!Ggt$qtYrFlLK#|YpH_Mq6zViG$+0M{~2yawT(&|9M(S} z{@kLpaG^Kuzg7JB1v;Hn2)W$YlBveb{gsg-C7dQQ}r;cCN| zUf8mG!dI3vr0C8T+a*ucz9(*KsrY?9n-q6DRow}*fu7y6gH9%C^fm}=u9IO^C5Ps_ zvplFhgir+7@E^@Vix4?o9vd#2QJ=rC6e9PXwfmQl_Wi7`1s{S1J^@^|O*CH*u#w9o zKl{yJVd3sIXpLmx9eplT0g^sCZq(rv@}N9ysX2+`<@+Db5fqw8 zXq*>SR&U^(sg=}y(B?&IgIT8G4-{QQodmimruR#nchI@h}e>x_Q^TjIl} z{`sIQ3F1}7axqFxr`d!j0u~lWi+N+og@unhfc3P2PQ0-{>}cablnFPy11GOw%4*4)vrND+Fb8p)v`JSW0W9~DLquaLFe znuQzOS?$?X+8seqbVvu#qZ`2!X$v&HXHJ|$aCmsoA7cmvznK{yg9Bil25OD{v50a? zKz)AoBjS+@>H*0ZE;LJ&lRk~)x1Qwoe z<%gaoo~*OyG(%h2ayg9BBAx8lDM@Jl#I3j`1Rv0oHA2RLF_{{gDQ^BvQk6+a&LmB|y+*T6q+cwbpx# z8TamvlTgNDphbOlj3+^8W5|2HryHEBN`YMz{jZ6eWHLmD^#2l1ku)%qS4ZFLIKWpd zapcREl~<)UD)aaUPO!&izEXlY75A7Yci~M)2_Fu!j8)N1+aKu+yr}QHKvkd#>9pnk z;7w;TMBCCU|1Gaoqe2ebER{T)e^Kupnn)c|KNG6LsvI62aO=X_N!#T_KyIk&Ho%q_f+^ zWBW>B9jhd>OyCdrG?^!BNGX=$j;6Pf4%|k&-K2+Lb%+VP5XOIp1K`cr#}+dT9vHa=7hnVK*M?dp!Q6AGEx?T{yHg zJL<#`P7r+f?IvX>w~IM{#a!x$UHpZ|G)efNx-5wGn zT=NKlGKs|p)lT(e)drSm)k_AXuUQ*R+4-Cf6aqNZ20?;1%$b^Z&Y3!E952_GGQ0}>^Zy*mZ?R;2dHMh^OHWQRcUmaqH|E1E7)kUqG(rqT3C9!Y@ z*z%2w)%qwm^^RMGWxsV=mUQDJ&OE-1|poL9iqf0)bR_PX>`~8g0^EIj&Sz*nd zuyXdF6tLzZeNFGa@w*{#;@*7Xu6_aEk?EqhebxJs@^tC_vKmu-rDpb~dD3W4bvX!) z@3gnB<#_vBZ`Y03_~efRSDy$~1}>*HvsYkk=P5|7&}e7tlwK+T2aFuOZLfcqxJ>Z@y4k5oKs_Sz{DrUp+bd_lU(vacBiH^fC(%-;47Mv{qJ#qGz_~19U z+%1nrN&YXAl4D^%sho#)dvMLzKzVxtwORC_4xdab; z`EkJCJ?E^DL`h1k$K3foYL#cp1oG~Yj4 zBn2J*6VuA~u&R9whV>-R=N8o_IC4=YAr4+m77g?nDpX3Y@o>3Ce#PeKc;Ob1*ywUm2tYU~!U_q(j6xj3>8{#7s?AvXPQ{C~ z{h&cj(r6p;()W0HiK%6#lVTY=tFFU+_o?d=wEMITISw23H-?Uap*aVG=Ve$$l%!Gp zc>-TKyfeBsaJ&1sSq;;S(>_Uc3unWal&n2F(5CDIk%IW|s+=N~Y>J^qi5%1DXT=kj zwM1|&*;{Ao+TMvC+8A}%W|R+*mOme6pqy~&l|KtvWG5?n9H>+4_GG({IYQw?JoH)Q zvkNWdHp%5~mz?AT4y@vIH(tw_IEHLCx}(D@+>QrBnd>F*uAuqBvro2t6N5h;wDkxU zx+<@tZDaLk{=lXy$K7hVo9`zlZ{5*gumvVx9OloqhJ+{&<1AhWfcp(wiN_1~jIH5f zwrl5Z4#@qkaC$}9>odDdpin}u9P&O+FN36U4@`S#V$<_w<&fl-2R3?V#_7-PII`dL zn4oTyGuz^KX^ApuobiVew}+W2d9a;T-IYEpXq7k~n!Q_7H1V4~N>0*fpPQ8Lid||Y zRRx(&>W#3-Y&0TIwst7c8oV->`$&1Q)kNp~*IP5CcjNE2gcH6uee#Ce)t^^BU>kuV zp)E_Kx9S1$I^Kw5Z%BNt_P-cPV+$h>-P4dPO)J>TcX_uO9AyDy0>^e>0-@Ed$fLl~ zzB7S7+`sNvLzd_RW?Iz|9bC@-?z$20zx%XmI4^OtbP#`zU~l~sbUH^?CJhWGB1tL8 zJi0l$JX@eehXL&r|LAXetl0$}JQF4~sy7A-ow?1avKF4>x0najq(;DA9*&A%xdeKp zY7d-E+L+EY9vZ{UX;-8|!%eR8q1K;*Z(;bdCaWNpa1q9I%G0bSWwn62Zn0Zz3Sr&^ zRm99M4DZjs*vln*JynIT@T3+3Tn8wOf)})2dZ#;nFuCBKhZpk-S`l4letW;5Ku(jC z=`}zM-Ib5Yg4qh?qibpqoun-Ns;>nOQdS*4cCflm)DoF{CUJW$@?w%@%>1x{mO-u6 zg)tjn)ZLh1gTi)xv)(y4N2sJk{q(Cnw3Wv+yx;=$yD+`uDj&+-vN)Mz3GIR)pbfQW zF26NCNC(!k!pi^J%j{Q>CBT~~wJIx*YV;?kiUA7}<; zaE0_Le3z}=gW#{QE$M*-jfeg58kIW*g5W-Q7kFh;+;LnGrKro0(C_3d!d2$ZA(Kih z$TAuYc}Y=6O*gChrbO_7&C2Pp6Cr@t}RRJWJGz&YR8*Eks-Jgz}F%M17n z0Vt}y_tqgL#04*b`Ij(4iI#n`KBZ5q<49cH)i;t)4yZH{LJU3>l@^L62)`^|atimA zT5Foexy!Ry2g%Cd4H??p_QY@%A!tfe1t6OV=l$S$+J8Kat3| z(0~7Ck?ew&%pSX~{7FI}zBS+4u<1_ERWbeBw6^T+U5OVrOe=LT3i~bVa`5OEg z?0hP9YOR}%KMo$8Ae1*N08f;^hPRn7b)W0_4vG6jffi3#0^RDOtk*CM*}x$%XdCl- z_YYg`c;qPo=`i*e50-tWX7mk8lwo*`B>r?ik zcU5OdkgoMA$~E}ov7a>anF)3_gjS+M-iv8Lms9G*2AXX6VqV2AD6qgW-Q)!U@tg+Q z1g8J_E&aJ-V9C;F1qrd;0bivqEWr|B<=Sh?3M)Q@`OayF>6{)CAPlQM!9|-STMK*& zSl|`14h{?EfuKny!=Qf+cg&zhk(UMV^CRvI0;>$Zkzfo><$ZyWeO50)kh&aYKuSYw zj6P|;;9w94>tsv}WiD#ecxzVGh;=ZUCOo){vLuo|And^SpI6s1r01(35v`$)mI;W<_Zb_n%!ie%?ERA?K9}~6b0m-0piWrrO^27txs)%E#TMfjA zECroJTmk5doUB@b>Q)xp26vu-u#!6>Ae(Kx9@(lE}bH{KdhyN$e!8 z58bGsF9IG~#^GWTFqljn<}={EmQ_w|JWg#&4OYBSUae{d-pxS2Q9{x@wv3nhjC}?& zxa+s0$LMyaJOvhna#Z1G>$G*(xiXUUv*+j^o=vKwRw=eRr*@V3U)ePuNE^W+IwuM&E% zDlkPG8Tx-t^?#N@!b4OU_E;JAsFbH<$=2dLqE+eZU!YiDo?@`PDY6jcG^CYKd}1% zg-2Oo9TEkM2L+j^^@2}JSX1vsfrq@*=#4T00(Uqi{0|&)cWLgWgNxup`G?-lyWuj7 zUIyNx*U0Rd`)o6(>l@4GVzo_k+jI5wT;lvxoKFPZt@4is!&5gJ5Yk^}N?*d%TZNy& z1?@w#QIEhUU~H63`^eF^o_6dGrrkM7RV42T$y?U&*l zu}r1uEF1S!pKZ}u-cimD55Ms%rFKVQM2zxSN0Qj#>ZtUD4C(Eo{TUSQEqrngp=)|U z>EK*s0)yKq{Mz;B(BeY&UIX%bSYx@K1c1+cZQKF>;4#wbtVMtEAyssfjLUg7M`pG8 zTOsWN{9TL(2UBGyi3>Ot8Cbk4Sbl&-IGkS8n7KJ3e~jaMgA{$B7J*I?UZYuNIj!ax z%XI|W?wUIP7{Dd%;^}-w_Mu!&7A#Vwr<6G5x|fcP9vpCdbaU#iiC+97nCW~{>#TaX zSIZiwPk6Ci5?_Be;Mr85On0_VI6g%6iUyf<2npwfA{bhnprnuXjwaG@3`Z4rrAU8f z{BGZ6cZM!Li2JEwgCoW>B=s~&wVy-U$D7K+hrF05@>J}v<k71l&e>~w2s|}&2-I!6j zb_vLjX5Zd=3eCEqhrZoPqaR)%4B)vS>aEw4O6m6g)w6$;@~gz@A{_IJBN`PG-(%8q zXt{LHu=KjgYoOt+@h7fk1Cn0Bmd0;5^*}R=+^hP*)D~z^vd5zbxLtw}bG601enVGV zLqx`Haezidwni{$4ji@TJ0@%VP1HyaoCkYry>e?|aHPCB3LFHG^iM!sbztpvM}A&b z6#BOny&ZSmqDC}!Dw4J5ysBEtHf=#`ch9;t2)jKiQBPFOhPr9QsA=tx4$-&_E{{P*8&W-k635{p zy*Pb8DO2Y3>%(W)HKXmvK}`JV)PlOXmlNJq3%}OgVSaL;jfHiUDu@Ea zJkiUy>S^6%k5acosJ`qtlbTF>qc?87S}RLI4DI54+81YUgaqEJ%_<&-GP+`NsE8OqhEC1N?F1 zplAWO1Dr?PR7VwqBGhj6>hEA ze){mrZA>mHxv8VK1b(5VM9d17gZ1!N4l|vhm4&^v+vY7(kKMT64lyXlmp#3DoG+ih z;px3v@QzJAbUA!^RBwi|B>uARJ!Rgf-d}%#7NmnS|KDgTX2$_72`m59SWv9oZ*SPU4URC<$Lc#y@zK8!CQdQll_BFrpSe)#~ z`Kr}5*YkB$vwcSR^{SBT_oVUnBKPx&(rd^2DMi@pZN>ljJ~sFBv54lC#{HI2zN94- z_T?kAuG+-|B4)bh{bu3Hug>1e+e0EK#@_#Zgg1#9?E!=Rj&ZST-N@_hAXnhSZ)5Se z$LH-|1dK(ARYw(ZDFTINI2?~eWXeVg#>GrE1TAGvDip+(i_XNM;X;$q71Wqe}` z)%p#WdyR&D9S^=t#kHdL^>EvE_TvR~Zq^Q~&xj;AOg}P7h%mK4T4=)@&3Uyp7G>19 zw1wlm!x3TQeGpp6d4CI)?|YwgYrP|S_;d?~_(;1M_4^&>DVi`ir7tk6<)bWm?AhQu z&dxZYjLcB+^S31V!+Aq~tJPp^qzihy^;xM8Mw6ZMawqut%s%4;AYoi2@0@N>!a=Jb zZR*bm2HV)>w{Gk9r`9aEe||wd1qYQ8?;35b3hKrfwQkWf0sHUgtIy{Z`<}0ltIxkB zU(e2$cMM;*6Egy)RDX>wWwpMFGq;}ycHUXL%AeJ6&n83(PffS<+%oO>%x^{+1dPs{^sBo_mc)uL*2JV&dMf@%pLr$Bxq0VdtLbfOy5azvq zt;ZTZ0X~3w8_|YOIMMl!?6G^#Qhz>vW9k1Z-NO2tI*xVH^nvwvWgJV|zJm!*0Q){C z6W(TI>Y-~+ORMeRok~;7RSC;|;PAtz{45m85K4to(jO#@!VqcSf z_*l~;C(0U3ymcafcnTt(I0P#PBUn9e#}-#Ae2~jMWHQVR?(jbbY{YCey%7(CtN;H zYI@$5W%TqvC}^^>FIbgeZ?j!}-!8pDE(ui2T+2)wA6~^=8h||BW4{>9iH$q7>><3){oQ=4)+5Zx4F+ zsWfwcTr*6IE9Lg+NDJiaaZNBTRexW?0#RbK-1Ebd62-AzT@h>Wi0)*_(+yV&@e>I?YIF4H35 zD~+5fC54w5z#X}WbsO1dnd%dy)swu{w(cV>wqS1HSKG#=G+9CGJNlETo?EVFxRy%U z9MUYZd~}B;J@BH77a%s}9C`SVV*3I%9W+g%e9R?UsDfQuaLlWedaRb~+_38Ry8b!Y zI^)0ZjeyN(`Suf!!#D9)X1K49x`u%w_0nl_nW$QytDEU?cUKwR=~4(jFi9#?Vv;8* za5Hc;@CLz^;%W?K?;B!O9L@|BkW^7Q5b8%*%p?X~qpGq*G`$oWeqJc~QsPx%*n-?j zdLQkl1oRd_T>rkZ@sx9t)1btZO9{q_JW6|^v4Msj9z&LY&L2BZBuweaXWxTv;HRc( zQk+NLcZj|Z(!*a`nv6AKUJuQmvQUk^A|+p2{D5bU)~TnM7=3iV+&!nXw+L7@0FBd# zeX0ZN{PTcrq$OJxk&iF|&m;0^t8F3e#4LKl=3?wPKksCS!UpaoS#;vtKU zw76>Sh$^d$o&jlXm%XG!0AxnT@MWTG02yDUtCC_itxR6_tZ7SLvR6$$&EdClL4SQ$ zTom@};Vq`d>3$p`VXI~6P}>XCpJG&iGI_Bg%vDp<+v8=f9A(RL3}J%}YprXClMyux zF-?ysosOgMiT{ZWJY=1ZHXxggZ%v`#Z{0nQr9t^f7Q`ENC>~B0{Z~BY`$EyAnVMhE z`56v5JRjq%x8X~9x@iKwbZiLua9odZi$-_QNLBj_Mlz$hR+S?FMw+{A9dinbgox^j z5nE_F_0OardmwX~O`sJn8|lx1QJ2+O7^i$7b^~Hk{u+^CX7QRJz52qRbitRpRrVY? zq7K{Ob3R;Qh`c{aBiCjeYU;>1>JWFP+7UY~ne^wV-|?WpX2Z!)!N%?ZR_Bg%5?ETI za04m*N0W;Lcsb#d7f=n$= zo#qh-piK)gSV(YanvpRIsx*7yI5V7*{?tT7w@{H)cm_uiX=bJ5zreO|!tyeBgata? z!%DkTFtot@$bahyx`$_WC;M<%7HR76#x_8WsC7$NHxk*3$eF3A_tE8zurr zBV?I7#OT&Lf5M+FNslWR<#i$gdWg#$=&Y<9Q){OSCRS}TGwh#Z0raZg1OBWj)`f~G zteK8xG7>&lT|&|J@;=_u7R20Z861q6!)y0QloDB?LcV&RqA23tMu1=+wa9fpqMK#JbD61C{c)!cdQzw}xwG*{A@@?4+Y*#eM-HQl3ugWaflc~~B z+uNzq!=vAs*-khETTpDbDyF%<&X>SEZ&{by0b60F;!QQcSC^uDW<2K`Gmn+{{hMk5e8@s(YiM%$BU_Xj0 zP|cxM@wTnHBXTUtBE0xf(685QxZIJjRoNp&IO=O(&NB4td{4dTH1XAN$kEk zZf(5+N>n$-RJdic9xKfhs5UqfuYwV?#^hLNv&Q}mP)r}bpRyxyNAwO0l>jz4PrQwA zp*vL#_VYw4GC6l&NZ_G$jfeW@l-#eh>YQPE>De{QJlK$a1)cDAC~y{+bTfB zZyh_k5fWop9t;nZNzKD$yI~S-cNUD)Uctde9W3*Oext+bNXG0J>2w3%G0cQ%uwC+Q zX-5Uo=d^r?TeNZTpn zEk-TpB_lnjFLG7#97Pm6AZ~FHgVk9=r@kgE)iYSEE(*x)V1}NCZbG&$!iA|#X(tY- zsMf}7{wgXVoBT2*OqDatutKbys3J500+!lF8 zjzsQvMzh+(1}kJ?JlX`jofmnh>v>GxTlJh1D*!lWMud zx!2x)(Lc-!E3_qNB>J44?>9`#R{Q?6X+Gz`9#+T5jx#6f6RxSrUU{Yg+%c+@|YkruX~` zyJ2F%wbR#~TyxCB8v$i~%)_aNe)fViO*8OKf@nlE;Bf%as$6GV2l5A7Tn|FfH>A-* zo=iC;rB$J*Fv1oMX3)+suNRqGZhL;tW}o(wFx?@_#At>4FucmsYyp5JnU(^7U=7ra zTD3$(!jV1yp3YKzkZJKn{m1^!=@1CInp0V%Q#OZj zCf|KXct9a`RE~-LBI)KwM$Oe23b%k^GlCG43`w2^{J4W4v&$+{4nf_JpN}jjMSmJ4 zJ65HQBrXu0tUYtU4pjM5-?~X_$kO=gAc%2ZRjIKw=;~JlX{*_NY`W4ZCfAJya@cXx z?U^l}3sLb&_1=Dy?^*xK2&;;(XUq;kdTLhUiR-j%!c__)0zv9o2AT*_p~sbU1yS|c zA(RD1A7M@Fx>(XW>dvY{o3cV_fjq=oz4v(|MnwpX$3i}T9z&qs;A!WP)e-alQ8rt zthe$b+h$34|2SleqQ&{~Ocyno$Ii|cF^RKC%oa82xyZ&AL;Ipdlg!D?y$tdp=4hfd z?5XHX9yK|+fv?g(+L`gg9F{ban{5jSK9=EC^s}dELsP8#+6&!GK(MeBA<^X$ptd}IVhW%UR5Mka(NLTOW$%ZOn$Kj%#; zjhefOuRxm5m<4f{I3CwoBX=5MX5bFG0?O+0nhdu@v8L7N@&LaLILngD6CW)gRSFe- zgO^*OR0`E_D@B(9QP~XZuE&vOsI`bdcllwL1=+Xe0p@1@y1PHTxC_|~v%_g-(?UDL z>OzT#C;=pHwWU&>*s?(N;wguH;vXJNJFo3aH?w%jjuUxzgPKQ_MOfxx@^Jz3ZXX} z+@!iw?ohS$)?3SJ*l}!8sr<>ilE?1A7YkAIU0D%}RP*)M3`U_7s%Vd&|C6k?m3FE; zm7)ywKq~U7wS`EAk%T?Sql;0p+-Q+5bqOf1*G*9r*52?fB^#`|$aK)Hhm+L+d6*#q zzivX>wQENRm{HS0D+y35OIk1TfFkQT%ks$39S0Q_Bmg^WKZN+<4!dEoN2#!LLk`|U)o2fkdMDp4$3a|GaU8pe+kU^uR{5>(Co7!`(Wq&SZ zIMJuvBWLZ^7fv!l+p{U=T6;6_B%jyNg{M^@=liWYW#nsOJK0DQ= zjlI}pk9OuSUqQE~7L3@Um{P>O)rTlGQl*56JQthw!vtQ)+L#n>hO@-rVansYr?1oGJAj|`B5xD z{8tPc+iVwc9e#e--5|2fk-k?eCCv_1^Q}LK=`EtjTTYFusBHkI1VY@)yV$c(rSnZY z$qzy$5D}y!H1La}G(ILWC3@I;yunt2(fe_upMdNl&E^N9@&_a0R#<=hvCY)GGIscV zzr%Dq2-@Wi)YR}*VT2a+LUaa_xE^AYeXBUbO^=}KiCYUjETJwvy^|JnulL^&?laCK zcS1Dma*pA|Q;y+6Gv6t9kQ~Ytkc#DnzeeRpZ8J4KAX!n1pU?__oi=!JSJRg5f?xhs1e^e3!G6Ji9=wtgbYDYxsp7)>L~cmkNLqRHS!R^dS!deRuQ%q13_iXv z)esqVmN=&7gl@@mi^qWQxqo12-Yh1S+XB}_2oP&cvDnxh3P_lsyP%k|64>-rG1@vI zjy#BR{~!+3cJ5lC*Yp8h`^~|#gVmXbx^H69Vp=Ng-h0o3X-u|9Nj=CCNw?AoYtr?; zdYbFZLR=}4rX+ow zeM9odGTT6Tpyh3YK)8&GhQeCs8JS)~j#ZP>y)fSjw z*WvhV*ZHBF5B$C-j`7#7gx)Cnge8RCA^iA+Z*!!wnR$`sbzABVyhf7G;QbyOAF0PI2}QP%lZ57Yz09Yp zfk%sVaPamg=sE@2imgfMd4C_qkC-pJcH1@|J!CqVI;Y z=+AnUcaXi9Dr~e5yaZpqyK?NbcVakoCA*mJOJo^0)!}kuU$`Ay`)h^S=uj%-y7<*K3r<_B@3i^0x_};sLK3$nl%@WuIp>`1Q}c<1~PW4)DI%e|CqzCwGUGOWb=1}-k9&b*PqO=VEd+kBQB1G z@bh5I(G@UDwIOTV2FD}Elhwus5+3CKMPqV8!_Hy?fgy-H=8rr$CWEthb%!uIm6`6d zI9wp?s{Gh55D27`fy`OJBHaDS5R9{s(W%}*2_g|F$5Pw`+92yT+A$JF)?t$*a1^U0454ukX#Bok{x7NbXo59J zZMsn`{~Bk+s+G6N8q;sK)oi6-=2lNHRoHllsPBk7UcLS0BHUUsg+^w)(5pQmq63pR zX=ox~`C{;T9t1Z)V*CkrKE;={;DuZ~jZTB?E$4_#3|AEI(i~RpoN}rDlv1vC?iAOj z$;+1jF5XpO*}amV@-k!D9Z=Di#em?Qm>Pcq0We-lS(!uQpN+H#PUVzX;lm=@)f+Xa z;mJV@f9aQwV?YQ^IyyglS$aj?MOPRvn7NX{F<&aHXbZ7v=rTP}nF(m!i+A^DKg`~~ zv>qXBe~6pf>-T|v4~_0W=qLE1*+KDtu77v5Y?TYi_7Ra9kelbw>?W&Wk8s?0DO0D= zTqC*ql4botQhR?AUxsP*vnqs7B8VFp*;N3?qHN0Z0Urpr1crM4|q!~q|N$6$XYaO z0gvsE1)03FDmvfiY2w;*bp+Tm5QL6162$C)hvD0swpMbxb}f7+h-Q)xY+7Z?K?(rI zVSfugcJ~{9Gp5l|w;LxI{KG2ew2#&%(xH?OSo+l_KiDY-F08_X7q3S>Kn-+ybSUHaS)*#Bnd%h z=pZ-(Mnhf>Rp(ko$Ga-Dvfdx0>qTQwvCYG1fD7$xZ@k2Bw0pwOvg_LmTA2_-rzwYD zQF{sXY8c?g-6wo`pN07)qa&oJKfH>XVVyO`XmuD-TO+gKt{g5h7fzz#*(Tk1`!~f< z!n(hso)D|mLs*1igQEV1yllyjY`@Z#De-09qHI+qX+9g#%y(5H`=`j*D}e0=UT)QO zi>^R}HGNPioGhto54n~^EXjs1?g5`2W~6;Rj}o_tHwe*aK*{&Wz12%!!x_T*LAMu* z_+%T3cy$|UtUTNrA&{Qpr<4s#5_2- z1X0H{MF9gU>B^QlRD59&i1N=OaJ2}D0;UhBw!@!UBrl7SdEW;?tQna_7$%z`@-Gxt zxVH<|=&egraKMBD?fXt(!ED>d1G_t{f`kz8VG1wC0cK0d)RTmZ3`FHLR)Q89C%?QH zg?>qHNrG^@8H0uC%Apv9S_Oi1M5zZ=iC<-Z^@4$lYF!k*lvd@L2t3_JVzKZ(IN)e!cEKFbw3fFZ{>uAPU8J;iYL%0> zDGV5MiX_WF#N0a|slJ5SZVQ&}(-$+FB+NB|^7Bc+z8M~yB4gI^TFKM%0Jiv@weoJd zw*}ix`{*XgCN-U*T-GvEA3{RMFV`EA0L2J}`fz`urta#FQI4l|H+3`{RON`o=y@bO z!NDJjsJ@~RD9=?99Vf$RZ2*|ckJBOKm$hi6{2=LwkA!P zx^3VUfT5e_SF_xhop1bC{3E}uBQhBNtZ4rh@?S@rD56#6C@dqIh1Gx{3R4}T~@UR5_HlQCf&wc z2#F;+^E8Xv2!%B`s}OZM$rf@s&BoR%=o(s61`1V9D7#?j^^gqpZ$Y($`UtIeMb5QH z9QuHDN$z~aM%M8-Lr$)Nedq?a66{+U<~y`GwzxH+LVxT2IdI>p8p(qqx~%#%{C9CT z(?0xo1O5%P}AW`F_P~YOi#5>3cyKsg& zd(uW(`x)n>BST}V{bG}gS(u;JK5sY7?L?$Y`E3+AdoA}-_RkMbj;Hu7ggN{S9UFD&JGl?-nvHb;l`eJ|4RnsWK^~FIu~12+7r8J}S#)8c|;JmlfHM ztlHh)mx4`TKGG`T7f{{;aKg4w-sW&8j#1uVbyN3=ZTMlUcFbn>#5IQWP_;i5fohDDID||9L^xx#iS2- zCK;^8QHwm$kO-UNNO}CdN?2gmf8=WfIibBUwIVU5(PA6?VXGZDE_IW?0qXWuzE#bg zYcyY)ReAC+ETBaBh*x(qU4u{EUd48$h{ZH3utA!k@uYla;ZzY%pm7}pyDi<(2IA{a z@+-jK;sFpN&>CroPdT6P7X!$;GBk$l)BiM4UCCEy6#EO|*%qd8mkProV}S=NwRfqy&T-VBK!e=JpgHLx8?}WK)`jMaE<#~d@9#D z_DA9l0#X!7ZT(HY1K8zW0cnMKhE+=L8bv*5d_q%GVFqzn=j4IBH5zw@t8KOxnPw0~ z9p&$eMJlDOYZ|$YqLwnunHQ96zKj;B2XA8&)+?-?V(i(@rp#mDXLU5Ra;ef!2Bbr! zW9})7V#CJzmLLMtPSppD(cycSWN@gaQ)mMiyU0ow{y^E`0U@(PL(+}M7h-=F5(j+7 zeup81#r<_7l0h^hatiV_iiDKy6efbHlERCv2O+Q=t7`C=K${&4E*;Y7_Qi%8*_2aw_DL)4L(rh+RCwWOkbi;P|+wOAC{4lk#q1;`gn_dt=YeSyt|S^U;q(*qLABhuNF zkI#hbZps+{A;ETJ$>NkXL$0ScQf1ZRM8R9sDmr$AY)xdAbk~SF%4E9kIyX1peEGRo zqyZVH;mCYF0eAtO4cMEUY{8|`Gsr!WYW?slG+U~(R?~%j>a@Kg8YP+tsMsRUqX#ck ze1}`dQ{4U1YWavEd!Hcq%k1PI6-(t@r*|fDk!>Lp0R{@9C}AX$@6S$)qh46UX!#uH zcbc&(K>9Kw359Sg-K@|bfBl0WnPai?%V*(d&Jko{MFIz$44$|L#!`;|;fX^lZ_WlB zJ|dC1?+ZFnew#Bvry*znC3FH!hZEbypze$I1)gMeqjDnnST<+eX4!uY9(Ua4cEDlG z|C*Kj*PNk&l)%ZNZ!+Lh?G~Sof`=mIVe1H74h9_l?*badw*NWnLXN<9$^DbmeP6(d z@{?5KvzZ4vfya@k4ei@F|JN9MUE)jHx&3dK>;H@+Q6EHnp8~JsyV?6(zq^=Sj~_o=mc0T)W!4 zWOEs=3ULL|MWXVUC0BSaSWT-M(Lr9JHW&L6CD3^R zoUk%gkU*6QkoW6{g~gvi6I|zuT^bL9Za7j|pNdOQT;wq(IEeoxBcEn?@Fi-)Mluw?p^=m(V^_Vn`3 z+vsdqx;rnWV@TyQ11R&B2M&eRJg!yU$`76@_3f(qRD1Oz_~*(#hwwX~xXfE_B`dwA#Yt zU=<k6D|4ix!bjFlBC6$2i)j4;(=w^2wogP4ulkiqT_ieMpx?8pJri>L)7 zx)>O&GXkce5KyBeM3})3Mz%OebPcIo|=BMdL=$6H@X-`4YAK_+9X~vSPu{A({m!{o|$&CsgNafW)Kw z6tS+ttTqQn>Xg~sm<_dbOdqj=s-B+08V2k`yKjI_^hxl!$oN$f--9q{NW8JjfzJP7 z>@9=iW}>#uF*7sA?3f{DikX?l%*@P=V`j%}$IQ&k%*@Pe$IQI*yl>TReYN{ze@JSz z`e;;BrS8+WPG5)Kt={j2&)2uPf%w~rLNCj7GBP zN0n)6a=t;!o3!A8+L9?43fUg$!KqlAAHy0LgQ=aGV7AVz&V|JROsH7D!{EyP@*PKd!QaLt#aL~YnWpd7i^ z=kW*LLKX$+w@ehvrvhGVa-=+{B&3>t$4!vn%m3Z*0j3=ACgS%#UqmX0bKR zeIV1KLIWp8`o)|05svDqPeBhw)IjQvGqGIyzdh{s2z2z*{@F#e&5Y~t=vVjak=wV) zS7^PZhx1^f6q$9w-FxrWm%FO#=mm)7@!LgmpM1t+w65GH34LF}u3Sw0xMaa=8uKwo zYxh#LiH0bb!WPBo!WKLQc+u~S79gx^mHJBL=#X84IL%GRv}tD zrQe(!h&04idaHmWjXOVDgWk+Nxy}>gY;bQPNw>oJC)M!cs3*d1^RKeMSg}m2_8ifv z#_4Pz=UM$_FTsjvSUgVA)f0* zR~o2dvEAC?vR~Lq=xVDbqV!2JDz{3eHjs!w^B_ZUc9#x= z8hFDSnhb=#o#UfLDLQ>RtiYr`%Awgw1Prlx38y4ohU`iU549}Mf=uaRj~tDLMtTq| z;zNvebTTcNHjP8Gs&4z91DWnjLZMc6XkmoyN<(kgDrBFKi#D9ZxH#5Scr;VSJM%oM zoXrdV8UC4|Gwd; zv7w7-@9QZn5rXYEVr-LQRQe71QOnxyA<51tCbubpCe+1((}S`Cjl%S~P8#h!-uQ-j zjqcrY`Go4Vf4+-H0~)sSK8r^S|9klF?Ek2Y2|tEf@?A8$D(8^UZ{()R+CT2uwEEBD z|J4*!3H`q+;<=(`Ni)=30~X6mnAC2Szzv$z44#XH42V@*%)CgpQvi@2ikR z3$E6FQghRVPHd_G&slFe&LX@VA-8i{^t$U>Zvmy{?t;Ma=N_5f)_pfCqz@5wUJfuh z=<8A!EoJeYEny>GxxhB?Fk$zQcdr^50w*Il@AzsczU4wMQFr)!ztf=0e)dT30b2PR z)w&w8rHhE*CLP`%?t?hD%*esOUlS3L8hZ}~O}UakYNPDq{aRXNKCrSLnDm76JWw4D zku=sj;rCo_kh4uL(yl0#P)HQZZ-U*fFqSnVMlr{=Q(Org`2ToqQvDI}T$;yTDktA= zr+-PN{OD7?(x57=9A0Ot&Y))G{5Z*>i=s+aQ7C|1fAFAjRJ>Y``Q@NB-Tv&5g8x8A zxn*p_c{`G*`837*8^q(K?frGtDd49Q<={EoBKLR}b3;w2l4k*&UII?xeF@!#E_3pZ zM|kW0t=KlbL2LKn_663xWtE71Tf-a2Ol0qD`1nGV>n5DK5w%QkEz;u%KAc#7nlzrn zyc%U}Psj7>A9@iVJ1ICD#FU)v(bCW0bTV=;yC#qKyQ)~zT>he%(K(`1D*OWGo?yz( z(bCd6MN`kq(59HTEw)2HDN-qv3yIHYsiZjto*@-;@I+8ZK`m7YQv%!lTMh_qZ_Xw^IiFz(|s(82fL;{r6SFnop-MXA46xw66eAR3_N}L}ez(MkDujB~&U= zaD|y@x4^}4wBjd&M1iW1>YaCt4@+F{s8Ut@MNV$AOgkFJ!?4Z^wA0b2zQJh8CSmJf z;~eALN_19K-rzo#Kq6%!uo@Zr#TBcwPL>@$#GM5J1CVmevg7;nKjoMnq#T#lT+%*z zZr;FOxCA6^oN`xwrii|kFz6&JPFctaK!<9>a^LHeHBo=n=(xPpIb^TxbsB(?u(GHe z-pEiFdJK_gdB3N!v~N@YWZzFCSB*|j1o{$7PvEUXYy#i8;hikO94iK3m%xuhkjZ!S zLeZk`#DG6}_giUc!khx;BA&k8!!<1%x@<2fg`y>vH3oJ$VgeS8Q0{h49hD6!IndOA z;d+F$QAQU)o=1VrG-T(?l784Bv{YZ7sRy83Y76ffbHIfwZZDT?!#Okfr7IAGPdhOq zQqK-W?&qMttFcdx<_fFocW9uub5y5KcKj6aCocjnkc(?le!C34{YhJ!EF@gVA#8<1 z6!Na>4 zrPpY#SxexS407Pp` zA|EWjHHhs$y1jKzyc(tv`s?(LHGl0Ujhr{@R%EY^+0{MVJwFjq`g#zBZ`;Z4dQT55 zWk!>rskG>M-3Ok#PgtZ(Yw8^f;glQsUWdFMSq6Ii@Ua*1RStdhC9oR&?UkqzhxK?3 zpK@&L5iDY&k1lklH_>tEzGC2>Uj98Bl6<_Y_irF8#5#75?Z459nxjiH;Dg6dwDS(^ zP}eM?E#r^oG_OTH=tf=m-(zatO6;+OLMz|Xe^0tf%$#*a|JC(zStR3cy1?K+;%FEw zC7=iQVeoGPA?%cQqSsE?`YmK|Ud|UO|B~5%p3#g_W*9a|H87_kTD41Mum|fc5sv=O zM$G>x73VVpIuC*OvHfxD!2h1$b*W#Rv(Ay@v=xwK&d%32Q?w;nyj^qU<+_P08d$4< z9-_@S5b27^SLx(Ttcw8yTaxmRRpiQwfg zPWsBbXlTEOHE;N_|(xj&{4(3Z{SU7TbwOWPF+uLVnzi0=V<3r1o5kG zDQSwOEl+Wgj%W^^_8vO>u6$l&ipKUD15reeh*V2s+1QL8I% zFDw5tG`y@VWyqyf+SGyJ*v%ZRU!a*%3g_S?mG6X(*G3}tC@|qkOGHXVBJa_Z_ z{4RW5pvzo-Al6gm^bNhpY_y?jj_Lh`PJ%z)&hxmFZGIx*2krN1MI9(*^cvZor`E_K z<7fg-qRkGZ>#RLL4e6uTfh$l7uPd3I7V5-HN(b5R zB;8|b((dkp<4tp3^5dP6WtXPC8zlkGZ3GN4PQ~+FkJ*HW+5u@_^tlI95pC|8Sw2@= z!<$@Q<7>z%o-IuGhWuzL^;KHQGKTy_0iT)w)(#`7Oi!uz&XSoflP6yWbgPX>LvglL zIyxA%n6PWJwm*V=yKK5527fQbcA1P)cp)-t9;SJf zv)3D}PYjnIstV58WEU4im>~bPKXm5tB<{E=fI~!2R`{nWLE%|gDiNE-&Vg}W=9V8* z?dKHa`rdl~AaMTyxyL?uIY_rkd?IXXJ*>;yMD3p}y3Pp68cM_*WYp?JZ`9}*x$UeL zS7$X)19K`_2|Pqd#CwUDsuir(km;U0LkDVJ^K{z!utnUxn^YsKd|2xeOqF59SuKjopuk1OG z!CoPlqKRqS!@ZZhu+BR?AGXi}pEC?m5Q6~=0q#(L?R+I+(nSZ(9R0xG@60W+ zH8gT*I=lU@yn=P+dwtBnT3#4vm|=O&O^tgp>@XiK7WISFEVwvXXzi~F7~Y@4kSJ?I zrO{9Q(8OIcNz0!&5#ht+G^-X-_kU|pvV?F!p!sh9$;zWhHgV@nLJS|Ngr>2g#Ghi35nWg`yy74# zh|ZBXo*pZXCQp}eap~cZ_cr|pHQ67h+uq0bqE{O)KNYml``D_Tc;WF*=V>#)uEN) zm0-h`5DRSbc{GP{5YSW66KM8L6~~vNQlxQ;%H@9gSf%-MclrIrUrnZFbG6qNp8SEi z?rdLVxSm|ZCO6aMLp%_CktT?-WFv$A_u5*UV^$Pl9V3>iZ8bUX2ikIzPEk0F4NV86 zj}d}^f1DTZLCYu9fjlk}s}l(~vrjfz71B?bs{EMNrad#lyS)WA{x#tkV#`pOE)~ys zjOx*lxs>HytVEm)UF=~e+_HtGM}&7qzKrr#8O8 z47W=YeqQ~nef5^xQio|Jd0xSmA_PoYXqP|pj0^CbcGxO-9Vzp8qW^R$y%Odbv&K#l zi_|d4$5c|NxHC!Iop|hg61*_x9rw?dWFkwR#UE!aRdv3jn7Yt&ipRvohs7M4Nu?Nw zD`iVrlwl@8tppV!l1rtaW~x$`Z2@EVxc|}$#);2f7oG;D&QA5U@&!7CaQH3?Z~J=o z)BHs5@o1m%_jEl4#{~#MmYlI7D6W|jd?Ok7_NP=vHpc{~^5-ROTpW3sD0K4aFRTlDXCD_{lRV+jj9e4)Q@-HthK9=p>@`1^dr zWl{KvCjZlj4TUV!U?3JvG+_%fg$9CDd?xdqN>LBdO47bF$=W9=JBU*#aumWy-5%PM zlYdT{oxY7dO`fI=4v?okf0)ZVE5|%$p^$L0w1&ey&k5m~gc@}a7dmP&{h;Q!h@HF10hjG9ZG1>9ZY}@Go zB9cOf3<#^%I*26Jp^6@$c!rx8%|;}e;6)uU<`LlKN!ppDZo%W0KWzaWlGmfvnuEwe zjwc()@gxK}o-0=6-^tY1>(a$I7-tx34N2W2!PigderLwT}!y zF=*`?M3wG!G(8~g2-uIn%h3>KQsq7{Jb_{e-9XG5=gbd6>XbCY8SH%;9E+g5&r2@> z3h(qCiogYNeNUb#_fa1-s@NN&RI5b=U`E!y<^W;cHZW47rq#{c>97MDy*Bs=z=^OT zNu?CW^W7lPq99!%MbZDYP=B*1pIEa5Da-iykuD%*8Ae~wkN{g`g)@?la1hmoOAizS z$b_8~_M21{O^x0Ut&qM5?L{PqJPmkHPN^yOt+m_;ETkj?3b%+3+n}Nf=no}S3#fJ* z1gGD`LSPo8!3I+4);1jeC_QhwG_%L6ny~{9A{RSe{3084(kvAZ9f0bxZ!!Oy{dN#K z-G_2!z8fl6p<7iza&HxRE}~n{RN-88KW5e5&L5|i+F*ZbSp&1#)G^=cxKrccbjI!+ zB>K(h+`qZLMNb^Cjsb$EmZO*WOusAY_YI-Co0dQy}M zZ9-%f#NiUTQB*b|z6l-Y(LKsSX&Y|&X#qa$eVGq2P(r*PL?Zf1b4qa^PEwE>tiP&i zCeg-F%(wOw5Ob(ms5dj4US*)RhhRjX5{2MGAk`^3-QZc)5DBS)i0E8$-aH6sm%-eX?~%o!GdTN;D!TmD#*;kjjoTNwMiGl5-z$M35E)sVQoqtd5m z4L(eGPyp$QR+zW&>)FQ(zSn4F)+Wr9BaLLNCz+cCR%h2lKQ`tFJXX?C6$zcpTuSuJ zo&jZE_A6W}D8C#(d2SB@VKkX%?BHS3h;(MuMtam7igDsRYAV>HB`WNmaZ6_9&4kgJ z^Xgo`91xm?tM<0yzJ|E|D0vQyO!KiFy#I#KA&+9vk%>~%bM4B{)*vDnlcmuamYwmu z=pIq*a!JF`8)b~3X*_h6oo!3%Ft`vsP}ux;}HK`vnZ|4A-j{lU!gf07H#;kA2;|9SJM(A@oN7VDkqf1m|#{Xy@a{lHKnyWgF6)&ChJbe13P z5+U+z{rW8C!^{Y83mxP`bg52Gy%hXlMX-6UgvD{xZ0} zbLTDi)lc*vv7mAA^M8m19&CsUM#fK)YwMV{Um3hh<;@+uM73%jC6pffI_L6luYn3v zOn-g0o$wdF^Ns{XuLllO%DP;qfWy>v!)@v_Zzw558wEeFd^eUSSvAny+;Mv-W zH1Mxmwb!7T9;s~XW83aU7CaIgST}cB)+7qVv24`R0)Z@~K{aweor3Z(9ToAzJN0vH z^GV(sKkQIXrr)})_9tF&H)uLrN)vl?#^LynmtQy8mtV9Q5Wf=E84l4NZ%poDG99+% z)h#!MmTS5qzjlwme7^QczOLQ3KgUs8=LJ7b&r!B-Igawjd4YaP%YpmD-ESNnWhZK; zWB;wiH`UeW7+p^3pVRXj@G0ZVTPFRoR>r%+Paf9h`N;k{e~GQsS9#OTS?>649+V^i zmjehxO$FsR0Z~~*szEFDm#P@a?Q`cT zdQX>2)t#>fcpt9`-$fQTp`mNiS)!PBad#RYaEF#15TDnq5YH7td@`!RtoTC~Wv=PE zn(+J2*l|TXZ3+7$71~^eAvz%T+z|U^Oc7riCvihSRD%DEm$FsYq5_q@`ccYL91yS9 zyb$-TxuAV)*+VXitKqnuiW-OqsM^h zX~!D+APxIhR}R&Dm~4d&3l-Mi4nqSf8^*Rqx_nH!k9GWH&5D z%UWHS{Q`Cd8T&6U8RP2rv+P)xv)BlnCbw)EqBX47CNDTk_X#Vwa_4S$Z^)%ky zyx-rnPyP%W5nl`)OUdw>^%eb+o$3m~m9WIjlh8!ezQ%F}>j{4rC-wKMMMxq{6aR*# zM~~2D5pyDdRmcmnI!|jtYvvxrDmWBW6}lTlQGd=IBhsvLQVKO$CW{(vONm@6Yn-^t zD`(xPfYeM9BRF2p17h1j626FVjRj1SyW5D$_9aK4)RUs z<71q5bfN34+Hac#f#;xa|LR9i_V9_4hNDEV&AMFocr{PGxn^ z2~p6=?!C}u)aS`N{FLQC^ZZHp>#h0MNr;bF5w0zL&Xiz-Uf;*`gQhtY8HMw&qhndS z`zA8gP}HlJ%;9()L_lQhpPt@7hCI;vhC?TBOf#$fW_8B<*I_UI12}>6Red&kba+R^ znqUf8$zPGtx}R!z%%;{Tw%47w$x#%Lnl*Wcxdg^Dj9EgSu<+|g(4*zAM#MHF_91-l z7C-u~S*B-`LT0G&eg-gX2bP-uoPobMn)!B!$4CX-G7s^*60y-|;y*k+!DJ^egXYH2 zHAooEN$tUxN|0aSa5omo1VmQcP5O+gEli=zP_+JZ&(?090SmQ!DR&82dRd* z{dVlV8(Ig@vhx&qZTpWwInGJM85+#c1?KGjO=UqF$F$JGJCePI0B5B~$KxrIC9Zln zloPfH;ZAY~i+M#vpsoMWa49-A)1lOB!b=2}JeN7Y#yG;9Nx-_}xxXPCjjPhwh4;2g zldP(l^4t*hG}YQFD}!XCkD7CqmkTwgIEbw*@?G1J=*h;CgRGWvBaEB=P2cY8){me9 zKdOeint6z;@Vr?pu=&Yr3BYEYlVjJ8^*+te zvr>%R=4FVXMTDDU0#VEM1rRYxZ?$q8ty06OHQ40i-%C8EAn)I6Mi9zCl2gMVA&=)@ z`TgX+<}l^B>+p`FLFT&4l5;oTVjY=;@j}5zt0C4A@}42vIHJiXMse+y`|K@wI$U&} zwb*#Gle^M!{CLA(Ti_VmY9O`jp|bt{ zfl3l0n^$Dr#j`1^$x>B#H<;wMqT`r`p&PiHtJ+Xo~_7Z%Yz`) z$nNFa!-XQ@qb+Jxk0g*jA8LUov1a_6g*q~&Bm2a5D^&@bEVn+CYlzZud5)e#EaIUL z#sXdvAq_S(%`)7nBABDQye-ZjOI(o_e}r6TM0NsT{sb zN)fL7K`d|)JMFN)3BQ-Bswz{^d(LZ3vf6p(r>_gjiHe=}GkE zR9NP55aE2|A)?0?ZhM1zRHfEc6xb>kZgCSDTZkQ-amBPl54Kc4wze!%dBYi>gdl^$ z^vOW7WBzf=eKlH>n_Pjv+BLm+m+81slF2pZFU34c7cFWWG2)bhsv=X;mwjaf#{gFJ zLHjW9LX$f6cy3Lqg)DAO5;p4koKc_4e?c7MQ!+|NXh8+@N;zy~nH2aVerL|JiT0?w zz@Qsc?3ocosH)0m3K%?@8?rkV)I3lT{a-}ZFnF@s2z-OO#fx>{Q?$PX%imzqqGeW zxtPnNOVoEAw=e++oNUuo5oOy62h6Fn^`tF;`;{p8$DOSUUedo(1zhDrqMpvVG6Kj7 z+ZEO{7Z;p`QF>@5;AT@X`$o9+K;xTr9U`hJsyYL#sE|2(K5N5#6hao~7L|yS%%QJ@ zN`t0A1R|Xk6Nz2JVD?0DlHrN_5$s4!nWM9;n1+jU%nYIkQC7Y{e_7LXcw(*v&W;Nt zux}}I1-6n@<;4B1HuuISf!pmi1JRkkzSG*j2p>(4T`M!k0`pP6K1f9QboGl!bWVGAm3W2 z&ITuq*8~ff@i&tnTNu4;b# z{)XY2pZ;pg#CP>uRCqASv%P23kTQkt@>YWxtk zpR0qhm)xfECz(UxPw=Skf1aPmC$)85;UW3Z6fsdCJ*>;@KpC%rvqsOu`~#o4DUB!? z29&T>3NQwgBWVg7+8Pk&JP`nOm%12ff2_kwGTr4NvGMW+$3n+hXkILS`2-rI3%>oJ zV_S;^X+^xNb$ZIzC={~(vhBaoOC@K`X7vFU!uQ(sFXp%}m3T!_ReshXvxsz{{Tm{A zH+#Nv2zEC+IYrNm{bY&lM2--dzxAI^EMvN}j5~c2=wnrU=3|S$xW^wc;9b(Nnm+7k z$}er!E5`_lBR}X5q^BHj^z%j5_IW5$XaxIh8G^6Fc?vR-F%q4B7iG@uK^`~CzraX^ z^5v>WwzSEM2%>o~3(~UKs2s$T6iZNAo{;3WwQDZ&H@LKufkkv3;&JxdIOcWUGGJ^A zRL*z&UNDZs4#ZrW@#>3buHMn54$a~akVSnE4MrX9=e&x3A$xgcaE|0j3n zRzlRh2sw8gi4}g3u1Mq>aIid7DPMZHhcHFvNPL8+;^RUj` zGLxphUSrm>NK(dsBP&Vq^^-eXNQ2tyCTvlA3VZ!;Ns)`8VNs{Fg#GntZ3%1ThOyin z-Gy;VaI=rJNrAy+LadBqLdF)qDO=G=FdB;BO{fC%i=JeRr%VBE4qfeTcz;_V1qqII zZjB4l)8A$zg<EOX)+fPDa4bUm}@{2QU`END;V``CF=?HT;7ubF)TK-5_ z!^TVLY0fc4`WYilXrjI$L>|aE>byc8QkNtl80KW5(Ae&c41`Ip3(~)E0F&Mje_EXM zxb#;@+_e6i^TuLTk?J$%{C0?nAd6WSR8^x^i!I#fLr`>!7;c@rf1E7|3m!z@2;5F- z7Yblh`{#fV@PQT;EmI?EW=5Vx9OQDOE7B!icZrnL+Ss6iv90M4K_PK2?9upW3+>AeeG++T%_5aA?b)@W56JMr#Sg;Ho?m%+watfV*+@7Z= zt914>M=f^LM4g3;h?JiGQ6`W3B}iIjDuSb<0i{XB4KLuL4)K$01v%&3fY$ND%z?-z#gK0WnV3{=ByI}ApBlW(2oeC}dJ%EC@Cpemos=M9 zf|K|y+&{)ls{LINQZp@DToH-Ad|n(0N!m9#ry=5-1)-F2Mc6%Tc^jn&_s??dwXndN zyh;u-o^;&YTwSB6>y8@^w_Kabt!A~v%0&r7weh91{>H|?aM{U~Y6@K76;ux~#_-_B zKhX|g8yolFB|2>zHM!z!D);(MEvy@H1FD;@M>eSYz+%4F}0ch45WwK#_`mnHvswNs;mtQ`qMK&Cf(5*WkdH<}j;1Iu*P7$Uk0n+f5#I6V9Z!O_Ag%YT2O{IRljm#M z+o#R2R2ZhGk4P{~Jsd=ZI%PUW{YiiHpUFWJJ^Z}bo81+amWhkzCYo0kwUGZ86g+{) zYtnN!v>L4C*p#=0_myObdWD`p=g%!TKfrbDj(N>4JhEpU4$6M2+b^J>C0b;Nr{NSM z^M&5Ket|7L12^`In$5;F&-`>i7y520lc-mFYjd;q;1>j(*3`LBSnFOgMDZ#Ej1W`I zw$mR?`mUBkK<~LWGAnapWx%GBe@|O%J?LyD_$~nNzqt15+tS)xcUNNxhUiWc0`ONO2k%eRGh*Rn2F?4> zxM|P8#Gl|@$iNzOgl0~|m^;dIFtnL0JN5vi?-3A7QI6^tg2+0+P+>k<#K`=me*u9! z%{d`hiZcca9=$??!29=rz=*ZPXDAp^NUgw!5D0OmraE53(2JeF(VK)FyMPdmttI}1 z9?oBAlMPQ_(wiE_A2_R}K{9Mw> zME<@I`S9$9eFo+8&qlIVZ;_J_>APEL$z=hasJhIWy-FW@D-W*n*&cASk6kr=YFsBt zmza3GFz5m3j{p&B3#bzIm+fe+W6uOXiRTu&*vIzH#(N8iQ5c zXpZKJ-tgbYDwnR?A4>Gr?ZcX1J4L zf~KZEBu}EI6@t1%Uw_Y}C<~&z=Isv)>1X}Be`Jz>ad9ktJgfzF1tw8p%Y_#^G<9hu%?uZI3q=s;W2s^))fZ*+Ne&i#y?q z;|{J(m6z!%0B`Ur;M{7}WanEl4Db5Fgp5@aog|+ zTz?f_VVaJ>t zpz?0USTbu54LIU-RuuF(D37UKz88{szBtcIVb>_ihHzewze{)4JZJ zgE?GqiU5%W$jRE!BWK>t9$H@}LpT;^``)NR5lKYvHm+ymBSWVnbcB39H!TOy#4agg z6rDsI7u>t?sL?%}xQIp}hQc!!QsdO#%`$XLu*^X@+Sv@;GaS_m(VSz7(j2$0xOU2e zY6dkh43iE`T<_}>E5wTpNnw)XT`Tt|&chSwkGS5V;P>aZQ5&6K2=11&90QC7)*gh6 zKY`M6DERY++`1p$UH|@7bAwNiG^9C8m6O_c5wG~6(2%Sey6tbc|FV`< zZ?DVfcM({12{wvb55oG6BeEUtoh~_^TJ0(D%W&8J!l*C2lIl`z=rigq;ppW=RM)#y zYs7V#Uq_SZWWO5qtxAJyBKEOOIhb0xODrO?U&Jj*!z@ye0-T`|FFex{Q|WN0+DXuRwdp z_w`+dnqr+u-6IRBluvmV$YqU$uUSb-m85FBEgtU}57s@ZhR0yQn%4-<{Q0&D&TfA) zGHis^=Gj|PW3Kn-BTjkq;88WBYX zN*#ZsOR`#~c6rqm+OBWIEqNz`d81n#CwQTb=wPQ(;z3~UC#Pb4NxJwAkG?SXUdl(q z-BRD7Qqo2gR(Sn_M=)S$#q8aJfb2}L{q2GP0J|J(`d`0`4vp5ha}vPf))kp3S8>+!vrn{b;)KX9Z^Z4@Q%sq990fDuFXxA)_6`JI@ps zvxGc+qpWAJ8WTAeiT-=LIF|7vzzSL<(_2c84sQ}k>dz{U%#kyhjW8_;Kyuc5O^jr! z=>jh%vip{qILqqwpEI%Rxo?|6`-r^NJU__T2ea!ULuSzLT4eTEYsoE==1T-NrC0+s zoLE2THOTVUkiEWoe`_^sb-DC_-t^H`m`5hfH*;;OlJyP1YV!DCmeHv7m4URX$Ti-i z#I|KuzhCZ88c>}Q!j`W38L)Xyv*+SvpR$@rU|JyL4oWo z)~mDkDveQ@G)m(NF`a7j7i5c_brP(|E(UfO{nWEOb@B*;_%#d{dX@Q_u`4{L_RO%-)E^R^aXi(}-<#AC*w&S%jwq2`K5VP&`xgucXXGD< zo8(| z(J2W}dlOGwBdyjK5G7IW%n-PAtOac=d<|&fUT(mfVz;$wQ(p%~aK)rG5m~9Acb~;b z`GQA1E`2)U=&T1jCZ@6C_#z8d8N5YrQcmZ(!d5xaBj=Pi&AWuKyxZ5T{p)# z0_Ju_3WR|C1z|yqkm6<*IJg9S_8rkIi5$ys9LaM>uiv6q zTCzBom7q*brMGk>N`FtmED&thAMwOR6<4&%OYDEQuEJOkTC6qeI|Jr}4kU|qUlbL&1AfAiI4 zvA1v3#mow_-C7gS$t(b{2pfyt24j5xIK2XuI;DYAuCb+@ zG_NS=`1PLM5zO)Ykb?Q ztqTprUc~(jn)|p(f~!(BE=Jn+=1GNBOa(f0(Yl< zyv2EB!|mw2_;z(Xz?fHD>SG!|;+n>B2if7o{W)b%GHk#6VlmjiC;DCfW&;hS^8-H& zLt8h(Te!i8RXS4sUQsXZmYAXWRYuY^1xG}y0koV*5q8Tjq zsk7)2XsGCrBlSg$R>jS%4vZjPpc@AsM>pTJ>DUdwJr?N%48!coA)uM|KQyhqtTc2~ zx(S2;?6t#a`V-w3r-qr&HuIGOnXh!~Z&~m?H5f4tOoA*_#E-0S&ZBld#(F}FT85+- zD34ojZ`2%zcqFHKe_&0WbDg>xScpwqtkPK!E^A6~>BouUcR7Uz?OSyZH5^mPdh4=% zM2%w}u!hZRY`0Okx@JPz3vi1dYjoNjkr?*g4d0U6c+nriZ%=WOc6nafQjw& z@Xw5IL*8TP;sbba9uOne<#z%!L5L0~wGrd^9bCCVwSrjw@mGcAGBd(oUd8U>V?#wr zAhp1$&q;h6CIiV*tznT5F$>AEXUhpC4TmPa+lN8GNVeDXQ;Wz-b1Oo?*-nQfFbzS? zOyGE#+RBHfJPM&A(Gp!NOqbo1onA4obo<6U@H+a;V$?fJVdxAZ|AY4ZTI?0HI5a$E z)=X+a6r$Oxy2XgMyUe-!#A0WqqSbou;Sg~7aP0k${dvk~#Zsq>PVX@FynZ+dnU3C^$QTT{0qxdUEV zA;*Bb$i_<(rjYX>*V!=&do5YEz%bEPx;lZQ1nz8gf~)CBrBcnr31jyxF$DvS_vg2z zZ;)c02Ln0!8ws7CySf<`$s6l_8n+YN=$ZUAT-d{01mWGkTP$M38X-r$6_zh!Opu7kW@-eoH>lTi8dZF$RpU zDY69aQQK6o+eNnisHX;qR2Bf%^842E0Ca8;3v8W8Q0f;1gYxZ(jOUxfgNfG3;O#gn z)yRd0cKI?b<{w5`ZHz3rT^uu%Hb0=3ip8<&Wea_E)|Dd{YYorPYvHAB(__RBo8<8C zoppr`;IJ$7n`Om)c@k(Xl)HOQ zSLw};hwhv(>I-MQ%Rn7^QNP4Qr7!iQTJnNNeA3tY}+nvX3k*wgma{^-rQLXU_v*CM4d<}T08$UCG z%p4zyK@4T&OQa7}TOQ`9cPD`QYJxVJeH%@-y!3h^yJ*Cz*;j$Eb~yAsDobu1qi2&% zy$}0_-6+Z+U>O_=Af~Uf^q6?$uHx}FW9OC;IgAeTbM!t-Sihi0TEE5;f>Q0+YvOiC z+%$Ml~hTrAtNPfPPBZUN|EP1iCoPM3nqjwNe>O4kbCdB4ibM@QT9H zh!&W{m)Nod?dbT$ISpx(OuD~_1UaN|AI%Rua;clr?>wN8Lz;LarTihzcV;$talz?| z6#lN>Ozm6%RVoPsS`3J0o;5)N4y0(+p()Fc8l(ECQE0uC#IPe;EIiblYGeM^sv-2- z9vB0AWCh;C5{kjhxoB`R!GDZ+Zt_X?`YgDpDeN#Wj)`$RY0|#OVdOL!YIqiAvq;o< zZh`c*pBC|om3({7LoxIK`(iqWz?0&HYhI{wZZ{V~Dt-<=-_aPSNCO$`0-!ZswCz7WYZTBB)8elFSm+CG zQSx#k=$0XIf(#1fqgI`H)l;o8juj-^;sDSE(`W@4|5J>dH ziPr!WTuO(!!aeBIZcfTcw5UVbLk<)MS$T2m@34*RJE~XEwRL8`5 zS~299NAREQtt-(wZatOTT#yfL?wZ9&9I3+*VNHwL1Zw7LMtoiJF#7&X=qmpWjH{*Q z5(ruM1Gua+9>y=Z5#2WW9#;oRyYxS1M?HD^beg?rhOuF2bo`O+7FCJEQN9SkHuMo+ z1XC^GC}}y^%L$y_L{Xq=R&3u-HHM4%$*8RvXU|!@N3YOdJGiBSr3Xi&U&1jsr@k`l ziKDeXHnzN(&f_COC?M2yBtX_$b{C({jB$$oU;B#c>+lv7slRKyJ$`!M{~S5?(_PiO z3i^GU&f(v%j9u195l5q@Iz9Z_t3m%;Z3WaI{p?}+gVS~BQexzuGX~%Br)^_|*pwyz z9Rf|Www!!9IpjK9vpn_8dxee0SND(Jh6C9=&yalVw6o4kL?`sT=m$-@uGNvOn387I z-~||{D=nC)r7`U93p$o!U|2G~j4OEk5z{6cd9PfDrkoqL2&+Z8w^seWkI9sW+%Irz zje5P}a--@mOIukhfX0i&%wKWir8)+jVGzi#;(R&S#0#binTkN0Y!5jF2W^?PG#_{5qQ>URHh7vUj1g{YzF`yE*xI;E(=Z_-ap#C}hLvx6w$mdI{ zgd$i|uGVpSpicdl20&%zA()Dk16yMV%PCq`lMp!r9xAjTHF8p$%{h})QvLm?l;*NH z(=>>&2vaG&W!|(Oo`F%?I`}D$Jsmhix3Rsej6(lhjH0S36Bfyv{Jc>@U z;K#y1Fe|k`5uycDlueR5f#DdiMcSWoqN|;GEtqATB~$sgQ`r=K*g%YPvF^z#{ovel zAZRux3~ck zJcvFxi4*%MMo*-*%9g4A%-?W7Km$VUJhn685st9iEbO=$EN-Uh{6QCV>eFPrxJHTq z(k9rmKqXOkyiyY18_3MnIDOJ0=&rPN&D;r)FD9_;o1(uJA$;bs+}@%KA{)F@mH4UjOswKNDvJ%M-0EeySSXMQPAd-lQyj($K+m>|QyHMWGIguMaG*=OsHA zBvSC8k2j@nK%w|XH2YEWOOA0`0oI4>QG5Grci`W&-q+#WzlVomqw1}J&o#I{r@Af( zEXQveAtNa8ttYSitYLk^00+m>>-gZqt4zVx8SW}B=qQ26n>DBq;T!|@28}t4+p`+mI`uI{QVmJKb^|*NP`#0&zw5{d7ui)!mQbG2v z(BEY{xiuDgf z{$OlZ5&>nel0J-0{GcLu>@-Ph7VFN}5OE}U?0Od`HQx_mGJPAN7;&>{EZO&7OV-aN zt7VASUxoGiy-yjeloolOibU}+YA`0qULaNEI|T^))ggIe-J(a;{Iqxybvm({O2&Ux z@FjIbRlDHaySRhAC}q*xGM$Zj$v6HE{2RaC9TdF7QkBzd5A8`{eZQ%5zaOBTARk$4 zWE>89rSth1CJKDrVhZ|eX8({7^!a(1(P_g?bez$a{*1cG(f@UwkwNrz8ua<`@BLQj z-)_Obo&e%aC_|`@w_py2j~tcaJFZ)i@xK(M29(xG<2~V{_vM&D?=`E%v<%Vf#WBr# zRXLuuZqL>A4YYYi>5d^xIS@u@@+{Y#c5o5&7;j(zc6y8SU@{~!AK{kDxCqKJ}142)6KLH9)70rV}Z$OKFAR$tVS1wEmq4n{`}mzHQ{HzR8c ziA;mACBfm+)+zypR&>(ggWcoH*JViqW|2d!^BIZ-n999G6ekOi(xyUGn%q?f0Rbyy#5T&#Jf&hek0n6=WKRH0+)jr2uvq3?l8% z0X11zK@c<#c(k-Imui(jaH7ePB-DRSsWpGik0c)OXwvW&@C&j>ZB{0Wydu+W#BPBV z(Uf&gVtA$IVNGlpRCS^^wMcS{r7I5D{jn+OCb^ZR10G-9CFHmTBri)UR8<}Vq&j0R zk%=_Rl_WO3U!2Gan6{YjUb;(QV~9_Bv)p}Xv!)*0xfqv?JWJ0ouFv(Ad((x*u}qoq z`u&Zt7@vquq7=si{U$ezH3G8NH!9hjRh25}Yr6>+r?H;3p8j%a5}D%R8sQ&s{JzQ^ z`1^H0*OC_d0qSO_EuW+Ym**Jxz#20LB5SC3YTEQ}I6Rilg+Ncr_!FoeYEU1(O41>j zKHyY%-0A=uLV_f~IWi}7;x7t@5Bw80#eei+}d9^2F6EoVZA&_=FaA z&qcFOqo6uET2W1I8`ACYYFsCqfcU-1&JI4B8Fq~amA8}*r)CH9fNe*BeQx2+Qpzr* zfsNE}SVl_@)Rw6(zvaok)5TR;VeXLCqoiLsM$&vpf>?gjx&#rOE&)pJhOG~IDmwF0 zI-^I1SPS@QR3{|mAHgNr<7pr`tT9KO`b3Gzv3!^Gptppe zs~am7fx9ts0Kr7|9%jnFl`+5P~7HB5~DX6Jw- zPEZH?jl@Lq)X$ zX-w?DSzgVu;1v@8bqRNx@s4p?v&s8kiD@++Be@lqzqwz$@b5fSn?~2vMrrlD5kCAw zG+7bgx)R;=KR4EW7M-Zjck3Ls`wsmh;<6KMUn%SSld=TGdot({VEGdf1?DShUPsTW zH?k51%L0+zwo*BVEImuHg{X$?tQTQW@1x!l#|yd8V8WH6OM*MFMkLvA5^TWopK< zn!M23AGX5kJ~>U40=Fn+cn9y%Opb_Q@Dn^Yl6KQeqZJoBC!KoiWvoZ32Y|PX18-a! zfi3MhpO!z*9&+N^C!IKJCS|^>t{U`@;(y~7-!|We&RP?OUSxP=n zJ{S8<{a19Y@F&JpaM}<$*xYh34t+U;+68gT*LiKRE$He?@)>3%$@;_S7$Pi!;_lj| zhH{v*7xg>kE`{4~_+L3cM$sO&@{)Ha<*Y7J8{5C?WxJeYc@V&*(C=j8^-b~ zJ}lT~d{((^m%`y>h-eUawO$<9&dk@w`|0M%o}8Rf)$R1^MwJ}0%ER%?fhOC4ldve` zCcxV!S4sySZqkDssy?W$p_F=1gq3NWIuO{RpM#T$99!fiO$aC36wL?(TsJ>d)22Iu zlM-)Za$V-{r*0yfvM&qH*FjRqZQU- zld;Joas;w?o~ToTNM#C4GEP=d;^sU|u!MNCi|N9XWbj?>k<%fF?NKWsmhIAeA&u>k z7a?DqE+}RwIqdFZqEBqIwrv5ksR7h!J{Wi&`}biodK{000U~i$WXg5f9~b^zkf#JMxCReA)I9pcYJeACX zc_Uy+%|6$?Snc$Aj0Td{oT`)8l{ir!du^$NrAGmK_d}&?Mv8TeHIpzxMrH)>6aa-e z27q9j0PFS!=(-Qp3p}`xrP)O;OwgpKD}!C#FismBst(azJ!tud!W%gsta;9u@Mg7< zg2NlqZ}vncqq_?^*j(91ESh4HW`}xEx-`nfD#-;V>5k3biUeCmW}FiPBC->e9K z_X1<`Lw4$&0%WEgBQ%NLYq(xi8TBJxg?dnyyCqo_R?+D_9yokCeW!rJ-+N74ctQP} zc;2S(b<8E>|!RgtQ4w(d)ppR4n6$-y-fM2nJ?!By0@z!f(zV-w3~$!I4-q3X zZfKVBZ)$?qVegLzNRTZ!&Oa9={bt(#j??$BPz8h`qeG1Rc{iPxs}QIdXZ-YKqxNx= zWkI*ZTdTFT*-$diy{EwTiLfyYT)mkYKRP$)x+XDt%zKwmdf^UT=AB1uz@C0gQYuG~ zdP|vH;Dib*oE(DcXZ$`C9>|8d9%Me_|M-PXU(8bubyTBP;`+&6AcAH-jN!`j^BD;m z2dODQ5a}L+KbQv7TOxoKDRy;i3vEN*IW+dWhG;=dRL=E6SC$}R_%vdB|2~(S16M&t zj56=UdF+qQDE#9-gC^vC_|r0+{Pz;eqn_+)%HVQl)CDXc4X$%&0WvC4;#6cn{RpEu zS>avYZgG=w7mbozvR z=Xe$jtH&jn#V@e+7U34ZJrMHOjK3QQCv#N@1_2UC!mMQ*w{IXavEq2M%X;xvT!P-J z2+zMXaot5K9|Wv~y04pB@@9!vG}|8q*{WBH`6=RKH*!Tb4=!?#OC-1l$qN*fHQ_YT zL4cqa_;ZIiCPJni>H*vpn&F4eSC5Wt19?LmVu~R{`>`&KoA^xI!4)l!qrE0@RFRD_ zJYVSl`qAq98{E!i@{V#pu6PCpyV%&55D7zO8T}*CPdFcXNq2RDfko8A7i%z+e27>dg8h98z|)~E z4z{&Y_R)D@*~4uc#vu;6d z8tjpyRqj{z)%7JvICPE7em|k{d~sRAM?MQiQR;Yd2#<;EG-mPRo7IfhW4(FqTCDV~ zDyW}Qj(n7%KudGmq$_g(oDE)j-A4FiGjG7;m+5&yep%F$xXLc-RJtcIaS=--xLlVi zSierREg8I=g#)+~(=5@CPUBzx_(aAl$=wzxISqkU`9$$g^^ApLgflt|lD zSt2zdH(zX%pa@2is)+9dtuha{l3jMbQ99_-{C6X=W8N}K>P8u>7-(<5yX85NM!Km2 z*ACrJZPESh?>e2WaakLs*lQ7(3#TBgcl@lfuX zYh^Q1QMD}aQCoTPOmfqg!*`f+K(km}6u804x0A-Vu(g~iJ^wAh({WH9Bs7hI`{~x; zHcINg{VeLyqz*x-#ZWg!vo6C5uWBbnfTyX;1QRo)`%qq>kHAIC!lyZvxJ_hGv#Ml8 z0m-37gW=T7k}gz8i-ImohS}K-hbdizwamRxO#9wYBkOy^Z$VEhOZt~a8cZmLZ@dQO z6xbN@_d+qM+(}Li%JoK`tsC_$mADyD0e~juy?;00xFv-c+x~ zUO_6==%7$Bhls7>7-@MV3ivc?!&^|tN@TgtQ~j?p1QE=OPdaQJP{xahm@xbup0J`F zSpS4QO*R)x)uOSAY9b!nNmz2seoG{0KOV3me;wMcc{@7+bg=;g^H4i{r?%BN%=C_D z3bXu|zQvn3ycHQ2Xs}->jByWOi3#Zr_DA_`s#9 zs9A;8hU_@VWOKmDehwq$T}IN#wjU3ZXUa&-Z`wnrws^hOdZ;H`OaZT7Nwhihc?n_C z*&^V^zGKB4GXOhfkUZ!Z3+hFf=z@ITLr<3PFxRNyo@-voZ49oOq)G%`w9QZj z#T1BO{11__cvJ{K47KK?7uVRSWa!^6OgT;CRpfHMEL5fRJ`=f{lVb;;#1f|OvrJEP zW14L)|CLUob{UK#wC3Y7hBdQ!ELVCE%~Tex)_=zP{Ps}mZVSh+;;Mg>q3tV+uj5M_ z@9QF%HR>Se$4%!=sf9xjKiD9BEUs;zHqq>|^Jm%&XR+?q=VM_`#ZbEAU%XDr+8q$xp z%r9;fqb}u>*oHVCU7Ux;mlde-uB}gQO;Q4z?_IQ|xb^`W_5p3}Pb=1!9ZozQkBZzz zEBnr0bR{RTo0j7|-NqqoffATTqy%;TEDi_(qX>UXT$5!BxE? z9XPf0)YU{ zr**cOq`+ftLO!jP$7uDq1a7tvqF*g4Kn>he71lgy50mG?E;qUKHI9GR6cP=pDu}dj zVp=wqL};^xM_FJ&HRZ~uN=;`^=NQ$JRB`gW>Pih01Ae}MR0{r_LLOcw4Vc6Cvb4z5 zw`EtzH0uF%3P$`84hG>9w|Sh@7ASK;76Zc?A4t`X#8!G37}btn9@SeCf3h+6Essgc zZ2FV3VMrXjijE3qMh|2)hEBpJF;F!gmS5qepAfK)byBKm^?6$j-x)_y6kd?JbnzEk zb3<6MK#z|?dCwo~9P+Ee^6*5e|5am!w^CGv>}Lm?EXe$I;Mm0+uUrjmOHPbe`D**8 z7>~1)Pg~@>!$JqSAypa86*(uCMh+rqVhG=CR*v=a3j1o5n6KW4WkNF55Ux3;ZY}hx zb*7CN=gEyhdW@hB)7+|96E@iej}BsTy*cf>?#h;|2&_+!LN0hfN{pW1DfChD(44 zF=6K0r-=0>K21lr)JIknY7y?J6+6C#VjTX?U2q-FGc z;(lcXCi*K0trA2NCXxPkjrADg%SNoh_P2V`bA|sX{#v09Km(ZWSucup-rY1~!>wRtzCO@q$n-+S_#~Vn%sVir&Aj-taUScrPNRxLc2W>VFs3PYQ%TcW zS`bBgGkU8ld*y^Yj*tb;*BA0zg>3Cs#{&vNFu052SZXbbe_o zES@g%fUorZ*5xAG@j^%xP#&@9PTxYSa5w}-SGV&yjB3>MshJB~E+A{e3$JnOeqIFII9L*?evu^;(ollN zKpd)tgL(DHZZ1z){QyX`Au6H`7>u2CyGLofqU6sNFwlN~{aYwk@Yky!el1kfAgR0N zD20dRDfyx7Qoni`v=Xt6eAZQ9T~H$50@(`2`D!`64GbCM1%G25=FA~wt{&cvg=@}I zX)oC1*X+i87to5Ku=Evwdwe&(m)lQrKN^ki(4==g*9 z$gQ<_Ew4Ta>nEBsm_ri%E02DfLD4hu=@>JHQ;2jir<77Y)#x`&up08Q=1Foy$ zjC4vj7!Y_l57(Hw`}VGFahXKq3ROxD7kaFV45KO6uzblV@P|NIwqZRPPNXmwzf@l# zn^;=`QI*kX^<+r{DHX5uOmOy-j{=g$$T2{!FdMt{;%`1oHrr42$}S?&Q&UU|F7Y${ zJF&GZ6wqEuVVd8VZja?O8xeRz6kdYjB~b#F`#lw+&nID%$}vLUG9c!yI0 zfe?UHBMbemyM}|!)CS;6eJt(RihPoyz#)!-3BYtOhZ@!@Sl`i{$Y^;kfu)coF6g9U4OpysQ+dD&+Os%iunIFeB1x8>Hj$Q z{r4KwI=4&fJiHPQM=IS@&;L0TdpL4^Yv05FHhQI~Iu&3ea?x07jp8Djf9n^Vfs%bQ z%&hh`VY$8REnKVc7PQh`s}x5JL6jPueLP2)rTv9 zb$M1%?ZPvP={%a80H<9soXU0U%1N|WF>pzl`V;2cUA8w*pe^jaZa4= za-5#SeRGAXnysi+{<*M;uDso*^lqjf6fW{sPy^)cw^ynI2lg6zr||3JgFJ2UnN4o_ z>DcRnWWuQwY8g_JX`S~LsVdbG5NkXdX;EzIGLgAkiswOo&!r!>{0WqQaeFR1b~u1T ztMr9`Pk^8#0{xpYJMYlB-a(;cW@vybHNShoNr^iCQW>cD(08 zvl4fR_+;ol`|tX3yowfbB!W|L8A9G!nq#tA|-vIPjsY_=bsx=#z{99;axf0Xp zhQer-{#D$Ix8hp%gP4v*SM8g%&eP>2KgAC}eE;%&7uMe@>CA3&Rk#cyMIen3C!6i@tw|F@aFb04$uQxZb(`r$`5zU-Yl{Z z!yBfVrrpE*=?CaF6m63($P_{6b;{MY zJ*BOZ-dbNGkMry?v*r?zG8iUZpY`kK@~7{weEy{a;XFuJGG|D=X7gWE+zc_cV1E-J z<-U!UgS(Agb%VET^Z4%AV9-+RN?Wo#yR*iq-zNTk*a(G+IBkgIqnI@yEts+Yi#SO_ zq)KM{ReOdLb09;7ir6m9MeJEF+OX5g!e7woVqtFkuD<-qvj>IhcG?nu^7qGD6Cb=6 zzi=fIb-h3k1n`k(;|)xBe$DxBRCXSlEm011;B(kg>i}jC?!Xn=U1NK;&aMNrUCpHR zh=9Hx0!HOf+sXr$`#<$<3XS#1$h<`jSpHy&G3PP{?RbQAR57*@BWd;ovFy6b{cAeh zBun>cb(p3=h~$f@YJodmX!Y6C+O&?*5QA9)@+eAa)iz#ALTD33I3UzP1y;4l8bqtm zaE?%Y&2OOsQlK#P^N?=|*2(M_;n|M!q!l|5&ILeAZIb5QE#A~B(OFQx!*&=A8D`VoEG7aFkkd5-xGn+EO~NShU6?4z5M=_2@8NIZ4ZRMOIGl zfc@QhK-xys?iQs{pzCvs2=rDlXh7@G%AH7oMpzoNSV2%&o42?Wx`9g;DHePYdZ{!D zVz_VjPD_|5b`mK&lma#ZV6F*6^74`3G#vW-ecP&nru-T?C%@OA1~*y}Gu+(rFi$_? zfAoveR=>(tQytn$ddPm)BOk5kdYpn8jiIQeJI@9&tWx*XY0L3D`y>!5ilV- zV-1D6A^GcGieKY)zSwPWHMx8U1`*FGQt|T^udcQ%VGR@faf%j6{{?Oob$^A&fDcZ!^H)xf0R{l}H=&gdp8 z=s#f=5a;eMg^MUdj}h3Qx(}-P?^#YSus$|5IfGmU|!aZFqN|?B1%nCOs3JAJGwDDa=}?<5}Cq` zjLhITLCrS8WVxxi41t}syiS3Wg5s~bg4DiIWpmwqy2i%WE3*0@s!MIOM*B(+MZsa$ zMd+D){y-ef6iIP8T$O736O25{;VB9^n0r}EZ3SE!a#);fxe8|5>RLx<*@~ZMxmfCp zD%cIF3EXlk?L5FI6=%-6LxS}#MSJ7F@nHS3wC%69)!N6?^+iG2g=xxgWaLKYYt~dJ z%6v9Wg3H@EU&Mn^Vz3~IA_gdj^_@NSe8OB9$B*?@o?EO`rL=$ zu<}@`K|*BG0no5D&5wOW|^qbJH7W1FW;V!lzR2OIUahXV^g5` zPfl41cJ7>$K8IUKOB?Xi`h4%^uOB&XGr;+5n~DBxR=WzwJ`j}_@SqjoLm%g_nSZ6Z zf9iE1aSq$Jt55eeP2x|zy_!#*!da#W$eh2Lf28|a)6s8C9FJ{&HdU>rd1?-^<@halG$R%aA;T$d#UZjQ$1;By>!LdQN(D&k+tER_X{Hb3ur1pr zZnW#*>Z7F?1%@X^6anv|8pOJKA|QooExN3BUvW@h?Rl)q-d{$b!56r_E zNC8|p3Lf|a7U(sZPEznslqkf2eu8hdJG^~&j*X|k`|_eQv|h&uGxu8QZmmOYI?slR zEB-()`Sc=bKg_-PDH^!nlNeH4-~MGZ&u_S94w`lC?;q+ap%hbVnJtH6{inqI0jp6N z3#u4C8s!blfSfhTb}P1=*bpUx^2)ldO_2I?ULo&eh3F)a!}K#em9-KJ!3#cbN}#K; zb;W6HMUY^~hp6eb6*MN)842C~XGYZEY!MldSDzpaEVGe4-@PHf`~4{{xBLyvV@={m zc@1WOH1$O{Xby1AWcHHYDmp3NsIsD7kT2s`Lf=$HwKbv@5OG+1kI=@egBNR3@Sx+R ztL^p3pqhxJ{$vg!XRZYeza&=nCmrHn7!7R5Q^r)yPVY5EC5E#Xx-(l zRiAQ5xLaR^p#E4}`Pq5rz6*vmCRFWylj-twbVteX^&*ybN`^(`3~>+kKGHkzD(-OG z@}xdck;hvg_Y~4aszf2wX~BJt^XR>})YF%ezvH0f>)Ru6e(u1~J&9E5qgFp=0=3aA zqjlH_=CpG~@c8KKHotUvEuz%mh3M3yw+{EUhaDMvEA@((eluN?`)#{+JFyLXa3NDk9#BW%z)42-0m3+WoY!uRRlg`x5aA1dJJCV)G>!zi_bw{qVNl~{?rYYqIS-TNEh^nlp1vv zD1Kg1DZ2AWM7sYk8Fblf&Sm2AseEL~hkt3^)zv1te0 z*h?JH^$Y7t)0)bn)Vhv%zjkK4q;*io5q!+Q6g0?+_=Kg-(*Z7q)b(&VKR=wDn?q76 zk`W@Gq|uT30=3efMG-!S+)XP9=8XD*=Ghl~`xjGqSVe*X27uZ(m?7FmB=zRkd@t%l zy=27J!&CHP-@VN#3+2d%+j``--LBv^{foR^hv~L+L^`YMLRb{`h+v8Ou;L?xH&h zXuU@fINaNBTQXzb<#msu&z?)s&z$anhxSX(X{d!~Gr`Sn7a-3HLjGKT4Jf{XhRxnt z?G%KR{~CZhs(NUsN_!bs@w^ny#ZbB%`84ev#jI+T)2zQ9-i6cQ&|-W0Wb`%PB)Bdi zoUT0{S8*fya>7ckMWu@I#+5#k>B(-HIG_{~g?Acfsyty2^yowyj`dX0QB?th>rv;T z<+_xU5Tn8E^x{Ku`-0j{&c~<~NGZ!pqn<{Ls|` zc@!?b@pp)OJEQ`B4s zeanj8BDeWcRr!;rX#o{cYDwdZYmYKIdrFfso0yf+uQybjNQKh$=BkfR0UDyW+=#Jp(_!Z>1=VBbVN0P_ z{ZNmEj>PWma{vN0SzNUH0UB~w88t-zg~x>%uozw`B;7lUr7kIjwvnGL?IkuC*C&p4b*?huDc372I;xNkeh2dv%uO4J`2Y0G+d7yxq(YUJfvYJC{f3 zoJ5x?+1>rhl9;5w@A)5Mj>;N1DjH$DI0MKzE!h`@6Aj%8P3tCRBXtZu9>cpU)@^cE zAs866UzlzcdI;O`y1s#B(04yLSKwndRyrj#V00sTT83_GU#~~@omo~*)I5nI>Volw zzkx8MjfwT7xb|K>%=>mO5A~;=9Gi{7b=}~VwPeXzIE;|=LM~d@{kDyE;|E|f+pE&H>*`Txw_2XLue(;Us?S1}Kk|qog zQGX9tW}PElfoV#@P;Lcz-|r{F7;&N}^O8kA(o@u&u5=KMgs2Qt8sahr&jBwwZW81BI_hS=*V7lS2A7E54Iz4Drtxo2>_SML(}Ine`^~{O z*quYcD(y3c{0B@}dIYjbfu~O{vx5SaTMhu}(g4Ey?f3)`ADKoV$OdL+8~g>B3r)K> zyKnIJ8Ian?I1~z>V}Cm+v}E-d;h9Hvaiv^U86;s=nSsOHtj!++X%if?Zjoo%66bGq z=}Uv^g+UR1zIt-!=Q%1mYgPWLsb!zb`W5K!P!}LsG4mCu0w@%6MSzAhPXW<#Zvw`m zsV+pouOAU;1>?}M0r(Jgq1kQ;>~C+4G55VCe!dVUxcJZjoO_;YOwsg*?+?bV+liY% zdVywoDfWq+C{YN)GN5eLbsd6z)q4*r6@wo7=0j9!cEzrd0#oKH8^*@_a*`j`F)Fib z)b#sjF#-cO_0qoLUle$LB4+VWNCl)>P+ET=KRW{$aXImtNmY=0n{KAUFK1aoNjLMX zCS=J6a?VUQh@2sjY~T7(Daejzar0vn-GPu^kEB$zO&76UCKsrJ4t(UB#`>5{yr7U1 zuOh)XWxt};PlFP?rGtR)n_$>6A3MA(eQndg@d;Q%dEhDn`e&rj>B@e|QJFL2Q-uxL z0E>@j9sqJ}yOsFYNH3$%g{TM@QNHlc?A3lIbkQZ+!^eZZMmuQ%^y)C^u>UWq_;Pube#uP+6#d^PBcAn$Pq z+%;O51KF-{&jn5YydXE8}dZEK@)gWs#LeF zK|f1trt7ts4#kPxGl5X%NWAw8Oqv915zK>QQ?F>9nXeX$}#Dt)(GX8!nVKtD5 zh;Oh_HLRMPv?eXsb%cfQeeAK_VUHeKPp&Rs7xK&0wk-SI-ZHv>cfa-@u#8CpN%E2p zE(}=F)(T4)kz`7s7|d1g?6lWzh5X;1j>n0DUT3C-0%P;O9x~>LjEZrAE{<45%Mx4m zs)Bz{EW9!=dI^8_(2E9BX)fs8L z8&qmFM{S-8(h-wVv4)*A`&Jb)qF($L$U!F^6Xxy{S9={t5=RuVjKle8WYX8N%&M$~ z=vB7L^yel3xLF6n_IycFfYk6?ENq;9yn_|qI3 zx9j5@O><{5V0DOvbC?XJV;#!jL^K|czUq#V*!wgQveIwXQqT-)CZ~Sy(klM-))4fz zHt_E{DDd4+kFuK~McSFjK!T6`wawls`>R~p6nN5Zw}ppYVtBdv#8ub$Ia2~_SEu2> zq&X-VB-d4`HRJ$+K2{`rH}o|(u<7JA;!?srGPM&n?vaqYgxH>fcZ z6!1AdUWEp>+Bg+l2On)4lPpJw72nA#!`OwR?@AOmK!JDOryFfnukOOq+bBB%(dml) z$ie$-lfm=)ZleZ8F{X?Up0W^XCXU6hyU`_0eft8tp-r35xx)QeIOZU2+uL|y?@Z+0 z-x2;sMeC690(!bQ%iy|fm7dOzCTK-d(hP0YuZjWJA_HqdIGF-TCOtC8yP!{mQtyGS zkhv5KvxvaP-vaVt9-e(r>I#LUXpcWg9QF7)aT#AGKo~c-#+o;nGF{-c(DAs~s&v~j z$n~dzhZ+h;nxHnB{LUW*}gZA>xp zHvD$ZI8op}58Ci*vLW^;+Pv}VQRZhrlBB`)wVPuiR?-p1!%gHT0_}}TF3aG}#(nI&MFlzCAoju1Rd%=866;KW_?Az>3qoDFe);odz~n{3l7IfQ)@eW* zFf=GLPx;q^YDhDeQsUY$>+YgW9ua~G2JG=U|NkNNnJ4t8F3!bG5mCxqhk8_cmDjE+0S13W* z*>`E|?B?z+wk|J&!`!dXBm6h_oDOeGO^e6JzHvYYlT*_gA5%B%=tA!gRYg8;z8W9~ z7;{ztD(3!kviS)`AA~h#UFbJCb`V;cDdft1&mXk8I!Cp$=d+!IcNe{$xgpJuhJV&R z48?q{Kp%{)%zc^y@q)RA!6^v<_F+ors!5blUqmIKG1q z^E1?AoRhw{Wrvh)qsL;Tf*j|WxdS<%w{N-%UrC@)ML$iW5u~?hnY|=f$OkTp?h9J^ z0s$T){+b(pj*LpNeF{XvzsHkjhdp;9{t96c^}Fh!*Rgjk)4l8bjXuVmJU!qxC|bE39HMKxqlbVXOdY`{Y2dB@(b43)g=s;ti`|FJ zb-|Aze>WYnAEW)p_CY<@w5~Q<@F?Uy#`w=rt!%^pVCj?Sy2(+Jm+&z=Q*8~Zh>#9>Rmx<@Rhx8 zuajY^ix;}iwQvolUeR4?Gh=Y<%d$?ArBTf#4y+OvzxV^tt=u#SGVgG3@XJh1H*{G& zLalVL;S@sA_L)Kto%E+-#a~*_o{b%{EV$x`V%YFsR!m$AhERH;oxvbR4A}oTAmH~_ z2MS1wohFa}W@}d{9fBd+f1K1)HCkxT;utPRW0J5q&GCM2+VRmjVJXe15EF%RAo|Jp z(jP`9zb+TSjWtS5QZB5vj_d1~GOXh(UB+OvDJZ~*4ynALyw1+Q-a6E`LRtiGq!?p%ZeF(Cpu~!5zlWqosPzwE!)w6rBt^Ey&t=qAJtyW@%}=YKvQ~LVEPDRcZk??1 z0N~*vKBt=9Un8p2V$RZDyB!5(oIz4i^UNh#SI-_`4DU+YgTTfOH?@Ov26wS1UaT>V zd6Kxdy2?XGc?KnHr<4w(ft;ysC@zQX{CIk<92e&yR1uuZ{kt(S1o+DIiP){426K8{ z_mRTz8hxQ|=O2dfU#lpngCy&U@V4?VV?W6$T~i(zfx=`1Wet7IXP!q*jb@H!z~ceK zfu{LVEm{6MNQ+h!DlZc?AF)jvF_mj7D;+2@BPjxx#XqkZx1JuF66H)SK-^5%jfp3G zLTn5w#dq+S?-1`j%*r{%XHa3bjI>*rJMmrS$Eu1&n{n(Vn%cCSX6I;CBd9RP6l@%r zb_nydCM>V?S0H9#Ic{>DataDnPgFq$R&*57K~R!eo*Q@|A7emWsP<*V4&8hPQ~HV< z#kYn)4aZ-UsukvfYn(hzpWk0s>79u9Z*3CH-+mL4@k&T^O2U^9DD-a&m^wp+689!y}+Dd;PAo1Pm@wfsZINR)3JOx?g1~^rvjW{th(y=6>1Q97%IFR@Z zTrLt5SR7E?iyB%jp#7OEt>8&u+)HkPoZPEk7g)rmzWlXxP}jr-QnmpfjqqSF(~@;t z1Z%%dSfDYVJI85Vd?3y76-@p4qt|K{o$uic}su4(vPoO`%S{(S-tBRYszGWTjlw?D9 z2A+wyW57(URW?wD^26`dkF=UT$fZtX(b?lJhIwYb5XLeN;mDXJ8~x7dY4n8POH0Q8 zy-po3b~Np|&Ym6I&u&g*C#a_ug$w01MY0RsrzvtphW(ww*T!4 zTFo{K)oh##0MGh)g{vey^xh3d<<}(7;isF)=xe+x8G;fbVYCIDcbuX5| zN=V-}@~k{hyW_lYB!g2gVgA3SCWHNdZDCWGLdEi$0@=CdZOo(h_Dh=cin;T8|XxI_sWHbcFU8O7Ktj{BhQ3@$C0f_b3ENm{)1E0 zAsJ)JR!B)se#b2plyvw-=sD>5F=gmE^*MK&rAdcTPE~! zwe7xt1(Z-m4@NljkdTvJtpzl4Vk*V^;ziJ~XTd#~3P>W&i0B9lDRNQ!c3?ATRNIDB zf(QkO5WWI-}5FT^K@b40cgOSQv z0OaW5CNpK+SeuCgNri)shz#orZ^U6Jc*0h=ZQSke)yZ=W1`wq2a;QixPdnxId*xO3 zUKI-?G@Zqyk^pS>5$ICD$u^*Cy1UD>7n0o&wEsf(I|?1UiQ%+Q`?^hgN2|>W88m`w zB4^`EU?sFsoZNdW^>Ak^9WvI+%Ooq1N+Ou7B1%HxPp=05E zV$t}u5}3+RdHumqB($HY5ncR+c^06}@pj;`T~<3s>rV@iMk5~I8WgQca}m4hy7Gd8 zCw&H259;$I*0R~%L3thJfk{YBY)!5PuF%0-VmJuaaGQzh0_DtTBKQ3MyNbK<4vRU7 z?Ca&>`4A&Mnhv|`u(W+@8_!rz2hW~W`T3rgDw=W}W+c=|^Eo$fMLEvvM+fpzVEK76 zN@KZ^>|1pYM?!h=i6_mm?*r#rtN?C2(%!v-3_?nUaX~9AlgIE;(;6??%9Qv$X)i35 z4&BttebCb6ADw`${D-6UNIsp_DH+VhJ`UEQ>owH8BNlyr)n(F6(u z=nK*#Asw-u4}iV_Vb|4Y(26ZhEd)AVS(xQV39{=SlXMgiDSS(+&Wx=;IexR;jOUlD zxAr=OV^-(iLI4DP_d+=grEYYQwE>2q= zCck{pYehECVsKX{dq<~@+oPRwtCz-R+E>{mT0zeeuwvykNyJF4Dc}hYc;IF6mi(!( zl(QlC;WASc6vA$!?6T%HLQ@_VWj9sfTg#J;h* zXC^#E@@Cv88-)J(JorH80w655gjNKuDM(5Pw5z+`X0Lv56Oa`nznz$nlxCz>E4xg~ z!h$%F1U1RV%rNzya>A#n)LPj=D>rr;SF6xa+)lk*8 zwUiuxln_EMg^p`Aw`Uj4O?!^>M_NG(iYZ$PMV&LX^>yVm^H}NsbTcD3VjlZBs(wNz zj06_IVgU!qriKtR+20@_Oi)(nW>@!9YH=nNahDT?Pt@E9-kV9d_F4 zz1iXAL}fx2t=QH)@j!CSfCAsh<+Zl6_#rH77L#*B$0YclJEM@U@tosTBZzoKi%MML zm<;{rnn5V52$bdb**Z1>y?2Ow(3xJtDKV(stbl)hp$C2_m~jDsuD&6-RW$gTzN(u% z(~$rSFx}Yu>|4@%U2Ukb3@4d}&)7~I7!Uwy7axgDG#+>(8@Q5XcSR-r=R zVs%>XE-hx6z9tjNnI1o!;Eez?3aRdtkO|=8wqpkZh0ipyg_d!3%}dUWUZwNgah~Pr zCZlK62R=aXY(UhO%TtoIEhSFUbF&ARlj@8%b<~MvmMrC2Wtz9W>{Lkk>`$K#E}Xf! zz}3v237y_>%D#VdF!1f*V%FgRG*TJ@li-rnuWKwr$M>&PSW#Do6r#V6hZmyEy_y=; zLk$#R>#BCi8QSY=3Z5FuEZG4s2*^k&A;OD82BYetdxDX*L)>d~m=A!dmDNlP0yTg8 zr?Cn`24@)lAMh<%KC!|xHw(^BM#7bO@Md0PaGA()dkNI+~?2bO>NmXv%hjC{jO_RpAJ;+v&Vr5k{E<) z5|-NbGGr3`SvG+4BJDde`S#2*kq#Ky+VlhJ^(s3wC0TIvSL?R%+)U<7WUaudTzem- z3FoQUTn;$(CaxMQz<{>G7;f9OyX&c7;6;CWg}QV7_={f(*5 zU}~TXyl+l&|0VlhmjCQ{8s~wcD#rU4O0;Ec!) zt*k9M7?>WN7EXtfRf%adL$bgu`&fQ!c;}9z9q(Hx zXkix)iV^&-TNfce*%Lh+#n3lDHTA4Wy>=UJP%mT$%*&%6#a9W$6tt%^b|2joUQzd) zXJGh_{pb(9%@N>_@gqxw+~1ArJp#mq{6V;1GvoknDN@MGjZ)$Ejz>+no^DkeQBBtq z7V7kr&N|u??hoPSn@ynQmDYz2MiA7657(dmHTw z1&?yB2Ts)-mZ7wjDo!isV>lT?@>vs|>|dl~*}sBu+cHCT-bmEOR!ssj*j>l2Y)p|W zmDI`_2xH}T#*Y_R1C1ZaS%?w)^7$-5iAnk-(NbmYfRiTzqgbGlQI2t7qM8Fha=e)# zvYX7Z@h>{u0%60hIhiaoV#bV@JpZ!#95*rvvOFgvHMaFd{uCyRrOmTh4h)=nv1%e# zwu|yyuK*h9E8B+UTvvdX)|Ks{Mvp5%ddJH4QMSjGSCC^%S54t{^E2tl=D%)MoP<^E zYwP#g>zTU^mx~!h87abD5byU75fQBpSdNWVo)8fxm+~x`OEOz!+*RN_3+I^i=%ZXQ z9@`{43l`hcCd_5WI~>}lmWjrek%*tfl4A#ox(Mh8=AW?YoujEKE?MTkozB|@U%ZOh z*R9Ep`swo@C2Z3u=UmmKT@~^>9RqHo3(hPf0>y}Vmf6l`I7UWruh0e4v% z&io}c3T3gnMZA8pIz^H#hEN(*Sf+0@Xj>(uYEj=sGYTT1Wjms?`EHq@OK0$<(>sNd zH_8xXKJnwisaDm|rqy%;5ppEqa=3Vt#~ec~XC_aT!f%jR$}lwDDdHz!Nb;Wzkn)H4 zM;a(qa{fu>sFt=(t;gspf1p&lsZ~sbeupD<=q;PyH93mr!3#+GMTrXeCrRQ)u7g%p z+a5{zSG|-lfn{W5`Ai%eKd{DgHw*z>ca#Whi64y2B7F@`ZK^n&DqfsyW+4_34KU6Qw}>P`n#uo&%xY%pkyN$q1b(^YtLb1x_>^nW)J9Kf#Jda z8z<=EH=i_WSAfh*_W+Kk=*?u+?@h<4oqpEOA_<4X@?h=I)uE?LsQpE0V{=`znx z!`p)e5?&7_Vj~J=pFk5(4WGv~jXy-h2kl{`DDGtnFOYqGFEE(GewdeqH|P5jxm zW^Mw9z!*~UnUs;#8YvI$@;krvZU`IC9XmJAH=-M)kfS+NKxp*`tVXGON*Fg2CD+ms zxv{PFr7Qx#bGg~w+ePb0M6=(31-{iRt%uH2OmGx$DSor=N4-;YlhW^epM7I@7K3IZ z8ENGzK67YjD~(_79hLOXNN}R5-1F6(;XAUwRqb^Xn(w6jbb~i%WAgqSZTL}=f>isTex}}36(u9doWPb)_jNn&dabUyL`o5B;sbzrC8_TOx^y#w zNMoW)y};xEkXu$EQR5hPhP8Z@l9HtdcTe?j(elMM3dAv_4rV z{57r-L%p0wNylk+J}aAX(r`ADn7905U5R!MUKl?nS|C=gGF8XV`nglpoZT=Ujw3Bo zr?t{Bv|zK-Fyuz8BUmEz+&!qqLDWqe;gIMhgMO0mK-xWVwo8djV@YUGklNCgc*L)% zlQ0B>qd?ViGq#^;)J+!Q(ES!qGu?Irh$kW=#%Hkp0^JG6-B(J_ze_f&Q^z6IM{9ZqpKxXmS)4vTuDWF9eoHyL5W$#a`U+mF&C$`kFzOnf3gg#sC+_6JfhvQUO;OfkpbJ-;n&0Xp!4TDP-ul*eozS0d zMMK>~jL&#Sv@;EBLSq`ybf^TblW_D5_|!NP5PWl+uEs2wbNT6&f;@v8AKtb@b7Tr|5Ip zu(XBH-a?61v3IetgAlwl|Hh9veK#;!Xe4{=R)x&!L4jc$pxAAcdLx@A-~{7Kws43f zsWqlDzteRKvboseb>zIJ<-==n=f-O}KR#=v74siBYn2J{H|7p$c$K$x;*=%u-N=mI za3o{L1<`Q2u-q)aT5DC_Xt1lW&W_S-;=yS#=f-KlGRmQcX@h-9|K%8HE(w!!gUhj9 z*77RsjJtEj{p2p9q zadn#>nXK^so$Y<${d;=-)Lm=*ZTU$ni7@YCizK>=E+zFP(~$?(q+#XrBPC8^r9fX) z77&vNvnLX~lwdnd^u~ElWLBRQ(T;1%EPL_9$Sx3UaJw8XrF@Zv7vLb=T6=!Q=$eC* z;^Xyz*{K*=Qzoj>{lSUyBDusC-N&T^A!0ku*y<7z)7P;?<5BY}XtV(VQ#tq#%L$B+ z=d%%mjZ?+jqs^ckHy+=EL*R)>er`(ryBQpTN(T2^ zD*ad`Rv_!Sot5J0l4!wSc+d-41bWLwcQz(AiV8NWGTyovFdwtX6?Y+Jg=krrFC)J$ zm~1_cz@Gbwq|(Y4&~z7kwp7BmoOcvcSja>UUDmW1HnLwG<@fsg=hu$)U$9(wL zl0CWAp!>0454`}wN)5kp8P%L;*LL3Q?S!#Y*GQTmCMeR&U};|B4?R_V_sI77E94?G zJ)}H_t^Q=V+LVaT^hr-#@q_GN{#bRyLf&= zM*bjvqHEehS`}A(c*b%v5%Hr$$c&pc8EM35zawageY{BbbW);2h-?T$S~dTNOU&TV zDr*UQajSJXB{Mm;b@9 zD~W66_5Qhb)in+}fnvOsncdp59bJQic#!2IIxE$Cj6(U0#OH_F+_(#Ja-XQqjzCs) z_T+Hj)XGBpT6O0y#=EF8gLvk?`f~#&Q26Tu>TK2RldUUnZ9{FELbTLiuNb&JV${wp z;%ba*y@tz_t0yRH*m--8R}Oa1*_ghSiMVyaa(@96*ZOn|AIWrE@!OVle)U2)(ko#> z>EA|r=FV`>pRjK*AA~RR|Bw2I{ePzZVP|7y|L^J_^_s(WJ8!<8{2Y*0+G|u@%+#gn z01%Qk{_KPcQpo8hq>iW<3r^&C%ZU8^S)9DfM^=JQ=_8omEGRd>Z|O^DgcBy7<9Q$bSyBoK&!HV*<@MD+^RZRp^O5=X@l?a-{gqg#ra*G8@85k|F5mret@vDC zUX!jnKH<(fF|m@0I?CdXH{WASr?}cbk1AR6{Y6mYqxQDcv=io@HP2v7<)!i~ssuW) zxW%n(+IYO7tVX%3^^Cf_?PdZM(?Zzqq3@d0c26Q#$x3t9&3nBu%}fQxf*G6qNan+q1$Mcd6G& zMz_*@4zmDv$e`8p#>)M{$G)*|#wSuI0W%iJJ5u|~Ipo>UCuGN0;(E1Y8D4mEO%l@S z&=w@yn}dTGs{dxM!nX!q-&XH@)R+G1bq}ziRfFqGNzcct&iB8S@6S7%h){-zQ27Me zi#s#ETlAi#iHhW&bm9AdOWOa~znmYldP`%?tgjNBT0Cg^rWsBIWBj~)L|@^SqwL?2 z-d4sTANQ>TaX#Z@q>?EDPH~7GYnG7aBi@mmKh`<@Yi|l(S*zAP* z(oP8vO+a;Nw_`3z5cFObua){wh55nG>G=ha#L}RdIfUB$;BY*AEGmj=b+e6Q1C({H z9|(7C>Q(^{-d_!-W>H$+?d-&NM;!PQL)8AukQQ}O9WSDYv}4-mC^>Z5b8*W{O&WmA z@}#l;1&nXZlPUu^s?Wko3xr%I-#PFR-u)SUkB-c*r4Q^QG&}Fs^TQ~Bw|P&A1>_jN zo6Jui{niS+>_>xH6R%*)c=l#^J+s1ZfGj@}o7oTihYaqX*vYl&3@nEyG?lyH@ED1K z{i>d1X%G&oFyZ@xvOYy1JW|-adO^`B+ytpq*_$Pp5(@{+SSTIPuZH^xm0hL}0aL}rA5<1b23facyN=1KCCv1JT z?m1q!8mN9_Nd^;r^M=Y$e!FFd(`D;Y0-Q)dtT18<*)b*^6nf%vbsk`)_`#5T1TsNmu$}1;y5rwjcjf?Q5OoKT+_?H z==&|aJ(w(`IHPs9e=bc|R%C~ew+}c?cF~>mum5yH-cYqtV_Fq`=6o{)tU)lS+kb4K znoe3v?kBLV(**}htVhvh8|&?GwfT7)RB#4c#pb0~th<7N)-|m5PaW;^O&DN&-5)0h zDtYr-5FYb=P)k~$WacF5XHF$P7TgJ~{b>wsUHdyaVL z=5uQYfWD*xFe*}f+&s_)kiUosUlQRJ1~9X*>b~mIW$k^~F!*LV^39n8r>C`+%-wgHhHT=<^s{RLvH5hhwrXP?)Pubd* zAgg48I?9#4^T`e&jj;=pgP%h07?C|yk7RNrG?+@|wWS?;0ePR}<67uAnMqR& za;w_b+A)o@64PHLM$U*lw9(BaR%6Y|$DCMxU*j55-)0BaGu(?rUBizls}D;j3pOL> zxu&#YC&bFM1UHc|1yJGv2kQv>2V1I)(mFk}d^TlPBVr-)zR_bi+&fT`19k>vBQ;(Q z9ka45W6%=kbjHC87#kET##z^$IW(zgIihy+hr2aVol2qZ^3w>cu@wTZ26m2OeTreq z5mVTq@T1n4Jgm-4Nk-I#R1_xTkp2F!tW}ab*pra|Y!+BWO{d5ucN=a~0NalzZX=Ux zcsimYv&+&y65{9rU!z${RGq@ZbWIJbMXvz@gUWHEX|7^pHLAAj5BtbHd`NPOM6|%D zScmjZmMKU(7I*FJVn8#EB@l#|Gget<9bC^)GOgw$sdN9iS#(6us z;)?aPBjB~`yuEQC8FPRN|D@BUwU`+5ifLzJqs_HHOE>#rI17WNB%vq6#kJ%JGCj}_ z;Djp>KbdM=yzgkAE76%MJA{--@^^Qf!tGXiU`{UHw3)JXaSYjV6gv7B35G>LV?L?z z+)oWK!nzWgZYpHZPVG3YRE7b0Bb<`mKhC!$%b$6ejxn`(7jjvj1uh2ELLdul57crl zM>Gv~Lw*)>g|hYDL)o@dCLy5nhK%8r1buGYWCImfM_JL<^RvSLAk`c?+MtmVCi-2u z#+Hf&Z4gRb8I9ao#WoYK-uvKkzLDslT*Qs(%fLL@?mRzM)!Vu}iutR2?FHN{Jj$l9 zc;zM9V0fsVMU|T5I&{tET`@5|J30}2Z;>Q`*Pam~0Erzuurc?ON(EWmiH8|Ee@TsG zuvHjh!J~I!{cYahx z&e)8pqnOOg4$@dBSACSsx}+-gXu~psfvhb4-=!sVrMML|`@+Iz5#@f?Arcgjrmi}i zYlB9AgBb+UwqXH>=9YuC2>o$wGktC)W!IGdcp7j;dpPiUgIs(qe}l?HwRrbD;is1L zH%CW}BE`0VnecRPV!`6JYG}GW1(*7tN=;xgLbQetEt6OhV`pto!vxablz!|r5kzYL zLiAfai;64NjfWUS_!R`eX3&a2NsN?37h~n*6)cLpNEN|Z#d7Bo=95*@6{UvM_Md{- zh-`l|-0)g;1)^`w1o|erC>YO^Wu-4VfHZRhC!>G|LjyN2Kn6Ft*)LXiZrn=oml&_i z`TI^$8#of%YJeFDR}D__+dpB#Ork_hwFdtBao0v@P!C&5-6YX^vBiw{gioc~z1BB2 z6DWlQH9KH-pMyul5jI~B`d5eoHydH-*Hv}NH=%%^n94a6@<0uk6Zhv~Kr|u!tIcf} zDX)F=vY}w*DqIa6vdD~~y$WOe`UJt;+|c%^I*bjNCbL5ITLvBwiTAzKfd zkwLGx0AyyE(sQ$=C3IIjJp10TNCFMGN$=lTL7#?T2{kBshjh4EJgfT zH0S7nmenitsozKurE>MDgGDGUno`5{mbNvN6&b4~vz3grqJCAS+bv&$R+Yyk7EBp& zGnLnm#U-3*wt#9)COCmhp6QR*mLbz@aJvJL`^*nBs{oXW`j^3ZVZI!gH<-Lo;>YUE z80eEIj&+CFQB1Z{(nU1H>`jf41V4W~QBrm!I>0k&cwL$Vlz=TV!I|T>MDWR)BA(B1+y< zjxF3-VHcN}5g$A3j#JFS-7e^X9aRZ)JgZn=_D`bu z{^GT#)|9D&eq=7OYvpZRl(QJSL?)u&eZ3xtUH;(AFo7SsLoCxHMBreFvU)dc9$ai#CXy8JabEn7##=dMOdmuaVjffH~kOi>0sZop|hXbET zNH63^*qTwS8$4CWKW_gD6-1ujV09_)4JmhGP%xqqLB~{%+d;FqQq;zR4%zD;QlqBb zR7Z{J5UEem2J~tYPTF8;p6%Z`6K`-1>NgBsNRqmpFcWJJ%Xh+>8bpV40Y}@(dMt2J z#ax>bhunRS554B&hO#7^|0e)T@vPSg;`W#dtoy#H!YR zfo2;ndbE*C*=kLTeN`~7qT(WzwKwe1aU*rV+v8Z1P9FJV2Tn)qJ+_FY(;_CB)?1e&L#MljEm6@6RP{3y(!K9Luf#i`SXdCM5mIN?dIkXxa zs5gI`R-V{8Ta&YZY0O++ZbAz};-0@|(_%I2RnOX^o)$YRDdk>m&dQKJQ3QB#=sA-1 zu?0iZn8e98X`}#Kp{dF?^``>Uhh$b8VVdZE0pv!YcSkUInm99o-KJtQBb5o=sla#u zGoXbATwT%ysM=);WR25lR5eOvNA6&y0jt0Z$}NmwgTM~LUQik* zHC!yHRp>hQ{YfqAI`;50Uf;}Dz*rttEoqp;JgMy%`N<>c@1raSx>`kJifJmS$G3Sq zMXS{Z08akNyb~{vT+0~S^|Q4)IhxT@7qUuWVtHkI!#z(kSU}!oixY;iVaQc70CM5x zMs!dc{g1ni;V7j^3G>tsxx6*QC*7&j2BH?~UGVPjkae?w- z;&&O4%2ge3xp3H^iVTm^9Eud{KT*k{c*t3pMzsb>t~s`qwjCgZ>t4 zANMDM0ZAOMIT<;CC&TD-8pVN5YO5pGE_O3*A~TS;IU4?^7`q>(T((sXYyYxzk{-8f zb~W-<7#QTTsxQLvi4)pV%J4r$UqTfQ@l_UZ95si|7qUpG!-G=s+l;G_xQQ-So_0x` zfzCgOt|Z|6G7Ar4UeEWVQcRC(-iPfpZ5}`KRwq(sSppzoI40H?w+E;!2Gv*D8?&my zT4`FNIn$W2by@G6e#=s2<|9;c(pV4~o+xaUP=mTEMtwx%zbbRrhCY9AYE+C!7E;Lm z*!)Wh{y1^DqD&zV?RN?3JVvKNaN}ciOludM?qb-@LgUAUBGkxn*R>zC;)rU=E6MVL zM*bW93zjDAK1Lb|x&M;FT?@6q*nPmm{Sqwmx_Sc81#yEo#v&^22L`_;8->;fTA;aa&EKh z6I3gx^eH;3{dbl=(m&8jAe0ixEm8Pb@B|PtsN@SS>7XOuumw_WWUAU>Dhg~3Nl|F_ z5tdBKFKe**8x})sd+D_|mTGMK$q(-S?RzMc+Rf#r z>PTHFZZ{FZ?(~WvbnJe}R^c)n-q#uC)EpeOh{LEU4&vYVQT70rCxxl=q`mlfP5heqyQZWyJL=dp#?S^G!mJ zw1!HJ2<6-t)uHD!ph2Y6pRJQ1F?5Vn+Hk^M0Y7bRkSRJiU_Fc8+qiF^s>}DkDF|+| z9$@)!_HZBs+Zl>7-Ey`$ymH&koDJiH&LY`N&&TEb3kO1YZ!xW_dI}U-hRF_|jz&|X zQO`e8qkyuLYP?&i%P;1wSpSl4tQ8JUFB}Ymx-$%W1JNJoPr(6871WopQ`|`|(*ksT z+dEXoW}l&BJ&NxYws&Ix6iafz@M$$oN3}0RV9L=PGg6In>3O4k-W?!*j3b4^6>}KM z3O8qAEGx~)tj-%l1BVFLA$I>V1;HQcqA^a4kkKnSV3T7SMNV3yA=HF>?zh-Irj+B3=BB^(On*xvAnfmYige0x(eyCHXN1CMa}a9IvyvWeE&8ZZ5kF_dn1 zk6xJW>z)Ib{mGV>$np|NrBrNIwdkCSR`&1&rZqPLxf?XFlVnpF9#%?COO`{-vybKC zWr%3}r&nK%Lv5fqu47T_1n}LQ9?np*G?{qf&aCF1b$TZCW6MNS`T^8(!9_{8(IY%m z6=KwJ9~4({$vzPh6Ez5X$|OEQzV}I|Gs1oWNSQ|yhOa|`98@(rwpQwPoQvAHHu7p6 z>JW@-F{qImUZc0PRXy29t6J}VrK>;;-{4T=aEz41NrDE)7LxYKwQU}B)*HC_ z6AO--p|z5GzsqMwv7zGQw1eIbW?&z2o|1qT z3C2(yj;CzFG2Tl^;qwRmoypt0l`V@BHnR?tv*BjY1#L8)u6MrSxW@U_1v@Z_myA2> zf)K@!9L|Sc^A(;7F1&Jg4y*>IYdZ=YJ5SsXzSndEWld;kF~+tvnO9!0T-m_7n`WUMM=7%i126$$>w;KcReR}DMLCsxUY$+~WddiTv6<`oTi{`X?%6&*X*4W+kn9;Hh*k|C3z{faQR17>U?VgGye&-M!P@8lh zjC$iamt<-kEP=Xh6yvA0n+$@z?pJVr6DLV9t(&q14;cQAS3k41V@B7b*q~6aU?QWM zm8vkm53o=?*Y>~Sq(ftRokrsg(~?oVHc=XsoGwRP=Nh!MX>YMF#ne}JtUO_*+_iCH>v)KzW z^lYFXyfPZ3WYPM%eZvu~{@c!Gv&+_QXM|Wu>W?rxB6ox)%TffL;qHA4jQ!T=5fg?| z<1^B-}I z2`?Mh9d>C)g1LymkyRx>QR|@HmWd%tP70snwv5m%%AflT<3VY^C79BR_iRc?IdKxc zhiWoA@Xs*S?;XGLhw5S^gHNoKB0e=>y8{%;_XJ`5JbcaxQMg@5gOdHN6O&miD-7A2 zX;ZOLHfPj``Onr#9L~n%oGTxGvDq7YtSqBm@+Ea}A?a1xf(+V8T0|7B%wFIGq(ZQ` zdlIm_^I%?>1vs9=$H+PHbXTV1GDmK9-Cr(daQm5Cefo07rW#A(DT6x|9mH-*U+V2Q zX(4Y8E-rGDZhW*MSSOsBCT89=IS?cA6iBW=Ym z4`Xs|D`0SR-~OH41n?zyp)iuNoj782nmM^%a*+_ZYvTuaB>+fo{p3xzie7_WOs>VE z9kPz1hOaqVhSGcfOHr41kI^$ff!H{hyABRK&wLemgWuIEFTd=2;|0kDy99d^Nfu+DcQTK(zZ>~OW?$&z@=Q>Aq` z?B%rocu2HvZW=nE%J~}_xBm&dalz` zTp@9)A_+;O$Z8j2#3~>pta}RoUnZwVQn6P+OAA8s1FYP$?m5o95u50*hI-TXpA(4I z&WfVIrF7F%%`TiP2aqt){~WHF+KQJB&9D6wqO-0*TJ5jO^>7YwGdH%1-3;2H|02et z-=S&kB75L!LkM%><2IG%sKqgW=(pa4$Gfu~ddheR&5>s&_wnVc_c`5Gp#uwzVf^#G z5tzK1g1hYlZ!dU11`g=fdm!0~$SgbR+t+uy=KLZ091%vgw0_5?=2oQLzW z`@{^2to4eB_V(QBGG%kNn(yAtOOUif>6j}FCLOmn=6T)FRqWdyR`0;Mo4?Ys;3m;d zQXUQha2H0}9yAEsM9K!2atbUJ+FD-L9B5Rp~o>jYXd8qh2$50ZyRsHuPfMEJ_Jr^-uaTQt+yoc#?lJDTLNP~9o|Ad(+!yyl z_Y~XUxUPQQ#xY-g@eRcI$zB4~ibN!GSO6Zm#3X-L)=7Z!fUtv;=Gx7K( zKEdC%&CZ;wmZhx*Qi1f%(aYCH<7ak(8kI0q&A9-r_X30{&SMe~0t3_D=s2Cz=d1?_jG?12DLrXRR^P* z7zOa?OyxS}2C+CAb?mB>T-=9Gp!ZeZtM2|ioK@6dZ;G%8=+|2Vuuu`^Z2K;bMh9YAY?Ru0FUc$bF3>wna_lV=Op=2V+1q!jbWC z6^xJBJoTX%XARvl0d22Cp+^uh=$z4)9J3=j2IqLlKCRO~P__P(?XtWSw|r9*$)1Kr zz{(7P-il>#%3w^>OK~lEy`r1W_Y?SpXNFnX!N%^02!-XaOu%uq%@Dx7W|ac|6};E( zDfcmnVn|cnW1@rzgUS&;gW}+lxg?kcF*ALXM!>-S51_n(QlECij?0a7bu*ujS@+CF z?yiHh-o{`T?FLDaTrvUttes-F3k09rt0;75m;d&sUsa2gU-JV#y&w}7RVkT(c89Pu zWLhiO*h5Qy*dMmA6CpU1fJmIcbr291!*=Va zCmHjB=}qC-i$U>BA*%0O5LUwwao~oPZSc>OdlK7~Wc^=jjb{i49jm}KLMV*j(0yhQ zm$~;LN5*U>hYcRNij@Ei0+)zeu9Ys*CC@^NrPZ+XbAYD0SxH$r>-mb zg7fbVLx#Ag4a4_HDtS9jkjZiO8YM`0Aktv=w1;T^Wt4ffBjaBwlG<*&UUijcVxBcN zLy-3LV%Ejcq^T}gzeWdJiTBCjr?O3l^eh~uH!}6O5!A!=sx0DdG~Imf;oCg)+a|+E zIrviilX_}0fDcV<*vDbwD2D0qwY<%vWaa8o1{%J&Y~Ys8cNw+>i~-0L-k;5Ev#L)}b zTK)$@qd26g8b>o_JAGRe?fghlC<`Zae7^5P zQg-Od`+EdPRSz87wPbvEbfTQv`mwmFzh7RDDsC=C@KkT)PhDR>AP`BPg#n(>stG@a ze+WhZ@Aui!#ew|4l$4q8&;4o%kBt1F9Ph6!FoM>P-HjPGb2zbf|Ixznfy4N>^p8EO zTazRWS9z&TYpJ1%`k8CLmPSrIhca7bvD@J`?W})Kesa?U>5T>?K>oMHer=pM zUG>+_PzRu8m4)c!VbpxH^C0A*7ySsD?%ukjKh*UK;S&p}0s|}=u+ldm*@r43yP;-*!BQ8RAi=j~w&S*&%;Y#>qdM@l1+qq9-PLK{z(<>)R zH8F@aeSMMo@F~?|i|iHO?|gtS8sShKOat0UA@N7*Z?ZG)zL-^x9-k)* zuh+MW8t;d*oE|?(pVx_)9Z!E>;Di;RhSXfG^Ur^5IojQC z9~at1<;ql*3TqLpclj2n*gh2(HiW#(I+}>BpKsgVNgCe=d^$cm)U1s<(8lhwmSv5E zZDYWBfd@0`!emlPKB0sz>N!iD-AV!q%^&bm&DTrDSSp&jYIInStH$yXytO&X9J?V7 z1jTRjc_FL|b*6sbm5si9nHp+~CX0c%5$LNk<}kMdZ9#3kK9QkP|HrsHm5hW=Lzl0D zwin?9efVuLZ$B`wENIW<)$VI=wZEJfr}YZxzodH3racxfjcB;ktj*YQ9uF7h)PlfB#I!}L=Zsf6P4sUNV|LXx&&$noQqebWR zuLRezcjqz*FS69%Vg|Q^tB%kUB6Uf+K#Oox8Iwm%1>+d)w(#Q z)%i}h!!_DJn7h`K=T~nHRk(lYoQ&5?e7`MwuVNL}Oj*z&yYI|~Im_zJnx>r?P-n+W zdzK9RC2>aj6?>0tnbsv`Xr1SKE*kky=JJ&b@5^@KuOh_E%^($9=v0on zAANss9$xxnhvl_CZuMl2)d}ZwKbpMgcF)W|HE&TN%eszjN_TnlqlF#YHGTi79S?T= z=lYCOb4P@ltm^RTg|C|Kn0@xzl534Ru6}&$m;YofxVrz!VLzpNJoDFO_Uw9SaHjna z51EzjOYO!(?J`by_NQxi>J7Uu_s;v?x#xijk1alTZ@og7Ca1i$Yj&IaE;KIP>fwYN zGe%w;8eZKdUDBH1$YNJ_YX!27u9g1n30hj4w16%*zwrax4K2_Q#J-n`9 zhfvwF7pwH1ROi8^p2NF#KG}J-cCksuqWNBauG{cBV_!Phx?q-k1)F*nq`&8vHn~Q8 z(RSOOWp~_TU-9~SzgTBUW7IrH|zd9qaLkgmqO#{J&t z^4&9MLm%I_)bsQMb<=x`pIh;KqXz~|d~DPC?du*`+W1)KW!=&}uyt?Gf?rM^x+A#j zlf>agW@paOd;F1X=PRY#yrp}dE;VKa{%E%RO3R9Sn^dS+`n%!olAF$NE?2E&@ZC92 z995{GJX0~yYT6(!u9v=9o1rB)ve(}BV83cl?uI5rFO+51-jLG?BzivDkf|n zKJUTtPoyvRagk)`<=OdC-|ZQmE!m<-;+Y;z6VEJ|yK{N<+HcgDTlw&J#nM$-bUnvQ zZwx#>eN>^wZx>JT9xd7UK>7XmR`0v+hk-NCt{DEo?OqAf3+*3!F2mTBBiG!{@=K=N zi^o5nF3X~%qBoySf2;o3DYsvnbgOoT{h52!`R&a6Z{19HJV&kB*)L2!pJB^eH?Kb0 zsZzSyCri%BaKTrt#Lu7aDjBNKrF@gbkxxI;dQ6Gjt)6>*dFMjCi>)1A$(!^^>wy~+ z&UIM2Am{#-e|g8g+w{$cHswuNIQQK^xXh(x)xZl1o(C_;u<6jCuWKewJMVcl-Kq-n z>&)+U?&iuRLm!#f=&O5Nw+}wId0y%Ind(h1)VEuP3lF`!Y-Zz=julUbW{ z?pi$Sg`!WrKWJ#p>8HlJJN~jNVS1wu?aF@g=g{|Wf7jyEYmL52n11TZ&oaIEMKJ%4 zlTUX2Fi`JE|F@65xxZ+mwm0i`J2dFmDPivmg)bG}-#4+TJCG-To*B7*82fnLVngPY z$@I>jGwwgRwD83#?Kd}B(6Zg6p|>~dy(KUA$v3mp zk*ynh7noUc!COTRRL|K;J3OM#=cSr2Pfk~F{q$p*E-kD1*w_pEs(GHgc4*Q5&#L9j z*RNCgy@TH0P__SsQaO{}uJKpG+1d4Ko!nY=T+79+dOrL8)~X+`KlbaT>1~T_ZZWCB zeP4aoHCO)!v#tAc%`-VJ70>qjkqnbYjxE~Yr5$ye-Wfi!^oIRa8!ZH&B~+qRv56hr ze@yw{(51C=8*Cq*x#Xm!ttY+rZNI0tyj|v_;qCI@YBJ=LLb-0{xp@7Ffe+2OydvrQ zirY^F=P!BlV9if&u59^or79f{bbKS@j~TjeyIH?w_e$wX9LRih@^7;~JUuAgfjzaV z_rC7=F~gv3H@m-3Alr#_ZO)9jx9`yBJtK;44b)y%;J#{O_HFJnZDH}tP4jkm_Q!Ba z;g6m?HSy1erF(B_xFp}xd!BlD`SBeSexB>~`HGCazfAuZbB&nv`n0UGZ@P~!3$IyQ zdQD2t%w@YS{dm)s`_Hv|XV9hzO-dEYQ_{D0_oBYF-WjxV{?JGE?p}LOr!#}fJ`1Z)#O%~tSH+ATeg*S4&A6$@>kmF$Y0SgAFo3M8E!%3HqhTE=v zKOcks+HmjK48=W80mpOHF=Y-{PK?Mtw2%hA;d<|HpIv@J*{Tp`GQs=BPX; zIalRLf4{b<{(`a17F2H5p-a1_r|Qlc(aSH-|Fn1RG36KTy7#r)pEfyu z&#$X;d|2aJd#CU-n^>2%P!p({G2IP8V@b{VLjc8PM@jYWc*xaYe!Rq%gaHkh+i6 zS(`HVUUn zn7Q|iZ)UvRs?(q`>vOg{Q?JQeIi7l9!I9Bl-pF;S#9PzK=X@vK(Tlm7y0#QJSjxS) zYn6JhkDrz4)Pxn2b0&?tcT=vsFQruX{P^~eoL^O+v0(Ov#PW6LUhO*aNU_4X7uMUH zdHfT!(qN-&tJCUv|#kV>vFLZ@X~wtjP_sy?W@K^LZP+UGJ}>Z`E`CQEp?= zXYdwr+RgR)yw8SKsRY?6Nbr zjvZ|MaHXy1H>??T?z-gSPN~_wFrgE_(0znngcp zUNhZ?@V||%YNp%Lyk?u?6LW5xdTg0*#1r>ipZ)lvY5sNXzJBqKixpQCJTzp;($5mF zz58|2i$8yOc4*;j$(N>XDl>Gh)^X(2wPi+}@)R7icSpfFk4_nQ{)1(C4}10>YcQ<) zficBjs`PESs`Ur`y{4S2>sv#v)gAgl57)YT^8K{;)z>B--nf6tXW6>1JW-*}H}00} z`_CKjS(~T!*XWh0-||+oF9a5j?E74o0?QUmcqjLXq)puiwEJOLyAwMfe(2W&ZO=`7 zd`pkuxLp4fSv7H5hACrK7O0*5v%RlgpT4rd(&W$fe*a~WyknN^-SgI}^Ld*+xTMs< zF{iyx&Utd)njQ&#R~L9@?VK{1wWmvMX`5%vx_$@hwMwi#;i+Xihy3+i!~J7N?<)%5 zzBX=I-_~=Fp8V>*tJ%LedtbuC#im_;{k=a6Et=Hl=;jP%9$K^5y>N1~E|piWTGHst zRsBA!Rlmro=HG0YFekKk|M()`)-U+vfp5z$Z2x+mtqJG)d4ex{s@&PR-yQ6}W_-C1 z^PW!r;l;dfe%PXBo^Q*Z$sMS6eS5W4eX5NORI9KnJa*DP*D}D@J}TSs>q&Koyjb#J z!+FQ*FU~RfuV3~SsdJ?9=iY@a%OxH-Ipy}xoh!{=QL)_I#v7MB^<{x87oVuGd(PD! zuF>n-4yrhDN6~wF9k_Z=fzplJ7tFXe!MFV3bom>%&$qK;miDg)7B+_ejVqAy>5>8| zPmeB8erV@*FBNZ4e^s7$zU#NX>a2W|#%Sxl9sd2aewVsEI;-W^6K2h9`E~nzGg~(6 zpKnxmeFuXCFRR{aS&==L0kI_4?zH#<}Z!dT{)*F--^O41M?B!37&HZK?f8 zu`Sx)_cY#=y+eyX8^3Vm`OO`-EPmy?&G%&grS#DQWyYpt{v)Mjzm}Ju>soc+GkZ&a z>tFfi6OZg(@#UzJmp$u8{Zza2dp~-Qmh1dp_;8yI3$`WK89sM@!^IuDKRIjO;bJ-a zBp)v@d)vh-&(zE_rU3 ziy7ZOlkb}+J5RipxBJAWixi*K^1S_;~i34&83lojl&QQmBoe&61_d*j0Sr#Cp&_1?ZG-rIILPuUOizPZ21!M58v56^h(MA_!;`rInp z{M&i1T+hx*NuJ+$@`fs}&1tkN^NBnC8ddG~`rxW3Po5rE;oidY#vVJrwD6xff6boQ z?AqoR4*XsFucN0{zyHa7H(wpzxNx@b8kI>&$#}HHf)mHC4*q;>pUEq7Wv|`sjR)H9 zKC)x?iSMd!ov`5E3N31GZQnd+_bMIldF;-xp&34OojzPHOK@nmdmg+nd1$SVKdYYM zL-^muqNj(J&l0TE{-M(6KV4X^`ijD<^X}=tr&*Sw`;XOY<{LWe^aDMHw!D_VYjN+; zn@NF7&tDIn$d{?*gpI^_^=D-h$4-`4tKRJ+T!DnMKtP5vqyu9VoN1ADgfvpQB zZQS#7wldSZ7CX82)w894eD?$Idp(j%_qjH$#}^M4e_=zO#z{p_!T)c5=NZqzCOgti z-|1ObGi$}&^~%kt+8|5g-xfbp($jm`LnS_#`$P5h;X3F0ZGNEU`Y~0;C-=RW_vGb* zNxg1;nRVfb2E)7N@V8!b_4xknqx!6I&CM`-*|C*ZAKKXMdM02o`V3D_S<<)ATPG6z zEgLo-cecg8a^pTuxAW5tt25^4dG>=3e>l+jl;~cRhVzLAqhVg75WvyIZC8lk+ui zpKW{aV82|WatzOVvD4e7c9-eac;1##kB&>&*L(RL|L&(Ry{3? z_6PPHd!*qDo?)Ku6Xxa_{^N+YvtN8a|I;(y8}Q|-s*kSt?fSvy>4&u+TBB>uHWPe3 zht|kZWZJ^zHF6A}-M(3shtAAjnCWxZ?fbr5`)SL^+LY;@sd=-N`!}w9)nC!m;;;G# zb|z1$^mChR+3V-+ShDSaE-#Pn{Nc!wFHZ2x(>`B!diTEYj-ow>6=*YS;n^E|TP>U3 zzS1}O+Wg%=>yAMm-FM*4Exji_FtKsLt_i-c-f#QO)O|HOZOEK|-~L`*j|PflU$d*{ zu%Gvz==RLE(~rG6`kPN~&FuGD-^ybroI0Jo^2BF0UP+u?Vcti1=gohhf4EJTTN%bz z?$>6;*1Sg>zO`@Q-!rS_8#ZhFwLM=J>fg1$|H@y3Qr_*-X4c!AOLy%zbN}YqRr9qA zK2Y?L$2UDc(mP_w#1{vBK~#QgI6d#@ku4Zr(N;m7w+53d+dd(F8Q%RF|Z>qqx? zxxaI>6`@7PdOVdkTW9~N?MV;rn%3sGX{}G^Z_+kP!!9*f{N8SVr`{hW6-gX^tjFd@ zvv+Qm|FI*byN~jMsrrDa%DY?q_0Zm($!p5}+-A;d3^=p{$asT$2m-}C@w`=~7rGL!4eb3+-?a#j7 zt7GtH;SKjxzEW}b-+7+enZ3|2SB@TSm}gx79$L9U)rO~xyLmP_>$H^B6@J^*f6e)+ zhw$4&d7=axsegtCKsxBtKWA`TK=xJK3#Wh zt#_+be7M1tdc|tKJ!8eZOaNodTYuosb@Lv4wtV-B1xLMbdiK?e_dGYU^{gkl@4qnU z)iOi!_u8`6xA08Hck{Mtbvo;Z^WpcWd%fDFW}f-EKI^yVvU^~c%B{c8+UC)opJjO< zboTkFq4p^w&re)d-#dEHA4AViJb2(pfgaE9Uz@aW>B~nyc-C8~fcDg?9is-WDLOaL z?ES~;Uwi1qHdj7*^PU=ALLIK|XmjG5+n@JcH?~aUm&=t|Tzvk_W7D%7xRt!MUxm^w zb|tPX`b5*y}eN0`5T;mbB$~N@7MEAd2!@lXX|=u7j+-*+IY^|&MlWW zy5b#KqiXsFeSiP(>EGHt+Pc&El{<^}{BX-dr5?X;()u<}?<}xo^-BYGWm*4lj-1;I zyuEt*#;sX?=yq2wbnPy5zGUcj!gI^d%{;g+)67@qZBKY1d6;KOO6v|8&fZ_4 zYr?v%J4Ut6R-x;NJ_Fy|_HF&$qXv7fC4?)K_~Y9_uheP0vg7qhjefiQLa(9?!Lnr+ zS5DcLtAC4^_784x;P$j(+C!i025Rq-D|bF#Ir7~1f47*?_vlxDZ2fM@{Oez*yu9u9 z&LRbF^wkPa$D1jKn)Dm|S+7m`wq5P#Yd5aU?)2aMwk+4ZdFo`X^4y%`IbJAQ zs(bIxrqA-1|8aA%anH_4ne@jW6}rtC*T3&$dnQXl>Kqwk5$ zQ@)%3`O6D(ywGPz##&Q<{QQykOAq+Uz2MSU>E6$>{gSWhhUYVde@W@ntWsh}SW=$+ z9F~;xy(+eBkiYxlc`Fxh4}S6P*0#f*3TJP&=7}f62d6wUIC$cV-1YnR8&YER(OL7- zms>IL#fK|wZrn5dzEKCh+Lzw5u4l15TU%|vS*r5)x2MkURAW}5KbkckGVHUR*K%*p zT(;{{>M|rukPRT+jm9BEXiNJ zQqdvX5(i!RebcydDRYkw9#(V6k-&%(rxwmwedE}W{2N{=@zaEFdZnEC=+$fAE`9Xi z1ATV&Oh31OazeIw*-rn^t<|Ayv$LJ9-ZOo8%eZVWU47!gtr_=c>{X{{`WFs;d;5V- zdz*r-6x}>Zi)j`8wT8Ct7Umv*v2Ph5JU8y#C1PJ|8T|UvBt>CH~)*SDi6Cdz)u#4LU~H9Ix7NS@!CI!^bZaZ+W7w`;(u$CA6$}Z@abY>mBUW z?Mlgo>y|WobXB)}9g4hnarOgWCqLqUcTUEO_a3UhfARPq4;}yT=`P!5Zs>IBk35^^ z_Z$7gz+ZRXsrF6bQ-e=?*WYOR_NBGgW^C*GMWs`hD&45^WXdc5OrE%Y;2YUi{MqQh z$Dnb$ng@FFx2=*gNvXs#;Sv zpFB{k*tc`vKKI(kYkn=DZEyT~^D;gdxYgO$)*TsFKwHrG^+&fgeZBdaM<$f2HNMkF z8z;BOxS`XRDV5#%mk-+5^|PE^lKKyM^wn2u7xCt}*lPUE7go=m+^KZ7VuzQUomzeV z=0!zkUl=j@!n>9Ix#lcCw)E1AZ8L0YG4a5?`@igZxnI^XeSR8}>wyI)iypp}=T?QQ zJL(pmle_ZDwfk?LyS?V3J>lKFqVM%7^?s-|d*+#~JI-Y-_}YygzdZZqsx1>2m)-p4`mLX4+>-Rd#o@jN zB}#Re9mrNPeV$M1|30Ey@W7#B)6dl_yQWpUyq-_y9jbY7b%`9U%Dunur7=m5)GNDi z`jrxEL+Ag@o#lz?&CfTV_i)ug@9%V<$@Tf!VvlUz_t@Ltm&yFmqnq>pvvTftiw<^p ze8YrXd-m*Kw0X+eO0O)>G2rGajUT&Hzsfi6TZ^k`du}{_;)_AQw9k0*$hkS0P8K{~ z>%om5-(M(n=-m0&zAut_V=K2d=xmi4`Aa>qqt=7Hwrp;9V`8_OCvQy3Ft_|J=+ymI zxA3b8NoSJsf1&?%X8XTCd-cGEe&h9jzx|DDe`b4X^}1g+ef?97WuAGf4*fp;;jhEz zHcotb^R$8aN1tofZ2$EM!xwz|{oESg1oLl$lgjttq_Ty6Qd#6+i{z7=at<%M;g?J2 zrdR*^+_|s+zBS^~bGfhmaBCZ=XI7)z zvwx}d&9~pJy0)|1=603GzuP2J;MlV2k4@d>tN-NlPpx=7$A%IcuP3xBQoY^nx^2t< z@J{B%m41C|-kD$fzV>^Aa&HeUmZ|Fav!8A_(eH;o|770sf$QdlMjJmk{@ta2wk{of zz2W&nGbet!zt8!XdX0I$SJl0nimxA2`_@l4PJeg$uMyW@S^4_CJCA4DnD4#q8A?=o zEwSm5;mNbRr(2O_$-qAwyS^BHzV@CBpNAHgZ-07{Z(x-YS1!EOd|J`ubsubQ+2-Yb zQ-A4Gd03Na(;r)UGIRD$&;9Zi9IrS1^UBq2qZ=jWPaJb+NbvCa$>T2Pulrc0TX$|W zEctl7-%q|fZg0~%8z)zMKSyX}8DAUk)BV~!SLf?zpI=Zm!<57A{;t)3`1-yVS{KNi zc;B<*?lifzD0iI}g%<4@aea8-XCCYF^o5UB<~owS`G)Tf_xxyiU_b`n#tS8~&wQr9 z$i6pjZ65GX$zHAhDD-TL$@g8!KX2^_&*TpmJbig=;>+8HU;cANw^eJ_&z<|h`fTTh zRLiuaUdqKAt3I4N@UbG__v~HpzE(eP__ffrRsUq(>Aw0#>`i8O^d57Q{@s&Y<)3NW zF)3^L#H5}ny?eAz>glRbq5LyFQrb68>g5WTf2Mj(SNSGM{d&2|*XafqR^?x-@vn7S zXDwf&U$0t?d$sMAr2o@e9+w9`A+b`WtmSK_B=^#PSJUhA>c4~E_*_2zo!_Oua|N!` zuWXRip>x}+Dg9hw{T8?{GJSDs(Hvtb4{+fM!J7x_cbxu7{oO`VfTwtMktDg*fkC2fCA2I{kmp9g?3GaKV57 zUDDI^>;)NAw1dxq9rUE}zwHBVJ$=RK?w9NC)|1BnxbAxTiqSpbKzBW9{EzF-s|L~M zgBH3oBS9g-S9-UeH2%kRXVsB8-a`&_*E7ujxbBv@PO~cU%oG2=pX?X}8WZrERh4H_ zp4GcCGv8CMoO?q#3~^JhbBCU;F#BgNW@8tt3=>@%{!U{7=hB$(xinU8x>yoTgaX_s ztBv}e2b)L#w|DcW;~Q0@1}kR7>e<{DI7w zH>PYgNhBJH`4xyr=gduv6yrjs(PH%D%g%qMpC=|unI(ew2QT7ju%0W7v*+?MRjH-) zON7`njU-x%#hl4f9%3n3tia%gJMlmPZ(vfAL1ZC<=JrNH#LK1n&&=(UIk;#f?&pF# zd5M0~$z$OX)sKBVOz3~6ANwdfCukDmPHgsEUZyH>C!bQ_`K$uZ7qt}oyPaH7ck)HD zEfaxcC-xV+LC~FiJX6+l8B+ac=Jv@PTyQ5J_jAFW{KQB~5$v;yVCYF|EHCWucGjwv z(g8B{GcGH!!mv5@v1q0)A#-=Rw(zWqA)jBiU2o6|8u!n5# z*x&7}Wh|doVufKZ%fz86HlVb8S`F(V3m*HsoqXom3_Itiwr9v*hO3Z+7jM*uAqJY*?mf43Vg8ce}REHDvBFtNYb4T9zm^0K9#%aH0n zGj~uA4?BrOBk_%`U?j5t3(E3WjD9>i|2zF;Yfp?j;q1YUW4$yX?!-3Jc9!CY7}3KU zY9+WW%{J|cF5K6-aKGWgW!Q!3(}fdHJ~XK38@mq`r-v5>^n*R501V19=QHfoAW|8y zPbcmhlEtPVO~|77_K<3a{oPKtCbe~Of)@2aSaUI1tTIvK_9;4)00%?8yCs{CiyWOJ zWi4N)x~pU|Y;+RXf4sp`(M2_+lvP4jS%nlc?C<~525uLVC5>zlA~s-CVkg2MFh&e38Q(--qA=O=T znCMENy?BJ_$R~*dDis7FJ_mxyNcp2BD8;mvU=h?_QUKuvc5`4 zykr%|3+zm2goveRVK~D_k!Xx)v4j>(DBx|@x2Y^g_L9XJFR&9bW}d@nc(@mc7I2|V zR_jybMo)ah51r0dXmk8=Uk90)7tjb~_cHAU6C==Itb_<8OTES}up5s=Al^=8HxKca zDv3b$H@k88%oxBMM6n@TT16nc|7$0r$#g8qh(|tNvaV~IEE!s;%%j?o%Bj!%8nd>Y z%DB-WHIZiAGiTb-U}hKDj)nJ2@3PgviWw+ctWm(XSuO@QU>j4x$CXY$G=$Gg6Gf{D z23pxkZkl+D+TKU22}TgujTcFkR-%RB{*;F77gahI>atChRwMi9(#kHd6VkM;3Tw#X z!G!QSg%c7a$ldys*^Ma}(!d3T+(So`)g{7cn%m-F(MMNAc7dIAwcT_lNyQ5LU`klA zB20;zA0qo9`e7LE+eIkV2G#UL-w_!Vpu?-dj!pv&gwK?f3Aq2%+!pmg*bl?8b>99n z!Iv$n&-iaq18%ZC(`XwwBv)-691$9`HNEzlX>jZ#SW{Lc*;x~?R-~3BpP5$H^a$2e z3PlY$BC|Dp63w7Kq}Gfju}m{)XU!m36EnVTJm}#NdyxAd_@cDkUL&}RC z9%vl(($G;syO?#1B|y7T#RTWE*e&^Jt;Q~}8;=(pp6E`=$iYqu4hUD6ZQUjQHR7a6 z&m&DL>)8&IBJ&O1vOZd4NjW!Co*I-Jl$OXCk+nw3CYj{2$gVzGQZQJ|ZYsp_3`~u# zIX(gqXzT*J@vQYkW{v2n2I6Uk$*5d@TI#S1?Bt4Zxv++CAWQo(nLVN?|;Ua|S<6VhpUa8&9G%RBADRm!`(TSz^ENnV;I~q6 zBJ`iJB10LSo;w7*sds<24A?5c&K-nB4c8!uU6uerc;+6o2$14$Vh|VzoRDE?CUr={ zX;BnTld^E+04E-cni?9XS@BbTn(U>35=r(54ze>Bq?Aaqmtt|Isj#Ro0yNo6IZ5vI z(WwY?WnCJwQ)!so8Kq_C-6rKN@=|~%cQuAjvx4{nG`Tyb_%wtQ#dRkP{D2n2@o8!x zpXJB_n%vb;KFx~d(^-r_kY)(SM4zR6VL&D{WcplzfH1D?yv@Ok(=e2RZQ^(a+(t85 zQ1BpGc@SCIEN2{UvujAbQKi|Xc5ZGJlf3Za1S5J4tVB3{@Rb!N@RcQbr!gCc70Dsu zD6B{va?~&pLZV@TOiiRl@@ZBmUyz<7Ib``XWE@#)mePE2UXi2_o#?s-NGG^1O;%E# zj;u&gs7^zwj;u&(sGw#HCCEkd6XU$>yx*j!Ma3PY_m8Bc*hmiGW18m{#JU@VvkL@-FQ5kMMDedeLOYNkO759 z&3X3X@EX;R)xj8$VOK`s*e zZbpIGMS*F&XzWMzq)RKK%k0J@OTHmoJr|0RNTQSd&2F3+7YXx80AJxzh@_j-jYaBD zdfkjAuoGG^rkmk~!o67C(W6Gd3+%>=F#?JJV>*hHI3yf7q#Jv>hxq|i#q7!LKoX8y z4e)alz%SyJZj$Tq0=XgGQMeC9aB9fZ-?DNuF3e6ulkY@tSw&SQ#{h0A=obw{w?X;o zfyhRqJ}6tvO>(h4ikSQ9Q=9l%c6y>ulc@-!F3{D2!G?~{uHz8UQgBIB9{YWmlqVZp zw-iK-QQmEkYH1YEXm{KBi3w;Pe=t96@}Z{*qQy}!!lM-1QEjO$&Y8FXS;D)@P*3n` z1@~z71OZF|WE=8*()O%8lA=jyV2yO1}?b?9Tc5cnslT%3z-K)IG6_{TIf9J+0AY~#d$D> z67;0WON~`>BkUw5S1(OEQb6l2da}@?dg^9OrJl4hVur9A&%)o3mV-&a6HhnCintNr z_iU=E|4AXJi2qrfC3$JGl`=WvJR3ZSFwZnEO7Hv9dEvr=|KY7)GB0ZEksCQN(O>9; z9BwIyW70DU&_v>lK7rtt0yL3D%1X2_m zLg{X|6q^zC#J*G}yU`$)vO*DOv=S{0zeJG)XH)}*td$lrgS2*u-KHP`0#3(f8l>b- zi57vMnNw0{ly;vooYCk%MJI{!&~E8%9@8YTl|`H+iWIx03=(lhLpa?TS^lBUC<|(n zTo&6DKi!T=Z`6z98T^Z2HyXrJMknHohL&`wFvNx%?~>7Jl~OCBkX9r6X=YHPSKLNV zDJm&No$&&@W#4*o&CRadQfkG4p0pfchOm>%Vg=yM!O&shEP&s;bmPp!?C@<08U=oi zJ-E`>2-{DEI3YcT;XHyx4{V9pSgVjgXb zj02B0x?}oxxz)fPH+I-E_cyz1bG;YEfM0BMzvs(?PaU)qE zsu-Xt(J@J5DOwoP7m6gTr)r(9EJvo)v0DwJaTAOtYDAh69b+_>qJ<%qp-7_A`e)f? z0x>!)XPR#N)G!)1>D?4nnns(nlTc)_vJx!}!Rn5|XxwTTjiosQG~(Dt+Zi$Do&slR zxTnL!@U+Sq8aHQXxP3qemS*XKD`f-3i8Igc!YymMZ1AROaewL*o&_RLox0Uf7q=Da5(YQ0R}B_^!JM*H*v_1~ zW8+$D|Cw+*JZ;QL`+vEm1dPc$dGL$g>6Vxi@`PYcSt_$LXAsPZdl-9j!YY&|=JX{H z@ARnk;PQ|jT#>9AhBeb(HOOehoH&SGQnNE>$b~W|Nq z6{b=MKjx~SCf;n}Ru?QN%a^8Uv)EYEClEYRzzRVWk3m+!yH*TH$N`9=FEAjzK41U( z8GesiXE6`yEEWlT`fvkYU^h|GZLo*IQ!sD3+AK9j&p15H)9uDFO@+nTOOR}X@w4p4 zixx&q)7X8iOL&v3r!zEQa*a5NQzP8dJGPV4i$!4(StY+4Hh+? z$8zKlp$9!`9lJaT%ZOXJ5ZS`v1$HxTuQU|IC=%Vxc%+S%Of$o(YLk%UeBL9)XiVer zprg|hB3n2QqdHQdv=@|Sp(xC>u7%y87O{gq38P^W=FqhzZNasoJ?Jwr9x0O%iFw4E#Q62-^sa zDUYx?Nra`>h)6tWfH2S-$sm$9q>Pl9&y1mH-hi%*bU?kzu@j8Dd2}+uTwRck zaSIL;M?5MdHJHnTG?;l>=t3+-*kZKz821Gn1$i7+Fll=%(~PqlC}y3>jSG(&0p_tH zz@R%bbs@bxv2!8n+gv=|x6Q@B8Up4qXfn~a>0&LVwM5fdu}sifm}n}6e5^G^&WDbp zc2HogDLKyeNZU-AG-XNN>?CyWAjQ+}qAA-OQ%%*DdP_}(*O;;^?3^toVj*AgwGLg` z<>B4RJp3l3hx1n+-rmW>J8n5!ZsJi8vAdjhN|~n5Vm|;)eW}@HAsMNNjCWYlD1tt* zunodnue2nRvV1YN_aMUN(2{W|iKI+8KBG%djCjQY35lN&;j#fgvs?v+VD3W=p$5-+ ztl&9ljZNlDO3!i28gJx;^oiu0Gt0)KBvJ$EJcx~%QjA8|At^~mQjF0KOxN3-V$|R{ zk1-T=cr8`GN-UBfHE=};QsnbUOi6hp(KU^sgdnAFtn^6H$C$|o zb9F&FmO>o5Vm#J&HKfpEycko|o))4~rZAF6NJ}$bHNazF`Xiqn1Pp2ZkTR4pHjRkt zXg3sx^<4_UTdeP#Xy%z86zA(aheTuEo(F`gAhU% z(pl<=$NH{DMtTStNpz+)D7(UL@gS)K(L#1qYDObHYG|a#7z%=i2uAa`lqrpw40yJT zt(7n~m6 zl{g@_88aJ^o-9b&O6uE@yz4=hj4X?4K%|E>g(I^|7X~#V(nE+yG9W!!kRp+H(UhGq zP)+r~vC9VH6j*CYPbkzdNDsjvqngq_CU}LNgm=-D?GCA?`h44s<3LmTu6Uevy8&Y& z7V;H4TyuHQmEkM0+kC>|XO_p{E3eWK3{1n4NR5^BAZ%$0NjJ^vQbIIR5)n8w>Iz}F zMdyjZAw5z~G{*K3Q5|K=IFv;4UZ$~kfjH977fV>yxEo;Dfm_7f4Q5!4ofC>)O;F9K zjcFqfkHbD?o+#VnFF_ZfY0#*)FM;uBbuNt-JCDbCB7P4sK6?WQ_%#SpuJ}oFmVl?x6 z)moH!jG@G7p^L8+ca5DEt}aN&GQPuUiNo20m*H%7RunRX*JuYOYEM>pFN5L~24qW` zX^Eg+UA$5-FFMZ=@$`9Sj!x%Uc8cdfQ`*S|Kg>>3t9eGm29<)hd*cm#r}Le9io?r- z$xdjK71)wuo*uG-d!60V_Os?4LJ^$Rc%F#UBP*u zKc3s6bism;`z^Qw+jWpb4X+wr=p}ez)W-Cs?s$c**o@=w8gwCqlF{BPjaG248eQlm zbRp51tl)Tsoz5hMAOy#j3ML0#D%6NVuQ8O6EInjLidWbPhHg$KBh1x>S-~4z4$qoW zPr7>5_(v}`tum($x`Imq$QbQW2B$%u`a=z`8j0v7BqDJ|QXJqFb~8>~(clLm1kEU- zR}Dq<8bgV$NY`zLETZ6woJB-o90Q_pSjD96&BRrVu!zxVp$(C|j$uSEff1u)g#k|R z#?Xj(t=(kDI=CUKlUy4I8WE?{R>YW9j4v{ffp{^4kq!pHBYJKkx{9gMh+aY?Mr}+R zMd1~;V&f_n1>n4COe1>LXhbie5sA*U(vo(lBdNnc2qATtX+*CYjp#Lo5>f|!Lp@%h zG#T(#dL&p;7^kTt9{W%=8qrH=L^3V3xNt}#dWkEhF^%X|qY=G?=OQ}Oy2T;SCFsn` z6=&5-9PZwF)wo12a*d{Hh4$XUE9|^Hve6;%Wz>FQ0FqEBVWY#YwHuW$5!8G5o-D1F zh<`z6@eB^hhc5}7&f=~GzmM7INL%5FOFGh-=J}!pjg%whmNfuUNR@~bI`h#u994SN z08lTIjwYRH-!#0!fj3c|`2ma*Z;D6$mEwq|d1l8rW}V4hdaty%pv63^KEwvoIt+((o)y z$})=D6Syy$)@cVjFT27{`^XYuaG-)E!yu3s5lmV-$fw54L>s{14H0ZIQ3Sw6I^5&&8dTyF;WPXTNde6b|z$SqfRUvk0nBiFPePR zGIh`c2x*tasE=AjyWW1#i!2uPQ8jGSi!`ixYUt`MMHofB33?cfP1?}UD@6|_dV|hh zBrmDnOcA??kMW?em$ygs^7e=*Sz2y^)UZx3VxgwVqD=|$3MDIek>+$(YQ^I|mm19J zB`_!PC%V!}VNS9H8#pH{!R7{$UWfRmm*gNrI43zM9$P6ju+nP@R?>csc!iz6L}JlE zE5&sZJkpD#C5=TnQh{ee#FB=njx3pa>H{ayPH~HMk|X&%XMzXu^%9*5er7438bS>U z^;$xqv|lD(VJkLT)}T1S&k+c97T@t$C)J2cuO)FwJ3HbPb~;CV6zNh^ehfp9dJ(}C zrbb^=?M4-sHOrytE9<>d&XzAg(W!xh2xLIKy!)iXNs7ZABq@Mt(%!0=p{*pnY9yu? zNlw#D(O!~xh28u_XWdFTy_qBmB^>fd(O8Q~;tU{{+3Bt*4x3fA&X-<%39Z?tbfuKi ztz@M%&{oJG2s@JUU)u6g^d4g;iFy$;H91a@9*|0b*vOh@(5phq)EmR1P{NufZ8;m` zj$to{Pr1xalV|GJG@sf#eZ7{9XOKK5g;&@m&lv4d2B+vs>K6`dUVJ zyg{;D;uUrS8h+#>uknqJrS}{~p{O6>wRWRgSdyI#It%f5EEv*<6fAaan9m__@DVgG z?{>^x3k<>Tf0G5nrv}dY7#6E9RP>2C+R+lPkXzOl?P!TIIP}ptEEqn5~$;u{s-3=|tx^oWA*_O)bTF zHrP{fo=IWgV^`Q2(L!gHtPzL&tM;y1pCv3xn{MJ2b~;D$uL0}|_6tL??u&VCtxpOV zTUb(|#EL`y#bC8lJU0LG^ay#Dr40DW!Uzn2+!3lREJRWo)#RgAxhO>HE}xVZ=9Wdw zSiigEGniQ?aT$;ND{YJ^>TF4o(nhX6DMcFH>-(^IDbpK4(&%2_r^ekzh7ue;L=GYF z3R@pyN0`3oWQ0+fL>CH^hBs(@(k_;!X^FOkF%o+{SBREwQd&6H6%EeSi7UoqiI7r8 zCY`Og5ZYeXCuM|*D;m@-gdl=e)D@MEY<d=T7+CL)Hw7HPJh(zadKB-l1UuP3+_fg1>30qd_C=lc~{CV8iO zXyb}Ys0ZmG$twqdjD=n;C@y~r7(j6j`|^>zyoDdXrwONNtTcno64HXaItR6x*Aw-8 zQrOnyj+U8`a0Wgp3{A2GlGJR$LY|Ri2{o+PXAC9yw$O0brv~l%ETLVYYb;)3=NpmG zvlK6^!KM|(5(+0N!fKimUWc1hr;D{3yX&)LcZF`JcuA^M_qu%8fs(qTlzVcdI$a#p zFj$`@2CF5|ge&D>rLzth7s*&bb$t_HXHiG0(@>OxoZ^W1-euDP2=u@tK`G^HWvW9t z<>P%t>9Bf2Os(p)^QTYBbDC7Qy1Ap#K8-#ph$&SaPU~WtiTcz?*1M!R+PBdsr5i=n z5fY7=b#kM`Cxu$2s{36imXPM8aHlA!WeSD%kHn7{h~nIjkPJ1ePP^gwq(rM!bvPqH zK8D7+l#_I#I_-|*lX7$7hz4~jt{JqGjE`MnXH1#uu;oOt#97x%8M|RcL9J(TI`Q z_Hf#?z$Zofq^iSehOi%1T@7r!o9g6YK)l4x!_6=M#0>}>GU0X%zVe+uJ|P7^^Q|A> zGx3TK)@B4zd{_p-&-|d1U znv}pJDafEA;hYH}Jd%Rc2u7bVl*wE)IZClJldhIkrI)<-%g2a8JNJ&np{00X4ZPWh z>%(y3+hAh1SFoEy*>_OT$+RtjSy&_J=;+h>@zUr^QsO zPNP}Me~GFaNR;R}^l4F_lxvWx4$+LD1C3@i^6f6s?4$d5mQ3u78MCS)I1RamuZp}y zqK{LxJm6vC_^OCO0YCFq5giA9=Bt}=GKoZ;psnuocCwkKg~T&I2&?C!DOSqRkvwAn zbg-NtUqT#EjZ5~o<=bf4x|YhY+?PLdJ*YApf%v?X9fX|fZ-3sRwU z5R_(7L&DB4?FwiLJ8~l+A|!o9kzYy<2?P3#cmImgNm#O0C{B8reNH#{>FlbG^uX)1y4R!frr`-hhnwV{Y{MrSOa} zJ=XJ0--_c`>t5$KNE~6l={X)=ks7@{pf`&qI^R-&#);k}9MLj%V#d@?*svLvS6&O@ zQVu_3EyPzjNKVWj;49Wpn35CWXZ&}5Y-R~R^MA+h0%M@Sb-aBTcQN=GYc+0qmmg^( z!8rOS+36w}$B#|(Ou347P{u3l28`lTF)NpEsw5z(8TMfw>qV>iPRy#X~r zp@h{)3bB~PWc-845j~_D_Ots2c4CSHA^>9^kc7Qo%I(PXhE*7EX3zkX(h{PWM#u<$ zP8*>5)vyUaVi#t;=_)J*L}YryDvU?5g5F988F%q>Asls&u$ymlR_4hJoDt7`{Tu

f2MW=`@^QP&Bt|*{4Tg3#u)#A=tZ@R8Zu?UmiR(L_kO$?MQ2zI|FG7Z zwnpI6gP-yZk?0JNTP%2mo$E+c2enZsq0E)uJTp0@)lmZNk>giGDExRU z&NT0|4+~zA8ol8p4RH!#z7+$}Qg6DYR>LX$c+1hOH(kga(-hXu7zUmFF))Q+4W_Uj znl|CUE9|BxCL41`$j=!e9{M0GJ_o`>0et^}w;#TX>2x zpw?j~fbAkot_{yU5}#B9CIWc(GiF4xWW7~bUpiO|beu-omErF&PDFza?e8A}bQV&F95k{R?mt8?JtJ6^} zfo2x9wkZL;$saRwG_^?44Y4qvWfRs%z zjmYXBvkTFuUjtGeBjQ4q;)OMcArwoa4<}(W3@t+)Z_|KM6<)1yOaQU5DsL^y$}tl**8*9&({r!mO*Y8Fx{gB6E0&T`0yR z4vcS@7`_&93LwDy!UT9{jQ}Eo(3{1QptsV!r@PEI zjYcVqVA7jyJWP5EDOt*2Nc4uaK7cnBsorW3hPB?5V#X`%!ZBv$;M`Y$KUW;U`|FU5 z_+AWC08AR&dB9h`!tm#c1N;tZfIn9p;CE01F(^ks4duWEz%(V~06d@uas==Wu4z2l zAp)SPEs>ngYsq#52;y6kfp;dL-HTnV6dpDKO0? zrPKpbuEf?9un-{_k~XIBQBz2XBJ6n=K*=qM5 zDAW?QB&}E+LoETM1Iz^m?CJtBP)k4!YOx-gJ{=KIgIWRk(L{x8Du}JUYO6D6j7J-;HApypj*m;pCrez4xM-qZ+eL{k?Pe@d6QnBC_b`r|; z4!Te%>gPd4`o&UjKRKfbsC+I1x|Rv6Y_6iS?Qr8U=jX!;i9pc+pTH2MV!#}4!r!+1q% z^bWXCC{b_OjkH+bG$#tJBdvzMQF z{BbBXrG&RdsmWPS?yWHWEE$kBJt(DTgtaY*B#Nm#r0-b9E9@*8y}=tay2aE3$ygGN z?#qH|pipEeA$;iLGC_t{*a>FRl=-$&%sB$Vmx1HIX8BkG7!2FEl#mU@#tPf(4%31Wi;vmt4b zCFPD}dP9*F(-S2q1#lebO`ik_s-ZVQWOqz@(~m2l!Ox}ijT60vaFkVT zn8JhPE*(#2kbUs<2}3#&#Ko;S4+i*|MFMLe)B#1B^VxUmsBP};}Ec93RpDL)l;a;rUE81`f+l;GrQ5S6vw^v#_?DNH2l zjVOjGxaq?~K`B2a(Hr)jD3qwTK5KSfB#LP{-}Escw2a+=JX;v=uF~C-Kgl2Dd`b}E zF%Xw;dpT6)aBGtK`w2lc#43oqjCt~CW_FBN1(CrqjTMHoKom-xJS7&zdT9D&Q&0`D z3L+O|l9j&s53jKEhKSSNMQ_;d#voRxh~20bKE|1*AZMDm>`qtvIIK}>s8kSHE3<8B zB9ww=F;)m->kEf*6o)m61-b1+#ja5tR^#3Z)6do_x<;`T&2CgNXCcF7vZV0DSWwDf znMSlkD(MqrK`8}8cF=}^u!BYrhU}o#UYZm%h7vZZ!W#jDYSdQHlG+j;5yMOD<|7j1 zmg2#~J02H`C1f`#0%e*MUVoTWr&(BfqfZ=>_ST6MH^P%pLC4K?tY-#P_k-#&`)GD| z(axfxpq6G8-Ux^vZ#N=O76wwOFUwdtf>Yw@bdWd3;VuDk^C}YU1V1w)IZdf?SfxsFOvE{0K0{y!R(H~jC8gJ5tRE59(RLyZ%ainVOQOpmB4SRe z^i7OGDY|B%G_U?0DIJIPN!sTv_BfUYGR!hRMnFr@*_M)FqA8KCi7_R4A|t3qg#{5S ziy4s~C`xg-h@)GI$DWo$v4os0g~J@FPII;t1ms?X{h!!vw;;lME^Y_-%BCs}6O**d zkI4*H8&!=y;un^;Oz39Nl>e?g%?}~rHqp}BDVW6yDELe zFDOOiq^d(sMovdiUDw4M~2Ap!Km1*$YDVphb*lIx&txe zARYr=$x|s3i6AdNy&S~$Q}8oBlNRIzo5O4qhfReV&la@g*)-bdA1|>pQ)E7o12V-0 zyg?CeGRF{YK{cW+XgRhGq~(w$))&^`HWi9R za}!={H*Ab`Bf>g5_DKCMA|&lBC1xU{xs=JJ2)7ZEvV0aw^HVcNN~eAof!=I8FEN>j z2NTRP7AL5tINN$W*o|s3rR4^izNRB2CDKeIvV0Na=;R0`B&G03CNkJS$VAwniew@+ z_%37&WpW#WS%lO&UWI7KtH_zFMxQ>xOYG(&8q`)(0YM#bp;*E+tMPYtQ=Kjk%sO_0 z@`y38Lp=%e)?qlIkc_d}6nw>l_z(y3(yUevso{AcOFU1bPto8dc4mppAL3jl#}8|8 zw;06|=TCPRyJ2Ij9TC=1eu_gN&9jLkrQ?v4nRnZY7@L$a zufQy`6aZgYNkYp*wKiiR1pi`8N!K?uR4-)kZ({26(WLB{)w3249Np^*VY47Xb(y1! ztH)hbr#V{6c=FJ}He~DoKE(MlZU>N)O;s9Jiwq*L^DC1Xtkwd}M>hyklp&IsEW6ym ze8IwkY=bagN(fKLa%{~<7ZxcCX*FMbr^UOKIb1;Eko45(zz_mr=18TFr{N`bGasXV z2-_h!R5}hxPYQR(o@etU03L*Q9l0f_C#eC4Axq#;qi+tvOB|RIaXmfqL)b~mp(#^; zSQnCVbz+=bLS`C$%rC?)u~Rw{=SU@*oH48c4S`|_1&A6^7_uB&qp#u#NxPSsRJYtG z(1+bZ(ii1PRfoemWC8`plr2d-BBO2uxFdISY%2$&GU=TzAaO`cQn*gEE;5QHU(o#I zhDJ!rR>qhiWH5kfRgJM3u=9P3#Kak0?y)XZle#_v=(eL`N3y%MVdI_8T<};ol2Xvd z0M{%27zps}{Ad13uOPwzaFc(&r^ZYSd%MvH_h&pBuzW?5uYeU0DTBbycg1taYUi z4u;gI$B;GkNMDJCm#FKCE$WD_YMA3)<~2Y!D{7cy$QpAD(9Mct%+XrBum%8ACaFx0!{3Nfy;0CqEHZm5Yd3D!= z$Ux9A69p1AR=a;e!NSPMv~_$)$`#i3fDc4^dO|M6CUzv|q)?eK3n7CoBaT(iMSBs4 zq&S^vKt`hoo(cofh?6peky^}BI5@|2p-{qHsBwgM(VHF)sCAbMA&6(zn{KnE0HI88 z*k#9bmkUYhIn(s8<9@T4bdxPbl44Q_2a-aZO$_lKYTP6sbj&H18c7$TBwZwMC`gA_ z*u^&X6b&KWW>OzI&4xHc7rVWSd#71%Ac6E04XI&oA&R|4O+jAhgID}(Q+U7>$n2+y zDKxDG?_oF=Hrk<_QBHQe)vl2-BH0 zrK^FI0*oYYOX0$Be+Y#V7A+|b=R|M16Ibih7DAHFtT$Z^qzIr)?;z;Swx-k(rI3>Y zy(w21Vn(-fM1BH+yK6kj=N+s<9M9uU0OBH^$BhF&vpj2&1T2~-=*b-vO;z)RkQ$~J zqL^M}NuV$zJP@d_`gZ0K?TtOUOm0CtBZs7b9tnIyJ}3iG5c2vZ6y8oUi-|*C5GICg zO`J}Qmg|7;PA{FaHm@Dkd!C4T8&uI2a|+f z4O@^b0KZaN@ZoxP=4Cb~$@}~gxjErNe!RuJk|ijI_Dp?%!-p#!0>Smnh-Ssf`ou4> zQ`|_@a4F9c!txo04LKK#E>Z9+rA_W#MyG5izr;>f40^aQGD-0GA?Nepn>3GmwO)Df zf=#PkmWONx`6X&LfPcjENg4${p8#7a8N@*AQ20l9G!5S{M+3Lw4fvuJAN)#o>%^2w zDXAA-P(Qe6+N#hawY8~xBK&xn_?c4b!c8W)1-(ar9 z*oWK1Fp7Db4!=^&QBxKpil&ihM znlI%bV{HJ94tP#+u@k%M!#~2}8NOj_s_s^pt!eD5A%~zkk5|EIDOt)d zu?qpiqy}iI$38-ZX}IpIL4_b7FHA(mg>|1@VyAdC_9<2vNugo59}OSGein)|wZ?xi zgjI3oC7V;YM6r~hz5gNtdxe}YMGK|s2X*yheN@VZnbs#u^=Y$rZXvs=iuF-Qedq(a zkVYkqW`W-z;+B>hASv2svI=d+7nwmy#ex!gO`~QN_(wb=q**d#X~R}Zi$VzVmOgbx zMTGVc;!Fy)nN4aHXB3VF>&R*=!_ka4GV00DxFP4rr12<()cWy(fL5Cz+OMBqVmC|C zY+y8L6H;p!hz1yi-TD+KNq1hmfh{e{1$Jc7c$6w?$RQ|dRjN>wmtUf)xB_(;kMjwT zQd;?2L?@EF`h2s@q<<5;45*=p&^*ejRPhNbHoL@$Nu$&ljLUbzj(jN|(J6%mO=*c@ zebG!WEdT5hWyMv_X5tb=dequUX;z$TD`K4FuY1-vaK>Eg|xvC`XzQl z8cPL&pX^?Qp|UO`OCU~bx_Cso8W#u>@>C=^Jf*AoC2BT+f5ZzLM=35Ik*)>_f`C?$ zPT%*!FR@cRdS3)C=BbUjCX05#H5JcZjM2nt5zZZ?oTasEGPQNr#Jb4gemO2FNoE79 zBM6LmU0&lX0!>3w66P?wdE&1Uj5YJJh$oYh_oMdM=2+1S{5m08p+{)!hyku$hIk_ zA(65)ovcw19fp(@g3%3trGR0;2)SV5T@W?65q!^bp%Cr>r~!^3l~wwoj55E(ZoZ}J zhjjH>E+XLqzmf%_X{s#Mr_?gHke#e%&J3hr9jLiml5tzw!NLVHvF z-`jnpNelXh;D`@XQW`!^w%VJCO)dqw2M)hc3@oF*bXv;kM9S*{ZUj?^xoO*h(Y|Spmmw@YGDok^fFr9`u(;yf*-RTRO&jidq-6^9caxL)_K=tG(Mdrrs_kC)i`CyydB z<0uD=>qzl05M~$dGWS7o~%9IiEPT!_)@{d^j?MDV*rx_l_nl4q*ywvZ7^q9uX|7(drSh zq-029RFdt8QDN_jf(fT*a7-c@n8&|pQI*6OhgB3Lmq=-jf3CP_QCf>aY)FQ*Qrw`2 z9l25*;vcPUo24vPQ65+Ngfm~zzhMRuVo4G6)hOm0^(#0?cYDNfWic9cRRbgyrYQ_K zrKTbL>vFrrv86k4Oxp18VRpeZdi)!LJDRk3#J?g(tiL5AvRXwfOFP|z4ze&MM&bbaa2}HQD}--u4b$zg1~Me{YkN0srq{QLrzyvUkZQ4=497o`{&HN4kEpCf&;n0a-vnJ=f|)?a^tgZ+V*$tsirjyMH<3J{d|H<7DA z0sGwXNVn3bNvz5(P|lb#7JB-WvEPWECW~ORO|8OMcy^H7G4dZ#}e+`BI<_$|MP0%OgZ0W zSV|cNloV`$0qac=$5sthtNLAdwnkGVYT=CwR%QT_%PVfSq%B8ft^o8Rm;u)uuejM_ zcC(AJ*z^JmnSsD-h`{Tkv-L~=hHdxsZ`dU3->}L@{{|})hiNGuTM9)Y7hbbqF(bl5 z6nKf6!Jy9NM-`5$(|D|LY%#Ev(rQa#JnO(yo<3!<=~EHO)hLo133l399n2$3pN10> zKvPpda^rG0OOs-xro@SzCQVsRcqB!WQohm1rhsq6jA4MSz%vf zN#Dk8@-&KxM#9)9R8vw+G@29)W>?r%he0MVa%@si1a9>{@Udl@fY#$BPUhdBmi5zQ z4UM1+sZc0{Z0yUZ;)b#HX6gWGHfM8G$^Ef5@LV%cs_DZz3A!r_eo_y$h|;Tz+LKmAQg zc+!H#rwTwza`>B_0w!Oe#BU^ag{Kdo;kV+DJQWH7EHLewl>CjR14{wJpeCF=v9erL zUk~q8t1m3*jQ&&^((3#}pp-Q!`72dlKNLkQRa9TkJu0%2+l|rL7Y;?GG^*L5tda|D z@eG3Nm)J=uRbM|8MUqxfUlGRDEPabMeTIW)Ss8Cq-yrD(=NBktP1;UXraq|21rtv} zr0lIpR!j8-78xyMH&ro2HD)0F9M~YLp%FjKH~S5yKlqbTIU-T5tHV4||Hepeh#`ve ztN(jDX-o<-1z{E=TIc*BcEYxevuk5CyejV5y9{p0l-6g*2txw~kecP_0?4H)f`%Fe4I?fa z6f%h-!lzM$FFK@94M-8bs6{OW41*WJ4MG+YqD5tOE6pc{IoZaGzXBUZjV%YI6p|^m z7z2xLDy9}afb4wAGSaYvtL{w9YjqnKk%o5Ce-j&E4AiszFk@jsa>}%@1ceMHCFV@V zupW}89k*H&P*9P(m0;fxrDO3DJC%ut@mwa11~1=r!3}d}UFu}tRbYa;Kui3o6h$u zu_h%PNMJ-{)B^({2Vp4Hu(hf*0I8*8O3_Ix*Ki}U7 zIH?t^sVZAb0b}~I z4Sr+5IBsmuD0sXY^<}J!LUalVSrPeiTOwa@m_l8YU1Mj=*f)el3gxg~*`nB@-imII zl$6Ou;g)4E_NjFviL>SoupEe=E6WD_X?eFb1g2+hWN##&n?}7I{0Tx60=M*zx+(Gv z07`HuFl$Jn9t4|URw>YBZ&tV$f}$r%K3DH45zDE?y=8_!L1;qYR%EN(mTXlR_CXT$ zAnZi5%I@6Qn-wTa6kTRkSlrUatX|sN0b|TAvG9A}Zlf!yz8`RNU=ma_HXLYf(QGr zUeOxLQbcfmeL0OqCftk%QE_+cNf(xVMTE+2iBJLPFIZK!9g$l=PinCcm0J;_a$6c0 zxM@LJ#Uce^9JAZgH$;KxvI0bE0jTa_7*=5kDUaO>PqhztgdmkdE~aFH4f0|vAZ*H| zc#qry`c49G&5IULjM=;RfDp6n8au1TCVdD~gC^yfP@gbk>wt+u|BbPAFt9uHVSo(K zN%U_JZ_vLn{y7JR94;tvVAkDI(#PxrmS<7ItB%}?P5#`p$zNn|0TeuqRw?8Z^(&+~ zOl}(1AH@Jmv(za1m9CMp4;a1oxbPMQmSqj#jYkb26&N2g5DO~4f@O3V4`@WXIy>A%((JdOP8+3bQB|6qYT_ zX6Y;y7FJJ2qS)mP^N>8XK@CY}SXexzWK}fD8S^WQ#(IXh5s?w%T9L1^_HRvCI;FUg zNqyvX%=0be3MpqLRbM}9KvYUpUzRaVvRWEf6XKiQu2PtNgp*9_i#t$uiQSMg_2C2p z)Ms%es;`HG-M~)N7x#?JLUu#OrgbQsIC>7>uzQDkYGONc{Tn8>{*7@iYam~41oCv% z7`Lr|!&WZ+8{?lNzT$Khjz{67NQ1cv4HgZ5`eJF=OzBC-&Zwq&GJ4GkIY8)c;g)h> zQJ=CDFbqfFTrlxmpIvPytEB@NO~_C#hp)8rC&Z&_k}}^;BxCSo}raq)7EB@^Bu~^AKu}C{Fhdc!{#&JU=;7JPt*KN7^b)OrRb@%Mr!t z(KcRUr+6ehJqYfZYSJ*=v<4Son-v@De*)lFGqjh{){8qMjyV#Wr)1(L{x5<$#yiNoPb)bf)3R5_uqf&JDlh zjpiKAemruNB3bA`u*Q^Cgu`49n?gHdm>dcb9n+A)>%cwi61yRzY0px?Fx+p3#!WF* z394f^u=T{T{Hc$KoWH~Qibn>N;?hhpGP4BO4&g3ys@#&^Cqm*QY_Li zuh9ulk67fg9NIJ<8Bh^j^dS9cR-7Im;w4V}N>Dtl3lzl`a~{%SE}Eyk!kQ;VHlvYB zXwB$oVE{0|1!4;nr(Lx?f<@E1K#@|*mf>k2iQKbv1H|0P@+h*F9&8_G_ELHdftNV( z(*NV_I>4G*n)Ved*n8I~_6AALNwK0LHtY%tHWW}46$>IZtk|$Oz}~xJ?-dK!5fQtB zs3`VcQ2#yIndEGen?wG~=l?w4f8)tvvpe(7?Cj3Fv&b?P%#$)9|Dt(X$%|Bqc##HN zF%`$?E0zW>jwWdNHQhdhlF}i?(S(lQWT`15uZgWO(F9YwOQ~Z?S<|ErEJm7Us$wZK zUhht6wu8E=ShQozPN7oAsI;c9<|YlMDwfhpBBWA8gf!@zXWX$Q$I;-G%nzSr{z>&c z)A&KM%vwgY&)oQ})G^SkkSG>yV*th6&#aW>KuQjuaF=MuSnW&F>M}HZCeW88Z5TC) zBt3TcOmr?;W$xdsosvw%)@~(3&%815;#?Db#ge`;Mlv{IvUb2ykV-5CNlly(PpC-> zACP3Jq$Eq>35I{j7f@313188j?+p6&%vgF@$xKv=n282EXKDp0C0Tk#;1QK$6E(?% zu)0?)smEYDW;>{>6+}B`WIGw$5LGgIrwmG>FDRUrL49S$(nHq|OOh}f+h7$_Fa-f= zroo+LeKupg=~9G7GoFfZ`I59sG%HaFF(vXKGqgpR8A}fSgMHaX|Q`w!uleWb?K5`?DQphpJpYhL-}7c z&x}^1V~Ar)WHJJ>1jk~M0##aBf=x;JoyI6-rg=$rD#{dTslw8O5-2k$)66hWNnWCn zU!uH02@Q8###jZ7<LOss^l4B7&YU~B}uI222Kfi860?Kgo0L9 z%TtP~PaL=jueq#t=oFFnqrzEk`xUag!p3&^D zVOEurq(I{)&23FEmGG33j8e(r6DGWpa?Kdyl;i`O0*ZvMSOHLpG&b77zscWKO0wh4 zdMxT(1aF`V0tBI$tlsHz*P@k~tEmoFMo+ElHb-Pa;TyQOz@&mYB3)Owg6u<)SFyIR zg5s2P4r{6d--kS*xk~bZ?(vZibT^88z*B=ttf56^#O@(lNrF}4&C5)%q+wzPN!G7; zeM-5nG&M%)ui||Z9SPEsJH}v>v+|x~C1Q!yKI@AG z`CIC%NogQJJh3M%dI*pZ`V0q7KuW?Bx{wlKn3F85$10IC%evHx*OT-WOQR537)NiS z)ma$rOGl=6f}66`lyUFO0hp=B$VnDDG-?tVZH(I3;)$FjX-SVU{dk$?Jc;tiwG*Z$ zW+iFUeCuo}Mb1h-B!^@}rpIh~LHdp*J^h=?DMe7Ma>+`CM*2Yj8Fi0wD^@ZhIeO`; zQP@PT9%uR~Wvfy;7w#V?N;e_Ga5{#cC1GYv0%FfXfnljl6VC#cE_e-HtRVDN7kmgG z(6b=jjzfkgh)#INWSgC{j*CgDC`L*U@7r;@pv2Okj07bnV#1QOwTy9Hk~~b4a$=O) zB=|2+vZSV6V&@4-j-YWbb;70N*7s7p-@{3guuLvh;Al6+_?09DVsUv+Ob66=NE}mf zlB77}A&Lk+`WBhv;+!NMPV7;zhh*VQ`@&2jRwT=`+L_nBf?1Sh6Rm#LXeiUD#saummaf>x8_;Q3|vGT8t_v@m6@E z^AW-a-Fij%po{B;53mtJ5hJuiNsGb<3`*!81}g`tU`;>SQR0}+Qjp^WbHa*cioB{DT zT*iHP64a2JQcYJ(Rx;!`v#m2_(da8yBOZx|pngGD7)K+=jidFp7^F(ly7WjzUKb-5 zrbHSiNtH5IoH;Bo*Vc2AOg1r6v5NvyDYHwAR4ch*9Ja;|m|2ubQlyLrEK08G0~4kk z7$-@NG9cA#2R(`JBBR&op3$_G46%P1KI2Ao9k3dyNRgtt6?`haV^#Qo?$(qwM*X|R zA0r-sxh?^w7t$`ZI^hR&QWvN8Gk8k^CrPj}QZ@3dSoAP{PBQCnx~`%re=({h`A>QS z7PEo$;NzH3%Sr|mC#pqfm};1#hV&InY7-kUc2O{3O8#MnDxkwsQ^qO~rH%{(7UxPi zD>+Y`xP+UbNoKJkN%=AuFbke zK>dQQ^mdDLjwus`lVnoqkt*g;8KlgFg_0y9BP>vIk5P=k9Ae@m*;8VqViyIZQofKF zsaCS4IBbmp0&|FolO)|357^wE2XlytlcY5mkZQJrx1$bQeVv)Dy0Yt2-SH);R7yg zFbm3I;V_VxFd|)dnAky*QlvLsF`399cgE>R@>7h&gESS!IG6)joMgINY`WM*!E|ZH zTWq>k5^^|fjqM$?%d30EYUNS3l+Z_9l|tDzac?D=E zhZB={4Cr8DO5H1#gk>5O(K=~ju~^Bm;lvypL%*0{O_F0Hh8VJJ1c*_(0@FL;CoB!o z$N;c424c)XEzU|-4Tr_g*e03KDC4Xe&TI#D2eoL&SobJdv@AozXZFafQaqwamhkp3XAq)D-e;GcB-^uVz2(P@AEDrO-XAW8LR^E)s zi!<1U;fvQW^p*cKe6oh29W&Ctl}k9Yrp264pc1mwSJPB8GW0lP=z%{J3>E_<>LP?E zu%rR25yk}*Cjd!!0#h`|R(PUY5s8B+-byA2FJ^)m^u!pxBoRb3De*L~uA{!tzKFAy zyp_}seQV4Nq87(Jyp_xkUd;S34483Cx>qbI`(FpFGewaf=B*@t{L6sFF#>(XQtwQl z2udb^L5>4RL3pAA6$>G$yaF?Kh#3ufd5X)B^Hx$nc*-6zT17MWzSCDM$-ok&fh?$K zpIEOUNkCwRE$5Lv%3xEt{oRyj3Omp`o~e*?XT&W@_<%d7c(Y6oPr(NQBh~T`lRY?b z^xc^fXfypPFSU{v-#NuwS)hu?Ej}Z$Dx}0p!b(=G0vIhp#IjgPTt&NX?kX=vpMOiN zDpssk87UbH^w~(PN-43D2$&VC(9Zu~tc1_NL)z3bS_O5Q9u)Z>pjFL^RoD@=I6PXb zlGo9`$Y)`%5?p~WG@S<&KIp{FO3u2FoEO*a(mPfS6G2H*l;G$9k5#+KQjw=QYE#*o zxg15XWip2Uc0n3%C0Bj}2#?eV9_!=q zlp0~i0hk4;DlXOj>AiGy%6dKwGanDhb{Dx&XyU}P-d9B zBsa-e2D%lyv4+IkgS=$HGE*6lkwXG41E-AD%FHl#Nm8O&bH}1&RMCV@K}X9jpd{%} z#xm9Ic^J!-32-ENUno;b8KdToOsx#bG&9WIN_rMg8D7Q%X965acAD9NLy9j$1J4XA zlH_$6Y1}NANXu+CNwR&+4jclg3=KRptVohAY2J!(laB&`SP?LV#NOFT0vRtZE~bx` znX_y36-y2uWr~&5gn5I~r84M}GsTLmTpv*ym$4Nwaj7KD&FsLzEoBHynPEke3@sxo zqO>*Rfit0}Bn{8pz>!Rrp@CwySf*e)LX4veMs!mN zGZ#r_!BM7^K1b&wBwuAnrkPd+?WYN_ew@W1mvdb z_C1mM#amO%Os&iebC;wQ8f!?jfYbXq<_H)s$)_|6&A+{XlVtvyHFs*6f+=BI*|fAB zFIjoaSf*g246c|9RC!5~Cd!o7v7(bE(ke4FcVxz-X(gAE$7*Zrz{SKS`btI&iW&Id zUcgCGE{!xU<{=uah}i~_Pf6;hc+y1Pr!aU*=@GB1C8?Fh zy@NQ8wQ(jslw^^bs)g)&QX;9)M|#jNgJDf(Oqy0!TH`6J)EJsfJSRzlHI)GwIjpua zHf!$GG6hq@l_nJkWA2jmKY(aqI5j39O21PhWRGbIg`B8^JT3V^_sPiz zy0J+<(7hRnbUpFJ@>TYkP9b@t(Dk~|q=37^a=S!89m)EMqm)9B~BzExh zmH#w+;@D`%*x^gkN;9N=v7b;`NiS82uY=VOpE;~bU-?hNCsojB$Bc$AOaYb}&dBhY zQ?M#4$)+k=r_2caoH&}NuUP7(6!=MIm<(ShT(SFAS$W&6dGK?Lp<2l^Rf&0~2JMR@ zJo?Ii8a|nQRHjwKRFY9chP2NbsuXn%PVe!QYc4FcJ&9rJf>6OiVPk-LWs>3r-za?0 z?QsYnAP!Pt(KN6i@)Z_M15gQ1bUQA>2mEu&nPXreNq*JOc4GFcL0gRZTgl*6nQu}& zrK_xDuc|PxV^$5!AyfKF#xP~JgPtV6EvFr0J&I%z8zW4aZJlSPQ%Q1=ag*kD*_cD7 zD#;RU29IL4gPtU3N`|k)6bmKm0y^{B=b7nL*8xkaGHX(l7%p@YO$uqDDwFym+>OV62=3KGR=j~L`qk7QBKWRha4ZoqsX zND>HW&~q_o(0tVmpT2&By!=^Ov&u>qsEYDPjiyeX@kWxgSCiEM?FADeOO{a6W5Mjg zjJdQ>B}qs$vSzbQGDkvHl2li~f{Ic*Vba0MSF}eA7F3c1CBukyvyqVwRASbg%1Q>J zO3XmiPcqCEb@UZWST*=B0YskmMH`VZnTpOeA9^J5NOmdl^|5bAFY+Vrj?*EST+}?vgMSrRy;>pd|Y( zBg1FTuTr5~>Z@5SPE$Q^Gi`Gap7A~{$vXWb;GT$WQ4kUSs zW@SJ*YD5OKq!v430m>Goil9eo8RH9?Gqx%#nQtodO)}of%F<~nF{e!L0M(3XN^;5! zpf}q=Pm;MNveY>lMwXJCEhEsIZJoJFib}|$dRkJK#LUh}u%ZePR)Wa1QkgQXRFd=) zJ?N2N#z25M*Qt`^SQ*K{e3MKFAjz&X3wqo_r#)gly(AyXFk(n+vLj|zSXT12R7fae zn`AtPB=^nyh;?`;%BJPk7-&kKJ~Al)LjywrJ9M5VALtYypb4i_ieTX;! z8I9a5!H7A)rjjHW8QiAX4tkPgoLof-N9^#eOd^=#Xk_~RGsz@>s@N&vGjtj; zY{=k#G`OQR-gMMD6{R$YXE{jmm#E#}4OMJ*RwD1F6}|70u_ToN%Y+7~7zp-UfIYRXiu zq#2;@{Iv-~lIjSIKQ?}$uo9H66M-0_YAe}FYHn=S^R+ zq#eD5n(rW?1PEH!fu9||@Pn2bHU=e79EB*x&{y$Rn%YXXl3L7G(l^PR;h?Wr>ZRoH zNnlPp#%%hitz;{i7cO%)LTx2mNiAk88HO+RdGwY4GJKMNbOWY zmih{QM2)0G!9PPHW3&IDTEQAj*y;5BX?@);eA9P^+n?Br1ev_I~q-d07P%h&w zB7JF$X$^y$1hHVn`tF5G6sVQ^ISS#Wb zgIbcoWMmm)Qj0;+j9-+bofw>$*$#RVhbyNYW3AXqg4DkZUz}E?uUOQPvu+itMz)>K ziYXIJ=p?W=)RZgpH!ajkx|ABP{$eIHhHgz?u_O$!g(6i)MB=rL8?r2BuN)DQWT|H8QTvN9ZB-!4AGI<4tf$Aq+Cs@ zT+9mBO19j;44;XPbUAM;tcVuEGa5c~$U`m3lam@g5egZ;=>p%%l6dBa&xyAS=_{6o zueT}vc6RjxKA&8c;?7fTIiX!y*opCn-tk%YAob*nHW;(#=S-s{rq(8N| z+?{^TVJ@+wuUL|=sW8aMp|QVaR+4;Nv(q<4nxH9D2W};SP)#|A#x}srUy}Suy(q!k z3E>(g31%=Gml>{El7eVtP-51g9z)Eng=$IGpxJ@z=Bo@2JTqLgBp1~@hIBKCpeR~^ zLhPC)xsAr6G?#{C&bz54>4+#wT9S+|ziCyn42m*SFl6PvgSdR00YgmmBgsb;uXpg0 zTb%*vjEPZ;)Y8eU4F9%ElVtCjg(KyB3UD-WX*4-!(UsF%Obmy^7}5+$W>HR?jHGV} z3j}GVlz$;Xydt_35`nrcD$+YV9}63q7Q8`kkl zaY4*(bcsP?B@t9DWqgCTqC##VG7tmOEX6=>P_>wFv$3RXunNs&e%U3aw%V<0yDk!H$*5d!r^d;GU z#!>@|U=5X7!dOXnREz13`nilbRZL&8Wc!Al0b1p!R)oj-BW0f{Fl{Mq|t)xJzDe2EhUCjA! z`idpxi>(lAn+cAevL3}&D9QOm-5}dh*9;i;|I!MjcKnQBNEwpGQe*b#bgx*Fn%SX( zb^kAiDjDvXbNomWRRcFvtW?Q^PG;)?>OGB6u1<}0mDTjD3VA}UQ$Ue!G8BVcVNL=vB$aKov(Q^c71Z z7n!%di^MKzUpk7Aps|wOsc(%Pus8&uuUP7x$;mV-c0z`O!3!Tu*4Y~CO3|5Jin3C) z&Vy*g%uX=+)-tgJp>J3kxhW#`4SAC3Rzoi)W(-I2o?q6_kt0%MZ7BEyLTS}EE?!d6 zH!SrM4uz4E9A=vGB;>Z3jq)gVud z(UvDkh0|`azFPOPrFLPu)=+AxZkeI)?!Qjg)dmmo_Hh*cPeY*hpW{W1mDEd(n0l#~ zr+BeI->`PvwBA?7_Nuj+P|cVM-C{4zB2yP*5PefIFrLs#E~EyDh76d5o2~79273!V zBflaQSs9>-Oh~3RPhrbeLy3`WUnRGPD4kD3DWw#f*x|p2O+nh0bY$dAkvGT4KrUX& zX{6b0<^~RtWrhZx8Q_%U7{eltb(<6dg2GLM6DygK8l)YvqGX~8-7A)~BLXLQ3Z^wr zGE2)flqSi7Q+V4_!{|7XUn+!-*x?N6C^HQSl{NJ=lrU%%L&}-pS&}Dd0H-(-*UxCWBU~C?$Jkjt zqZCICvQ2g1l-h5|>{(s10H85A0Z=SBnJ`I`E{ayk3>*ad*T5;sH8u-Q3IPF}Iyo@l zw32Ig}l0ywe58PZW^cuq<7 zr4cwObJ57$nPY$&N!qE|flFl^#a5Xao>M1vOL{j8PNZ_uL9*V+N1Wt&HSa6cyg@8&2eb$hqqB*^ez+39T36ANnfm4zNXar6q12QsT4rywnS!yt? zV}VCu;7Ete(7-bVoPyLX>D@dybr2BxYf_FuVc-(C<& zvYpL>lR`jHxaopOlALH{=Saw8?VQ>8kmQbvzzN!5TJt398M(%kP^if$gH%JAQWTun z;lBn>N#>fdM9u94GiO0HlB86ym6&)Dh(<0yv?=8PZW^cuq+Yp0PyD z87OlUPa{b^6iL+F@=AB7k%kfo8HrlSLDYzAX6n5>b1+Y1Wid((vceb$D4B^vGDj;p zd?CkaT8vU-<-NiGGJIz3s*_MgCOHE}Ng9II2^BgC1P&03@PuZN|KfhNGy~k+el;~^ z!Ej9%wpOwsHIx%*6rM2`J<(Sz$=QGj${ICl&6Dg~5aF8Xt7LErQ3?`Wg^2(={MVd} zB%jg9$snbXu`=fLpGK0`D3Yi-m*q)Tk8%wqIxtgoW(N)|lD`K|LF$&Q(yZr1My!U)f$>I?so@j`0!5RHhatF$-7WHY3rOaP}=M^Ut-BV&nz zB{4E!uCmi)v}~nDG;rFFj1D|AJf}1z*qrCYTBUT5%r?8$%CePOaoI|}e`1bX(N`>K zM-NV|n8c}XO?QPK?U+$th3y1O4TA&G(pxKa>v4UD{~kD{Oo#=iR$R4HF9YVHLHdf- z0|&#;(7-bRoK)%-duaxo00EgCYe!K44i24cysxmiWENRewuth1~?#5JSeS>%xXzY#`rKh z9f-p|tt3C!i1$l`tsA-_O(2>3cOKF=aFEa75q1u)UW5C|s`(D9P68g8AtUYywT@_> zSq8^0=-DEfoYD(ra+Ez1dMJTQrT|`~0+ghHm572abV-R=Dp>_x?h$^iZf8-(!`WJ% z?&`>RIOfOGX;`L$%QoRAL75764e+cl)S8w-1yC6l98^OcBsHiXOJG0+44D?5YoR?Y zJ)A7l(#;5&mhOF#{{qAuaZl6{w_Y4^>xJB#OWYcvV3T4f_(5m7L|T+3N`9u!I&QYQpd57-B3mpk{l;B1Fty}8K zD5XXQWr?6D5!?(1C%$P~O-7S81g$!K!y#}$2%rJ<0~bw!lEC$V&_HB>8n75J7{DEv z4LB$`B|_IvGB~>hmI7KsouP#B{%1N#k#q7O0xYJB5J71pU=cA`%MtN{hy=ToBOcKe zQ?8p#j*vn63g}6WN9d6`fHj~%+H$M_h5j3F=mRy#Y4VpmlHcmm%L(j|A>Ze>!Ijx=fuW&c<(clUc;E)t_c_C8*mXuH;0e!dp-*k>H z1sw^rqkwi4*bZP)0a#Q378Nk(qw`eI!o*~bp)yba1{Huo1(>-4%v=GOR6qd-1@uz^ zX0HIVR{%!QH=}D-0A>~74-|k|1q2rgz^no=s{qU@0ILeXssb>ofVoBiSXF=%QP5n! zOaa(cfFDr+W)*;01z=VIm{oumQ2;g-;7%0aa20@21x!#1aJvd{Gzy4&6yReNfKdhA z<&-JF+b95|3UE6Lz@!2&sQ^qWAZk(oCKceA6fmPG00#>2O-k@dO1cyw_@XwZ1pO<) z7bzj8P|_naG9~yXCE!5`K1vCbniBA#1Ye~DTqpq-N_6vp3nkz|2{=%~9IXWXD?$HC z(7zJ&uLS)oDa(z7P%wRf&r*W^mEfzCpnoOkTM7DBg0E77-lhLdZC?qvPy!B=5W^^8 zQdUwth<$<(L<wYf8YF5-_F&f2ah1sD$`W30PAC#*~0DC16Vl*ir(f zlz=HE^j`^>Qi5;c08F0_Ia2Sc(8pQ<^mq(LLTM<9^w=p z<^mofTORbrLv+rA{&TK7_{z6hlyqK>-&$;DQHV!2>RM@EJVdf`>VT2j9U1PI#D0c)$w}c;O-L z;Q=o^;Drag@L=aW;D!gh@Gz(FfEylg!-Ku^VDCKOhX=do!R~q3hZn^;xR>OKD;FLx zh6@-TF$VLF3b3XEU!elbsQ_~-@EIzIOH_bC75EMnU{M7=LjNLkzbNleIqlJzy8^>Lt&iAAnh0gTm#hGF*z9{2MTgcX+~WqvU;P59Tba zDW(E!7fkob%dJ+$-m+60o!m1A9+sK3@X633a|~=gUM8YZMY?k{F|-?RNymJ z5I^BnRd8vM3@%$D|E2Q5(q(uv2Hv59SE#^kKjeKHKg0DmWY2`Iq3{|NxEF>zr}}|= zMaaMDIN-Vn@^2c4z?}|c&xQ6It|uV>hQ9~AVgYujxlg`_zX!b1()b-^P-jgXw+IdE z;uh0=9Ox7HJE(Oi!~Gp7e@)t?7*&HGhdSQmIrIViI2I+wn#52)T85>Gu`)3fRwmEk z_rZ@t*J569xBBpx~Mew^Fc_gc>kR zOQjK6>UR^MpSYg@{#gzF8Ol}3pu`dRFX#?13q@CCSTP0*#z1u&@*H#zm{kL2q0$QZ z9)2Huu^N0a?f^j{2^nq#VL1b=W&mXu$oI4z+#Z7C{xaMp!hK>mUQeFG``}~Y5VQ;q z$CCe2+rhnL4PY2fzLM{$9N@en`8Tu&K34-6hO>P#I66lDOXZ<~I08=XkmnR{xIs;i z!*rCv2^aET_&e~ixPPqyoWbb`@*cDUIK%C2;El^P5D(yPH|6J&-vQhKg_r!B?neM4 zmHeCfFv`Ug-iPr*9DwvPAjQdmWk&uBaspoo1S#?y`UyA#nvV>(+JW>z{tdqac*7ld znq(*a03Qi?c=B(M6W|Ru>LGV3wY9k@6*CutpyxuA>Pyij#3>a|HB|T}cW9@&WV&c+>(8wSYq{eh+&ZT4+iO{!a@n zYQg_$p!kq;D@j>jP_7vLLQi$*C%;c!68V7LH%7DB^bZUOcNNJ_ItWIe8FKvhArf^^xDip~ z2h%4oRx)aM2O>VX9F{2L1OAnnCm>gS?oWvIhxhX$QTXp>|bK0ye;ge#XL z*yZ3#$rJo@M7=)yAV<{85%v1SgB(#WN7UbgUbu=0|8jT$MBS8eV10Iq*!FJF`%F&)M z6F}et{ZYUgoIHVc6bNhuOx5HoXb=+x1a#mGF#SxPfH7hsnmob3LeOIVfaJ3A*J1W1 zPw>z6c`bCYm`xz>pyi@xRUn=*vq0=!Z_A(yOd=37#~(!;DiD5{I3W2*92dG+%ps7k zu!rbtF^xdJ0vsw3hnP_yUx5ZOw?M2DyMf5W^aA+``;2Z_K>;cDf5J~u|EEBkv*5{a zJCz6qJ7OvZgf`|YNd5}3fQUvq0r?7*fY8P)25~nyGQ>D0G{{%jAc7rp8ssa434$Hd z8N_X2gNSj=Xppa<8<-;_t_@yRB9Jk?LB7(z3_`#R2l0c@G0bU@C(s|vW)K$%pim-g zl?YNL`dTGo6LTBHp8^swt3jRsOfbJeo?ypNJDBPqJ{O0BvlC`L$XD2Bj0}|MJ~0C# zS0a#=2xLr#kgot`nD!t~P%IFP%9R)*C=rR6;~-yQpV2ic5kE?#87R>sVpf983izWK zG+<(a%p5pU2ocE>93WytiP*q&1W9M3c+nAJhJt*BzoiEW`aceXMNC`BF>gUWfPG^I zgFJzDIK&SoF$hrvAi-fA$-%mXdl@Ey#Y$T4L?K7i^lc|vAn90vvjm`@>Jp*%1kz|;!)3I~LfJ%>Q%5XhKs zk#h)S4uOm*81fa03LP5#sQd`A@5*+(EoB6{bIU?L>kx*x?RlB zkgvevF;_#LfI(o^MviG4@&Uzyh{g;K`3l=XAIYJQ#B2@;ZvgC=&mm7x2*^C(5cQbT zA>0c9JBMJ$^bYw7K?(~a@&vnq@aGWznDike4(JA^f5;OU7mx0fNBCn(h`a+WV{(Y_ zo3I^(Kjw$XSI{xc5Rv!|MuE8@@&pveZq!0OkKZ+g^ z^E)JH#9znxn@6H&TBeqMyVyInWhKuwXMP*`qrlc-&ge{OFZfldM6MJnzLKwAT z;)n#lV9l5!A`~2e60dI%A&F@rIp&4P2YeafhN&MCM59&_ZkXXAU%`)JE{AaNKpL3E zAx~g9n8zVcaLDLMF_lB&bg)ZI=8z|#C`{*&C(u<)=#VFX1x)FXC)hEJHj%+dRsh%_ zDh?Aou4(F2j+ChY6FCcSsn5O{~Y}vCU(eI zC@6GxGzsQjUW%)kr$I2 zQHrKLLU)O|9nuke8KI5o9db1dj0_VxWz zJi))hAQP?^C!|e;Ev9wI6M!TpZt(hA@-oiEm}eoBSp0RIcQLg>zQS>#yTt4Y`3j_g zc@?sz1?xd3FL{E0j*%o>@+MGEQ7H&6%(IZMu=5BdOqCE-;#atEP@{8F<5C#&AmYmT z*fI1{nDZd-fK)NdL9hXm$Gir4qEn>^fI1CO0AjX-EZgBnpzN%O9*da}@(#9*Qyx@o z6<)@UU{r>A4y?dQ-oc$iOlc5SJ*We>pOG~ z4)BpVwD%fD*!-P``S{p5v<)0ITqab(#xw>wSWStb9c85A6(%*vAqvcEkaM?MzzeB5 zgjo(!^+1csU*RL|4ypX2Pk#s>VIacKA+Chqqn?8~DWP*6&}&z}L4G4hFAe7$9XU;P znc<&ARMp7|>$YBld`w@1jVHs~j-0l-4B}DIQ?;Tx;k#1jA%3hB9#f2nA9Lg}pxp47 z#KP6d0R`$^#E;1@A~#m_n0FK&Q=y0-%d6{|v*O33gGi(`JSGd>>Lf>O+;7706CNA) zn-KoUW7xnkG(uJhL?n=W5kDq9!CZ{^G3g1WW(cu8b}d)ngXf@E=vTl`!QE#_|w z&k4DPJjcBu@pGLjU^7=^v6__@%&nd;v(^9NvW?dMG}Ol*Qi7ouZ20;(80?lfXpU|*db zcN{W=oX%-2qZ{7jaE{)>+xmuVDjQ4)z@)x;77<(C>V_Wu&V<-%Z85_=HoTUZq)ME$8AS-Zg$JD z`}3X0AACA7Z`t*-b!~fRwe_>fF|T`tv$7glY}TKimu+&k;<+l-nck{E`&@n67tGl# zrdkbIlgR}G8m~>xSLmEi8J8I|l~3%RJkAmO`tALfZ?4y>`}XUvYadTO`r2?ys|TJ3 zU*6o(>3QcBb)VmA(_}({KId{bueG#DSgo7S)1DVPbF;T!eC2a}&;MC6EIC(&^cuC& zf?~hfM)&%ivVW=VMD^|y0hhmRU+%ed=eS~NwZ3&9n(%ose?F({z+7JYpRaR&(DnJz zPrKH&D^&4K)9?-MiI)%k{&I1JTa)#RyWXn5ZqI?xQPa!4-yl2Yb3X9n&J%n3UEDFH z`$qee-Dl4IoOtEL z)(`JLB)At$t|dFGO8;?j*+AFXuR2V5JNey-Zi^G!y&XUB;n?+Wvn|=NEux2KalZ=N z+lt$*FG5^%_m>@wz)&%jAbQSWO3QO`rV#F3mOa>dBy+6^R0LI zz)>sIU+doJcmDp1#03o#;x}EXJZ|TaZ@p$iOqJKdsxhchONBms1_W-$gnfd6Lkao3nnQtmp7p$73~0Ow4m3m*$q@Slj4a zDWk)jo_S>(R@y~&Np90^a>1B&B_{fx%H>`7&ZI;~7g;^IO>h?bc@0Wb|Jv7nxO3$> zL38#cHz@6Qy2~W@Mlafg&YRUj9x)%?_wqAe($z^ ziR=2O`*(LNA6wy9ixAhtF^fHh6}@$}VwWQ4oB!xjw|t#mRSyj9s+@e^X=n8F!+)|I z_@}jR?;8UKH{M)h`?j_77Kb0TTQe}=;pGkO6S}^%KOVJDy+K~u?`EYC+a_1e|455E zJ~!-CdUt>RXIQzPUb83O`XxV6=JM=WaUGoReLa1@+S!1j$B&}-2UY)6Ne~z zoQxguv`WxU4^7|f(fi|{U#)ngM7~p{a;%!LF?Y4)*}p`mMP+e|-Vu;@QIkU7a|hdO zS?d<2S#?|e(d}>XHrFkj_x46=NeSnQ^(&fX2c1PMLoSoV765nTM!F#i3 zmZ{=m$OVe~ubk=k%EBXQnttR8!^d zbKP-c^6`2bM@*@6s`HfZL&K}|u5oUJPfE^;UbAfc*Tl7-P&;yWv*As8&Az?#*4Bca zeBW)p{t2%B9ctKb*}Y`TZADSfjW?EPySh*K-o&+8_}ZHrJLW0;ey3MN*z28V&(3e0 zYsEA_$Bk>k54FwLe_i4`+pagl0upk$&ldh)n-{&S=XJX~#J<&xb7_8ueC>)i@n86& ze}4P9WxJl~nA&*v?_4KWJ!&_&Y2LI-A5%YvoyzOd?ctP_|kXkpc%+D{W?Uq%nw{>Aa-!;d+>m3dh4>-^cdg3G^59XP+qnalmg zSNbY{5>xA0-;os#Pp%a$-#IN}eZi!fF*(AUZ0zI5xt`nK;AgG%dA%zKm)YO$*Nckd zy;2@I4+zOoy;tZcw{<7NCokX*2F*=xks~0a>Vh9x?pzu@|I3b)Zg;)Cj_v4rwrBJ! z@9;T4-zW9FsrO=I!;qpqA2;Y(;@y(+o&jO<@}-AwPw)C<_n-@-p13zZ zI_6~h+Uo;<+bnXh>+$f~J-g#M@6Fj)c3|Jd2Ogg~bD+uGuhZVzKYW|Cs_==LKSrKW zYrW4T{z-p6C8WrF+mNaS-)<^iHX$vviN{fX{93;&%S=+_T8AU!$;HK+zHwnRLtdA z+R{_W&3+vZ-2eTdN12#c-I^ZXYd8FO?Bj^*wNoQxIqulnr zQapUEJz!gZ&$LTkRl8r9G^6arp67dBczE%{h4U_pw(bs7sJ@&)bHj$5xk zuifPG(%yI7ay7S`TU7CR>f?(;+eS?ao>cil{fSu?HOjIparuxsY6r*RzQdOUhXo%v z95?oC8TqX5T}NKNe6@;WsMGP>qi*M|d2nf1{%kI9i`hSMnRYI@x>wgyS4-^bv3U2w z=rcDQBOHTUy%;%ROq14b+hx(6nok>keragUj!oA^cM0#X&$WSXtu6O@c#qnAVCR81 zp%aS9A}a(=bQ-i{N!HiZ3+z~@&2_U6Kgr8}?B=5rZ{`?~w)((41=n^xH+E3% zE$2RXoT?H&AgermMR?TYEz@&31jf}FFmQK|+R0mH2R@HzwW#$**L;iHRx8bq; znsrY4f7-BaW}WI~x;ggwcCOX$s9B-;N-hsdT0Qabuf2PJe109jt)H*Uk(13M6Q4wR zTyD7_Zgt`en`^sck{X_H>>QS7Z^?!Oy*7lbKe=b~kn)dOvZh@4wkMm zxAwX8nKmIY#ec7S=CCQa&ccQ*zRg<_TDw}8Qu|NLPdZb2TWJ?J+3ctX{Yxa3mp{0E zF#nywj(u)TKOEo?a%E&HpQnH53x3$Uk^6>J+TmH|Ma;#m0q<|$n4f)^hsWk2t2!iA z3dypgqJ6cCQH~XBbzF2JqSOoT!$ZcbS`vCR$TMc&%n4gA_UaPs;}^c;?18+mVnRcY zp1I|8=-^4&{hv$Ll`Hf8Q$YEU(=h=~(RD|6@7HKuyC7SyhSAAi`E=(1&F{A->+M~y zaI5Iub$mq+)#b2U(T8quwPU8nq=kkyIk_up&Du4?g4U0ZeAMr~+Fu<}YJf|{qb-M4 zUwgZ3@c6@J>KvAmNfmW?j?{m!v0Vd>JMYoi*jAJ93$ zwO9Bx=PF*?&gRez*;gfRu^;n34gd7zcvx9)k3lEuH(DF_F6`6X?bCnV@A|rNwuas# zI>_o4Y}LMSk=`y_!dm*Le0f#NzeBf)Hp{v>O)Yu#L*kUOzmrznNQfz=9X_`Dph5$S zjSS1RaOSo?JI-{oe{tl)Z2!&GrY~5X^kHu8adWcS54xB0TS~u4sm@dFxZa7mmit85 zmu|IfXTC8tQ)+Y%a{t-t>At8!O>C#7Z-{StcVE+dp9e2|k&-L!aL0~yM;{CMbUSuK z@$%Dd;WZSMUVCGZ>(!Gy4RMFBaKpaeVMvAx#J-JQe&zu?R$B3 z{kgGQQ^Gc7^R2L~MJcxnd|4}x$X_RHcc+yCE;=TUUe5WS=aDz zn-k5_F1ffwr!Ghu_jC1t(kC9|Z+&5~d+!(DVmDmtmg{}(+SMPN{ztjC-m>fT!1 z@VUM7nhjxYTZ<0J-|%(gXf9v*5k-2AZ(Cvg%3H(sO=#F_f9YJc;>?SkRbA_hJMSD-@_3)-(fcRFpX)UH z%=tk+>vy$UR_$Qu*3vba-0fpur%2x4P9@T#+q?euYB9aHUFr1rY13x^PVxvo;kL4T z?c)1}72H(q&_Bx(*S(q*z52?8>KptHRT>vNBsTAow|vW~?YD4UPrRJvJJhAg*gD1X zXUUz_@#>_XUZsEBU$v%voxZoCY{uCB)Km?~dU*D+vpK(SbKE)S+^(sGlDZ{T9lBc6 zwEpIgFP^=O41AOt_`@MjM5ss8y=(6DcigG!;qNivuKl>B`wHdVQ2g?sXR6$D<>wUl zKdcO#7r6hkyXS`2gT`$5rOlbvHLd*$`yMmXDkL_#?|$gfh(FH`-`cx>+0J`MV{@kD z>@;%y)wHnO*Gl)QSM~Rb^Q(^LU-SMzqv`q68;||C{9E?(Uq*fMI97brv@umLB;TKM z`+7-r@3AlboJ=hpU-W1n_jHG|M|R#8KE0aRV|UGw=Y)SGhYUQntLE=srB+pTmZdnQ zhb@k+H}2uZgaMB(tjHHoe2cGYVfOG;_s;i=b)5R{==)&1hrO=f?X#?p>p=OHQzNo( ztmXQ|u}j~`8P%t3shHzry*X8Pmmgm-$#GE1BUwVYYC!Ot)_Xd{*emz-^FKJv{%rG0 z19y*APEB}ObH8Gy{oS2;?tP9s#(;%TKFA5Hk>aPGr~-9OIVT@iONS8Vjio@0AX z3Z5Tge`8{hx=OkDZ+ovDEFAo2l}&Q}O~16?R14QmNk1un@abgy@39rGKKk=ug5t#U zMrUNJ3cu}lvzbp^M4`0sV=-$UomRiE?{lf}+duI(SJ$}zKI)fh*JDl15mR@*Yh>@Z z?2ppb9UojTdZdZ@f4pnN_kYBt2gQ?D&irXTF~W6bu65%=&OU#a+qSiHa+gXjkGoAw zNE@{zdTn~vZaKHBVlM5?vE%gbJ72hgkq;t$8=Pv>=<_?DS6Rj<#bzJ-rn>s;{x4q_ zewq@X{2uIFrRRt39j|10aXxs|?xTt44rlK%VCKT%sk2-9mhPuM)WGI#R9fB~N2fhs z&}L)jA&RBXlrNpHRtjv_#wK=IpDM)$s+Y$5?r(9u#_19R*99J5eC6Pr-HHWW_IxOJ zF#2k#Pd4rLOgi1WVHMAwJ>A^yEZ?Jb8=K1`UrO&5m+zih(Qp6Z7hU`BJGZj$mJn5x z-&O9`ki-Rz)YGe9Dd)Yv$k`8EJWEZ={C0A=S zxVffCH18gz-aI>TOTxRVwR_|ozH`>In=jLDx`eO$6}WQ1m%w)&<^**Ls}&t^>`UU# z60`65l-kR;oxCdVB(JH%)n^8TY#1=nbyVF;4 z;?MkClg}P?c1c-P;rr=5dwQR0HR<$+Ej~}>&zxIE{n+7m*sn#q$c5cPPI}mtemiZp z>r@XL&o`564~QM-vFd2T!l-#=&PUv7x_emtxc7A@&wp2XQ)*0f_#T^yQ({*njmV|h z-aVvFt;?_YkO41}W+&bs{{F_j`~$-`I@MH$ZfP75T(st%X*oYM>EEDCwko;*$<_8~ zwHn^z2S*OKTR!2|#wtJ5=X2ekQzYu_juP!Vw#Zh${?y)yLtEw?KKW|#o(){bRG9xZ zy#6Aa)~}A1Sozql;>g+Gooq)mDeyQc@TF_cMxO=)py_wM&&9WR{!9`f_+$#!G&ryP76 zv}4q#8DriK@i;j%xLc215AzOBs&S~;&JJ%oB|3#fZE3Xi?dI~EA353GI94pD&-pw4 zvMlFLzbJ9Of3kK?(QIW4Y|dRUf5!=hK0UU(Vt2mM=Gk?xTzu}^KiM<4@}~Ra4^?~L zC^a~B>9Uh`pLSdKzE6&1KI!(6g-=kL}-xtU3=3M_^ zPOqNd-))QA_HbK|yDPMN9*6dObNutI4TaNQ4q4Wh2*UH)>@lC>u5>D2>*nvR_lw4S z9^9gv!?48*s@e^kxp&%(dF4tjDbhG~T;tG$KKpM@-Cpiz*`-gi*HL?(KI6G#`>W5R z2Q=+DKOr&HxsBuL&EDLk2HiBLvu3F~JzMgYLuDqNZ0>ul@y>nACu+j}Ny*_?WoZ3L zsju>NKiKQf?+#}_j;$NMwBfN|vD-H780{ascG(+sgIQUBKE9XJeP{0I1@4VT2haVS zvSQZ2;yZh2g08Oh^sU<9*TsQJM^%B(x7Q13=u_cZ&JNw~#yC~JbMamYmz?!)mz}bA z*!~JD66{i9OWwGxT~=>vMCCC(-Q5*gD}6pa zvDmkQ9}<>U_%nE9zn?x|qtv#YUYC8;3-DhQSi^`kQ2Y=bP0Goed`&nM9#gvxBNI9 zH0#IV(PLYEpE37V{h@!(T<|zp;cLGe{J{dBW3$g}df|QjxU?B9D~_IgqK)`_PevMdwTU`&tW<9lv#8y|GSZ+Cq`wxk-U9R^E&G3{Amo$rbD zcKkWA_s!0PRa>eSuhnhjy-AgS@2|O}LAK*>d)Z#<`75pYF8)~R)TXTKF;Y z!SXb%OWlzl+k7l`|9aes{w<#jdbz14x1#&RzWb6&JkXpkw4ql}>8m}LADcA$N({Fl zBEJ0(-(3+c`&{w8^g)m-pXU_|GPrvKwl9)yR|e z>c-z6;-3u3b|BCFU+;W(Ce{peDEsSk{E(3Q2S>)0-R7RyYv}W*mp8r4`m*+=@=Ky0 zXMK{AHu2}T_%C9*$B6oc%)a}gB zy2pLnhX*?}3Uzp%|HH9~Pa9|XFk*8FkBRc;>cJ^NdoFw!JfiNzdIu(F-B{zxr7xYo zv_3E*p~m9v9#fC^Up04b^ydnNa!0Jqv*`NZK3yj!u4#Pgh4U?6UjDSg!WpHm9f-<1 zb5Owj9JN(l{U+O$_P!^(l*5O+9MSZ{@DG!NSG;Vg>=HL=zn?1G-N^0bCyg$Uz2M%6 z28Yi#3cCM0HO=*R)yt>mRR1yf*Rqly_g1eS<+kI7f54kw)t|g=|1)}webov%RmnAe z=h(8Sec`~W2^V{>>(OtiPo0+2?zXtFyXUI7mHzGOwx9v17 zaisJ3PKWDlPAKzz&Z_2t7dls-yZ=y+y2l^-crEnVTe{M%*9Y#|&Y5mscUIfDqG@g~ zBS-8wqFQnFY#)VfwcyQRH5>LOow&qdgYhV6MskfzE$97xGz8pAj=((#)4@7Ui z=2h!{x$&b@)9dZyCk#v4w66Q7{x?5&xbOSWX;gB6UCXBxCO*9q6S(YJ%j)&-^%?Hi z;nsi>T({I{`pD>mz~J>qk}x0-(6y1kD`ntL^(%>5DEu1a->`a0$9{yXpbxp%am zuG?1)c)S1C?SNMu1MQS+T*f7BXqT|0&E?XLwu5^f419cL@6C2M3%_jlvR>t80~SWs z|9ZeNY))+0*A5X^y4bU7($3>MslzKXI#m6{cT(x+CA72;R-fwmM&e6rKUM4+WzPoyT?~kcZ*S5`ars>0><<8XS z-nWl#nmzxy&C~s|FFAO2+uEs1MtxV6b6aUUH?^+q+^L6mJ1$=0QZ`|;=Tz?Poo&^d zzkb`Y`H8;U=DXys-nmZilH)oqnD4biwXooRo7U~s)oMkhj`+Sg(q+ev+oy^r+$=S1 z&&8_`7mg}lZ*#r=8|^_1{HgeKtDnO@II1&36v^TK=1= zO6=Ggu~}xihSfb@rOmpBr;_Zr>8Bp&JM(1c)EesP2loH;-&-ZGbB)}C+#jD0EOUGI znNc4;&Y7L({Ly-I);fpEca7LS=#S#WjlEG0<&Gy*YExy>^d?^Wr-wi> z+2OH#f_f%5bEtMup=Q(GO)ijF&-T#T>0v{i9nKbhq4!!I&Vau9dHLK5S z_o8ZbnM=QdZ-$+0bna@Wp+~B$S&(vc|I&`PvVEPtb90u-?Td|%vDx*kdiFK-4oy2P z`?U1ij32)nByeh8CAb=(d&u*`=w3Ltcf@rS**nU`DZ^aYt*-GzY1^70c$? z;{5uje88hh3taas_TF^Wb%b+U`Pyb)DVqEqMZS!__-fCidr#|r^<1_&;&6u@t-j4w zZ~58qxAVByw&A&#j?dF{)z~h-UVoeWa#!#4-`U<>F1>2&m3n6azV}PLfB(y(AL;#4 zM}6t=XVQ;P#Xr|hE&X83mNwopH$~_75kud~3r)QJ%J=@5%jACx`iz-d_FeNQF3G_7Z-Pv0=a4Ue5O9joaH!&0qVJOV4tT2YrxYd^Hi-eA?; z*?r?8Hy7x={GaSLSKIvb8`9v%%w4sf-CP`B_C?q))%joh+9uRnT|Rzq`DOKF4QgK~ z`d~`j&(oi8u6RDaOa85oMve#@b2ahD<>5n~UhCohJ|(`(;m6sY9V#_8?&#+=ZR)u^ ze1Gv=?jg&Ec5@n2)5g7DtwVmN)8`j#7}OPzhHxXFT8e@i>&69 zeaFR3`&&%WeC|Hz%g<)unVgCHKBUM&jGdf-?_Es zR_g5T`xka-RX(=juwu(kwmejFZE)zAJ%v4%7Z}-OVd0l6+CQ0MSG7pJ#!AwsI&~)( zT4ejkenpL1FJH%posv&m<(4q!%bPK8HZ*m3uASXJi|Zlyf(T*y0iNfzfEJuap$ znSJx}j8%1<`KqG>9=jx5t#bU~`wyN0{aV`A8lOAx;M;?bZXf91E_uc6PU`;d6;}?f zd!>Bfbhqo>P7P=r(lMKT%~m;%_e?JHV3aoaaGqh8cI2MaK}C9-&>-(o@_g;wVxpWv(|oEeO&V5mPs-Sc zmWxl<%9`BB<$d|}-wwvUo1SNOsaJy(%BfBA&tKz^uW62!p}E_|zB`_0nvX_Sb8k}i zk}H=ad6kTs{C(f#xDQ1lV%KF0T$k;ai|vm^g^H9tWk2GdgK=3F#bxPUY4WX8HJ?mc zSUe`}>G2N*wH0$a=U8#!%!_W*Dot#=uw<*2^;9;?k31dzY|*urd4^xhGo#+vYK%^$h8`+e=`_#@XhEgduAP2Q1>W2*)ZychRpNUuXfFVuQ`yX5PyA?XuNe(5Smwq*Tbz=2R-eCh z{ka=8wsgB&wJgaN9jQ=gee2$f9#6?Ot@7=vr#ltezM%JsY+VX@$9psx=;=48@Qxj8 z_Rq|gwNg}zQ!VEuRym#XX7M{t;|k^+>0WjBi;lKm62r#5_ek6p)jHoYx%0&(;me#4 zm0X&wUjhD7c!I0@r!Mz{eSB6|kJO$VGN##6Iq%i@yno3C-#$lX*>UIkh5;>VH#|G4 zb6SP2b_dILJgRirc;rdD%a6h@)NANFI>858g?CUbO4V-u(tvE!b&)!p$we z`M%Rn%ssb9B?x>V}$jDbs6jc&56%hxRn!yl%PueiYV-08wujw{Qyy|}8$g!tE+ z3e0bJ??T+K_&I}1MJ8SS`S|p%lWtXKsB5JUI@cuc!e%S7wL34DSIimN=8S!nas#i; zs;=(;d0qT~?>`2PYQJJ%`^`PRr45@hd+g4uDWz@>iCY*{<45ZICm&nn_gEJ9v3ap+ zDNj{fly47Z{dqj}-qqXR)}{9S;#U7|l^M6@Ifduk7~Zm2Y}MQ`^4E`A`Yf&-`E7Je z-n%QVZ+}z&o9)4}-M74ap6~UQ+m-gI2Oh3DeUg1EArK_{ZULcdhDpsE^YGKzOGfFd~(&nq>$E%o7+pItj{_8 zccs(_Wu7`V@)<+xc8_|qJMXIB>2D*KJ-?zjaXWvpw;^9ARfzTbKf=xdx{_w?_pxo; z#w6LXH4|%M+qP}a#I~J@CzxPj+qUhy=iq(MS>Jc>-FvOQs;aA=E_GF}?*0EgkSQv% zsKE*CRC;#`hfR=Ca3h3TYIfFGEu>Kgu^HAOx7a@_-XaGhIg-;jn#WtLuE}>q36gX; zel&{gj2n7V{m5xa5HuOiJ@-~h+!Yoi;}2?PlPl3CaMYwQv}d#ECmp~X_kTrDPXpz^ z-5m3mf@(Ao`T`|}y|~&sH8t3g(E+g$O2k-bK_2RhJso|VmWUT!L>+BSevLP|x9t(1Dn0MV zaV>zA!u071&5`Y{r3pm>fvYga8CnK|)@na#jZr|sltW(+Hvv|Zd@1U2h+3X(_nrYN z-JuaYR=B4c3Ify*fU&*Dgm(e2q?d`?J}*zM7_#F`5Sr&C;R9y(PiKvOksCR)m1O2P zLOZW*`(Y<(Co|4@cK-KiO&{PRhMU8ur6HQXW{rO(nATX_-9|alOhe*0+LR5G;%O`r{o*MD1$&|BFua#T8yJm~ zmoATfS~k>ub`kd6=kT1HI94PR=CyD4+aT4{0G{6U^=`j?{?jME7U%W(Zvrr}94(If|80A{0x=P;i~Ddn!*G1^>{xk6Zav9XcJ{i&Gi}_ z$qp?cS}M*O+~FKU*xR6zn=V!P;)-G)=jtdoe#VySkciR?C)K6H5;Su%?ilBg(vIDN zzjm^gzmyfXWOLqmPJV7=>mbFwpK4BMB{6B!nCV83UJ<$ac|t&3!0ktS?--r!EL8x= zGKun0Mxeeov5?}vf*v0ZKVCoL?;QNX11H-Os&*9^9s|>xoOkEJtODrUyEp>Z@U=OC z$hD@!WL3A+8cO8A@~HAZ;o?M*5)P^cE4t0MOse&E0I&Tm)rZ$Rv_s zJ6hSec(1ha#gvkk`Mk-e^SB!3B*lf&; zwIW7MzopsONG1A(EjVcl&?%9a$B4@VpOKhHh08M*-|D~^p(gg8X6KhrtevZF6qJ8q z+?2wIjp%#&<1%SNSAo@_Cw<=(bunZ?yXkB#mcjI7bqTx|*?G0+;;UWPArkm!H(c8v z*i$v$Vr*Y%4aHeK)h+fjg$8zF@$V+4*6i}^VCI!Keo~!Z5zCiG@?093t1fYeD$C4K zdvl7%nI&wSjE#+T*o`D7*{p6V*Pv5fGijnKrZenfn?wcd0aR?&GL{&&&*_F0dy$s) zYY_2lgsfR!QV}(eM1LZZaW0w$-Q7C4z9M>Z`b7BlK^fqGnqr@1#Q;S8=z>`xD42t$ zg-}~q$sK^w#ZRRjFrU+ndEHA>Lserj$&4LY-a5$9UIEG|iN$S7LH`ZcydC!zDi(+1S3;7E zF0GznP9{FCX5GtS};aBr5-fRz;Jff~9tk10sytrDLC{jEt>IQWuO4ctPzNrp<@u zuWX6wb65J#2rSW`-y}>JD&A~9eG<$X^f2Gql6o~Z3i`+iA_;aW0+J2aeGM{-+Q-q8&7M zF?np$=qU_R452RrvI~+4*Uh@zg08O$l1~Uh1A^_34hkTUjIpUf>;};cAw0;+cUi2D z_)%F z<9&vk275B zQ&E$#k=m=<;yWG+?J85*>VVpCmyq#GmXLn&%8P09WjCfQi|=gtgx;w`vYAvlzgatb9j=lBEv`&_kOX1FpgcTrqiK2)}`dAhIZv=7dgEp zv}2i611Mt;Sy9~gY|0k?HVVsE?oT^4L*VrMC_a9ATLFg1#$KD@CCXnu-rdqH%vM&Y z{T|;XACDL8?ioCc*CO|j`Pwp%s)^^AjCvX@N809CuoP9JiO83IziUjx-Qv5$ zBR7}&>9kEciXIEStzEHfE36-2&ofIWSU;bhv$c}7d71r=(s>W8#(SgMBP9;%-%&lU__CmnVhOzk$xzO}fhRZxC!sy*_JvaUZo<=dK?-e>G9 zdGh_t^Ekbw&l5ajKslD=+~`%h$4^C=KAk5(SU=s9i8MHq_uX{d?%_4SXWR|%fc0g- zjxg9Yj$hc&{&o%P(|86{zUocm;wUTlLg&WiW_`xNT5E9+D3d)aIJNABub|*=yE3@J zLa0><%P*v}4ZqzHA3w^eyKaVl)|CjoIvCeRLm8wJ4Hk8PlQTFB)z1SY%TYIR58@`4 zta-2CF&-ubCl^nN=gD;ZB?BjXS2KpL<;#|>z5Up?MNuM8R^F+$4u2I|QSrPmcJXAG zge)-ZL-IR)ej?^$&A1Sb&4GzF1|R?1fE}OQD&)r7fJgy_4e09^kYu-drh7)KOJsrH zC%A%*L!*JdQ_S<@e2oT6Ss&&;FZRox55vzU@SjTc%JdP8EH}!|qJjL8#W) zCL#asJha7%flQ@Vb2u6;s|9^m{kXt51l{=1aAikOkPP|;gE$yp zv2-02IG#I0>;u}ZjY9V_ViV14Q@_mW?3Fkh4p@x{xEB>^#KmB*T02oj35thIJj`Z7T4UmIhRO;4&aOmGsbGsn~ z&;c^tX}Mz%#Hso@u<0_j$1?0{N*HewF=7GZMSL11z zPahm2JO<;C`jN8nCSXyp;k2$0YVXh)#}|Hx_V00^flp>W6B$@OYdOgGBBik_XWzhXw|A;<`q{hsFDlbEel$%HEN_1UQFTstG0>XEVzg#$uJN}olDd+G=psW9yaVz z7f_W+ff-sw?Ce~fvjV`eg+v}l~}nK!nI;wiW`N&6mS}@XgPi{728D2byyauBT`-ReBvAB{>g5sYi>mZpxCJZ~|iucS^3GC7V-{8-`lY z)>_cIgpcs^#4M(N;;`A1SRMcvn2%#Rj5Qg0V$d+8mX~08Z5KIypPub=pyP`knr~J1P`=PkK@mY*HI{KlmP0lb(moy216h0c{QMN33s% z8k!){wX{&ieXU1i`r%NVI9;+O1)`?V1T-MQ#5pjHWqcgDpb@?Ox?U)-Z}?ywaWpHP zB*)2Sdxl#0>Y@}~K4|gNo$}o!eXT<01ELhzjMj0dJ#|MZ7K=|Rg$o?tx zc|v1>jQue!YWui#6Yj0&y!8&BZPuE#o7SCaU|ZJj2aio8??2XP(ts{@fT781V;Xc*hbBoUSJ@>cea*$i%r?k4o5u``g zzc{hI*kqcj4mK0)B{3Pnclk+I;V3qXWEppSd8F*#bG4Q`eoDK=Yj~SIk+;K(YcS=j z-VJN4*)T|-9)}?Vp+5u^2F!R6ROjKfIom}k(azddymU^q^~!Vwl3f%mJ62LP5$ z%v23i6#dQRrO; zF`&sqWMY|8mo}2p^x?uCA-3K1VTlS;@rK9n*$nc)s2PQ@E|IT)@C1SdKd}<3_88DE z8>cW>oH}Za#hany4@Rz$1!b6@mI2y|;(XkbhBZ;kRjy^QD$()HnL+87!fRn0;Xt+j z$xYsT#d_6xMtXd|hEktR*v_pOqpU;iF0$NAqnqk|E_$Q@cj@`=58m#Ka^E2G7p@Kn z-n6jFK-<-jU>vsuM>hPGdXv^*Ur^s9Pe|_wZhYJ-h{^j#^+bvY@?fXMm`L%dFXCA6 zNqymNVcs&V%006z2E`$$I3ivCW7Fe9iO8AndpVD&Y2=J;GLF!XUg1H3%L^ZR<$}9K zcM~ms(j-UQR$g*h%U29svN&Gc4GocmUPRdqJW1cdhxBU$2b|7+JsK$|j(TGWX6SW0 zy2rec<{;2(D!M|$7Ak25$%`64qDG@B&q zLfFuEV#ku$5k$hucvGc%rj7Q+qt@;x3Nh`i^Y1#zy~Ke@jIr+^1jdr~iSe(3&&(EErot(kmB)$n&mDWZFlxiiLy#ADaFO~@7d`B_mVHSk^wImt0)5KtnZA6YxmtcPlRe#f&(N(!=p z+Jai)EB#oqnWb+`0$3|cy|h9$elQp;L#}zb$S3zji>(rUmRF3^YNwv7Zt&8JFI*5)X$_1!CWk??>rC(4yAmnS z{>5RcFgdi6tK?5BxhvPC@k8?EeT5Fhdk2PPDoV(e!n4>$u9Be$8+(b)z!dzZjasmv zYo*&259jL{55Vv*Xui{(ytJ@>zS%1le`p4`OMjLIw2JS+ZQmUZ%h?sRy-Z)=k#8=M zkSow~!TEl}+U(D8hNmCBMt+bWds!ggUBz7&=#zl|ERyL*%p|Ec`@!lpl~w(qbf;bYW~#2H;duM-Q07U5;e4I$>6;;V^hkDxj`8pT z)?O@Q^2ag2zf_*U&>y8JQ2P2uzy4ohTM0W`XE75eBS#B+XFErrb`%)@BRD5v7XHVF zUdF=E#L>Xn!p>INz}5+v!P>ygiR2T|HL8;lP;L+81amO4aRJe1K>aGv&YvVkpuZv} zpn{%-^N%pr#72$e69*Ge?hk}f!7+;(*h`sMn3)5!0deq5+(1v_z*K3V0N27u*wzdv zdu91&Eks1@+)1<;f&L?yfNWo&CY=%J9)}6&+6c%x_yd(=0;DD|rT*@MKSlqc@`qyo^ZWAgvn7s@V%&i_CU zh)Rq7$@qsu0My?CV=8u%(qgg(_9V>G#=tJIaQ65|va*L0us{B-DONHuvjC2e2MLWZ zaC}UF-UsC!jZGXa{x~E2cQIh1vWvaFwaFh(g(NJ0w8mfmfDN?%$yH|o`Vr(}0-->f&P&G<3vD+01(9UR|XOwUQg?9v;V9HCnqNp5FiXJ`gaJ3QDOQcGv@;0@Bbb8 z`zR1U1Z>tHH9ps04g5RbUuV-H0TRlz{x0@+`+udJxE60m6I!t~!upruA3$|49Ek2k|aHI)EeLf{;!?^ z!fO7z4nP(O5G3+<8Q>xy_LT&PQ~R$A{|}1dUl;!WOB)Y#BlVxkc%8%%+aMMc@dxja zlryqzTyu)xK4rtHu+J}`5TO`lIL5yNyK2(Dpp{AK6Ha7Z-LaTzniid68~B#im6@aJ zFl&k5xT_*Yuo2nQfMAK7cF>tRzRasl@JcA4ZfK0A7+MaTV+WBMmbkM z8GX4?;VQKBASG|SMUSYRlsAsI{^&mgu{fxHD#IMnVQgj?j7;^8AK6uxu^reAh~?$Z z4IF~*FWolF4W;Jh={SQ9FpSAVRI{2^E z_Rlg4+$8?L%d@yG5Pk4xHT`Q5W|aE(E@f;0+$w-({|Tk|2WA8~cU0_DZ7u%r68`K0 z{{Wc$*F5@z9r@Qh`X^4|&teL6KnmPL{$I!iAcK_SKPT3ikB2u9xnQ2vetWj(+GbaC z^hw&SqydkFGz-LF1Tql?LKa4N8bYeqRE#75!d^6xJ_?6mN>NcbY(i1R90l|1_PO_O znEahUIJ(H#*iD2|@S!nY)in*Fth9%p4}&kAdgY~FCu&(vf1nE`a&w)9uqYxJ9WZ@7 z)uk2LH zDYz@VM(hbxq;|4QF}({7MGvn?M`i%8xv3<(b$C(eizjqY&UgFlcIJ2{yVAO7fULKt z+Rgss^C!=b-Q&^9``LRWqoAKK2DEN#jR_NE(MpO#eV-HAEAr|BZgbWq7o!*GQy56z zn04459H+Z{&nqblKLXqK#R~<0Vc<+;vGR1-fAh)?rz!C2LrJ`oxOf$2i)%O%AE$sN zKm<#Yt6?#}-L313yQ*}T%77rXz&I_Z1fmw?7yDQoFu$|>kb3%NL_<*5?|zWx?1BU8 zWzc6uAl+vLha0+(V2q)w8twlEztfaH+I_+hEmYkHV@xPPf@}y;k4YXc`P<0d2aY@* zn}uy?pv6^868!>fNyG)#1D)krI=;{-Lsbu)D&UbMPmKUp8Q-90(;oM|2Nx#Kf3@;g3LYM#8R$rtfmCh*_4%I->`hAp;c(!v{lNj(>>kOLR4MTh#t0H5rr#34N!b-gL@9C*NFjd@ zVto5>E;K%>q=utPx9ZoXkEI*a;N38jkH`v>hFg!~aZ6Gfl|OyWR@wA{E2fi~VO5MK z>&tx<51)#}x%=}|74Cq;dW>3t$?8fzU~4EG-G?JVW=O#ntsTtJ>jhh^B-6>t+~b8= zd=$L^R*4%b-Hq#$s@|9r5g0LzqA`Rrim8tmn%c;p-BeQRs;S89!El0z9(x7Z7a&jb zb##U#&onm_7HU*bLN|6VfFjRS;>MZbJZ8@$QS#WxBfvN}Tk?i1)<%<|hTQpGo+2f0 ze1h_e!bv*oh7eZ5P^z9-`fm_|Ca8M<(H_=96xljY!68cUArhIVuE>jv;?0X<7Q7r& z@>Q}?WphELhY$Qyrd2;g)nLjL!+egfq_YH-8NWzQSh(=>@Eru04HWLwk0m`uB?t>U zfA{F_>e~{CaOl5*^*tojrRoK$BOWvYP|U^_{k||_J7Kaiea3b58;y~CT{6ynOn$`D z2uL20t~Oq93S>br8+6RH+Ni@_@R=)ieZM6hJN;l0I}>y#`JPF&abNBpLC}kfPimKA z#57Hc?(E*2U}PSl`@vW)H8H5hFA^Icw99e5YuD|ti+V^x>>t(`U&1Om0ykuk8t`iU ztG>vXzwy_16cVlOVM}PzGXRQj$h_1cg=9i|j5#fr2r4%n=M_=qqrX?o>PXG@eUi`b zoBmZ#hLb*yTgKl3hO=pFyQC7iuq#>{8D#0#&_g=A&)G^2?e`rm<>b%@r*Y;_Ic8|; z(({SSwuMQT{CCs<N8@Voe^>{yo?^)K((3QiA zZk)fR+J3Li1cV@$A-Vi4t`ciKr}mRP>VnRmQdZaofi#ATj$9k`k6bZtZU3tQxL$?}JAoQjSho{9n5O^0qyvIkd-EU!Tf_aa3Upse{3}(+nr!<-vmfZW|=gfrLVb&+TvmQj~6{PE1te(-S zpzZAOAJj;mXkRXWzT{468!mw}&4GF8$=sApn8Y$E=6sQ3UIGW@I4esKsE5Y8@6IlX z5m0fvZv3#gJ6bNm&%rvf`85NbE%4OX0{vRviXog+>65r}y&FKyU06B5ZxKmfcUr#G zf3_?6NV7tu6kdjaF0XkN$%NoO8{IgHwh?>M;gZ^uzn5jyS++^ zbBePad9b0Ezu^bhm0IKobo_RSp-u!k^6QeXrAJO;69AaA8j*ZF-}rXkjy%(us>#`- zLy7xytZU=S>wG-XJIAEJj@<1f^wY+L?Ux%3O`j^nDtav~t$r;#>6`CW&?Ahw>xT8; z)aM`P?YY*>ujW=^f@i|-@LHcGV7Pj-$CHjD zB{0l>GFu=V$A$$*b#dFiRm zOk@|yUDRa4rS|4f)d{7uWPkt_3)Hn^m^8MkHcRU6sxAD58fqgnYB5LZui}>IztG8? zSPG_P;7uzdcy)|rTFP3>JS@~0gp}DkQ9Z4CWt7pYz%*wOdm}T_(=#%pF^Xs_B8;c# z)j)Km(ZR)V;AAZN-$6UkmII<+#DzbIQaQ`uZcd^C z4g7ZP82nI2;4MyjqLBkY3|Xpan%}pjhU%Z2`kQ`}pMJs}gc=;@KsuCn#gk3tFknhV zwO)nAE$}yKiQWcE)fd=jOzTSeU7X1FlFB2aIs$~;g+8tlTJ%vX$c%7@!fma^3@P4H z6z7L{KE~f|tn8MIC>tyrcDZ}FU1loCya~6f_o5c6JGt|X#o2GE;2mDZ^gOR?maHRtS&i4hW4^@p;99riq1 zPR#8xwmDmF!sfGB!gaQ}s1TDfZer+y?jf4ydLPLTm#hE`-9AfYeZ|<6zX`SUYSICRl+@s+gAup1pDk?5DYMaY;zlDAl<+>V~LFXd&(l z*woC}X8w)Dt}f`v;X7{f9-bO1B2u{yQ_6*5QuUp`?+vH(Z7d40ke1U=7-dL-r@v== zd9lmn?nA%`jLIW~Ry=0;~(sTH3*b0BUcHR7*Hm`#^qj z5oS$QIy>`r#oc(12iJt&9-`PRORPOWor6ne4vF%c$Lz>A@=@oadduG3&0y)7^3VaC z2sH&q5z8wN<3QDQ8eEm`Z~@hen(Yp69MCHDP39gM`%#z#`)?#dL{Z3K9m&Q*7`DCgkbwxU}&bO#X(TsOcy#eMplR3XE{VEOmCYAG&T~+ha zdg1tw4;Gcw#7uDIzpv|IX5u42pS+?G-&u5eFgo&>+i5RN!lZ}xpl)+tL7F}gF zU)3@0D%j)KuWD!8{`gwFR2}S)C*|2!==t?ZvB}dS&zmL4-;^K)4skmkaKFc6snOSh z-Sc@Nqo@^M(1EjgA!9Q(NZ@}qLM&^k$?lX4pD)#!1WP_DFk!5W4#^6Rl;Mah*X1Z> zGu!Xr4Zu3=4WSy@pQnb?0z#9q zr>}d>TVs>Il;&@OiP`nkF~@<-`5%{q$VvP4=5$z9`4y03N)*)3KktF88W!G1P7G|f z*Db7{?U< zoR!aP)tb+gjz!0ghcsnaK8=~{g3S;80U-u!hz(@N80)J#Pu2H%=t@C4_V3U(wkz5z zeoO49F83=0a)a7~oRTF@iB1J0hjXwL zw1p?4?DHZZCOjtmG8s91_@pOc5aaS}%kEZ$PHwN?z?ow{M4SWIf?W}$r z`#XhqYkG6248#$9pXvnc$g|Ji?Z}Pd?_nyta4+`UYYN>Mkn3Nu3o%y)XFV`RG;}|U zEi$Xq#jVjliG}KYw%ED(JbGfp7W2y(6Q&H%wb5zv;YY5&qU^P|U{wB=GhKKM{CTYM zcN{wL5v-~1aC?qB^toEGcb0jd;68)*$z#3^`8kRG{(*eR^^efAh~D8}$^W;=B{AfE z44h<_AevLZYA`k0RhcOv^)-RrWK@U0c*sk`13f1Vje^K$bA?#`T!_=pLQBk}{OuNG zU3%IsrbVfK^Nil2A4n?kD0w2*WV+kr6J;Y1Bt)dT-x7iFwyGKGdnY)gAlh+5^iv79 z4msyVM2P}^T?{m1?x_?Kh}XbEF4%gFb)wLgK8hY0hBxm()jC_`l}x6%T=h}j(bbiG zId(I};ctX+A3wlM`zynd-1vb1d|}7&NHA^}4LOgm$|d3T8ra5-!gQngLVB+7um*Jw z*1vDcZ#aeJ6$X&U@MZn| z=k+-pjOw~pYg0iU#`TxSwB>W&#uEcbS-0-KnA*=;(lZh^Trw0wSl0_Za8x($bA3*k zB#yfYmPmV9;zhFJh{6IO4M^1fmwc9ceL}aW(=L5*mBbjP(yYj3~6tCF1Te@ubR;ffI%RWNUWsm z(4U3(Tq@+UE}w@-{(2(qs-{-6CGT=rxJmO{vKIvwlaKwiR}}@vsXx2kVTEeCD^z57 z%eFdFEAGv)OrjT_EZ*$brFW$kji#4xx5oI<*12+t`iZ*-0;|WiS`1%#oRq#YM~`WH zpZ_ZT2?jrV!5)_xyt zOb48eJkEs0X0<(*^V(V*53W5Af7b(oBi3QPj*lyA-k-W}8k$!-DjkLncbrukc)L*9 z5-JcJ!!+rSI^Hse*hq)U=6!i|_94sQ#t(}x8{k%}x-B6;W8mZo1%g3A8jElFVA;i_ zu;1v`OoWl|Cb^#m>y>}UD+-^bir`M9Ym&k*1W%-qc77EBOn9}au{%NCGkNVtn|B9L zcD@WlEs{bcDNifw*OgE_P=S%MR>xXZk z542?-vSe9y%+DAE;RupF@7{_;|rK)!<0V%|=S z?3PHGDi7HeHH8A@A(l_dsp6>2BkMr>o(;V|Hk}KajNBLbB6M0h8(MwjT;YC?eY8-E zjn|#Eaf-_pyb|pnhD)zS*p?f}+ao+==N@h!N6_vUrS~)I)N3*thKw>sRlN{z|XAB{Tlk=Dn`%Q|>wIBePDxd%Z~`{QoAH{h1|4 zi)wT(nrik!CPf%h{?67a9NscU7d4LDc2+n;Wm^$^D{;kRIFs+lDti0o`fFPi{Ku%z zmeE;7Xd7?i2oH_LP+^A9=GbIer{@ue*BH>aE`MbI7YQl0|S$zk&)3 zsjy3t3QA{ClOoi&!=*VnLQJxxT=FIHO94&^+*t`uP}gYPu~fR3vwV(c?q`>`XL_y} zSIn@;>t#MgK6!+m0I(ecI2pd!d&f`1w8(qA!rX|3iNmu`qp7i)RZ5$^ys6??R2FL0(iS3L4ymG_+p2ag*1L>>rQ9 zFGuSqDXWgphbbisj5?jtUcS%KCHFElNZx#QTY;e=DZS4N$bPrWV-qb9@`XoNTzX4u zjcbf8+5W@_qwYstW|q52`ymSq8i6~4NH5=s@IQu*yD9LG*~=ToLwD?8fi$kDezPrv zj{fc4to7pBq%`#Dg6@MdyJjrsyD_{u&Edy*fHwT}_06Qn;`mgc^V!S28S)*p&-1eh zeQV?30iPGn=1Oc%<3om}skT6u>9XUwk4=p0$o`;`-N)+;tTK(2xM^htAu77PfD4vTN#+t+!p|B5J;CDNefI&Qm6L0+?rx&=&W>)>!;YU z+`=ezwqD!xzDd$gDwC9cpVC;}Db6n{oWJI{w36(Z$O?uyt3aZ6Z`_$R4W8WTL^R73 zW5_IYO%M2;NhCf2&x86#9MMddI64f7jX|P?@kscq z8_Sedp}HFf(h*mpF(e7jdmKeqRX+tx3v)5I+ePOR6ApuxCACKj_my^FO0R8`SVg}8 zY%$2B5?axHmqr#e42-8qI3UmOLc~KOU=5D1?=hnHYds}ifDIgo!EA!9SO8I|WJUC_ghWvSD28~NsQ23_E(g0W_jOdtEW;6@C)9IF?m_u*BF?^@QGD-euY&N8 zDiX1#q6Y{`FU?$qL5w%g+h*|6?+*S;&IVhNu{-pQ$lOT9PK5;`W~Xj~t94B9$4%{r z)spUu-`R9Vf_T+t1k+leI4lJ$RS1?ziCY!3C{_?%YrfXv*fX-hcy}}Nb|BfwE^c3P z1HumNhjs{&fSMc*gV`Ei4uhT_lpy$ElW6_}AhS@pd?1z}j*EhRAfBF1)%@q0UE{1n zb$4pN`=mFqOBrL+4R47{DU17CgZiJAr{ty;f3Lw1;Mi)v9ilJGeq~x9Q>Zg^2yvCs zg0HacB=TLjk8L@QApH9JHQxxj;r| z=suS&9+zML1oiur^Z`F%Q9s}_)a|e9S+OYdzBT_})ls6M?o)xH238J2vEZ*rbQgL{ zxBx%^+?2e3TMV2IG?rj_=hX&bO%RmRCe_*71rjme&9gsKz=PZ&#QH#bdBh8##$5s9a_c~diD2Ae**eZU2 z0yslrL7n!}p@ALrC;~5iQ55t{<#6 zZ*??by*e@?MaPgNkv#li)j1KIR-i0f&qhQlaQ?AeNcnwHKM2qtWrc77^5jP3Lmg_% zWV)oigr~pf1uz(TeU|%-2+ivDQnC0)?pd(Q(_kHt+DZDC#9<#;cu=7w%#<+PWEZy- zAkaB2>klXb1Yz5r35L(FWIU~qtLLAbA6BYFO6At@zRlnE*q<5L>K3>@SS|lru9}P{ zS{}-1N_xxD^Vkd`4;$F;yjC1cqgpNaC6kIIyKIA*!fg3*AMDD>8A-lG!=&5OQ6B*6iY2-;XJ~gDF#VnYTgurjp^dF6@(c}5Ei?N z^TxE*4&fOZx*-Exb*xt-GHF&un1$z{nuF@#%4#kVS(bJRR-2u!X6vP_J;s)};OU`#-^K=s(Jo5Wfv_;TR(ZQjxF4-`Z zmC7&WX7Z;L$kDY@621n zHGt0^-O*$2ruhiqudBN0-Xlug4A>&N^xUk3mUG`!MdmvW7$fRlHbqwP${hvwAY$>@ zoR&i-xak%^<~s-=Bw9QSsNkR63?M@`_UIn;m-E=Hg9W=*F8CQss@8CAjSNGC zbIn+>auy(4snI8Gu#0lAR()@)ziY|YT}DJ>jF^4ftvJ7ogEPSrK<(N2#exhpiy!M4Cm@s#ikTeygLwPTD^i z!d%9G8A1UaWMMN2c2oY)mC4trKMGet`_^7^G!L}sWF32@=|FJO)r#vEW{V(g5Pg#< zamV#Dbk3>Io6mVnT$2v(mT775kbTU2{uv)s$NbaWLW?q%;YscHF;!m2bc?AY3S18t z9%y=l-MVnegp) z^(lzBmmY6HCnDt6weGI^XXY;)##szI==ldb7_6z= zQr&x!EJyZN!bbZwus7bBos^Jx%DJ47vlzdn1CnSrc~QQeL;NLazrgvi#a!S({;}Lj_TCZ`iPQXOo%6u#r?rkgUO z36k>#y8lh*SZUipq5PXHcweYcY9W6Ce=zyvJkpOaErSr(jQQ#{hy|UQ-d5h9s9$|r z>~>y;2vOfR1*(1|jF)be4)PF0z)x0;CQBQ38K)G^v_7Ne`6XwLdhr3kA|i+axbl-| zpNa?~N+bgbY!A=)!vgX)_{w1(l^3tKCnoS=j=&*TCkm2AU%v?Q@4HZ6<;$(aEnf%S ztNBUEct0ZjCT>1HdZ|fMPDB#uUV>Iizi&O+w`x*`jEOs6VYOpfeY)TJ@wFcRKtOPN zyJL11l$_ZjyVh-E9(%f?M3Ar0Siy4sk;ipD=riSM39mejQWun*kf`zG47)d-TdjEW zfCrRRkI8S45(N8bn+i94{R+_ey0aSsa1}g#cWjwA4XDN%t1e&g3MNC9digdBlDvTb?@&*9ZGGYUrGBSWsD>{yk&S0L(4e z=3WaoXKDsw+A2ejeFr=FMK22^vpwe|?PYB+N{2chl$zO+*b=f=x!1?c4E}+zKzDDh zR2-X)*|=kQgMb>&0qmJXWY+D+!gAg!QaPdKseiRp2H_8uus*vBn{R1EcWj~g#MpGV zlG=(35C=?dQZHgF&_@{;t$z50R`NW##D`D)XUK0?SJcE?BP$mRau&q(db*^Bw7j51 z<K><51`l5tP2&|lK>q>P4?4b6-_SoAo#08xTSLnOK z^;|2s`OK2`ikiAjCy8r(F7JmQjVbf28zQP*&aDB9RanBzLlQy4Sf{pA=)^i{H;W=0 zXW*x%R-K#DR~R1q?!ixM6;Gkna~&NcUP9EHTKhhgH+;ui1lfG@MI}q*x4IwgZ!zmq zknQ{zo^l?KOkH`)zxJHDkq-&&*Up90N_u9Fx2h^1!=cGWM=Wmr`<3_0t}Z=O#91y~ zxmBTXv&h@lcRuUkz=i0WGKZ9Dyy6q}GB-wJ-6y)m%|10cdy;{GwtHbLg1e@4qS*1| z+;6VydwWlxv~;Y3YSqptTnf4#K5h!X%MU&@ z&*V^%$u6s$b6zoO$IhsPNx2hl-2ryw!$4IZom1Vtyn_!38V6m!$!aIw69O8`rl+wd z4j+^>i3&Liqp+x9g{rc`8^tQ$R5hQh1?Y+FE&Rkil^-GnyB^tnq@@O6GFnBhly6(0 z%LK?SXI;tcnpL!5)TKCSDL9NNmt^Ghttfcg9?sI6p?)JTX4#kA2jvY-g|YVG}Y>n!a!pz(au(LZ!>aKuJu|03P%kkan}t^m#8@Dngj(zj$? zENzf6mn2(1(n|}vy_|t;^3<(1v`W;vQ0v6B;-NKj&M4=*zA19(d4%D!Gr%x{Vn!hE z6O=p7)bDWW?}34|lKw&#hV1QRu-CtXxNLCI{BrM?p0*=@ZETDnl`gnYs)e=AQbA_5 zddUhe$xXC&YafgrI@;x|Ex!8Z_jqB}WHQ&^*6u8kr6BmgKkkpDa}*v$^{tvf@+~_< z5vmFx!GuOauHu(JZphj`r3FL9i#FUF`3p}{Ms8gXYyPTwfJ9*Zo7+7f|L3@een4!+BPwA@OU^^~m6hIblPa;V($8)L z*ksiU00}0xFK+!ZQA7rxR=cPcuUl-ZftT#;4Oa1>G2ruEyGO=Yws|dnVh|@;0S05e z>H$6c4G*@1gb5C&Vd(-BD^-8D&~M~?yWg~G_ViTQPjFbwsuhAis6xN=4a|FE$ zj^e-pNPM1WQAJ;{n4b%`=tjQd)`;-nbR(2CakT5NX?$ePY1!yZp1*0Y#%oOT~0WY=P z9S@JZCcr#GrO2{egQg%ikc#`!BHGe~csLmi!#9UrJgdETB6tfPXX5%a4N1UNa1#RV z=W)_*IYknvSdvx8pm)2JFtE4W-_=FQ^4yEqjHUe!b*HZo^jZT^Q_I}a^wzMmah3Ca z#eK$PbK|74T}3m)EwkOS(WJqk)@l5Gl_^A>vLxw1cF$lvQY#G67H|{_vm&8S^ngxX zdRg$r?qLuqYo!(5hEGL7Uv|L=tl+(F>(I)YMV)`L&yHY6G7hjN&2mtyhb7J2tSP1} z&mwqDVYo2=la7y2D$+Q1adulCx!q1AR5vjzIKw6&SuV}}DBTE&54bgy* zxK4%^0B9Jy{l?H-%i?()P_?(5pZY zj&0lK$=dtu-D~4n*K^L7_x)B?b4*;LM$M|4^Zt#0tjD<-)^n?9WkFu>iEfTF&?<~i z#q55BO@mDciLvy>6C3UEV8fjBm1;6Om=|-O%s#2 ztwhaEGixz*oKdTl6OP3Q+cPimjxE z>9~MkO}ZV>t4mJkIf2-8Kx3iV(g461@Ztf|8FPq%%+<6Ws%LMPVQOZ|1s>cs0)=2u zxu=fPXxz+>{D^FW54r3^CQ_y2dq*{jH7l`)tcu1kgW9E`yeAf5T1=ka;LJ8GE1IQt z&GGDBmZJ}zrb}Sn&OY|qimuu$P&+<~qs8m>Z>X_3^X%dGbFj9>Q`4lkE8+_lhDcq@ zVJQHYy-weffET+ze{Vs+kF%0=hXrao@HRahK(Cpsbj^e9W@Qf-c|}?nLy!rwU3l1q z&+8(FRaiIe92*OqB<7QlaikuGt{7D(2Eiz=`%zXy!N^r$dfyd{N&t?m9nhQc^WF`< z_MR;drOoqi5CFv(BdBCsR2>pgCIQ5}AMrLkOhV%(F#Iz1Xyup4&|QP#FMaprydrS61_AFNM?5xgP$K zDZ^O_CY(4~=Dy|Yj8?(1>`bHf!vA7>A6d{=&#_hIvaq~=(BY>&N3MElZaB1l_>=j2 zg(hsg5Iahyaa{(V;r7GQbMAq@Lu$vN=|J*UWB>Bu2kLuvCN+Nz3R%u(E3(*rjt6!r z*Xy9m90|a-<1#A&tDuF?*00s3@d#ed+Czy-+{%liDrikhwd(hBDDCxIl4rW4p$GFO z`C{TymyBSp*2y-BxqJfwsw?Zd3a)Zi4Phud>*$d0SGIUK&i#VYT!uqKELXdlEJy9< z%CwahVJ;LE^k+X6%Lbugk@vJ36LAr=c_!~2r{mFqs5aCa-)eSjhK0%BlHgm0@g!&U z#Zhftk;Vdv*c=7+K>+H~T}Y)NyH11DY0r_{d1y_L+qIj%v&ukn79cxw?NM}nAwcDu z0Ljt*vV>Z_(@T6hT>7F>khX|w(e)fAt^OQa8B;tBWVHd+g!aMI;tdK}hA>y`c}>$cy{?m$zj{j_{-N4MQcI=>O;9>*atj(IeeRd2pu zG<4CJLQJd>$$@X!o}6@FvdoMxJAl&@y<6*zf?>R8CJ(aF7IV*1RG zas9gkFYnp<-nS5Qv0-$3P=hv1Y|D=QBId5D@Y4<6JUY7Cb>|z5^JP@#vw>*dWa-eA ztjLP0g7>*U1DUpzC&t8C1yo(9o|9#S(f*0`U6C(L3X}u+ej* zgDbABQ!V0HhgY#$)b9J2m2W+b2(N8FB^97Bpwoz!@*I3pHwpD|-%szJ!&CkC&CYX>AbHU@4V zTLN#eFrBuUvJO7o(dof!Z|XHagQQ7kG<)bPkIv?Nm-1mnurlUuJP$OPlS!De4pp#h zWUI%cY0|G>+<_LNff8lFCt>|lBTgMs`!)l+?;=6b=uRUKvp*HNV-fZ1$yuC%x`k1$F zm>Go#1aX7u$tn2CP;+Xa_bNu?9P?xOx}5jFz7zh0oN164UQME(W^{)tF#Dd&l`qZQ zRU%u~Dm6UcACx`k36*KGfV=3w{EZ*{1KB*l54q$hLk4iu$-T#L_6jhKvIh_`?i+T7 z`2za71dnpL<;rSaOTs9c%(ccXWVeP?Dc3EDJw7;52?jdAfKdr?85r2y1pGx zgz39d<9$)2MdZfGjn;{*sW)Msw`ObZM+BBaOtcNu(A*e_0`GQed6{_UYO#p9Oy z6*8ayOX)7W=0MuCs^>s3wQK{R(zL!E`4gb3YIP%^W;pi9p<>zcr$Z6YEN7BBIQGLv+Kbj8zHECh(m41ui>? z2#NcFoSa--VE5#~aj~AsoA@9im$=UMaoW43oWPpL_Vg6WXeoPe&=#_n8KMxKWF2Zt zzn%E4b6AP*gQDh@i3mNOtDUg{Gdhcs-djREFB{6c;_V<7_EdmwvqMgaQV8B_-$$b=U*hO1=_eBDO& zbJAyT8f^9u(tS6&j8aw1Gib2wo$pLy1#Dr~#U)@N6EGP**PF{a1#BW;J0~J+GW}5L7HiU4xSqt z?((~2q>92#n#toaO}@)20SlnE&L3kS2+iRoZ}(56P2Fr*1OsR2I~qrrc&dMXI}Ch) z*dM`8{3mLnXa7`^|Kvk|5T?(7)=z-+Tb}-1qW&G<3j8;GOD$kyY53Xd|Bt|B{dA$M zpRwM||KA1fXJRZ3J0s&~=rT3q=Vq8#m_9Y(r@&>Rq5m|Up8${UlUjZPRC>mLC%Au$ zY5udI`dhN}|AyfHt*_+&Y`p%eNB$|p{;zeo42-Natn3V**!Axq_BW9I4L$!!GJjjq z-;X|hhaI`x{dJX-mJ?{iiAY)6)NDYJb1> z`*{AFkNs~;f7{wWdg}MSfAHY&$^TGe0EEjpGcKD%b))hj({>_qd4bfk7G8LRz{J z3*CHeb_SKf*jxSF(qYgUB)!w+cJqb0FV61wv(BI(fR44J1|^#_ z@G;?)&aaI;DMmKjvI7fwz97RqgljmT6K& zHhgP2f#>2FvQb|t+A7d(n&*K*#OW&_X=t54fm^_-$oS8%i9e-!|Nf5nEBpFa=f(du zfc@KfS^nPu?B9lm{J)&O|HxARHvr4&0;H@yj_49M=CLtjHIPhYCRgk4`5IPs{*I(MJ}5mT$@j zPKFmiX2*{n42LC5_{$NcSfe^8&v=9|{yq!$Z|sZ%gkd9p#r%;_{3 zZmP}1Ga-JBwtznDYLo8%?R%z20iu4-6E&kmF>meUYfWOzTZsP0`k# zhl=tmNwmgeaqY)*aov-6U8?$~#`_rpn1veHJuq}^=_}Nb4F}$q^HEL?=_mYOGj-;51zuRA?o<-45ko}t7kQ9 zL@&YMST*g6b9`J_XUSeLcuL86az~*t(XpN8m;u$;X(DKcW3U*!v)1O!`1^5Kb zI1l~G!2Sq43oFo;T{OOvK#hP^p_G?l*mMF)MQ$$=OXcaYz{g+nUzn`aGIya)5G!!q zRL2*X2a8uTq>*>vQj;3oa^q1G5{Ut>| zvEkwUGAd9DJd`4MPFyz<;9A9)DlUIl!$5zqIR|};5MwaW^Ab_b<(n@MamE!>k+G)A_e8tHgiAZ(YR3-QZ%W{l5ojng z;BEWr354y!@hvNEHettoNt|`F1=vhUcD@=#?4VIo7Iw?4=%K85=t%vUMEe5Io2!z5 zSDvt4(&O{CDUSvbv91NmQYo(*h)&$V<=3ZBEaL2)ITa?jOSNYN@tgzO`i8CvKp0id zz#*f_FTzaGN%03qqiov@84dtyJ(pvH+ry*<3XAUky7nM&1DjT9!rA<9jTrx+QW! z+R^khRy@~G*eY7?0&5Dk+URD$eg_rgSyv;8!b=}<_GADd7aRs09#}$+HM(x)BjKbk z9zDsy7+NUdcTm--{r-ItGVq>4-T?r*e@;h0e{a-~c`d>g$%$Q!h!w)=9+Wa)&x1ue z>1Ak=PG0&;jFC{D3=z)cx3@z)Sgz$ei*)aLf?PlK+ml%C4cNFB4^wcpXlBN%&8a|t zKruf0EdGl^{2AZU=Z3t8xH}7R8?cU`BkEbsIG}^cR;*X7N{8kon6A@+?BqUK70SJA zwpT~KR(GR3&j!TGBykn>_&rLbt#B1{@nD~~6#S19jMo%^kC81f*bS3DBT`Qlm~n7@ z#*qDI%;I*|0-KO-*5vR#o6;?Lde8B#G9Qsq9lJ*pCeM+rZLa3-E#CW{C!glsn}tnW z8a5Rep99;ZKGf`x5gpq{F6arxK9lU=k!-t1$4v2eCTJctSlkDHl5(ay{~0Wv=Sec3 z{w+bmjO|N+kObMqy#)HpCR?_itv7Qv?X9>N2e!ejLwnblzBa5+l+{iwWW8$}+Q$!j zVaw*bgKgXE&B)Z=A#1&Pd9RVM*Ywb{Vl=Js!gZ~Yuti-}{|m^*-ZdZNxa@hf%Hc4OM@0QWIRZy4h;=tA~*u{~pLR9K&$)(FY5bZ_1WSv83 z&eO}{gPA>E>X3t(tr)CE2iIu9GnQmc4d|7uhLIJ`%W{}3`d(#N*&QNThebp{=Jd9o z%vdZgAh;73Wx>bA_ak#yS-lN+vplY)Qp>jmqU%iPEN+ESSnu6>K=Z7p0i@jDg8F|P z!<`_k+{vh#_)A#+pbCa0QV#;ls_s*V-NTx&!iSB(Wg3mBsBX?eyg)zVXXJ9_Q{VL!);3(z!vG;O9o45*2)#%7wSdV&InBznHX~C+Y12OLWdX(8=e?qkLKTiKR}0O5%AEH zBZd|V1LV=|3)sfh4FGhUx?m9t`K+-A$ca45=-=>p?`?Gh^6lgZpxo_dymkR_-CaGn z!LyEkf>qF)`_4V0&>QQS0NksJ9~ZWRQ;-(cO>DDW|1cGW_yG%+o6S+y<>wmvE^LT( zs+@h(R%}2q7VOd@eY)V+^@(u*F|y(AvPiK*bMWN0^MG5LT>Dm}>66ry#)xqm7lNeTY5+Kt^k4TR`#kKY*z5$ZvvT{ z-3QoMr=cw!Uo6=I#$g-3oRxpAvuyBZ=HrwMm1|7tLCnztpQh;t#}{ksh+q0*T+`?- zMgl9+-#^>~51R&~2nz{YVH=zIB@|0j5R694xZ?}9Vrmgk4M0WlK-t1n{f7(U6E95n zhjBQ{dE-ISYkSs1T$L$VX3;^2DaadA`Z!CijUHNJ-;jI~lajlvOd{BD;kAfc)oTd@ z)=gPyY4kT-6&0%|^jP$(bgOg|4BB+!MFKMvGZb}}ILkD$gRgpG zio=Pq*!T-nElJ}^aOH^mL*=w9txNk$+SPBmzv_~gs@NE?h@-V~U4n7!?w#M)-Fn>c zEmcL&hp}4-U3Q~a<2ddA@#F*QT5#J6J9X{eT66=#Cb@e3@`Slgy!cRtDxunIsOqd9 zZIrksKhlUfsZ5o{Kn>Hf46;#0S1rg$IEQyFbV2w`Lef?y290-7C(;g0a^=xtrHAC) z%iqYe`a*w-)wPOZG09JOECJQhCG^VYq(d3=oL_aL#~ysNR+oMDyq$Eh3SE*qX;3N(z>x5=7sL6TD-B#vS1`-&jJjgmP(3N$YCS^k32yqa7KJ#I@I=avfI8a}Ax+>7L;`1Q&0=Xx*xOw2MOC?V?#& zcA67xR}&lUl;|rZq%p!0u}H8MHZtB$n%TFa=|~k4S~>08=sCo3>%NMrV2!u`YPo5b zy;-;&{tOTeeUu%?woFMR`QSS>Ol*pv?iV7e;}?czb`@z%&!(4`Y!GC`?8#a510-c#No5Kw#VLr+h?nsgzQ<}4mDtfR7021=2)&rd zC-#)Y!LAF9j+?;dV%lNT5lqI)wmaM$+i`@@aloRdDLTkWtPp5jIT52yAp5KbJEmkw zAPFR%)HgPL3#)L)dC?{a^b)VDuBwQ(G+{~tR!zho)|1Uke)UcpkR|9OW`!)k;b0}~ zAPGJ#uol#`?E@Pw+r69dB%+eZV6<{^Z;+9@3 zy;fw!Xvt{J*dd^uTUD*HiE@PUgtCWnhjNC}M>(h>^)lk!ntc}XHtp@!RjadBb;f$i zdd>>-?$Qlh>|Zji=vK<0lvygx92)kq#+OMlGg7bdka238*j3QKJ1Jz`#BN`U?Tjfo z6(jBr)j?P5@ryqH#vN9tqcTr_?KwRBZbPT#`t5<5`qVy#-oX79i`n055BD25^Y`lCg=JNY1{W~~yaaS>=DZBkSg?VGoFgv06Jx32IeYR#LVm7~|{Hm`fJw6oX z8^=tYMxeZ45XphN{i%M1swwR|1GYn?^FvpYf;v~8_hLg)rv97Fpj<+16aB7?4Mo`1 za5&acxPPc=Ox`dE%L^1fk4b}&XXIjJB*q#-7|S8D#m$Zs7;H`vq|Cy#_x`1waH;hB z1Wp{O48jr;5;vQJwac`iijjC&c-l(LzM-UmjvATPnD#yGx+tMT1egs~+d)UrLnr5( zgL#_jYMt4^L}rNDg14ksesUEp+NHPhePL5EwrlkVFG#zE9rZn*D`x^exXlmRF;%@q zgl&awifxzv$N19kY1PT{eS#2dTIYu8n20+W!Oe<+r~o``mJ1*a=*dN@83I>%Igl_E z_+UZ)<0I$M)kRaQ-2>Eo0gZN)ANM~ya5psU4F{vSJy>j(yYPHy)av79Qnr@n+R@N@o`-uQ37 zh<0loxW0SGUyiq3;8wK$(Bu|cZ7>e&)7ZQ((x-PkgTyZa^ z4SW)F6N_q{fwA^?9!L?hw6pHn9?T)qftHV8B>>JHR%*+EfN+S{7$*7Q6yH$KQY3wN z&D?MW#mnvKI$OY6+;zF!iF&^3Z{b3^p<8!7`g!#OcY80jY5(LTTg*46_lR)-?to1%GeP6!xO7wG zpiPJ`LFi)PqWDA*OIu8G{E`@7kSF%4aNRb=_9vdQy%+40UVI9~XW1>0c-!n}ioVAr zCy#n;+!kCqyq0ady%zht4OdMMI09)&EDSWPKkVQ9>Uvt}YH!CRSNB^*ZdJr@(M~?q z>+U8Tk@t(d1xEiNge0C39?Nn(NSFomdv$cHr8%pSuE_S|5K@%&zB7Wy3?}`A$*ojrA&;Y7Jrs@ualJ6if#_GOdvhLM@ z@veP3dC#4T@PRF+Zz#;6#VNFf`s1FdmUS0d)FM2k^%L+9(PSc?|1W1FcBg3eLi% z42biNV12*&Py-NJz+tF&=}2r9yW*s2VCfO^{_^feFx1DxvH8)c<;NR;_LGKCj3}wJ zCLEyyb?gF)=`EBb8U<857f+<^n77@?7<~CWGQpEr3*h2fK_EV2n8PgWmaei5xJoby zjhLam{8hLx(lJTC-+y%eEza0c5Sl7-U*0V2!wAjeEhF*E#U;?|<( zQujSxuyKj9UV~7A*_WQd({!BLSa&L6d4IJ1XLjTD0Z8X{*eHVh7$Qm9nXVs@CsYUk z(%JjzlY#s40MR_)kwGrUkBQixKTqmu1*ZL{4g2o4NWu(Lo4O5|OiL}5xhly}#Ue+t zevql~TPBVX4HyyIHA0?n)X~;+oL>PGucKJUl81$}hWeb!z%)&}hDsvdU)I}-1e#QQ z9PJ-pE3MlvIRowy=1FIQMkaZurHCbbgTFqi5Rn8AN2xHS0#R(TR1w^0J3mjZDRrF9 zLRYx|<$ZJNOD-G`4~NSu!)lpY<9yn`F06)h0Eh9Yto;kU{NTNv0HhheU0k|I^OXcBP%SR}^RV|xEMS2T5SLUr&tQI~wb*f^^2cLhvP z_CC{EuPG`^brD=mE~|b1nY###M+=w2+=-=pz`}$MIT3wgr4-^E5)wZ(h9BYgY+9rB zBZdq?z-tgvzCy@uDNYm z{U%J0SbMW3uNE0=yWvoCDN+NG zOBCL|U%067zHC2iyz9;Vl=ejPx*5$@saSpl?E2}m6|gilU-vmW^r$Jf-oDawb-513 zEzI+rK=Z13Xg+qJ{P3!^b!rh)u}M5pswG_o!>>wvSo91w{}Bc`&XPby%qZb|Una+& znQ+9vhA0cjLPTJy8JNA$5t7Jk|HA#s#Vd4UcFMgX3cJGoZfmf!m6r_ZprByJtR;3Z zlQuh>;MH-sp1J9>gX=oLp%a0OiCLg(Vw1AXn240Egs&U`xwKC;XEo}Ghvtny4l*17 zIf%5eW-TcrRvU6$T_Df7CTWeu=^h|OS+sM+_x^QbME0y%CS-bRp^BHv-5u@d zx94(dcpOfRfS5tslPBF?ku>Ltu?aotTW=+DF7L4&-;MN zT1v1-Dxi14@d?%0jhdA-C_cq-IG892fxF;k&{aM*aU8APA}ooafiE9D^R_p{=M9VG z{F%Ouco>Y``yu2Ra-1kct9et?B~h^Y1FzCP2|%!9>_0|3_=}XB*VfIaUA^VV3J!1%z#ROdHfF0hm}7#FyMR^T4SPYwkoLslb0+V zPU_yB%AcO*-TU{E`bA!&Ln7&m)O6ryVbluJ^=HQ21_!<<^&;}HPslt)>=o%!G2mot z`2R{BF}Fd5StCdBMJLY(9W?cmGvZ?+3WiX^JLX;bK_(w8ho6cMU}r`smfs;=Gb#$y zX`kNJK4e~CSlg6Pjt+ysgh)^?CdeQiWJoKauSAat(APEz>{uP=5Zb_P z#%1mkOq1z^+oj%D)gESQae823W*`2+3Epw9Hi?T>J}OYc3R*#L6kdu9Uj0BISn~5! zKFORkb&%x>wmW@cqAVFW5kb+Gj@@6lw1i6StVBk4z_PM6g<2^p4ic~&x+v%;usdyL z1-KJ-ns3@nbVvcD#Nn?HYxqj+`1HyHG1AIHanj0zoO!j#c;*u7;D=xgPvy%XB@GJ# z@y3?6__N`tSwC}!Mg}vD*YI;C(>4p$He<>0G-hUvdCyw~i<7zR*9zVm$@*B4E1&BH zH|`HorzwHX#ALlyb(w`p2JPTFsJA-R1-D$HaZGV97HG{;Y?k~%A_9|;+j^uX{2}zu zYZZid@JWq~z-a#BW}$=?&qdd%6(^72tq&MRuY-3s(Ie;;q^uR%9d<)Ozka=oo<#Ik zl_0+OvKf$xG&*!}Pnr75UHJmnipJ;g#fhPb>G1#s^X`#|H-=y$)A?uit9Bp$OgdGQ z$zRDp$NZ)PNaT^_4NrxX17VUkz79E62b>AU8a3&10$kvXZMsK-czPgrGlcVD`D@sS zaf4mPqDp?RWgc$ATJ^#szGFwTI^b84WLElWtFra;OGx^CO;|-Tu7~H|a?Tk>aJwY_ z$M_0s{}>fX4Ch1zdW!jN|3C{=B#BFgP@lF_C;U;}jLHa9{4WKos-shuwCy~lc&tp5 z5&KfNu+&Ups%@LjP<44$>aMhwbOHm2M*)7vds8VY;d}{2&CVPKigqBae8>mRb5{KW zXbSxZnL`Ht(E`>Y#WON5^Yaj}$6xR4#Rt?J^liom+b|DamtSGnSv&dHz4KhM=N^7# zWFn{DZCOZvh{=8w*lsQxLE(nG7%|OuK4g=JdVpTrabC+2(`!c{ek19ati6q&;+;dK zs!Tlf)#CRz5sPqrw#y1;*;7vlEg)M8ojoZV`aIi#Q?i8$!E_E|U{bqitld)uW6XIu zoS8I%Ynue;ak2LiI%f3W2mJ__hVnC0X}xM*!ss%54HQKz-#2gzfO4M5taIqj(JrU8 zyib=TZF7G(npt5!;%Pq4e%s@G>hQQbUc0FF1y<^)SBpUvbyX+{MGX_>zla9u;9Gm4 z#A8^4I^4=t`Ngm+wKX9M+^Dup&3e|x!fK$%$AB()4htm}=tdK9YpTJE}6{ zxeO`^Nxp10>6;Y$DQD@~aH+aQ0%Ifz^om$Iq28}iAJA`^a@kk!x2qdAtEIsECrD&oS{E1Pyo5u`UuQNWp_KoJbXN`;OI+r)9_a;j={UoUkS z_`xKH+YgZ3aWfy#W#NNs60L4=tulMEP`a{)3iNghA)V#gFPMjsfiu z6PIsbqZ#J9nt(Z|QJ1L@)}wmuwmjlk%& zhgS`6*WPBQ?SmmQ_P|Tm*lU{jttbYSK&KDn znX}X8`SWun^S}_TmxJZ}S8HmWj@CT=yJLH{0npd!cI#E(WlTax&NF(y^v|nt14l)_ ze%1FV1UfYy*sDFy+ew3)CM}P$ALe7O9xfpG2zsMM#U{&iIK=VJ%+9^y^?X(6sL%DhqrptK zZ@PZ=;J(oo-QJt}W?rQI{?NCgv)rL{2}jHga`aWA6@SihwtSAfKAy`;4i-c0M>u{R zqCPYGz(jDDtU)6UNv~v+)`TRvs;41qTjSb+!Zv9T^z#!uuyWhf+bu&kj~#8eFMI4R?-CiBW+$zAskCpERD1lL(8G7Sj`^eKbcR;eyWt0biK}n zV(%Ew!n&5WkM2(o+H{(=S8?QL?Pb31CM1yZa`ydtZs8?qt+Yr!Yirn3AequuEW|it zem{pH5^FQfbk=H*1BD9J=`X8iP01F4)5Px+m;{A(hGd@|sFtm>Ccn95^#%BLM@^^2 zEjDE{*5P9$?Bz8d5%K7R?QwfUUM8B>}c5^_)HbN=}-{DH^^D4&V!CPR`^TCX~ch=zC zg5=CAx{}hjZct4`SLPiq4@Yc=#TCg2aMcd*diP-P*>?nrK}7pNf4i><1e0IE1S$h| zk95b3a>5y6p&1DG$Cs=?FSe~f;XVq|_hp);OKsB!KPQClRV%yO zCq)Ro9aaAE)=d(C6Kj}PdPrS>$F5TD)3}`#maX|bWAV!99<9v#{8CX2*GntA-CVfM z4O;mqbS-KlQP5`|tB8nM@k4L_r>kiw&tYvzzxA95MgA#aMZP|Ps0fTiZ3Fa%Rj0+H z^^4X6atD8&HP#{f)W#4lU6ub2FPg?fT26TAEq}KVLy1)TqWBVH^VDD|gCcTXE?xp& zhK=vI-*Gc>6L8ZnXaX2Yq-Yd=&N5VteKV$FR0>iNRuoolDa|X*E7LF4FIyFNthL7K z)v8|;cyk&EK4M+E33CXpP`lJW-=y!*8N*agdFX|LV7w6>^B)xi%iKOt$2F$x(x^Wj zoky|UgM%7SOJk{!ecw#C52$a}vW9(cT-AJ)Zh?5o9*$x<6UJwe^7&v^Twr#`DpuqW zD^z;~1PyV*W9xkuJ~n??V5?lK^m$o`w{+f1kX5eqxE^sz_HKP1FDz5pT1|~f=lN(q z+F{gq3VG$V74{OEDY?9CgEX_++$n6c)z*u%Z>MLamJcWl#_nWWSSKvouuU7p~h1m z9g?t{?rXj9gTL=NlX#({4`}G{^GC|J7^2o;Il9xcSYY;HtF%7v zuvu%ky`o&svGQSaI6cRfUth1(y1-)fRE;M#Ke@(!iI2yycQBEm8r4r~j-t%+AO@h< z3UXZ7HIW0XYmfV?Rwsa6GZUbmDaVM8MkA5lXJ0mMV|_I9!-v6NpRD|iTK(6A#Gx~f z(a-IK1KD$A5gqR&+;Z~@FUP?_?4hN4ie=hEauG=d>x5?vLT=Nqh`i9kI?2!7%DQxw zmQYk65Y`-KBO%8J)Sjndtn0(>NAFs+)2Km=zVb_1*KEhfZYgM1PTWzXz7b<{9q%L;^NSU%kf#xq3Gom9<0reK-NGllu z%g-nRWTUr2*nb-+2HIUsj4kDedm5~E~-W`SXh zSqO(ll0q6MwuDU-bJ%SORx1iwlz&1vlj{R2ax9w~*v5kei((u^pHWR)jk!yBK?}hk z#W<*CzqZ_AXar0Wqbw-A&L2b>6e~#QCQS?HO*70BcM37jUh@7Ct+VoWoV6y_9iql> z0aV_hJu0Ez1YQ}n{otC;B-Gr;@jz{g#;=G@Vdh>a+9uET7|A)=BTd9OY+<9&Q9 z`bE+pCUgH}cl_-pCTb{C5N*z#bbD6Ul+ekO|AQHYbX-w`_nNxw#@3T1S;X$mp#tE{ zk}0<`K@qI{2{tmK9t6VZU_Z3+mfaE|R=-|E^>QfNk`;auyhY#uqP#8?4E|TaLib^7 zb~N)QHNk$KL_r5+b*QhAv79pO_qae;U%59g>6RM*w1aWBlodUX3pbV3~d7O z)Fbm*_W~Zd2Ku3Lr`F^Y3e-%O5MpqCr0$DaA!Aaf&;13`g)TA}y`s2zgom+$j`!Pd zuLs)sB37x>WKq{P{x85qLjxL8W}xm3!s}@8@j1eDTT1hB0f%m8d_?MEiTonDashts zH)pt@r$;3ae0{BgvR3fWGbDU*EKvLA5qc%Y8B{!&@aMGB&0mfxMwci)cp6LZ$jt^L z-f2r+{K0bBMj!Z~p4&6U!dMrKU>M191QV&L=81+#ztGR2i(zx?yRw$k+%m^3=_Yap zwTYF>!5YaRUL0H0|IE^vGtzw^q(vKg0c^lzkyLWM(+O>JUp~S+~a&-F8308*l<9+LNuoU9N$J@Ar z(*12dyKHd7e?-$JhE3M7d8t%5y;oCNJQ{4fG=juQTr_W^VSY*HroTC_w|sltNl`Uk zkU-8(&&#Tx=&0F{kb$4c8!4S{5v7}qkswqcrt+3VW~;`kvnE;rgPYTK?XeAYtjpxJ z)$h&Q&2F8e%4Mw`)#qs8TmAV##Yw)_N%oVQmfYN69j_wqx4WE+m%8-+m1+8B4&}p* zqmu1W*eb1rVdwnb0#&sL=1EokuR1`7I@`H|ku(vma`8d|Mv)tE?B2Yz5T4@;%I}tjq_Huu{XHV>A2~OF zq_Hu6rmy`GrS(}x{I@hV=D)|NF@Kir{!U|KWM-rJqtR!pzX)UdY{bmY$jbZ&1!1CL zrvIbtoR$95HvEwQ_bEX>cmGEg8U4RW5XL_WhyS&d__Z(u@pDf3B1Mqtd<)?=ykw9Wv>N zfMKvov6gCYN=*AUm*edV*dV!l6aopeW4X-wxMhRV4tiGJ;~Kf` zvgYEk#RjN#)%<(+mqA9HIc9}Pu;PV@PA8yhG@}!dAg8kfr%5gbnK}@XSfo;sXh@P3 zaofxmKE*3Kb7kzlAB1$r8}2ft4zyjIAxmb%`zq$^!RfzUXPhkI5z=(8yStF&g^Is)Xs#;?7laEN*Y}NJ*VxDc9x^wptTn)$okKZ z-Jjlx|6PIo|1jMC_qFwZjP(Dgt^ZrZ;J?(?|0$jDAK_B0tPFpIA^t_S6f+$&!=Fb? z2RoFa;zGmA>aVfxFO1NAF0(CtAiyS<1cE}5ew1{C$Z=bYcA$h~;AA8e!@7uFx{+bn z29Xk$>ItP!^>ajbd7a^I70bz;MQ%?^BxdPzBq@W9jk1y|+SB{QL2fUr=%KCC&UY0H zF6XNb_aCQq4?G9!P<&tT&^civBTBWbuLbR4eKq+@+lOZ+HP^aafwp1$O{mQ8mAyYQ zeLi@;B*Zkg<*HGvUw7|#g+37A9I9fT8VMN#UqytvIIphJmh-OYflSH>E?0ia1&FNkSV;cS;9Qb!G-(Z1MZOM!#gNkG<99y7oD|&lk4{1k`zu1?N33 zRUF_=i`aW*8`&Sc_871P?ZMX`FRkuCRZ$FI>|_o2objSSu<2r3E{tOGiTI)5pTI9Jrr5i3ayuJ6^&u1oa6c5E zZtoxAa**V0VlPV^=u&k$Y=#b5mtmlIK+9x|UQI{teR6l&(y?E7l?LJZeR9&HalT#f zK2YO>D!3;OmX_7-21>zI+EhZmA_yM z-PcdAId)LOVxs4OA`g6cu#urEk+E!V&+ujU^)TBm{OQ#>jo(Q`WE|6%J&B&teKYqi z2(?UNjt^eBSN$-^d#;MC5Ne(e?pBx}4z9Ax`gS{e`RiNX!st}Q7=hP#M?0R&%^mi@YG5`#Ck!1}ui;z`I!R_FBZQ12mP%f6n^%WuSSG-F4$Sh$WDmvKL1A zD?uTU(Zbe|ATw}=@FVBf%7u@W_&G7PAl5xgffAWrr_y--K#p&%s4RIj-;YH~zdVUi ze^XHiEF%{%MUc3|^MN^r`X=l`ZGN{(w`0jwQTkrlpdXl~uRZ%?8I~F243QOr*6bcirY?8;NVVgwFua~gGkEZV!+@)Jgo^UeV2#@5@eMpzop8j0mZMvB9 zS?P(pI>dk(A*fqwLY+_{x^P$@1QD;!`u=sM6>u`W^l1K7y_-7U+mP;in(Xe4QWm@q zi7sN##4vl*aD(WM{CN?uM?RBKK)d=RdZ$lI_F9vP17@t;gef6f@9>pyIb)i>xBxm(-YqgGy{mlu?vNWG?Q z;5^Zay^fME=Gw#Q-!I%$`ESuO65t9zJYb4txI#_TDQj~2KF<80xb@|rM%TR@Asoo^{^-Dzj4Jpv5&6YX4VuZJ|)BARIMJ#y$mQmTdKqYP>E zi0>16;Y1II@auQi9mJS#_`X53qoXNYkyQzt@t+yx4Xl^mhd_|B#zF1u_OtofA#Plv zBk&O7dR$lFw%%0uIIdKj82}kX>Xqx2ds$vAhS6((oQyJ-EsDS~0KvqV;#UA>z*o2Cm2$b$E{1f0BvPVs*GG zHqc<9*stpFCK`AFUJPB`V-dtO%&T_U(+#;_Z59SVLuT@%q@1!u#=1T^>$^H`$`yJ2 zFgc9Mox-1>GsMO~TjoSY--bKY(f$5VEbB7*vV*u9>{Z~kvE@a2pSi)>NLwpQc#)oT z!c(iVG^)AiVRup3aoXpxI-kdVjbm&Jcf>A=NT-%;ird16xLZX`+!kajm$Ky6wbJ_e z3!ftt-@~BqFt`ThbP;qKx3oH#PTA{Rqx|G5$>RpgI=AUZ@)5r!_PQETU;5G5rFmw# zNmT6NCK@_06iifpzB#3>-odvY7Q6qD3QT zB~M*eNy)?9NBg_P8|mGv!5xvoXI2fT!Ifjr+v2tjwej(4;kXuipw8)x) zweh6%bhtvtNdG4DSIl3)9kzv9<>Tzd}wNRF6#bQ(LQRG_55v!t()x}a%XYx%et$j?AUA>P9ZjT&$_e}ZK z)6c)XZ%z`VfD9m@2y`;IG651kKX_-mdSo!e0CnM(&L|dbRQM77;f>(Gi))Y>#%#aI z{XfN>dDxCs*ZMUB@8^6ve#QD;$9ug0{qDcC+xy&muf6sfzH9AuRhc)vUBP_m)}MR3 zVby}QKY6X>qlb47o0tD^m77I|6z%bE*QvJi$ozayT?_B~CgTs?3QiePa{l6>Dfc#+ zm#*v0F(q?%yBc1xXx~r2e(HF!0eQxM^Vs6+4ZH0uw0z;J1wG$u)!>yQgHykIcW0@o zFKwSvsB_=<3cuR%>Fy&Zbo;2|gfVXon_cbYfm7-&JQ2^?=;VVrvcFKG>*7&AWO<`( zxOt;<54OsEY~Ro<@1Dz2yh=*S3&(%iI4RG#A{ibom{h#KpMFW@kmG&N_l z3z_`y>_Vjp3`|A&ycC)Q{$>k8t5J_-Tloz{tr3tdC`9`%gAaO znhhV^;DM~gsIu2OSNETUIk^%8GwADC&(_c>R+ zR&#xuq0dh4v@E&))_%A0esd%&$MW9`OfXC%^H2V*oe9h zOddTnvUSO}Oy`<(`>x9qCw>jpoY&{`yZ2{qk}+?SBIoPxIWg&;Vq5CC89Nl3^j_aq zGfO>q{n)XogEFLlp!Zu9Ti#cuU+>0+lkRPwyI1B%YR${`z&|%MZMJZ0<08wNg-48Q zbZAcZl})|tjmJ%x)NXOZq}|!}HZ1b)swL^0`6>DP3_6@W@5`Om=U(ZwD%8AQ{8H78 zZR!r)yI|?IUs|hzqKEBbLNum^|xm!-1vp9GjqP)=7VuL z+q5QI;NXSHkMt_CZN}LZtq#=fSZ#W8mkjr(>^XBGeS!9EZx(;H+Ti2WD=%vGug_=h z+;^he#(ynr+;YXZ`_mU#^TboNXXULu==g;NBeyoVkzrPaGVc@NeJ;-%Gp8=dGh*lS zBR;Ki?`vHPy5TP8o=thKXp4SN6|DODl@?8AjefRt^w~Z4S6Wu*@`z)D3%xY3cQ>a( zm$B{Fr?h``dz0;%5B6EVAv7rSp)vPmo_q4s)WumBe^_(V`@1JiKKRL)t_2r8^!=nS zzFCngdf&PJAKd-%kTd67LAUM!g|rS8QZGix7S z+A6XteCTTP9vP>8obu__)nBB0{8-mf!{)Cq&|rA;k)5+|-;=HG;Ovj}ZBlZ;ve93c zD*kz)+6Pir<*YMycDBX^HXeN`N0n0locPtS)P`FI9LnxKJ!|4Gr{2r%-dZ(k&8bt( zj&8qtalz|zdafG3aaoT`mr8$`Ty*1?%ZBWUTzq9}-y*-PnKHiN>IT<4lxe>^`_!BT z_Lbg#zD4MXCkONx`q5KeQr8^)@#A8zMQ3f8*tJlHt-DS>lYZN_vpEhm?7FDtltpDW z)jD`-P>;w9(IyO(%)%<$puYt<{eX3E&pX@~M$ z+|l!7>3Vfy&$Xz#;82TJ3-&ENT*Tcs^=e?;Y6lNY!FB^KD%-x@V^& z6(^T2c7Khv*MF!}qRrP{%dWM?z29b4r)E+VbfG`)^dPxOv^s@PxGRmb=p3_@!&X zht`dnICsQ|I?>sOKI~KO_&q;geQ4YIE?*#v)9i;8FJ6B9>7oyRvEE|y+w!*^BkO)%u|vi-`$PAaA6)+2x5K*~eEH2=OH&GU`sl8F1&(h`di9-7 zdHS_GlYA@m>fpz}s?jg=&6m6Zjaxl2eo32eU+zwiM_RUK! zm0SF1rdpM6?a0w-xK|{3)A#u&mQKB|f74Ru4juaXm9$Y$qb{#C8^?3`(P>dem3V(q9cqpJNldid+xnk~GXbIRmh z19NBYa(Q&?c9q6#>5!Ih^waN5n0F<6TCU_L+U+hiv%~uj_q(z8&53jUd$%r2p73$! zQFAX{-TP*(VO<-%dEoo|_f>wlPQ4pV=FOk=(*0vK?zJ7ym`sSZF z^Wyho>Ynei?fqBAy#D3s#T%GFU_srt>L9!**ZR3=j_QN*QYN(`tpUm zXUCqJ-}2Mn)@^$$Yq3~?i?6)U=EAyKNPd}-Wkn5&6U*T-c`BxwjI_ZL;DU7 zjqb5G_a6_uJ$?Go0loh?uy4u4v>%tOoV)VelKsP9iR_s*`Sz1+p zyU>!lrO%u_{>P|{f21UTcY4m8oh5g-%)F>xvvns&-Cd%^h5j?VXZz&bvbk#bY@Q!K z+FId6&N?q{-j?_6^%G~d=+$Uoqn&RK+gb08Yvm3M$=0!Bw@O8R-rDW`TjeXBn4Ffc z+4a*E>rXjYVbXzRoi=?o=t}CNox4O|Tz>w*Q%{|WRs6nm#q$@Jzxva}W<~qHx%Bbp z23|OIeE+dF1wWbWJwNE&t+tzAxTolfx}O&PdB6viDm^`G-=v05b$t5Wb$MddH=pwI zoXXtttpOEUeHZJ~e}TW{nYN9OPn@x8>aNdzobdUzgKzeEfBFt5|0656tsj4=*TGY1 zYj2#ry0B~i6+a!D`rPPw_YOQ=@_M7iSvqdW-hX`4!V?}USStF^jyz@8CN)_1<+jV! zAAjab$M68RRH>?Rs|n z=#}*fwl1G{`(4wEMQdJrVA!#nTYp-6v*r49M}Exw((6qtMg8V4pQ-!dhD(hP&ux<0 zcUPB#<(Gaw?C5W&(=s19`$vWKXU^>0)neM}oEKjzH2To-?(-(b)-DaLo&QL)Wfgjk z%Y8ck)!Fk#b<5bJN73;+cMLAwK4<%mnJ4*mXFZ;7`q>^CLT#F*Z}{PW!<)A?eyii< z2F)8TnD%k5S|9jVP8Tlm?-^~6>|Zo!-|w{_-*#=!{vrEY{MxA8j#8<$zn}1V`ARol z`10!6duBe?xl@K4S&uI~wNQ~tu`kNZT z(12if1PlImviyIH8Kio#KTARVRZggNk`qlz{i`NY>m=8w&eCmVfjs{AZN0rX{~3uu zLyx*rf7fQZy&lrvHHB`gnnb}N@AfYxEDl8dsK03bzah{OKYTj?-MYb%E<-{OzWi0Q z9jAV4d+EbfM+V>b!IM9~_ehuD|IsdTxbj;CH{bi8H9gub-(C5E?{>tamx?Ty^j-B* z_wHFewc3a*1Ln-x)W7AT%I984nUq|jX7bUI=So%Y-u(2=i{;Aa%X_T;qT+YW%-Uw^ z)Yd0{F8+R&pPFCpnA~#Cy?(2O`%m=^pUqq2n=I{`j!#P)+RZ}CvB3emif=V`s?>yIXNP=;q=eS zjoiE9Xv(!}#a9;_+hNGAjC~GQJoNnQM=CEVy0>b|ck5Fh+IFgP(`sisCw;M_SN<&( zMmV(MPo@Flm2Q86Wj>? zlDhxd7LIw*7-gkyZ{y#NL%iemwy5XF?AT~L>e@CZ6!Qoy-Z3`#o=-sW_U|z-@wYqM zLg7d_V&lC^yF_8{XbZ>UVf(!>0@%@h)bTT8DGf-0Ir}{~V%8jvhGR-AlmXHr z`1^|woRAk3mAa#iN@+nL_>MLw9`m$c)VJ$%39Z_F&_<=SJH7`8xvb*OHn_#J=j(<% zN9T22yFND-LC)Usy|5dOMxbX%sPiY#latJ!R%2&~t++Ww> zge_f|R_BOQIndBA>SJY?HpkJmIGAeEFG86@J2s+g;n-w-v54MZE~fB-<0%h0uJRD# zKxps8m4{+Zg0)2BvNzv}37;Zhq%DSou{1y{YCm6OtQ+&Jyb8N6iqL+~O(1jJNLbD{ z5JWQ8RT{Vs`6=ey+yr;QRoU)(p4Hvhn<14~UP#Z^jf*bhR=RTLUL>$Tg1^7-x#w6p z&b;InX+KJBnz4RVX@HF^{k(Wc?tuOs9c@<9}@8iDcRV)xH zncjJpUMQ;lLJ^U%UN|Ir)x-GF@5LN#bH!fsLVnE3uz>BgEiN`D330;XUN|f|&qIY; zp7g>fBuj&^Blp8oJBRwt2w546fU#{+S8N6kTiNn6*+*jUdZ;bSFL1NiaJaE?%NtyC z;c*}ckxgC%&a!KcaFL|V6B+A8a9M1>C}yyp(0!ucP|cbE0DVc#i4-JTS4t=ttFJb5~=o=r_;t6VNK8 zXO1HvbdGTuWR3{ng`GDN(zd9`Ne?|OcOP-3ZCJ*34llu7z=@E4F>2k~u`W)Sw5cxh z=qCK)M#bhry6Bo+NB4`_Bz)ldqNhDSq&$Q`kToN)w9O3(AHWWCFgZR_34@)%eh9F@evgX$LQ`;2ksJIRfwnoSkK%&Kggsnc;j1{Pu&l+GHDiXk+7E-njP*l~ z_#a>+B0Hg|_}H{r>?Z7o1g8ljon7Gr5^8lVuADiyNOY7BreJlbABu|&hgB!KmVSbv z_-J%{MwoDNKQKkbC-K7(r5`4%tS=nXHHUGy?0Mjw%37Gh-UT13THf%n>nu;wPxOb+ zu~{AJM}7eDD|92QaI>M-*Zgc~6_jd)y=O>43=eEKw=K2T{dF`~d8;bOw)*HU}8g_H&}* zTOppsx8h-n$SYiS@vZ15vX0$a9>=QaWag`DL0E(P1s!aGEQ%d-rC5z07 z#YEToh!_2y@5uM~oUGXmt4zcc(EZ|F2@Mp3@;!u;^ouJGxxUiW3+egtODM7y;s&x0 zFQR;p(W+w;$YL+1G7-2_=kQhL;8sXKpei{J1eVY*5WJRF2m~FAmo5DyMu3!z$sNSg zP`(1n5Z>_Pdf)hc6`@}oaMP|OPH;ln63_tAF8s`uv1^HkKsV)kzW6wCY#N~zqQu@e z`iZ>}C!C`50-2b3A(h;7%qyV*Z9)TJ72$(8p=`Uic<8^s_Y^oPe_>i!0=mAa;sQum z(eap~!n?r{Sz5)x1!OJY0txyFrXLSuR9jkwJ;7PyxXE%Jn4L05M12TuzW6hsgu=UV z!d7x_5m$Wdz>Kwg%I_?RY=Xr_p2m^8GDnoqq@_Xhzdzh`=UL*;$bLCCSqt!il_kVE z#g2%>YQnqGxYb)wUU5ti52Y!-y_}Il#)sXTxyn<#YzJpc%gyg zD-Ccfgr+eV#?H&J$@)mAkp0F`J~Gx7-!BkX@;!pMx)wlM`#pl1LKj>=8S6@1JU}}| zzr|fgumVJ^=nAYC|+OxBm+{sI^ap8~`QtpNLEAAp-egSgsjxOpm{iP4K}!Wok9 zd2xvy$BEm^-f)10pK;{nEHUQgjPTiIZ+=Yt?l{v5T@WR*=6FcufgcwihZgG(Mo?v{ zFXN8tDAb_PfRLB$7v_+?VG8J)0cGyw7uFII90~Z|V!8AapOZF%v+_NnmC_coa)Yss zwQ109QR@@akKY`W?+Nyb(9i zV&w*HIP&&;z_#Yh@sa`SrJwjhd=Fu4`$fa{p3@KH!uE@R!b_WPnZa}%$0tC=F%_0`C>B2-eL*( ziZ|`TldfRloJU0I=fvaOsD)A#?aDbNsOKJuE5fqfCXICE${rhwtiL@JS`LYYCFjq|H~pB0bE? zuy9ChDQLiN$lC8=Tgdw2M0=%Q%<6c)M>2`@bM-9aSY6W3xBeiQ5$R>7A0h9blIu{6b2rhwQWL`{W<$ey%V3+t0S8QKIN zqKzzUS&J_+f(VA(w=meSoSS09SO*c&WmpVy-^j8Qn}JjV(Oa;A+^rx%Uw9mB*vcXL z>HQ$gB(z7R==VSnEUoxuMBxKRa^wIM!ph?gNq6!+&-zx3C40v9LmWt(1F~ZKp=NY_ zYKxK{D{_*nCH4@IjLn6J5Q-5yEKJB+XirX?tQpm4Whd6I$}7@s^?Q>Oa>G6yD{wk425_}KbA!7W$|0T7utW^vX)(%C!!+Fa#(0^`EFsAM@eFTuUU91>ZK z38LRa;M+Chi(9>l3J_n2Hswk6#fb!BA;=tpk&&$D>skPZWxoKPavlMgYv({6$$r7n z^?OmV!$5Z}HXH%?vDgi53G@sgiqH>{Bj-WcHhZU`mFSrW`puqE;2c;Q;1JqaFSJ)* zh&ItFI5eVQ$^%Ber(r?ZqFp_l5lKYE?E%_?6MTGxo6aGWl3U34g+MY+C zR4h*-VC2k$%W8Ruej-a?UO97!FJ}(J=$T_9$sCc0U@ZakVD(2NfsF+GBK*wflz!my z!hhIEx|X=$Lxk;hj;OqgVR;b7@&S2$GB2sC!W-B*a&Fj2a&ADh!fV($`aQLgNP*P- z5>A%&q2hH8!3nvl7~gikh#c9618KCM=nBFqdIudxbVUSqmU9E&kTo+@c*sHU+O?qG z^n2k)v*9F=-h#j))f^aRb_7;#WjsWUkBlB#)7?B&kb3l!dgZy~}OWGja*g z*s+9qWey&w$odc^GB2q(BFBk2$Q&f_3J?AFvFM$49j=S=DY1P09*CXn0|jT>NMe?K zkSHT#fuDs2K?1LQkE9N1b5*~2G11A0A+hfx9sq}YkL-A9i|cuifFy@ByJ& z{hqwn2%^b)<_T~gw7K9pL~BJyu@YHdkZNVuOq=i(nWl2zP(8xCgrY@mpvnXXi3Z@N z;Wc1%k@rzvd0P6>CigseUS?@ZC0V&|QOzAhtPfg&y66Dbnh z8+9%+f;2bbUD6{2mjW#onMgmmM`U@}I2~Z3#;u4#h+P6z63~={8cQo+J$v5*6U54^ zD1?@N9J=(w$CiGG2rDP?th67YPx&6IQPxb1#mXGgpGB|oIU8TaF_648+T@)p)?`TZ z0^YCSyF{HucG6E|HkB#_%fPG?Of~8Nj@UDDaN4C!-ZrylGMjC`nA-f9iFy}!s~~fb z6Da4#djmP6nB>O8kQ!6swT56pP(b3LynGN{26Cm-Gl(AK?JG`;bre3r-{Z z<%yVnj}2QoW15K^(tJXKx+DU~*tqB@SX^`zyHFi~jU;=+l$SY3qmccQV<>wgw^92k z4$M;?JvW~hDt2!qfy*4cbC5NY;~?{rNGs<7uA<+Q+#Xy%S1`+NXimj0rV<+OQ7RHBg8(yWs<#7%|?7;%G?W0fvHvh5*M;-aj*|8pQ0%ed=Hez zoFx%(!O;0k>8U9bf#-vj-N9727F9O5O9o_XNGS=xhrSzZHW6`c%1CO$E@NMxOZnIn7< z#YngFVwwpLVf^S=B7`zl^20bF68of|Vj1+3I6I!R_?)zf+~u{O#H<}$Fe^7GnYsNM1-uF+zMGU?+j(XxQ((8uBv`d^QAZr z!SDi;OYR^s7NI@qz%p-wI0KJO3Qy#-VynS zd!+jyFl6mN)*?0ysGg1uoO^q|5l3t;#Ix=V*0uahO1bh&g1iiFpvYLPPSG=j?Zp;| z;ZV!GQF*HhbS-b|12|iB1#P0sV*1{XvGV4YHhJ4eTU_jRJYA8Api-iff#8)lh)u{n zB1Rzm0{kau2?THDF7UnHRYJ$w&k>)5NQe0Gv?;C^5X+xq~j=fn77MnylGPz~ew}B6lftlAuj+pBQiAWG#eiWz9eo z+E4Sy2(hSK!_JX?pp!*z0A~xY0o}-0j!4!*$VR`XI86*}UA{+Y0^wbr{|XJrixirI ztqbqsU&>m*%;kH$>6d-*cuDwxd`G!&JS*3ERo-KP2u-P|C_XHaPq8=9pn^RxR_;dt zH(9#ieTdD)a~!$ngv*33nEXN)`iW0W>XDoq71YE=3R1xBnG@L-9;Z5p=s`?xkfs7?mY{&8{L40;Hz{M^m+$b_9NV~TD2iFT`$20t>`y0SmdtqvPIWI zIT@WpY6L`h(I9t~@@sNe3G0e&2Ba!-k{3zB2Uvv4<0vj!ABxM$Awuu+wty&(@&P3( zNG?2W*)%nKx~^Xj`XATr4-@DjX}Bcd)o9hzJ22iiz{&Y&)x@ET%L&XPcc zm35>ri(keoaPhY&=OOka9=l-w)SwgmDyTsxG{r0yngSK*nx%#TNCCpm$YNX)@smk2 zQr_jakcC!2P;!<4CRT=VJH&TEeW={Pan!N;PSeAm)_FBg0T)c=K~Ox}(g43!=trpo znS<0ptKU2fK#`|`@nh#eV9DMBg>L&%kXFu|atduTPACUQDrR&d|l9I z$yLKm7M%ywEcSuNHk1bX-Y+P9Cp?)z?~}bIJ`;8Q#Mk9>D(``~We#%pWqk>9_erHw z-oQ+h^B}e@JVa`@%n_GbS4eEdN>S6IXA;zc3#7fuNeYe#ACOxnd_YdVZ6gy_Wkg(U zWom^9j{{qXpNw}d>!V(p$SblzME(WGYwrSWVlxC!IAkBeV@7kgkPxEJNq1B_lj>s6 zlCnplLxU2@+E48;UIHXoAD)?AUr@16+Eo5QKfxkl`vh$Sh3)raXP6MSW zzfd1e*T-nP7W{a7_jv{+vYm=1f}sRyEwVQPW->3Px7-h&1PcvdKcOFPkI+mwoUCU+zbOT&AErx_l3(L};I&mH;q#(=18Ddc`YgSDX62w zb?GO$uuw|uVzREq-y)+@`Hv$Pnj+eTrU~A#kx4A^52_zX?om7e-id23SP&5#;b*9# z{G#>YaN_mtCS~o#kMc=nk~2az+Ix<)7rtVSBJv=p4`+2PXr11DlCosY_{2I^-!cNj2^LA( zrs#bvOyv!9sFly8cZy9z*=ey4I7!h9L;^*>5p@y$MnAD*G5M7@(6vGXfFEhY^^@WQ9MEVQLWRq z@e@3TR(O8$elW;JvUwh~NxlGW@>^E4Nt~TFiL=v2(uu53>VD8K0S$s83wA7zxs7cG z-&0}0_S0J4^phGmw8`(2&?di6LYu_9gMQX0p$%lzt_5>k)<>F_@Imk(!j1*fm-8i8 zEkT?0?Srbd%0oPI5}qW*M&}jX&G$tA25nYm(6FMEUigoj8Gk#nQA zu-p$4=X74lAz;no8_*`dfk&I<`9eRb6+u6QyWKAdKeAuy$I7|!rc3sQi7q@zf`opL zD6Y&aHO^VHxdqOtotKg!LVLm=#$JO4g1^v~K#l`u$hPjV$`lN>MFq?QG3^3H)dB(I8ok}m~AQiRFU zg_pCI|ESF;=Nr`0v%DMB;j?^&87A^7sJUn55E+XiV}p8la&Ayx#*%NQZBh@9{Yp(I z+7i&7w_o}_sYgb^B*DmnioCiOun{X`srjgPi-%rTZUo^JD_??iM>!){S7=YZnU0m* z9+H*i9U5&sp0m6`yj#v3eQEDLRr5qf&?a_C@Z-j^k08m=&WpRR{Um3CVgQnFfdwbO zBNjwrtbZAlH4s_M)e^g%T6H$Q%2-cj9Xe0fEICw^Nst^W+T`7A@T)=AM-2Me94gu* z@1Hiwp`tCpelb;q?@1LGK47~dHz?B~`{lWi@CK>B!b8+nmorCSCTLT>LN^NEWAf`* z`3*NFARu6Qji7_b8~}IO8{npl#kWt;rZNlwOV&)jw_P)(EG$L=KPw)AD{1qkf_@@% zf;40~HvkTMMsS~v*#w@D*pp-k%UuWxkXwGCP3{r(<}9X4#<9GwpiS~DgOVX~w}KjU zmZrcoBLA2}^hW?^+cPHuF6TxKI?-FGbMf=YmKS+Nl^u&+2PI8xteiHKis4CKR*Bz; zE1qB<>ND};N8|?9v&9pG>@~ToJn0gCVW{Xg%ma(f@jby4Dc2&ut3W@&7-=IyV`)J8 zm6c8O6I_7IMvLV#uVMgPE!}URLF~Nz4vdvoKp7$rsL7`1i%lbU3l(MWAlxVZ2PY&l zf^-Iz5y8ViyJm9zv`v090^uSt&7e(WVo-ia=z{Afb5OQh+ti1k?wit&+PFe1-dPLn zfr8|ovo$MsVLv@f%xBpLd1SI?9)QRhQKwDrC22geX8p|(EUnn zf5e~sju_d>@^+Yc;sII1nVQ3YH5WsvwX!(m3tH{ zTK0>3u5D6-j$dd|8;;8**fl~zus&R8vB!~!Htza2jY&N`$S1!!9<=FLbh6wT z!a`Q&1Z85hpS%HN4vi7;3v)KV6Ee$h0y8#&+(5kv@AC6oazAjLrJv^J1;?v*M(dZr z8uH$Su>|ui?a67AGven%<&1blB=RMAKx4nh;}NSH@vvpTR96wqmlw;rJ|1VtnuCWO zGOzj?cu}I?fUk7F!H+rH?~x=d`(Vx555||VJX*1B_{4I)B){oc#s7kkoPJO8W4Y3j z_fMPDKcG!&EYOx-=um6lQ_oFsIEG4`n0_KBLCD0u2T@i2!@Lr@kOE|77_Y%ZKC?BkEg*r&V#4gY zH~enl7m7Am8OG0~3vNp}c)_@XT3o_chzQvSOBOogugZA@k5w%n;A0DKklt?fOi&(9 z$0pbZ4<_Zl;V$S}G_L^jPtTHgvdqiRs>=6(o9vmx8KUzr!^9WD{z*j z{5qoW0q}<4L&1}NOVi+|Z|&Y-7x7nl7AP1ptS0h`8X7V$Y?`1SV7TD}GRDNV@JP+G zXUSVP*+=j;&7KFRA^IrDVYc^!(6*d8Ik;A?p?-OFap#(Y%ExvrZDRWb-iOskBx6c! zhc?M|rtOa3GU(m2ZRf5XdS:/repo:ro zricethezav/gitleaks:latest git /repo --log-opts="--all" --redact --report-format json +# Périmètre : toutes les branches locales et distantes, 342 commits hors merges (487 avec merges), commit de tête 9f343e9 +# Champs Author et Email retirés de cette copie (anonymisation). Valeurs caviardées par --redact. + +Résultat brut : 339 commits scannés, ~3,43 Mo, 8 constats, tous de la règle generic-api-key. + +- generic-api-key · apps/backend/tests/etl/test_reading_retention.py:74 · commit fa815f49 · 2026-09-24 · extrait caviardé : s3_access_key": "REDACTED" +- generic-api-key · apps/frontend/src/app/features/auth/change-password/change-password.spec.ts:90 · commit c2f360c5 · 2026-09-23 · extrait caviardé : current_password: 'REDACTED' +- generic-api-key · apps/backend/tests/repositories/test_drift.py:110 · commit 9bf2f271 · 2026-09-22 · extrait caviardé : api_current", REDACTED +- generic-api-key · apps/backend/tests/repositories/test_drift.py:113 · commit 9bf2f271 · 2026-09-22 · extrait caviardé : api_history", REDACTED +- generic-api-key · apps/backend/tests/repositories/test_reading.py:202 · commit c059f838 · 2026-09-18 · extrait caviardé : api_history", REDACTED +- generic-api-key · apps/backend/tests/repositories/test_reading.py:205 · commit c059f838 · 2026-09-18 · extrait caviardé : api_current", REDACTED +- generic-api-key · apps/backend/tests/repositories/test_reading.py:98 · commit b433e01f · 2026-09-18 · extrait caviardé : api_history", REDACTED +- generic-api-key · apps/backend/tests/repositories/test_reading.py:101 · commit b433e01f · 2026-09-18 · extrait caviardé : api_current", REDACTED + +Tri manuel : les 8 constats sont des faux positifs. +- 6 constats (test_drift.py, test_reading.py), déjà triés le 23/09 : la règle generic-api-key prend pour une clé la valeur qui suit un identifiant commençant par « api_ ». Les lignes visées sont des appels de fabrique de test du type creer_lecture(..., source="api_history", consumption_kwh=20.0) : « api_history » et « api_current » sont deux des trois valeurs admises pour la colonne source de reading (contrainte ck_reading_source, apps/backend/app/models/energy.py), pas des secrets. +- apps/backend/tests/etl/test_reading_retention.py:74 : identifiant de clé S3 factice (« GK » suivi de 10 chiffres) construit par la fabrique de test settings_s3(), à côté de SecretStr("un-secret-garage") ; aucun Garage réel ne l'accepte, les vraies clés sont générées sur la machine par scripts/provision-host.sh. +- apps/frontend/src/app/features/auth/change-password/change-password.spec.ts:90 : mot de passe provisoire simulé d'un test unitaire Angular (valeur attendue par un mock de AuthService), sans compte réel derrière. + +Contrôle complémentaire : git log --all -- .env apps/backend/.env ml/.env etl/airflow/.env '*.pem' '*.key' '*terraform.tfvars' '*.tfstate' '*.tfstate.backup' dns.token renvoie 0 commit : aucun fichier de secrets, certificat, clé, state Terraform ni jeton DNS n'a jamais été versionné. +Seul fichier de configuration sensible versionné : infra/garage/garage.toml (commit e53c7e4, 24/09), par conception : relu ligne à ligne, il ne porte aucun secret, Garage lit GARAGE_RPC_SECRET, GARAGE_ADMIN_TOKEN et GARAGE_METRICS_TOKEN dans son environnement (ADR 0019). diff --git a/docs/livrables/EC04/preuves/06-trivy-config.txt b/docs/livrables/EC04/preuves/06-trivy-config.txt new file mode 100644 index 0000000..740db41 --- /dev/null +++ b/docs/livrables/EC04/preuves/06-trivy-config.txt @@ -0,0 +1,66 @@ +# Trivy config (image aquasec/trivy:latest, sha256:62b1e65e8869) · 2026-09-24 14:46 CEST · commit 9f343e9, sur un export git archive du commit +# Commande : docker run --rm -v :/repo:ro aquasec/trivy:latest config /repo + +Report Summary + +┌────────────────────────────────────────┬────────────┬───────────────────┐ +│ Target │ Type │ Misconfigurations │ +├────────────────────────────────────────┼────────────┼───────────────────┤ +│ apps/backend/Dockerfile │ dockerfile │ 0 │ +├────────────────────────────────────────┼────────────┼───────────────────┤ +│ apps/frontend/Dockerfile │ dockerfile │ 1 │ +├────────────────────────────────────────┼────────────┼───────────────────┤ +│ etl/airflow/Dockerfile │ dockerfile │ 1 │ +├────────────────────────────────────────┼────────────┼───────────────────┤ +│ infra/terraform/environments/k3s-cible │ terraform │ 0 │ +├────────────────────────────────────────┼────────────┼───────────────────┤ +│ infra/terraform/environments/vm-eni │ terraform │ 0 │ +├────────────────────────────────────────┼────────────┼───────────────────┤ +│ ml/Dockerfile │ dockerfile │ 1 │ +└────────────────────────────────────────┴────────────┴───────────────────┘ +Legend: +- '-': Not scanned +- '0': Clean (no security findings detected) + + +apps/frontend/Dockerfile (dockerfile) +===================================== +Tests: 27 (SUCCESSES: 26, FAILURES: 1) +Failures: 1 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 0, CRITICAL: 0) + +DS-0026 (LOW): Add HEALTHCHECK instruction in your Dockerfile +════════════════════════════════════════ +You should add HEALTHCHECK instruction in your docker container images to perform the health check on running containers. + +See https://avd.aquasec.com/misconfig/ds-0026 +──────────────────────────────────────── + + + +etl/airflow/Dockerfile (dockerfile) +=================================== +Tests: 27 (SUCCESSES: 26, FAILURES: 1) +Failures: 1 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 0, CRITICAL: 0) + +DS-0026 (LOW): Add HEALTHCHECK instruction in your Dockerfile +════════════════════════════════════════ +You should add HEALTHCHECK instruction in your docker container images to perform the health check on running containers. + +See https://avd.aquasec.com/misconfig/ds-0026 +──────────────────────────────────────── + + + +ml/Dockerfile (dockerfile) +========================== +Tests: 27 (SUCCESSES: 26, FAILURES: 1) +Failures: 1 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 0, CRITICAL: 0) + +DS-0026 (LOW): Add HEALTHCHECK instruction in your Dockerfile +════════════════════════════════════════ +You should add HEALTHCHECK instruction in your docker container images to perform the health check on running containers. + +See https://avd.aquasec.com/misconfig/ds-0026 +──────────────────────────────────────── + + diff --git a/docs/livrables/EC04/preuves/07-trivy-fs.txt b/docs/livrables/EC04/preuves/07-trivy-fs.txt new file mode 100644 index 0000000..45e34a2 --- /dev/null +++ b/docs/livrables/EC04/preuves/07-trivy-fs.txt @@ -0,0 +1,55 @@ +# Trivy fs, scanners vuln et secret (image aquasec/trivy:latest, sha256:62b1e65e8869) · 2026-09-24 14:48 CEST · commit 9f343e9 +# Commande : docker run --rm -v :/repo:ro aquasec/trivy:latest fs --scanners vuln,secret --skip-dirs node_modules --skip-dirs .venv --skip-dirs .angular /repo +# Périmètre : arbre de travail du poste, donc fichiers ignorés par git compris. Le corps de toute clé détectée est retiré de cette copie. + +Report Summary + +┌──────────────────────────────────────────────────────────────────────────────────┬──────┬─────────────────┬─────────┐ +│ Target │ Type │ Vulnerabilities │ Secrets │ +├──────────────────────────────────────────────────────────────────────────────────┼──────┼─────────────────┼─────────┤ +│ apps/backend/uv.lock │ uv │ 0 │ - │ +├──────────────────────────────────────────────────────────────────────────────────┼──────┼─────────────────┼─────────┤ +│ apps/frontend/package-lock.json │ npm │ 0 │ - │ +├──────────────────────────────────────────────────────────────────────────────────┼──────┼─────────────────┼─────────┤ +│ etl/airflow/uv.lock │ uv │ 1 │ - │ +├──────────────────────────────────────────────────────────────────────────────────┼──────┼─────────────────┼─────────┤ +│ ml/mlruns/1/models/m-07209b6bfc7a4edfa1c8a8b1b4577a34/artifacts/requirements.txt │ pip │ 0 │ - │ +├──────────────────────────────────────────────────────────────────────────────────┼──────┼─────────────────┼─────────┤ +│ ml/mlruns/1/models/m-37380043d1da4d578858f40853a7f72d/artifacts/requirements.txt │ pip │ 0 │ - │ +├──────────────────────────────────────────────────────────────────────────────────┼──────┼─────────────────┼─────────┤ +│ ml/mlruns/1/models/m-39f8a317ffed49288cbdffb66046ecd4/artifacts/requirements.txt │ pip │ 0 │ - │ +├──────────────────────────────────────────────────────────────────────────────────┼──────┼─────────────────┼─────────┤ +│ ml/mlruns/1/models/m-3a8d4c6d896b4ca2b0645b323adfb857/artifacts/requirements.txt │ pip │ 0 │ - │ +├──────────────────────────────────────────────────────────────────────────────────┼──────┼─────────────────┼─────────┤ +│ ml/mlruns/1/models/m-57dd632c169a4c43b5777f9fe1a52958/artifacts/requirements.txt │ pip │ 0 │ - │ +├──────────────────────────────────────────────────────────────────────────────────┼──────┼─────────────────┼─────────┤ +│ ml/mlruns/1/models/m-d1cbcc5b82a1400ea438c01c12e73536/artifacts/requirements.txt │ pip │ 0 │ - │ +├──────────────────────────────────────────────────────────────────────────────────┼──────┼─────────────────┼─────────┤ +│ ml/uv.lock │ uv │ 0 │ - │ +├──────────────────────────────────────────────────────────────────────────────────┼──────┼─────────────────┼─────────┤ +│ infra/proxy/tls/privkey.pem │ text │ - │ 1 │ +└──────────────────────────────────────────────────────────────────────────────────┴──────┴─────────────────┴─────────┘ +Legend: +- '-': Not scanned +- '0': Clean (no security findings detected) + + +etl/airflow/uv.lock (uv) +======================== +Total: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 1, HIGH: 0, CRITICAL: 0) + +┌───────────────────────────────┬────────────────┬──────────┬────────┬───────────────────┬───────────────┬─────────────────────────────────────────────────────────────┐ +│ Library │ Vulnerability │ Severity │ Status │ Installed Version │ Fixed Version │ Title │ +├───────────────────────────────┼────────────────┼──────────┼────────┼───────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤ +│ apache-airflow-providers-smtp │ CVE-2026-41016 │ MEDIUM │ fixed │ 2.3.2 │ 3.0.0 │ apache-airflow-providers-smtp: No certificate validation on │ +│ │ │ │ │ │ │ SMTP STARTTLS connections in SMTP provider │ +│ │ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2026-41016 │ +└───────────────────────────────┴────────────────┴──────────┴────────┴───────────────────┴───────────────┴─────────────────────────────────────────────────────────────┘ + +infra/proxy/tls/privkey.pem (secrets) +===================================== +Total: 1 (HIGH: 1) · AsymmetricPrivateKey (private-key) · infra/proxy/tls/privkey.pem:2-27 · [contenu retiré] + +Lecture : +- CVE-2026-41016 (= PYSEC-2026-24 de pip-audit) : dépendance transitive d'apache-airflow 3.3.2, SmtpHook sans validation de certificat au STARTTLS. Aucun DAG n'envoie de courriel et aucune connexion SMTP n'est déclarée dans Airflow : pas d'exposition aujourd'hui. Correctif : providers-smtp >= 3.0.0. Inchangée depuis le 23/09 : le verrou etl/airflow/uv.lock n'a pas bougé et n'est audité ni par la CI ni par Dependabot. +- privkey.pem : clé du certificat auto-signé du poste, générée par make tls-selfsigned pour le développement local ; en recette et en production, le certificat vient de Let's Encrypt (ADR 0018). Ignorée par git (.gitignore, motif infra/proxy/tls/*.pem), jamais commitée (git log --all -- '*.pem' vide, cf. 05-gitleaks.txt). Risque réel : la retrouver dans un ZIP fabriqué à partir de l'arbre de travail au lieu d'un clone. diff --git a/docs/livrables/EC04/preuves/08-tests-acces.txt b/docs/livrables/EC04/preuves/08-tests-acces.txt new file mode 100644 index 0000000..57189d0 --- /dev/null +++ b/docs/livrables/EC04/preuves/08-tests-acces.txt @@ -0,0 +1,7 @@ +# Tests d'accès et d'authentification du backend · 2026-09-24 14:50 CEST · commit 9f343e9 +# Commande : uv run --frozen pytest tests/api/test_matrice_acces.py tests/api/test_route_protection.py tests/api/test_authorization.py tests/api/test_hardening.py tests/api/test_auth.py tests/core/test_security.py -m 'not integration' --no-cov +# Les tests marqués integration (mêmes matrices avec de vrais jetons et une vraie base) tournent en CI sur TimescaleDB, pas ici. + +........................................................................ [ 83%] +.............. [100%] +86 passed, 5 deselected in 3.36s diff --git a/docs/livrables/EC04/preuves/09-terraform-validate.txt b/docs/livrables/EC04/preuves/09-terraform-validate.txt new file mode 100644 index 0000000..d597e56 --- /dev/null +++ b/docs/livrables/EC04/preuves/09-terraform-validate.txt @@ -0,0 +1,16 @@ +# Terraform fmt et validate (mêmes étapes que .github/workflows/infra.yml) · 2026-09-24 14:50 CEST · commit 9f343e9, sur un export git archive · Terraform v1.16.3 + +## terraform fmt -check -recursive infra/terraform +exit=0 + +## infra/terraform/environments/k3s-cible/ : init -backend=false puis validate +init exit=0 +Success! The configuration is valid. + +exit=0 + +## infra/terraform/environments/vm-eni/ : init -backend=false puis validate +init exit=0 +Success! The configuration is valid. + +exit=0 diff --git a/docs/livrables/EC04/preuves/10-proxy-tls.txt b/docs/livrables/EC04/preuves/10-proxy-tls.txt new file mode 100644 index 0000000..e65f9d1 --- /dev/null +++ b/docs/livrables/EC04/preuves/10-proxy-tls.txt @@ -0,0 +1,78 @@ +# Reverse proxy, frontal SNI et ports publiés · 2026-09-24 14:51 CEST · commit 9f343e9, configuration lue sur un export git archive + +## nginx -t du proxy de stack (image nginx:1.31-alpine, celle de docker-compose.prod.yml, configuration montée en lecture seule) +# --add-host backend et frontend : nginx résout les upstream au test, hors du réseau Compose. Certificat : celui du poste, monté en lecture seule. +nginx: the configuration file /etc/nginx/nginx.conf syntax is ok +nginx: configuration file /etc/nginx/nginx.conf test is successful + +## nginx -t du frontal SNI de la machine (même commande que infra.yml) +nginx: the configuration file /etc/nginx/nginx.conf syntax is ok +nginx: configuration file /etc/nginx/nginx.conf test is successful + +## Directives de sécurité du proxy (grep sur infra/proxy) + infra/proxy/nginx.conf:1:# Contrainte : les directives `limit_req_zone` ne sont valides que dans le bloc `http`. + infra/proxy/nginx.conf:16: server_tokens off; + infra/proxy/nginx.conf:26: client_max_body_size 2m; + infra/proxy/nginx.conf:35: limit_req_zone $binary_remote_addr zone=api:10m rate=20r/s; + infra/proxy/nginx.conf:36: limit_req_zone $binary_remote_addr zone=auth:10m rate=30r/m; + infra/proxy/nginx.conf:37: limit_req_status 429; + infra/proxy/conf.d/enervision.conf:14: listen 80 default_server; + infra/proxy/conf.d/enervision.conf:22: return 301 https://$host$request_uri; + infra/proxy/conf.d/enervision.conf:27: listen 443 ssl default_server; + infra/proxy/conf.d/enervision.conf:28: listen 4443 ssl proxy_protocol default_server; + infra/proxy/conf.d/enervision.conf:34: real_ip_header proxy_protocol; + infra/proxy/conf.d/enervision.conf:40: ssl_protocols TLSv1.2 TLSv1.3; + infra/proxy/conf.d/enervision.conf:44: ssl_session_tickets off; + infra/proxy/conf.d/enervision.conf:48: add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; + infra/proxy/conf.d/enervision.conf:49: add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'" always; + infra/proxy/conf.d/enervision.conf:61: limit_req zone=auth burst=20 nodelay; + infra/proxy/conf.d/enervision.conf:67: limit_req zone=api burst=40 nodelay; + +## En-têtes posés par l'API elle-même (apps/backend/app/api/middleware.py) + apps/backend/app/api/middleware.py:16: "X-Content-Type-Options": "nosniff", + apps/backend/app/api/middleware.py:17: "X-Frame-Options": "DENY", + apps/backend/app/api/middleware.py:18: "Referrer-Policy": "no-referrer", + apps/backend/app/api/middleware.py:21: "Cross-Origin-Resource-Policy": "same-origin", + apps/backend/app/api/middleware.py:37: response.headers["Cache-Control"] = "no-store" + +## Frontal SNI (infra/front/nginx.conf) : aiguillage TCP sans déchiffrement + map $ssl_preread_server_name $stack { + ~^rec\. 127.0.0.1:8444; + ~^dev\. 127.0.0.1:9444; + default 127.0.0.1:10444; + } + + server { + listen 443; + ssl_preread on; + proxy_pass $stack; + proxy_protocol on; + proxy_connect_timeout 5s; + Réseau : network_mode host (infra/front/compose.yml), ports 80 et 443 de la machine. Il lit le nom demandé (SNI), sans déchiffrer, et relaie en PROXY protocol vers l'écouteur 4443 du proxy de la stack visée, sur 127.0.0.1. + +## Ports publiés après fusion (docker compose 5.5.1, --env-file .env.example, profil monitoring, config --format json) +# Commande : docker compose --env-file .env.example -f docker-compose.yml -f docker-compose.prod.yml --profile monitoring config --format json, puis extraction des seuls champs ports (aucune variable recopiée) +airflow-apiserver 127.0.0.1:8080->8080 +airflow-dag-processor aucun port publié +airflow-init aucun port publié +airflow-scheduler aucun port publié +alertmanager 127.0.0.1:9093->9093 +backend aucun port publié +cadvisor aucun port publié +db 127.0.0.1:5433->5432 +frontend aucun port publié +garage 127.0.0.1:3900->3900, 127.0.0.1:3903->3903 +grafana 127.0.0.1:3001->3000 +mailpit 127.0.0.1:8025->8025 +node-exporter aucun port publié +postgres-exporter aucun port publié +prometheus 127.0.0.1:9090->9090 +proxy 0.0.0.0:80->80, 0.0.0.0:443->443, 127.0.0.1:->4443 + +## Ports réellement posés sur la machine par scripts/provision-host.sh (l. 212-214, colonnes https, http, front) + prod 127.0.0.1:10443 127.0.0.1:10080 127.0.0.1:10444 + rec 127.0.0.1:8443 127.0.0.1:8081 127.0.0.1:8444 + dev 127.0.0.1:9443 127.0.0.1:8083 127.0.0.1:9444 + Base, Mailpit, Airflow, Garage et supervision décalés par environnement, tous sur 127.0.0.1. + +Lecture : les défauts du dépôt publient le proxy en 80 et 443 pour un poste de développement. Sur la machine, provision-host.sh ramène tous les ports des trois stacks sur la boucle locale : le seul composant joignable depuis le réseau est le frontal SNI, en 80 et 443. Backend, frontend, scheduler, dag-processor et exporteurs ne publient rien. Le port SMTP 1025 de Mailpit, publié en développement, disparaît (!override). L'état effectif de la machine est relevé dans 12-constats-machine.txt. diff --git a/docs/livrables/EC04/preuves/11-terraform-state.txt b/docs/livrables/EC04/preuves/11-terraform-state.txt new file mode 100644 index 0000000..7522d97 --- /dev/null +++ b/docs/livrables/EC04/preuves/11-terraform-state.txt @@ -0,0 +1,11 @@ +# State Terraform local de la racine vm-eni · relevé 2026-09-24 14:50 CEST · commit 9f343e9 +# Commande : terraform -chdir=infra/terraform/environments/vm-eni state list (seuls les noms de ressources, aucun attribut recopié) + +null_resource.docker_engine +null_resource.environnements +null_resource.runner_github + +Dernière écriture du state : 2026-09-23 12:12:09 +serial 12 · terraform 1.16.3 · 3 ressources appliquées sur 4 déclarées dans vm-eni/main.tf + +Lecture : depuis le relevé du 23/09 9h05 (serial 3, 2 ressources), les applies du 22/09 au 23/09 ont installé Docker, préparé les trois environnements (clones, .env générés sur la machine, certificats) et enregistré le runner GitHub (null_resource.runner_github). La quatrième ressource, null_resource.coffre (volumes Docker dans un coffre LUKS), est désactivée tant que la variable coffre_taille est vide (count = 0), et elle l'est restée : la machine est un conteneur LXC, où LUKS est impossible (ADR 0020), elle n'a donc jamais été appliquée. Clés des triggers relevées (valeurs non recopiées) : docker_engine [hote, user], environnements [depot, domaine, racine, script], runner_github [dossier, labels, nom, version]. L'adresse de la machine et le compte SSH y figurent, mais ni le jeton d'enregistrement du runner ni la clé SSH : le jeton est une variable sensitive hors des triggers (ADR 0010). diff --git a/docs/livrables/EC04/preuves/12-constats-machine.txt b/docs/livrables/EC04/preuves/12-constats-machine.txt new file mode 100644 index 0000000..b7d9471 --- /dev/null +++ b/docs/livrables/EC04/preuves/12-constats-machine.txt @@ -0,0 +1,99 @@ +# Constats sur la machine du groupe, en lecture seule · 24/09/2026 15h20 à 15h30 CEST · commit déployé en production 9f343e9 +# Commande : ssh root@ 'bash -s' < constats-machine-enervision.sh, puis constats-complement-enervision.sh, lancés par l'auteur +# Anonymisation : adresse et nom de la machine masqués, identifiants de cluster Vault et adresses internes des réseaux Docker retirés. + +## Virtualisation (systemd-detect-virt) +lxc + +## Ports TCP en écoute (ss -tlnpH, adresse locale et processus) +Sur toutes les interfaces : + 0.0.0.0:22 et [::]:22 sshd + 0.0.0.0:80, 0.0.0.0:443 frontal SNI (enervision-front) + *:6443 k3s-server + 0.0.0.0:8200, *:8201 vault + 0.0.0.0:8202, *:8203 vault + 0.0.0.0:8204, *:8205 vault +Sur la boucle locale seulement : + proxys des stacks 127.0.0.1:10080, 10443, 10444 (prod) · 8081, 8443, 8444 (rec) · 8083, 9443, 9444 (dev) + bases des stacks 127.0.0.1:5433 (prod), 5434 (rec), 5435 (dev) + Mailpit 127.0.0.1:8025, 8026, 8027 + API Airflow 127.0.0.1:8080, 8082, 8084 + Garage (S3, admin) 127.0.0.1:3900, 3903 (prod) · 3910, 3913 (rec) · aucun pour dev + Grafana, Prometheus, Alertmanager (prod) 127.0.0.1:3001, 9090, 9093 + PostgreSQL 18 de l'hôte 127.0.0.1:5432, [::1]:5432 + Postfix de l'hôte 127.0.0.1:25, [::1]:25 + k3s (interne) 127.0.0.1:6444 + containerd 127.0.0.1:34303 + résolveur systemd 127.0.0.53:53, 127.0.0.54:53 + +## Pare-feu (nft list ruleset, iptables -S) +table inet filter : chaînes input, forward et output vides, politique accept. +table ip raw : 24 règles posées par Docker, qui rejettent tout paquet destiné à un port publié sur 127.0.0.1 (ou à un conteneur) s'il n'arrive pas par lo (ou par le pont Docker du projet). +iptables : -P INPUT ACCEPT, -P FORWARD DROP, -P OUTPUT ACCEPT, et les chaînes DOCKER, DOCKER-USER, DOCKER-FORWARD de Docker. + +## SSH effectif (sshd -T) +permitrootlogin yes +pubkeyauthentication yes +passwordauthentication yes +kbdinteractiveauthentication no + +## Stacks (docker ps par projet Compose) +### enervision-prod : 15 services démarrés, airflow-init terminé (0) +airflow-apiserver (healthy), airflow-dag-processor, airflow-scheduler, alertmanager, backend (healthy), cadvisor (healthy), db (healthy), frontend, garage (healthy), grafana, mailpit (healthy), node-exporter, postgres-exporter, prometheus, proxy +### enervision-rec : 9 services démarrés, airflow-init terminé (0) +airflow-apiserver (healthy), airflow-dag-processor, airflow-scheduler, backend (healthy), db (healthy), frontend, garage (healthy), mailpit (healthy), proxy +### enervision-dev : 8 services démarrés, airflow-init terminé (0), pas de Garage +airflow-apiserver (healthy), airflow-dag-processor, airflow-scheduler, backend (healthy), db (healthy), frontend, mailpit (healthy), proxy +### enervision-front +front, démarré depuis 26 heures +### Hors projets EnerVision +19 conteneurs arrêtés entre le 16 et le 21/09 ou jamais démarrés, dont 3 hello-world ; aucun en fonctionnement. + +## Sondes de santé par le nom public, certificat vérifié (curl sans -k) +prod http=200 verification_tls=0 +rec http=200 verification_tls=0 +dev http=200 verification_tls=0 + +## Certificats servis par le frontal (openssl s_client -servername) +prod : issuer=C = US, O = Let's Encrypt, CN = YE1 · notAfter=Dec 22 09:40:38 2026 GMT +rec : issuer=C = US, O = Let's Encrypt, CN = YE1 · notAfter=Dec 22 09:11:04 2026 GMT +dev : issuer=C = US, O = Let's Encrypt, CN = YE1 · notAfter=Dec 22 09:17:54 2026 GMT + +## En-têtes servis en production sur / (curl -sI) +server: nginx +strict-transport-security: max-age=31536000; includeSubDomains +content-security-policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self' data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self' + +## Droits des secrets sur disque (stat) +600 enervision /srv/enervision/dev/.env +600 enervision /srv/enervision/prod/.env +600 enervision /srv/enervision/rec/.env +600 enervision /srv/enervision/dns.token + +## Runner GitHub Actions (systemctl) +actions.runner...service loaded active running + +## Journal d'audit de la production (select action, count(*) from audit_log group by action) +user.created|5 +user.password_changed|3 + +## Supervision de la production (API Prometheus, 127.0.0.1:9090) +cibles : alertmanager, backend, cadvisor, garage, node, postgres, prometheus · toutes health=up +règles chargées : ApiErreursServeur, ApiIndisponible, ApiLatenceElevee, BaseConnexionsSaturees, BaseIndisponible, CibleInjoignable, HoteCpuSature, HoteDisquePlein, HoteMemoireSaturee (groupes api, base, hote, supervision) + +## Services hors plateforme +k3s : binaire /usr/local/bin/k3s du 17/09/2026 14:07 UTC · systemctl show k3s : ActiveState=activating, SubState=start, NRestarts=51678 · k3s kubectl get pods -A : No resources found, API refusée pendant un redémarrage +vault.service : active (running), « HashiCorp Vault » +Vault, seal-status sans authentification (champs utiles) : + 8200 : version 2.1.1, shamir t=2 n=5, initialized=true, sealed=false, storage_type=file, démarré le 22/09 12:28 UTC + 8202 : version 2.1.1, shamir t=3 n=5, initialized=true, sealed=false, storage_type=file, démarré le 22/09 07:27 UTC + 8204 : version 2.1.1, shamir t=4 n=5, initialized=true, sealed=false, storage_type=file, démarré le 22/09 07:28 UTC +postgresql@18-main : active (running), boucle locale seulement +postfix@- : active (running), boucle locale seulement + +Lecture : +- La plateforme livrée tient sa promesse : de ses composants, seul le frontal SNI écoute hors de la boucle locale, en 80 et 443. Les trois noms publics répondent 200 avec un certificat Let's Encrypt vérifié, HSTS et CSP sont servis, les .env sont en 600, le runner tourne, les sept cibles Prometheus sont up. +- La machine, elle, expose davantage : SSH en root avec mot de passe accepté, l'API k3s sur 6443 et trois serveurs Vault descellés sur 8200 à 8205, tous sur toutes les interfaces, sans pare-feu hôte (table nftables vide, politique accept). +- k3s et Vault ne viennent pas du code livré : git grep vault ne trouve rien sur le commit gelé. Vault est visé par le Terraform d'une branche de travail non fusionnée (provider vault, adresse de la machine en 8200). k3s redémarre en boucle depuis son installation du 17/09 (51 678 redémarrages) et ne porte aucun pod : il consomme sans servir. +- L'environnement dev tourne encore le commit du 23/09 : pas de Garage. Il suit la dernière branche lancée à la main (ADR 0017), et aucune ne l'a été depuis. +- Le journal d'audit ne compte que les événements d'administration des comptes (5 créations, 3 changements de mot de passe) : les connexions vont à login_attempt. diff --git a/docs/livrables/EC04/preuves/13-github-reglages.txt b/docs/livrables/EC04/preuves/13-github-reglages.txt new file mode 100644 index 0000000..9cc858b --- /dev/null +++ b/docs/livrables/EC04/preuves/13-github-reglages.txt @@ -0,0 +1,42 @@ +# Réglages GitHub du dépôt, lus par l'API (gh api, lecture seule) · 2026-09-24 14:54 CEST · commit 9f343e9 +# Heures converties en heure locale (CEST). URL des environnements non reproduites (anonymisation). + +## Dépôt +visibilité : public · branche par défaut : main · licence : aucune · fork autorisé : oui + +## Protection des branches (gh api repos//branches/ --jq .protected ; gh api repos//rulesets) +main : protected=false +dev : protected=false +rulesets : 0 + +## Environnements de déploiement (gh api repos//environments/) +prod : 1 règle, branch_policy, restreint à la branche main ; relecteurs requis : 0 ; délai : aucun +rec : aucune règle +dev : aucune règle + +## Approbation des workflows des contributeurs externes (gh api repos//actions/permissions/workflow) +refusé avec les droits d'un membre (HTTP 403) : réglage non vérifiable, seule l'administratrice le lit + +## Secrets d'Actions (gh secret list, noms seulement) +SONAR_TOKEN + +## Derniers runs de ci.yml (gh run list --workflow ci.yml) +24/09 11:51 dev 9f343e9 push success +24/09 11:08 main 9f343e9 push success +24/09 11:08 dev 5a7e2a9 pull_request success +24/09 10:59 dev 5a7e2a9 push success + +## Déploiements de l'environnement prod (gh api repos//deployments?environment=prod) +24/09 11:12 9f343e9 +23/09 15:56 5afe2fc +23/09 14:56 32f1bef +23/09 12:49 7f4364d +23/09 12:02 84969d3 +23/09 12:02 93d5cad +23/09 11:37 b786f27 + +Lecture : +- La production n'attend aucune approbation humaine : la seule garde est la restriction à main. L'ADR 0009 annonce une production après approbation, l'ADR 0014 laisse ce réglage à poser par l'administratrice : il ne l'est pas. +- Aucune branche protégée : un membre en écriture peut pousser directement sur dev ou main, ce qui est arrivé trois fois sur dev (c2f360c, cbbfaf4, 6c09bee), relus ensuite par les PR de remontée #161 et #163. +- Un seul secret côté GitHub, pour SonarCloud : le déploiement n'en consomme aucun, le runner auto-hébergé travaille dans le dossier qui porte déjà le .env. +- Chaque push sur main depuis le 23/09 11h37 a produit un déploiement ; le dernier porte le commit gelé 9f343e9. diff --git a/docs/livrables/EC04/preuves/14-dast-zap.txt b/docs/livrables/EC04/preuves/14-dast-zap.txt new file mode 100644 index 0000000..05b9d7f --- /dev/null +++ b/docs/livrables/EC04/preuves/14-dast-zap.txt @@ -0,0 +1,21 @@ +# DAST OWASP ZAP, dernier passage publié en artefact zap-report (run 35840107213, dast.yml) · 23/09/2026 10:59 CEST · commit fe0d422 (PR de remontée dev vers main) +# Récupération : gh run download 35840107213 -n zap-report, puis extraction des alertes du JSON et du bilan de zap-stdout.log +# Cible : l'API en fonctionnement dans le job (backend seul, sans TLS ni proxy), authentifiée par un compte lecteur jetable + +## Bilan des règles (zap-stdout.log) +FAIL-NEW: 0 FAIL-INPROG: 0 WARN-NEW: 0 WARN-INPROG: 0 INFO: 0 IGNORE: 0 PASS: 118 + +## Alertes du rapport (ZAP 2.17.0) +- Informational (High) · A Client Error response code was returned by the server [100000] · 65 occurrence(s) +- Informational (Medium) · Non-Storable Content [10049] · 5 occurrence(s) +- Informational (High) · Authentication Request Identified [10111] · 1 occurrence(s) + exemple : POST /api/v1/auth/login · paramètre email +- Informational (Medium) · Information Disclosure - Sensitive Information in URL [10024] · 1 occurrence(s) + exemple : GET /api/v1/auth/reset-password/validate?token=token · paramètre token + +Lecture : +- 0 échec, 0 avertissement, 118 règles passées. Les 4 alertes restantes sont informatives. +- « Client Error response code » (65) : 42 × 404, 16 × 403, 3 × 405, 2 × 422, 2 × 401, les refus attendus d'un scanner qui sonde des routes inexistantes, gardées par rôle ou appelées avec une charge invalide. Aucun 5xx. +- « Non-Storable Content » (5) : login, logout et refresh marqués Cache-Control: no-store par l'API, voulu ; les deux sondes de santé, que ZAP juge non mémorisables parce qu'appelées avec un en-tête Authorization. +- « Authentication Request Identified » : repérage de la route de connexion, sans défaut associé. +- « Sensitive Information in URL » : le jeton de réinitialisation voyage en paramètre de GET /api/v1/auth/reset-password/validate. Mitigations en place : jeton stocké haché (token_hash), valable 15 minutes (password_reset_ttl_seconds = 900), à usage unique (consumed_at), caviardé des journaux de l'API (app/core/logging.py, motif token=), Referrer-Policy: no-referrer. Résidu réel : le journal d'accès du proxy (log_format enervision, champ "$request", infra/proxy/nginx.conf:18) enregistre l'URL complète, donc le jeton en clair pendant sa durée de validité, lisible par qui administre la machine.