From 3553fcab20656ccef8ace5fe18233b405b2219a2 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Thu, 3 Sep 2026 13:58:00 +0200 Subject: [PATCH 01/41] =?UTF-8?q?T=C3=A9l=C3=A9verser=20les=20fichiers=20v?= =?UTF-8?q?ers=20"/"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 24 ++++++++++++++++++++++++ manifest.toml | 44 ++++++++++++++++++++++++++++++++++++++++++++ tests.toml | 6 ++++++ 3 files changed, 74 insertions(+) create mode 100644 README.md create mode 100644 manifest.toml create mode 100644 tests.toml diff --git a/README.md b/README.md new file mode 100644 index 0000000..b9544a1 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# Globinours pour YunoHost — paquet de test 1.0.0-rc.1 + +Ce paquet installe Globinours sur un domaine ou sous-domaine dédié. La version de test télécharge l’archive depuis un petit serveur HTTP local lancé sur la machine YunoHost ; aucun dépôt Git ni publication externe n’est nécessaire. + +## Test local + +Copier sur le serveur YunoHost le dossier du paquet sous `/root/globinours_ynh` et `globinours-1.0.0-rc.1.tar.gz` sous `/root/globinours-source/`. + +Dans une première session SSH : + +```bash +cd /root/globinours-source +python3 -m http.server 8123 --bind 127.0.0.1 +``` + +Dans une seconde session SSH : + +```bash +sudo yunohost app install /root/globinours_ynh --debug --force --no-remove-on-failure +``` + +Choisir un domaine ou sous-domaine libre. Après l’installation, ouvrir son URL et terminer la création du premier administrateur dans l’assistant Globinours. + +Avant publication, remplacer l’URL locale par celle de l’archive officielle, recalculer son SHA-256 et remplacer `1.0.0~rc1~ynh1` par `1.0.0~ynh1`. diff --git a/manifest.toml b/manifest.toml new file mode 100644 index 0000000..59dd04c --- /dev/null +++ b/manifest.toml @@ -0,0 +1,44 @@ +packaging_format = 2 +id = "globinours" +name = "Globinours" +description.en = "Lightweight animal shelter management" +description.fr = "Gestion légère et complète pour refuges animaliers" +version = "1.0.0~rc1~ynh1" +maintainers = ["OverSu"] + +[upstream] +license = "AGPL-3.0-or-later" +code = "https://nnsprod.com/git/oversu/Globinours" + +[integration] +yunohost = ">= 12.1.17" +helpers_version = "2.1" +architectures = "all" +multi_instance = true +ldap = "not_relevant" +sso = "not_relevant" +disk = "300M" +ram.build = "100M" +ram.runtime = "100M" + +[install] + [install.domain] + type = "domain" + full_domain = true + [install.init_main_permission] + type = "group" + default = "visitors" + +[resources] + [resources.sources.main] + # URL locale utilisée par le bundle de test pré-1.0. + url = "http://127.0.0.1:8123/globinours-1.0.0-rc.1.tar.gz" + sha256 = "d467adc4646bd541cdc695991cb80de5f7a0170d422ff1ef86e9d072af17ebe0" + in_subdir = false + [resources.system_user] + [resources.install_dir] + [resources.data_dir] + [resources.permissions] + main.url = "/" + [resources.apt] + packages = "php8.2-fpm, php8.2-cli, php8.2-sqlite3, php8.2-mbstring, php8.2-xml, php8.2-zip, php8.2-gd, php8.2-curl, php8.2-intl, sqlite3, rsync" diff --git a/tests.toml b/tests.toml new file mode 100644 index 0000000..69cf81d --- /dev/null +++ b/tests.toml @@ -0,0 +1,6 @@ +test_format = 1.0 +[default] + args.init_main_permission = "visitors" + [default.curl_tests] + home.path = "/" + home.expect_title = "Globinours" From 7819b48eff5a9ba7c678cf5bb004b94423043f88 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Thu, 3 Sep 2026 13:58:28 +0200 Subject: [PATCH 02/41] =?UTF-8?q?T=C3=A9l=C3=A9verser=20les=20fichiers=20v?= =?UTF-8?q?ers=20"conf"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/nginx.conf | 12 ++++++++++++ conf/php-fpm.conf | 13 +++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 conf/nginx.conf create mode 100644 conf/php-fpm.conf diff --git a/conf/nginx.conf b/conf/nginx.conf new file mode 100644 index 0000000..c8fda70 --- /dev/null +++ b/conf/nginx.conf @@ -0,0 +1,12 @@ +location __PATH__/ { + alias __INSTALL_DIR__/public/; + index index.php; + try_files $uri $uri/ __PATH__/index.php?$query_string; + location ~ /\. { deny all; } + location = __PATH__/index.php { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME __INSTALL_DIR__/public/index.php; + fastcgi_param HTTP_PROXY ""; + fastcgi_pass unix:/var/run/php/php8.2-fpm-__APP__.sock; + } +} diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf new file mode 100644 index 0000000..9d6d066 --- /dev/null +++ b/conf/php-fpm.conf @@ -0,0 +1,13 @@ +[__APP__] +user = __APP__ +group = __APP__ +listen = /var/run/php/php8.2-fpm-__APP__.sock +listen.owner = www-data +listen.group = www-data +pm = ondemand +pm.max_children = 8 +pm.process_idle_timeout = 10s +php_admin_value[upload_max_filesize] = 250M +php_admin_value[post_max_size] = 260M +php_admin_value[max_execution_time] = 600 +php_admin_value[open_basedir] = __INSTALL_DIR__:__DATA_DIR__:/tmp From 548053fc8dc06a21698259c065f2ede8e9d0042a Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Thu, 3 Sep 2026 13:58:44 +0200 Subject: [PATCH 03/41] =?UTF-8?q?T=C3=A9l=C3=A9verser=20les=20fichiers=20v?= =?UTF-8?q?ers=20"doc"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/DESCRIPTION.md | 1 + doc/DESCRIPTION_fr.md | 1 + doc/POST_INSTALL.md | 1 + doc/POST_INSTALL_fr.md | 1 + 4 files changed, 4 insertions(+) create mode 100644 doc/DESCRIPTION.md create mode 100644 doc/DESCRIPTION_fr.md create mode 100644 doc/POST_INSTALL.md create mode 100644 doc/POST_INSTALL_fr.md diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md new file mode 100644 index 0000000..fd29c36 --- /dev/null +++ b/doc/DESCRIPTION.md @@ -0,0 +1 @@ +Globinours is a lightweight shelter management application for animals, medical care, placements, contacts, documents, statistics and adoption publishing. diff --git a/doc/DESCRIPTION_fr.md b/doc/DESCRIPTION_fr.md new file mode 100644 index 0000000..49af4c9 --- /dev/null +++ b/doc/DESCRIPTION_fr.md @@ -0,0 +1 @@ +Globinours est une application légère de gestion de refuge : animaux, médical, placements, annuaire, documents, statistiques et mini-site d’adoption. diff --git a/doc/POST_INSTALL.md b/doc/POST_INSTALL.md new file mode 100644 index 0000000..4ba6976 --- /dev/null +++ b/doc/POST_INSTALL.md @@ -0,0 +1 @@ +Open the application URL and complete the Globinours setup wizard to create the first administrator account. Keep the application-level login enabled: this package does not use YunoHost SSO. diff --git a/doc/POST_INSTALL_fr.md b/doc/POST_INSTALL_fr.md new file mode 100644 index 0000000..dd6fbd4 --- /dev/null +++ b/doc/POST_INSTALL_fr.md @@ -0,0 +1 @@ +Ouvrez l’adresse de l’application et terminez l’assistant Globinours afin de créer le premier compte administrateur. Conservez l’authentification propre à l’application : ce paquet n’utilise pas le SSO YunoHost. From 726f2339063c645d87395da0f5e8c07a0b1f77a7 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Thu, 3 Sep 2026 13:59:00 +0200 Subject: [PATCH 04/41] =?UTF-8?q?T=C3=A9l=C3=A9verser=20les=20fichiers=20v?= =?UTF-8?q?ers=20"scripts"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/_common.sh | 14 ++++++++++++++ scripts/backup | 6 ++++++ scripts/change_url | 4 ++++ scripts/install | 9 +++++++++ scripts/remove | 4 ++++ 5 files changed, 37 insertions(+) create mode 100644 scripts/_common.sh create mode 100644 scripts/backup create mode 100644 scripts/change_url create mode 100644 scripts/install create mode 100644 scripts/remove diff --git a/scripts/_common.sh b/scripts/_common.sh new file mode 100644 index 0000000..aecf5f9 --- /dev/null +++ b/scripts/_common.sh @@ -0,0 +1,14 @@ +#!/bin/bash +source /usr/share/yunohost/helpers + +prepare_persistent_paths() { + mkdir -p "$data_dir/association" "$data_dir/grants" "$data_dir/medical-documents" \ + "$data_dir/private-media" "$data_dir/media" "$data_dir/storage/logs" \ + "$data_dir/storage/backups" "$data_dir/storage/releases" + rm -rf "$install_dir/data" "$install_dir/storage" "$install_dir/public/media" + ln -s "$data_dir" "$install_dir/data" + ln -s "$data_dir/storage" "$install_dir/storage" + ln -s "$data_dir/media" "$install_dir/public/media" + chown -R "$app:www-data" "$install_dir" + chown -R "$app:$app" "$data_dir" +} diff --git a/scripts/backup b/scripts/backup new file mode 100644 index 0000000..1fd0bfa --- /dev/null +++ b/scripts/backup @@ -0,0 +1,6 @@ +#!/bin/bash +source ../settings/scripts/_common.sh +ynh_backup "$install_dir" +ynh_backup "$data_dir" +ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" +ynh_backup "/etc/php/$php_version/fpm/pool.d/$app.conf" diff --git a/scripts/change_url b/scripts/change_url new file mode 100644 index 0000000..9c3b198 --- /dev/null +++ b/scripts/change_url @@ -0,0 +1,4 @@ +#!/bin/bash +source _common.sh +ynh_change_url_nginx_config +ynh_systemctl --service=nginx --action=reload diff --git a/scripts/install b/scripts/install new file mode 100644 index 0000000..ace0eaa --- /dev/null +++ b/scripts/install @@ -0,0 +1,9 @@ +#!/bin/bash +source _common.sh +ynh_script_progression --message="Installation de Globinours..." +ynh_setup_source --dest_dir="$install_dir" +prepare_persistent_paths +ynh_config_add_phpfpm +ynh_config_add_nginx +ynh_exec_as_app php "$install_dir/scripts/migrate.php" +ynh_systemctl --service=php8.2-fpm --action=reload diff --git a/scripts/remove b/scripts/remove new file mode 100644 index 0000000..d650d63 --- /dev/null +++ b/scripts/remove @@ -0,0 +1,4 @@ +#!/bin/bash +source _common.sh +ynh_config_remove_nginx +ynh_config_remove_phpfpm From 00f9eece9ada93639b726fd2dc12b9ffc4b22a79 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Thu, 3 Sep 2026 13:59:13 +0200 Subject: [PATCH 05/41] =?UTF-8?q?T=C3=A9l=C3=A9verser=20les=20fichiers=20v?= =?UTF-8?q?ers=20"scripts"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/restore | 10 ++++++++++ scripts/upgrade | 15 +++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 scripts/restore create mode 100644 scripts/upgrade diff --git a/scripts/restore b/scripts/restore new file mode 100644 index 0000000..c6cbb8a --- /dev/null +++ b/scripts/restore @@ -0,0 +1,10 @@ +#!/bin/bash +source ../settings/scripts/_common.sh +ynh_restore "$install_dir" +ynh_restore "$data_dir" +ynh_restore "/etc/nginx/conf.d/$domain.d/$app.conf" +ynh_restore "/etc/php/$php_version/fpm/pool.d/$app.conf" +chown -R "$app:$app" "$install_dir" "$data_dir" +ynh_exec_as_app php "$install_dir/scripts/migrate.php" +ynh_systemctl --service=php8.2-fpm --action=reload +ynh_systemctl --service=nginx --action=reload diff --git a/scripts/upgrade b/scripts/upgrade new file mode 100644 index 0000000..2098a04 --- /dev/null +++ b/scripts/upgrade @@ -0,0 +1,15 @@ +#!/bin/bash +source _common.sh +if [[ -f "$install_dir/scripts/backup.php" && -f "$data_dir/refuge.sqlite" ]]; then + ynh_exec_as_app php "$install_dir/scripts/backup.php" pre-upgrade-yunohost +fi +touch "$data_dir/storage/maintenance.flag" +trap 'rm -f "$data_dir/storage/maintenance.flag"' EXIT +ynh_setup_source --dest_dir="$install_dir" --full_replace --keep="data storage public/media" +prepare_persistent_paths +ynh_config_add_phpfpm +ynh_config_add_nginx +ynh_exec_as_app php "$install_dir/scripts/migrate.php" +rm -f "$data_dir/storage/maintenance.flag" +trap - EXIT +ynh_systemctl --service=php8.2-fpm --action=reload From 0cf7c23681eece1b9e4549b4ae3c8b8b4ec25605 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Thu, 3 Sep 2026 22:21:13 +0200 Subject: [PATCH 06/41] =?UTF-8?q?Pr=C3=A9parer=20le=20paquet=20Globinours?= =?UTF-8?q?=201.0.0-rc.3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 ++ LICENSE | 16 ++++++++++++++++ README.md | 25 +++++++++++-------------- conf/extra_php-fpm.conf | 2 ++ conf/nginx.conf | 3 ++- conf/php-fpm.conf | 13 ------------- manifest.toml | 16 +++++++++------- scripts/_common.sh | 8 +++++++- scripts/backup | 0 scripts/change_url | 2 +- scripts/install | 2 +- scripts/remove | 0 scripts/restore | 4 ++-- scripts/upgrade | 2 +- 14 files changed, 54 insertions(+), 41 deletions(-) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 conf/extra_php-fpm.conf delete mode 100644 conf/php-fpm.conf mode change 100644 => 100755 scripts/_common.sh mode change 100644 => 100755 scripts/backup mode change 100644 => 100755 scripts/change_url mode change 100644 => 100755 scripts/install mode change 100644 => 100755 scripts/remove mode change 100644 => 100755 scripts/restore mode change 100644 => 100755 scripts/upgrade diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1330247 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.log +.DS_Store diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..06e82cf --- /dev/null +++ b/LICENSE @@ -0,0 +1,16 @@ +Globinours YunoHost package + +Copyright (C) 2026 OverSu + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . diff --git a/README.md b/README.md index b9544a1..ad4cf22 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,10 @@ -# Globinours pour YunoHost — paquet de test 1.0.0-rc.1 +# Globinours pour YunoHost — 1.0.0-rc.3 -Ce paquet installe Globinours sur un domaine ou sous-domaine dédié. La version de test télécharge l’archive depuis un petit serveur HTTP local lancé sur la machine YunoHost ; aucun dépôt Git ni publication externe n’est nécessaire. +Ce paquet installe Globinours sur un domaine ou sous-domaine dédié. Il télécharge une archive immuable de l’application depuis le dépôt Forgejo officiel, puis vérifie son empreinte SHA-256 avant installation. -## Test local +## Installation de test -Copier sur le serveur YunoHost le dossier du paquet sous `/root/globinours_ynh` et `globinours-1.0.0-rc.1.tar.gz` sous `/root/globinours-source/`. - -Dans une première session SSH : - -```bash -cd /root/globinours-source -python3 -m http.server 8123 --bind 127.0.0.1 -``` - -Dans une seconde session SSH : +Depuis un clone du paquet présent sur le serveur YunoHost : ```bash sudo yunohost app install /root/globinours_ynh --debug --force --no-remove-on-failure @@ -21,4 +12,10 @@ sudo yunohost app install /root/globinours_ynh --debug --force --no-remove-on-fa Choisir un domaine ou sous-domaine libre. Après l’installation, ouvrir son URL et terminer la création du premier administrateur dans l’assistant Globinours. -Avant publication, remplacer l’URL locale par celle de l’archive officielle, recalculer son SHA-256 et remplacer `1.0.0~rc1~ynh1` par `1.0.0~ynh1`. +Pour tester une mise à niveau du paquet : + +```bash +sudo yunohost app upgrade globinours -u /root/globinours_ynh --debug +``` + +Globinours utilise ses propres comptes applicatifs : l’intégration LDAP et l’authentification SSO YunoHost ne sont donc pas utilisées. diff --git a/conf/extra_php-fpm.conf b/conf/extra_php-fpm.conf new file mode 100644 index 0000000..218fda4 --- /dev/null +++ b/conf/extra_php-fpm.conf @@ -0,0 +1,2 @@ +php_admin_value[max_execution_time] = 600 +php_admin_value[open_basedir] = __INSTALL_DIR__:__DATA_DIR__:/tmp:/usr/share/php diff --git a/conf/nginx.conf b/conf/nginx.conf index c8fda70..2a8c85a 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,12 +1,13 @@ location __PATH__/ { alias __INSTALL_DIR__/public/; index index.php; + client_max_body_size 260M; try_files $uri $uri/ __PATH__/index.php?$query_string; location ~ /\. { deny all; } location = __PATH__/index.php { include fastcgi_params; fastcgi_param SCRIPT_FILENAME __INSTALL_DIR__/public/index.php; fastcgi_param HTTP_PROXY ""; - fastcgi_pass unix:/var/run/php/php8.2-fpm-__APP__.sock; + fastcgi_pass unix:/var/run/php/php__PHP_VERSION__-fpm-__APP__.sock; } } diff --git a/conf/php-fpm.conf b/conf/php-fpm.conf deleted file mode 100644 index 9d6d066..0000000 --- a/conf/php-fpm.conf +++ /dev/null @@ -1,13 +0,0 @@ -[__APP__] -user = __APP__ -group = __APP__ -listen = /var/run/php/php8.2-fpm-__APP__.sock -listen.owner = www-data -listen.group = www-data -pm = ondemand -pm.max_children = 8 -pm.process_idle_timeout = 10s -php_admin_value[upload_max_filesize] = 250M -php_admin_value[post_max_size] = 260M -php_admin_value[max_execution_time] = 600 -php_admin_value[open_basedir] = __INSTALL_DIR__:__DATA_DIR__:/tmp diff --git a/manifest.toml b/manifest.toml index 59dd04c..9a5cd6a 100644 --- a/manifest.toml +++ b/manifest.toml @@ -1,9 +1,11 @@ +#:schema https://raw.githubusercontent.com/YunoHost/apps/main/schemas/manifest.v2.schema.json + packaging_format = 2 id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0~rc1~ynh1" +version = "1.0.0-rc.3~ynh1" maintainers = ["OverSu"] [upstream] @@ -24,21 +26,21 @@ ram.runtime = "100M" [install] [install.domain] type = "domain" - full_domain = true [install.init_main_permission] type = "group" default = "visitors" [resources] [resources.sources.main] - # URL locale utilisée par le bundle de test pré-1.0. - url = "http://127.0.0.1:8123/globinours-1.0.0-rc.1.tar.gz" - sha256 = "d467adc4646bd541cdc695991cb80de5f7a0170d422ff1ef86e9d072af17ebe0" - in_subdir = false + url = "https://nnsprod.com/git/oversu/Globinours/archive/9a2b4068da3c707aa32f365b2d7943398703c44b.tar.gz" + sha256 = "164f56084cf6c75fd1a6f2ae9c7639c65b09e54266b7d3fd07bb1902515a36b5" + in_subdir = true + autoupdate.strategy = "latest_forgejo_commit" + autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" [resources.system_user] [resources.install_dir] [resources.data_dir] [resources.permissions] main.url = "/" [resources.apt] - packages = "php8.2-fpm, php8.2-cli, php8.2-sqlite3, php8.2-mbstring, php8.2-xml, php8.2-zip, php8.2-gd, php8.2-curl, php8.2-intl, sqlite3, rsync" + packages = "php8.2-fpm, php8.2-cli, php8.2-sqlite3, php8.2-mbstring, php8.2-xml, php8.2-zip, php8.2-gd, php8.2-curl, php8.2-intl, sqlite3" diff --git a/scripts/_common.sh b/scripts/_common.sh old mode 100644 new mode 100755 index aecf5f9..42be628 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,14 +1,20 @@ #!/bin/bash source /usr/share/yunohost/helpers +php_upload_max_filesize="250M" + prepare_persistent_paths() { mkdir -p "$data_dir/association" "$data_dir/grants" "$data_dir/medical-documents" \ "$data_dir/private-media" "$data_dir/media" "$data_dir/storage/logs" \ "$data_dir/storage/backups" "$data_dir/storage/releases" - rm -rf "$install_dir/data" "$install_dir/storage" "$install_dir/public/media" + ynh_safe_rm "$install_dir/data" + ynh_safe_rm "$install_dir/storage" + ynh_safe_rm "$install_dir/public/media" ln -s "$data_dir" "$install_dir/data" ln -s "$data_dir/storage" "$install_dir/storage" ln -s "$data_dir/media" "$install_dir/public/media" chown -R "$app:www-data" "$install_dir" chown -R "$app:$app" "$data_dir" + chmod -R u=rwX,g=rX,o= "$install_dir" + chmod -R u=rwX,g=,o= "$data_dir" } diff --git a/scripts/backup b/scripts/backup old mode 100644 new mode 100755 diff --git a/scripts/change_url b/scripts/change_url old mode 100644 new mode 100755 index 9c3b198..1dc41ab --- a/scripts/change_url +++ b/scripts/change_url @@ -1,4 +1,4 @@ #!/bin/bash source _common.sh -ynh_change_url_nginx_config +ynh_config_change_url_nginx ynh_systemctl --service=nginx --action=reload diff --git a/scripts/install b/scripts/install old mode 100644 new mode 100755 index ace0eaa..02b8b6d --- a/scripts/install +++ b/scripts/install @@ -6,4 +6,4 @@ prepare_persistent_paths ynh_config_add_phpfpm ynh_config_add_nginx ynh_exec_as_app php "$install_dir/scripts/migrate.php" -ynh_systemctl --service=php8.2-fpm --action=reload +ynh_systemctl --service="php$php_version-fpm" --action=reload diff --git a/scripts/remove b/scripts/remove old mode 100644 new mode 100755 diff --git a/scripts/restore b/scripts/restore old mode 100644 new mode 100755 index c6cbb8a..6c1e58a --- a/scripts/restore +++ b/scripts/restore @@ -4,7 +4,7 @@ ynh_restore "$install_dir" ynh_restore "$data_dir" ynh_restore "/etc/nginx/conf.d/$domain.d/$app.conf" ynh_restore "/etc/php/$php_version/fpm/pool.d/$app.conf" -chown -R "$app:$app" "$install_dir" "$data_dir" +prepare_persistent_paths ynh_exec_as_app php "$install_dir/scripts/migrate.php" -ynh_systemctl --service=php8.2-fpm --action=reload +ynh_systemctl --service="php$php_version-fpm" --action=reload ynh_systemctl --service=nginx --action=reload diff --git a/scripts/upgrade b/scripts/upgrade old mode 100644 new mode 100755 index 2098a04..87b9480 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -12,4 +12,4 @@ ynh_config_add_nginx ynh_exec_as_app php "$install_dir/scripts/migrate.php" rm -f "$data_dir/storage/maintenance.flag" trap - EXIT -ynh_systemctl --service=php8.2-fpm --action=reload +ynh_systemctl --service="php$php_version-fpm" --action=reload From 394d9cc7a1aeb5ccf544bae5bb763871305c9e9f Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Thu, 3 Sep 2026 22:34:35 +0200 Subject: [PATCH 07/41] Ajouter le logo du paquet --- README.md | 4 ++++ logo.png | Bin 0 -> 61670 bytes 2 files changed, 4 insertions(+) create mode 100644 logo.png diff --git a/README.md b/README.md index ad4cf22..80ffb64 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ # Globinours pour YunoHost — 1.0.0-rc.3 +

+ Logo de Globinours +

+ Ce paquet installe Globinours sur un domaine ou sous-domaine dédié. Il télécharge une archive immuable de l’application depuis le dépôt Forgejo officiel, puis vérifie son empreinte SHA-256 avant installation. ## Installation de test diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..62079fb34432d53446e86d99f02c5bfa29c2ff29 GIT binary patch literal 61670 zcmV*DKy1H>P)=8yT~ae4%Sgp>*& z0&x5Xe~6XGjAMNBpIyf($?@r1JI|?`=!4_G=JXAWBzo^ACIepIsN;{4q#{y z82b;#`o4FS`}+o;Duj3z5p^rg5BYxZi@Wt7Z-35d7wGu_P<%M^r(phgJT88Kpd1EV z#@H`E+%-f)ZzsarK|Ba%awTa;xX(Kf0N;Dm-`5X+_+qTw zYb_doJ_0L`aIvhvANM>2lmxKe?$K$bdZ2>4R|2MDfl;6Z!znwML!o^R~;v~|{8my0WCB1rd zn|7{R{I7t!G;##1f}|mP7mr0D};MNJu!+BL+k10ALM(g_Pw79k1*3 zX)%85UU%<>`!GU+;NY$J z!;emcvqn|+EiZj(*`e=%gBNNQEYgf6URUocYkj>3bybD{0G>A=0OpVR<1a|Hj|6TX zz%frB#7_>m0^6_qA|JfR(MLIs_%s8nKms68$*ECyX$iTyf-=?7Q&|Q_mO&&SghSB! zjA~E$#H|x;EP2*3f7yFE_gw6;$04}yzLNp@f9SjA3w!js-ls|H|6r~6W(ci?fK#c% zsdf*NaQ1OluY`buuCDn2Fn`P+f5CARaNsERzV|M??HPZfI4FTM1B&6HikdqJAzToMwe}aX?z~Z7Tk2aIW)<{sC2%f7IOst9{8#5--zBT@ zz$ND&T6V>^p!J)T)_oepAOVstO7$KR!f^#*0M&zW^Nj&6yl_4M%pdc|UvPAwF$wH* zDTaUWjdHCj-bTQa)W#?I&5BpEz zZ9C!@*d-i{0buo^*zt)|u|Yj>U`f&!p!8F<1_?ndBoPU~@k)?x8DK34s1Xr9{@=h= zSIq~2`D6b03l0wg-Po|>-RK(ho=&9CR9Z`p7bOD~rw0z4s87h@{}>REs5%26NGKhE znY)R^YxX#&wNQL-7?_&gl^O&bp$WL=S~~MLtB)7pujxQNSu>aj08s=t0HtaTBmibb zthEP#e)dh^SHGGM0Q1NE@yKfK%Ps@%*nqpf^D^LuB|`%IX06l$aJnx`a!_`<;&mT> z5kN#B5L{7$C+cCg5I*W?x8gj1wD$r+tM#z&VU`F4@Z>jvjm{sQ1q9zvDtMA+PHG5> z0)>>4+)@>+brd+XtQ-w67;k>_d;pj~=8s)p{LDa44{+cL?7!p(aD{$>4%Bg4hs&R$ z3=f zBDmvhtnYk!9}vHmfoihG0T2XAZWllz%EhCSKHB}`6kckH3UvcaV67R@hX_}kw(0ik z#mEDb_&)X8um9G!;!nN3*!-O{G3A~p_gHk}8AAJCWEJem%p3<6BmkiXf#8&CU}gfM z?}OFuey-;O!2Ge>9gS~&3*&b^gj@e*71ln`SMgl&X4d*33%e(R6eW~o&4TkODGs8# zJw_5l4K9_z%+Okw7<`uF(wYSy>&44?A_+Xq4EpL639B~SmfB*oNok{rgr=L6@0OpVRV^@yKzWbuKy@A0e9fYdq zKb4`+&;*AmTKdt_c4Y-pc)O#lTizApj5pZlw+qGWrGqV9h`a0N;Ba{m zDC7mgjqZ9C-fNt!n>!e*9w`*4qzf-;?0o_tfXG z(kG<&e!BM(Nw}h%_5zIzfRgXT?KuG!1VJuJ+=Gs4K@&5e_ahQdQ}unm&0)>J?Q4D{ z$7a^O0LuS_R(ctSg?^eOa9V;;^cqg72FIT9Ax9<%n55$r)&UH-P7RX6vVnmz z330|@d#)V#!fC|KKb-GQw6~w7nLn>VdqO&#VheWLFU~GV5ZrPNkTT5xgam|ya2y}F z4|{(9H(2_UYj?}@JwFXNf9xK+e@_Ye#~*+=zJXiMUnUkUZM~gYeOxK+F)?wJ)^jxQ zUvv7=<1K~Y^cLnQMzEDF5D3IDN`a|hJDUDP2qa2(MhN%Su3x^O#XDZBgZ77Y;4e^G zfwdx5K{6;rQOX|@f1>?gNYn>cK)9u-_aC#7s2v2s>vd(r4;CKsfpo#`X5s+zCBXc# zdmM|~IAfm=;J?@Z7lsx$_F(WoDXmM4xaOv00WkxPD1)MYf7<#>it{vENZ5e{Q21w= zDro9)Fajv8x*&tsaILh+@hktvrOE;!oDk|`BwT{9d!WE7fDSrPofZPW4H*t2ft5ni zr3j;u)>^e>X9$>W1NAa6HDw2r`2a9~%pc+Lx#OOPpRN+P^jpJp;L6%*TI&NjUVz5_ z8Llw_N0y=uJ|g~5y!<1Kp8$%p1_p?Ah|5F4Apu7NouCmm^Q3&LSMNWr+`G6IMGlHf ziEzgk$?E_F)&aENM$n#x@|%E=;lhqug5mm>EHtYzIgP>XEyAB4V03k1YWi+;ckMTi z0n8usN0PdKTJ8j+3P>JFMukfz zc84$#D2pnf6}0l9{kH2j#_OyVfzuXZ`jT-Lpuwy_M37z?rFuUqy^G*gd*M}k;8waJ zOQ8;d?leTu7(d9}9PGK_q4Ucd4_X1-zMi_f_5<#J5d4c@fXBw>F@X7F{@^d14J_8c zOWu!dmwo*$S_hv~N_!E>J_7l|{au6M$r=VqDA*TMRG%>QR-zsW&kN~=zD#&5UQ z`$}C0q6-|+^@lChwNqsb!9Q$&9DZjvP#*vtc;I{hm_PnMTl6La|H>cXOW%JfUh<;P z4U)tUJ3;U?1~V1x;Tjqhrx$(RvJly~79tZdz_lu9@j{?n0$2fBGuj;TJ}efj~(1i^C2ZQ;2{D>wtq+13`P1p%pQpwbrA` z4=xQlt#7rbJAbIij{i_Cz>_yU1vsP|*suX~#u@VgVE*|3FaWfCjNkt6Xis#V%&g7} zH22vzXo~1F7&UhYJxI8CD(V5%E}EcaDDqk_)cG(*I@FTvi48I11I zV$|h8HUJPSo@9xn;i-bPRJuD>TNRV^@#|4!tKs6-i z@W>eS$OwYzQSuv8&_M^#Is)|AXdIgRVO)JMr9uPg;BWHIb%3Bf1MN4#sslhLBp`^G z803;$>qEI`0f-o#*>R9?M5TY}0rkPfpQ!cpe0$n;kK<0axcc7J!1M2pn;r8R!2I!# zodIY7xP>t5{d%Z1x&3RMsgdV1Yr&v!;D-@H_SOc?=q)WrRrDa~|A#v*vFif8eL!~? zARVCH0Z)%Y@eH&}af)xu^%y&OvVliae%9(B;~m(Y0o7?DXwLvd5YmNo%Me~I3@^V*6VS05$*T{tM6}M0+jrWBp@6(m2P-l3n1JIn1P_v zg5Q{c>NLVi__SQ-eeZnv?LGQ$*53rGLq)+Q5=eR!ZJSyL8`RXx8cts@p+_)Wwh?K)f(`*h$ zZ+NgDG&lqZ0#pEyfDRh)r-!4|oD1suR6~@Go&FL_Rg#bjg(6j6*)&`(GgZn+CV zYZ^M}KnDssXhZldIOT2-NicLsOcD;9at)ov6oOU*fPho!;!^j*Itlm9v!mPO;+Z|q zz5(Y?UU<@r@!=>qJyw~3oWC3AkH6*dozI?)TB#qCKRXER;6?qFuI_(V?b)L`GdmEk zeu^h~60yyM4+J8CirWWQmZRD~;^zB4!Set?VAX;@y&W910cbGkaJOe82Ov;B$4~qJ zY=DrIjv&SuA6YSlIjr{`C*&C^pI8UPsza4KF?a0uy^Kte*6D$?~z z2XW9*rJJ_jaKaOM1AO&Dbl-F%&N=VA`4V9Mc$}yHPk%bPx*2;Pb0jX@atd|z4ZMJa zI7$0$Kx;}Ce3I@*)Z5Gko(6>I_MM$29vcHXK}hnM-2o0-0CB<+j5z}ogZc?#&lHy$ ziLamqQBnpdO#1#51}sg0CT2xM0#2z0uht9cmY7H|E1y+sI+7_C5kTm`snkKz1psIj zBqfbg?W)uV7QC&e$9w4=<7>p3Z&?jqG=wXzxMDs4%pZ^Qll^!jtayb-T_@eB5p zj{ADnT-VAcyBTL7?-}hqumWoz2m(L{04oqNND$a{5i}>D{00(HE)H*VPG$xQ!967N zMmtHhBlb^5e~bX@*9gM#;8c4dy%IJ=RQGt9Y4{Maqfl zb~1N!27KKP|7m^k1Yp z14+yYvlt?haLTn%DqIK9egn*!p*2`5fCSu1SIA#TW*)+NL`at^eM6@Vu3UD~bGL55 z=r>-4-hF#_*~D}{0L&k|&*DGvL}244;QPSl2icKQzJ#^jJ6!b|tQBQMe2oxbZOH%; z0(79D)2dtosw@D~prln#aStI^*PB^98+ZU`5`_fcGctgrsz9cvU{)-tV*rtG;FRhh z25iXK_eMe8PuUvZu1$4>qA65ZWhuI_Y>{_4NHr+(H;ADSE*ug?d7e~9$>!vHn{`0Odbz-r*;Tk(Utj>DO+ z_yo$G4tk!zSbx%~`1SE`NAty-u-~=k;;jcP0FEC(h=GNIl<*|R?!6EY ze{5v5G^9UPK4Z~K*zoZd=`NJ0j~P+f1>}G33#Io zbk`2R;^ligKSV+`#XjqU0=nBI6bo_F>uf#1Cvc-nV>W&o6BZs9%}$GVMQKxJru zj9+jKtvuxTf7V)mgju`H6t&SsRE28H?AQR^o=Hv?7Y)QFbv~ogw-}}R0NE>?GeBR) zOvF+LjP!%pE)SwcenJ?uG724$byx!c+U+*)*fEN&8#ZCn`VANz9zmngfCf;iRIp&- z5Z3IsH&*YvFX~-AVIV-XxRdu72f}c{i&7OFbV5x7As~dn*vK|I_j8}Wb7b4tv#;KM z*M|43J{4#F>cU6mdd&xb$M87k9DsU&Q#T!j!?uh8=RJU9i1Dej--BbGehAct7N%G3 zh3#w4cgkH$t6=VTq+CG2LIBH2(h>p<0Ne+lTMAJVL?t1F2O=3Yx|oO*GY5fI9WbUr zG|IpZt$DlFdJDjt0zX*Wo|)d(vvi>4>l${9*KyQ{?OZu!SLP{$bqKN00Wyzx7;<7iH7NwoD4dvK>>03k%D8E&N;)xl*UNS0aR z=^w=bfGsS55<5YT13)s26nYVui;RQ=r8KrYbRTZH{(8RqwmY$P(`L+0Pov{^5HLeA zAz(lubR?=&s@QkGz47c9z5s_l@mL5Uqd*YHD?`?t1Vq;Y2RRh+D2@?nUZ*)TgA63w%I70nswj~Tmm2v* zm}QME0RF^KS2J*vYWnL|E?F>h&#`aCzU?NFSGF?YzcvW)pYI2%tI_Iu06g=+^P%w_ zt#lW2+T)|7R}V02v?jNqGcyJ-lZBFlIIgLkayKgdiy{Gh83hr+EtOH}s-e==1?jrf?sPCUHO*5~Gw8IM zkOa6wpr@xBr@r_MJpJ@D;5enwQrsFz4oeGJ?uG0g0=K3SOpkz78$^UwW5(aMal^k= zD*Jq8`M|7NUtf$p_BtBF!=u==X+4fO;)wYG@ONAA>&xg&?+dZ-G#vgao_53neE9jx zu<+R5qJO}_rn_!&2Ku{)$Z_^_q&$*9hl6>4uwKkS7c;v?dx?!Sl@c-wncBFiDy^wR z6$gMgO-3FIX98M8v{gvw77hGgN2`nWJmvkHnE?$2p(z|%`6~j!z`!gvUGxWBH~t`= z(7&+kc9*`Qm41~@nRIC-Oz8?_9iTHi0lzU$I%uccG7$^u!mIYf>*|k2fh`<^I5Wy? z$A$daFal>f+Dqp2f1H8DSqfpxhIQC*|NR&r+0G;!)O&i+H_(s%!2wijbrOz*Rtk+q zlZS^#u9e&_;_RN_R(nCAx-f$2 zVdzd11ZJ((=D^qg(`owW{q&}Pzwb>8Kf)6yKLcvZX7u-TL9AFY9{~QA2zS`y`Z(^M zIT)AzVFJgxv+#OaIQZD3as9<#a2KsSY_aRokwp4wLeLS+SPi0XW|nc{ndOqOx#*2v zGa1sAwj4DZAefOdTX}AxT$c{K3IRc)O+wtPng3&Y!vFQAyFSr++BvgGmW5$~^@t8{ z7~H-R{D8!4+dIHoNzZr&Sf%HfD0ClmYC{lS1r#v`bG{{5# zMD|Vz2;qoPF#a=8^o4B?{9xj!H~j(ZmQ#D}M|faZa;$YDfJK$6!fw9nej{o8P?4_o&@d(M!xnAwD)Rb?7>A{)iMq!l}e|UDz#I+YR^7Ssa9f=+@9IN zt*H@kJmwk?x@1OEO#&Nbc52%Y!%Rilx-m?yi3uuO`>KVE8KK9%16T;*3n{*@NA6UH_!`J>Am0sS@aowM5rS^`pA1c1(n6lkGHVE|z|30xKUZ%#w`P39PxFL-W*B@>hMAj@5F%GJaOzNn85`=UbuUdF}>GzVWImEJ@N$U@_hVxdgw=!_lMC{y~7wd+U2hA_J(@rPCI83fH~ zXssfZFky$>_}mByAzdcNgAfrvUvuJ0Oc_ij4zKYi=9okT4Xp({uYwbv`Alfv4>t%M z0L&1jI)qnC?-OPt8I0nl5b=Bfgj)lZx)Drl<6v}a7csxNI@zq;fA5B~dC9UJfPxA_ zapd_7U{`nipZ^><`DCEe2JRWf|83ZUJtr^4lq1|~7ad+MmtO8wYA2U#Ju94Ymq*fz zF*^jE2HKNbq1vp|w?J6h;1n%-a$E?v1R=c;u}{c5 zY+*1)xG_kHl)SrC&@}DjXr%zH60C;YGD^LRKwd4mUX&eRAOYR+(HWl3=#vll;$Hh767*K~ozDPvY2k0$1T0#L*-L+bJ8nN0W553y zhW0oDi+y<9Up;tXt@dKK+Vw)W*0<6r)rf?np|y@_p+S2Zt;wy>e%rccg{641_ze_0 zi&7bFt2kIB_EQPQ7pKR0e!8WpPi9JN@1SIIW8$=%8A_=hA)L4LsM+f`eD0s_d+5F2 z#|gU#1~Ob!|7`~1%muw91!2a5%2(vvqowv1eg}6yp_%uqQ=|y_5-yMzYTo zWg5f)2OV@86VO3Bjdp@S!i8|l5v|t^|D>$%pH9g_Ryh|haE|Q^%^qUd?>A_L%nI7? zgrpy*1X=Hg)3YcP3e}NT0CSY}MBt+!w6|`-*wt5|vtv7SrxW3W4AQA4@6> zW2LQ!?G^Oy!u9(9Isn8`eDGej zYJx*eDhBK5`U?cDNwg+5hmJD_sm`K##_2t$12AC`8f(OH3T7ccwrXwBnR=Gv|FZ^N zI5T>}#)31FY&Nhfv!%w&%=%zgh!<{OxaQL*yyrFQ?yJ5A{@5=-mtFQS=kt#kKlyHy zyz)XY@5!0W#*993))EVLvf;oLmk5-l@{(P`BqfbmUy%X5AY4dFx5;l#K&v)LI1the zcX_7_;Z?#}galVH+k0{6fh~W+lw%OTKM{VH%=BGHA1ChhD`*vfNW!Uh!>JEKRC)lC z;cLcmPl#wxI&3MzbyU+&+L@(#&vQ%l-WBAQDBK7%Tb(J0aOa=e8ZCZU z?YjarE>XK?6Ya`@ewksj>}V>Xc-)mUU8(HC$&9}dWqSwq4zHDVg{0^A4V2Cs`{$$A zkMtgl{Wg60VbALfjzDE#1R(4QqJAq8vT7K%S|Y@z07qDz6d)(a4)A2L4@=%7+OnAg zK>KjYbwKn$$OzGoc36%DIg=p9MkbYcW6Vh)N{X`R10?Cbpp>K)v;Cw4$16j4Wsq9| zIUWERl>$1NBs5J(BEXLX2olwO4n${s9L)#s12-CBYtj%vVF1E&Q5x!>YAsk4kPLQd z9XS6#?)Y1_0XO~eY&_xF=iuBGhvTU0FOYq%-mkoP@heL8-qYP`_X^>bLca*D)2?w+ zhZBPK3>p(#!o_d4<%}Ji6W~6Y5QUNQ)7(%D=Vn#ss3(eMUyvPo$rED81|%qHv1Nb- zW?oZr-NUz(?p*)mU%e8z@4lULBYt-k>P-!t`b@O$yJ(HpLEY+ba6YH8UYE?8KCj}F z`;J+bn4dk8?WVZFMgp=_M>?xd)(Ei`d`<3Dd=X>Y?~K*}C7FOZ)PwXjARwFyWTgkP zRD}>Se9k!4H#rHcqpT-Y6@=D+05||jgA1|Xl+!W0?g32RcpW;MHh`200ZGkZ6;Ng0 z1JQNJJ_{OG{H8p%c+G70Q2%@YNbZjyL|b=U@LSyd{Ac57GeZE@;JD^Lt*ZA-pIPl% zex_ULT|>$K}HZ$V5I?4 zfbu~?qQ1voC@)-yiR-VS+1qXj1xA%ZX<#vWpLi_k_KpKeixw_eI<@y&9&Z3Mqw@j4 zB*qLL@oWrT^fcT?$M^PJ{Kn_@FY10nx!!+-aLaC3{%LzqJDC~_zonHzYhpW8rdqHb0+mS@M*jK2dib3^use`mI8#pY)<7YwlcW7O=io^6@)dc6hiK)OTPEI z?|iKFmD|3HqvtxwS_6OlKL9}K_HteM{@zguoXT8~IsTKLlSf8aG0&g*U5bQ#ty0R6 z=3}$@0Dz%Y2ddMC-)=zpE#lB;FdFukmib7^iVSOc4#J?oNMoel326#%LOr{tpdnBx)b7^T+6bu21X^que& zcngNOwQl^9FK`&61Z@u!2*4l6V&)g?l2w-Z8zS-Tw zFPFdW6+$iyw6cPYN$|-^{$&L^vQaG+=H!A*tH@3}>BuMi01!bdg`nL)r!@oBX+`qf z64LSDl**8f7j^+02Ot@?1P#r?H2F~AAO!VT2T`L!hJW`vBxG#>V$gj{=-ha4Ka~_t_VXbq}C>&AzDay>HkH5RTiJnk>8jdpEG^ z7@)Had@+NbN&kNY0CUl(JMMt|*(KQak-LC5tiyvZ_}{MmhK_l0soMQ+*DLQ6s<^Nw zXfjz>l*{PDi|@})qCGtlwS*|SCk%bd%tmWIL)^XQOj{^w^_yz4WOS1Y?+4E9=Ls<- zDO}8M0c8M6$^nb%W30|QX{~!ey7J&1SB%%X+?}8NJMY5j$NU^bGz6e0X?k*+X2e4; zW=Un19Yvi{BASCwk^PG`*lz`bz;D5C&cJUqLQKG`qSD(7;gleRh=QUHJ2P?TB;M^g z4ItrMfDBXqQW>6Cg(ycP9^p`!>W82sD<2&AVepa?2-+YL1QHz24OpZj5=L1Q(SJ?j z5i-onbilH=8_E-?A82tsfUI04h zoPW#!5HJ1?LK38Ot9bD2x8ol7Q{t!_t~+R8)q!tuywZz6qFZZb3g^zLNOLZWu&GW9 zt%)t6Emc--Dy62REH1-Vk}YhS4T`JLPc}PzSrm{>0&JW%$4xR$d-$djzM+E4$*imK zD9Q&G&aw)_9|$RkHatjp%94k<0LL5w+;AX49-rhW-=KHjeUo1qe3?(Pz`d^mnuqO=Hyw85KX3*R1i%~L4)54wF!_w*>AU+}$ERI- zW%cNj_j`d?F27e0?FX=ok$qc!E^g5=vQ6bstYRxvr%@oLXGZ31F%3JdGxXrVxuMha zq9ZdT6FmnRr9+$pXtS4ZFy&JH5PPw4BAiW`S%J7D$Z~SoSFDxn(`d{*Os&pM2)zW* z_w_RAQeySZW@*c@!G_(qvv#;_dc#)EL)oB_P1yiw)q&rbg!Vg-r7B9@gAme5vIEvZ zq*<70Q3_#@Cn;H!ad$wLYH(_O5T#o9Tsk0TA6f-aoidZ@_}l5Y7x&+|?} zPyfh&+;j7T+T-o3|Ja#5;9cJfj=u1G;5ldfV+DZt2HtVug&6$ye*!nJ$JuAS6d(ND zyY{Fo?Ryh|S1`~Qn>%t5f*$MV7zuWKqjhG-;LlE2*j2j8vUwjC6z7&&53;5d$qrOl z-)2~DS&k5;tiPQ9jYUkQLP#x&f>vq}3v0%c`_hq<>{FAT+>6HljP3kFC=dO|?1T1w zYx`B8WLA=^U|k!5XD;ZEGc)d{tQQsFBY;*ut4@n#xsFm-IRx?|G7cv?2W(a*M#qJd z1)sL|Bt(qrS9+j>COXqQ(3u{FKQjT{TjJ#eZ$C=INP2u2PBQRD<{gTH2= zwt5_4p$~A_X+YfbXAMRa07zoneYZo_>u@TyP(irX2eg~;r`J6cj1FI1?(X-5q%uio zx$bhsZU6no?F$A5xBo+B0A|fUH9Czp)}l3jb@`mH{M&OJA>ReyaAr7W4=kLCF-COR z?6}!?qVn5lPYuK7;u5k8Cep0}imCUeU`H8haA{rZ?D;)#*{6&Ox!!x z-Dl%Ou}R1w$^ooos%c9HZnZo4&~dYmiE`)O`Zvclw~proAlxcstsj~Mnv>hnT6;5s z=^X%TIOQ7L?je+i_JC9Ehb+}VvJ|rSOgx1E)(RB00oh;%#&}Ye!4bZ14c46S7g&nW z2TcIYsWGhm^Nl#@>Cc5zuCi7Eoc^Uyfgg15ao`$n>6+7_)mrIz_cWTb+nTLePbhMR zo9;hO31Ibz+auWXl~2dWO;<1JSu*q%A?bBm>A{eCPIoO)Cx3m=C<0@S}ZLd<$ZbRLm0pP zSBKSmx<0}|@Jtmb*OJb&IHQJW6y=iQxKKsVoI!hLEZeiUq-Ar2y#j=u?A4vy`#3ki zpNQbt7=@JpV~*FM4A@pczcb%6qfkaFN&qGpxarA@B(HnVSAk>y1@z;cx9VM|OM-Pb z8$(RylI3j9&o&@3hl^if7d8KVf+g&0e0HYdGAIV#?d*@>`%N^q+>dr+0$!~TeS02? za?gU0Q7GK_7l~CnBn6QKNCMIWgg|?07&F5g5VU4c?Oy`nEdit(dIJV+5UcDvLB`}D zQA}nMQIL@!NqFd{D{=Q#mtpZz2%a-IOw#8)?M+_;m3Ud7#<$R=2_sdJr-c&#vypM8=UF8etn7{`Uop^unq-c zn5l^8&U4_<7Vt+}DYT}BLmf6GTrn%3&Li1&Elwu7UVwzh6K-J^!ZtW)E=bK!?#6yP3a(=*$BFm=G}Sz@zy!a;Ky&57+$fkL@|8G2VA6w~SPWW{ zTtP=1^~}e22Eb>Zjm{NUVciq<1@8F;+`X1}b#;|qEx_+lL9m2#3)7I=inqIhc3Y~Q z88s9d69}5qMutWik&bkf)k?c_VSsZjEV6f5TZMx1-LD*oXbh>afvjit{p91Cn*SDn zUOWc`4g)|7jGtA8U$EnOFMe0}gIaZ`*Jj7~Z4f>?!r?APb^GFHxw1n>8G)3PZ=dD=rv;VYnni1T8v?(B%HRsr7OsX*2z?FPkfq4N%byJ?yAgUHW()C6k!t^ipC{sqq~?VHxlnt?RK@y^be5 z@nzUDHpXsu@8dTB@aI1d%yi%dE$rXA1LJzxlI}j|eZ+j0(yC@#vE_1It2>qxel_kC zRsq@(&|?+r#>_kwjI1Z=JaKAmnHyO%$U%lHMOM;^GHpO>F&Mi~u8c|5#E~*@Q)-L7 z*(Bb%7SpwLDGT~p6l6;Q zi3)Lqi4x}a4X&E;v{4SCt_qiv;zxf$1uI& zR&=IDP+71i`WGJu$E$?TuQ~`Pb&#O>S~G$`!>d#y5mE()HYCE8alIXArLgUxyYYu# z{0PGj+=b&_{0i)U{7Ilr6MaJq0Ts~JyZ*!_e~QVgjrQ+*)WZ92{CRmPCOehUr4Xl{ z1ccNjEMKx1Teoh-V#8eYaT5SI8pHhGsbArx%_?|@zelAcKCP8{u2Sse5qC1%@pE`Y zWR&-!ANtKn1nq_uOE`k&X^!gD5~ws0s6rGxwXwG7y)*|>M+6%vXTvWb$qG0R@R?Fv zc8k-Tyi0#kg8*_|ZwCqS)kRNx_m<)5`+%;3wp+pRgc|Ym?Out5ERoXL0c2yYiR`S2 zGmxhtjmE_{L;4v^4FS_=1dJjNz=V6R8UE}z+S5Bg%Cy*V`^k8MmDX-*k0jMCIO<=~VgAY^Xa_x8BdmQlLyW2Paalfg-dbw78dUtKvapU{;Ufn0j z-zg5XyVv{b@Pi@Gz77waw?Fng;5C@M^VcUhLVTRHKAJhhqTu}Hj_!M-hEFl6M8F}= z?}*Tzoy6?$T7$N^Grv4C)7u;cH=BbN&3TYT1j?U+oHz*ObnSC3%sKLs!p=c@QZ%HL z4I$;11xla#&!4}2=0jgq5Q%RcJ#1IzYsUev{N@D*3fKFI4%8Yp)jlZ;K;)295K*oq z;tc!BWHeIF?;yF(Yy|ui-zOkw&!ROs0wM=qS3iVXhS#$QPNfGHK!H%FAJV0;W*1=T zqBXh^6L((&uilHE)klR2!751Wcgy8F)_-GL$yi7<8x3q*_Yk%}^Z>@TZN$vz4*1Om z%C#y6maN3Wz4pbTJ=UOS!D0wWfbWNz0j$$G1tHLx9Nyj-+i_;6v-Jx1kX~%P>m^vd z_Z?n)x_nrt-I`u|R~C z-H=`t41(J=2)BDtI(%bJDajHglw2arY`-64_gs(eg?piAufs!CAsvLhf7^A~0G`ae z#fW+&LtAknp&_7D2p0&!kg*YoR-uLgbE-ZZ5s4_&HK3VI_uV`C;9bwAk@DJ^C%g@J z9u6F~iLqSY@6GDYew|ip%aVPL7%A%hz#?nxW;;Lbyc5cCF#VSG5EotMEIa)vFB3%n zp_E#~InbAEfQu3({yD}(36_|96jOsv%O3Rw?IcW6!IM)yD42^p`G4bY2KmFF`E!mS zG>0HiQ6x9L1oK81@#}}8asotBI_pTve?v3)e80bbwlwy0boK7D%ZncXT-IoG`4B=3 z5vUd?S8O@+kYPJku%@%klqhJ&OhM+1$3ao#On)iGICOya%owv~l)D!|mTF)IoKhE@ z`hswGkJW+@QE!C|Gi@Ql#lQJZOx*hi^sYJtz55&;5`eUd)O}1gqn&)R;eebf63GN? z=D-I99k|?qD*{MXK+p#K7C2~!!9@pPts+;V2q+{0?YGgH9(^cqs^d3r8^M8HKgWyj zz6N_NS&Pc@H66dxS|_Ajw*8?$mFC*(ce?<N7uw zUw7UMbXOA3x`#g$6ai;_;~9W(7J-D9OuAA^?M)jeG#9#8pn1TV##?%B6GPQF&CZP& z13K{GH)kN63fyWRlW>>-NUsd1XJN?GXC0*^@zj+d5)w?|;-B4g2WHmYj{bd)L(d+E zh37>3k;0FG0L20#mb|-3`6BzG#~me(c6uHA1n3ZurEE5-!R-b^Ylc%oXLhpFo|(GL zdBTe(Uijg2fK@L5esme!W(f2x-cg!jpaFK4jokK!-9G>@Gw}Hj;>(q1a?A-x);TQQmiB2?scOVM@E%#jK(89jJ_F}vw5Os~5Qz55)C+TzvWuI#tN z^gPCQi~yW$C}ck~ zhC%POLVeNT2C}qiium`oEt)9RAWHS9#x|QNWbNji@y(cCe>-~iIs%oxMd0=<3gy_y z939Vm9OgoR*5a%%rSXHanUL`^LPA!10Rpu~H*9T8jeqv2yWg;O>pT7#*tRm=s3HLA zz_Yg_q!;_{pu4>eVI(vmD6HyA;48mv@-do^XqLk89~7gIe`{Ma5I;JS`17Q(H4@l(f9q0M6^W+G0KcFrGiP#m?fYE(rtq12yj~~Ozzk=F}-M? zlAZw1Krp{)G4^ym0$wwXJ)ig~@Ef9+ea3N*{JKR)qcekm`)aOmRpwo*X%ho>U!nc zYc=bSvC@6^yk24@XCT~cxIEjwQpC9yAs6(@z?v~L@(_Zs1h94`%8NQp@SOnNLBL%>5Nv{QCOfXz+~cW7>FpQa1TIye zyax36G*oK_RILDm%fJ(5$jS~(EcEgEz2A%LKlOD$jR9|X128zaOC+C%3jhe3G=AGJ zS9q1~pA*p`VHQp4mYBCcLZ%@TE*Q>;A!kI+^U@&2ngdBzozZua)n2$gi_`Y2HJ+XF zk7tJ;0szz&?uG1-c%c}p$sNef8f2!g3s5MF$b=$pM5GkdncOluv-N>b?btH*pWJS? z_J8TWq>RX{vegGZ06en~bo_g9=M9$(NC@bX9NquWr|do%zytsJpXi$@qw)L^_&5DV zR?6~a%<62`x(^nMoow~of}*~tyUA>(36vT&7-^vnn$Vp_eiKO+JEa2gY@2Q{rOr0- zyNx1$BK)4k3Ugc*bNq)$kq{FkXe|-l1je-t+#dL9Gncw%XzY(#x(lJHj>gt)2&xV>|26)nwfIr>_yz>y?od7=hL@YnynYjKOBT4??2miXP&AeBg zHSABne_=2)G33?z*eQ2Y3hl?qm^r5$XKZBkCOMPB7r%CFt7gig zQ%EF!O%?d;l)I?ZJs8&HMkkXg!wa!+4$8O)8QET;-l;u0Mkc0Y-O2*2JLrsWd~kN_ zgP)k(y7dQG;&yI5_Fup}K6mhT9CWs>fMkZg?&8Tnbt>+Rzk6T+i7nUne~oQ#J{7ee zd`EO0E}jq8AJtk9!HUuOQW5!*FO7s5-PHoZm{m=vP7AC8du@`rpgF@W%jf|Zb3*Z5 zXY1>w07hz(5fAJz3j#q?kvetkRJs3lwk!%w3xa3>I#Qgj=>+{Z#OIhzOU0KIck0REEH{n5OBVZqs=={tTV+LPNp5p>$`)(kKSa>`v)>RlKr z<;3^)Tq}<)$e&QC`%m#M@BDA37piMzzvfY{*zDG4C&eMMT2eWrvy>;d5&c*E38Ppcncj@}a z*NK_&$3H%VBahtk@6QC>deTXle$N?LbJA--M3}toS5I{u`JbA3bxfU)hkw}efi+8k zm}P15w%PjNc6?xjE(xY`Zul#W9qZ9)Or(6RY+cW6Lr0A83Rk=w5L@}SWEkF-)J#xnlQ zAmMl@buWNh?}rdXwlXeRLTwok&srea`gx8h0u&gc#^7J6e+7hFE>vw{W7$XfUU2|0 z6i008H(LQ9e3-BsI0^1-}=6PQM+f~2d{hT(fY;1 zvj}FZaB91L{kdS2+5Ek~O9{~Qs@VJF*Mfu9n7-?`2Red25d^^+Hp@2at|(A%%&I`8 zXV@@sv^xTXycWIYfK<@I9Co}`jc2|cqXWg9&l$8o)CKXhFRcQw8n8`=b*1GATk~i z5eqO>`7;PaQ4mmVsLm{Oa}ugCPSEPwj;~(RecY=zU%DDN{>}!ycsMLP9?9b0mBabl z?HJ()4uTe1!)5RiVEWFBmU^CZjtcxEBT=+;c`d?fcx z!fFit2%TzAhe5v_-2c?gtB7q>Bawgj_OUEomH~0In z-J;CQl5^UA(yc)BE`dKi0)J*SG8p9)q>kI!WU5xlaWHP(a?$s(#9j8NT&bPiH-8f< zaC{?dc;8+CfQchd@dgLF-vHKUX|0`v=T2@o#8S#Tr4aAaieDbAKIsRQ-obJA#2ay_ zyBgSh-J^C9{~m`QeO-6y>jCH^p!q0mC?UrN*c{in$t;9Mdu9|f+t;Ggn2P!)DLXKw z(WZKZv0rCGn2et*si9Mky~Ic(c`QPHzI1F#c4l~otg?rCxMn>jDG$Oppwj~#wS-3wx+V_F@8?1i#0C4fu=&GNE z>puDps+Q?gB7TQfx>}@s3%jzj&ORk-F_Z=aHZfdt6f_;nOm_@QggQg_XFo^2FbOIq zafh<=IHtozbTbMNq?F@Qif?PyXRe!Qe^n24wk>_Ag|Q72D8F-046oe`dfIWx&7S>w zJRI_hZ{ruUhhX`UM|;r0DM|(X#rX>*0W(S4Bg?MF$Obeghr>lI!XcVy&^6EPAmlLt z%HAHFrR5`1ISG|~vV%p&yatf&oM(SgI`A80EFOF`%xNL0a30+lZTW{ zAu@?1e_*ZKIuNZpp7FN<=>H}qfV+7Zm>fpmho6Ik?wUN%k@P;L)B-knK8%9tC&Q_V z%z6Gy^M?ww@yy-a;{UVdz@&p9F`=ML{ZA&Zp9*@-rl}@~q!57+;s$`fa-G2-hegED$tkCz~lXxzWU=3hkDreD=$ImnAz2=)k#`wvJFPaw*JaY`h|f` zp*^_`9Qdg8EdewPg1z)ravVyJ}9IhvNP7eykP zL_&yB65_jBsjn@0=JdLa-@Om}yz(d5`qUrd%Bx<6mp+&O;@y3B%L+6TaOW+kJ!vmN zzJID>y+<5BO`#5g-xvc_2c_P{kX{8=T9?=$<4l%`8yX5o}k8dwRZHH~0;1iC#7kWLZ@A*ECx_bGp) z7X4#d0`T{~ht{Q6fct^FpLUO1>#4sU;O9h2No1x-Db5<#ch<#Bk~6cuVyg}`#wt-v z3npY{x5L}n80siOf#V5!&Io-n0UDA(jwA0NqPNXV_#aY-t98J~fPG&G09agm5?=PQ zM~>X?P9=d^?=my|!7ki+$C0RYI;%A67b&eh8?s-;WK_~8jX>4XitxV zSsP?tPNu%zzgfGSms3y7xC~{XS*^fUmd$SUZZ+S>FT3fF=8_da{(_4O(-VV`L2!87>%d zxmi<83sxprL-a*H*Kzj86t!m3d?2~0(m6jX;^%w9oOr{NAkJP?DW&f?&d;^duULE0 z?dMl#-``rk-~#{zmLL7%@b`LGJg(FI?Bd#Z|CLzF2chRB{Y1ifHfy~I%t zIW$QVk3nQ^%X~!Pf-Q(+F(!gmBxDJ0-%^OkID|v{@qWR);-1YP0fNrs7z5aJIdIax z*!s#hqkP+MmXs^rdvy>jXNIO^R4!Gl&z`rOofaAOAlaOYtnXd|sAL&j1)4zGyiqw} z_P`>9rtGgcng}VyFo3W4zWV0y^qnKee(`&`o9Z9%pyg{$>NMEj!YTcfHK2LbLlOkuo$o>KeBj52Cf94NjPQp`j((Gu{9h?XYL{496LC2$fa1? z)PPqUy>{mefX_Y~n315PUxxOz56V)>ISX2!$XXlH2Wb*WY3DCh^GcaDW(~<^@1JN6 z%SSSLMoB8kWcljF13956guPEtzRhSrk0gY+OOSYbhv_p^?u;Dv>pKwq@y1ND_YW5a zC~WRsN()v!&yk=P6Nw|FS7E2zMP8+s%H0c4?O%@i&?_?4edNZP<|7$qZ`ng-T}=K@heFL;!;8sI~y6v3lpFtO+B-_mn=f& z)DV>OLBa^J%He|fIe zw|*?{smCS*=rn;b4->=NArD)9IGA6plqzvNhLO8qoSxSFKy=X;iz4}Zy9)pu@ z8Ng>HT{5!MRB%T{S%D;ikmC0`z`x$RcJO+!?d!byS+4-T_h&eG6lUso-@p;RsrL22 zpPvKj`^ixtdNnhb(ksD+25tzv2_Yba19r-h+l~h7fVAIX)oDWcO{gei;0XOUN!1+q zXiaQo-D#rSyC_umv6OT;Wz(4xp;^6jt-z`SI3-(v#cb`d*}E`)H^Trex^ry^!Eiew z^Zv2n39_sx1%y+9*Ik8h%1|>S2LS#P7ag(i7rzAXe4@uJt9;Z0z_xSFL2&e9+&?&k zW!rD)h2y+aX}w39nHOn9Bd4~LU;%8SueP8p845~UaJh-goOQ=xqJ%BVM#Sqh{`YAi$phIz0S)={Rnbf3OH7{spY} zA}}*+N=heVhh($3OUN{W$nhYY5;>Lb2-MZkK^sA*iJ&!0s?!YX|Clbz48J)Etpikg z7sD;pt@|Ju8IMx>*lvwE^mzaP)*9@$fl}ROCtBlxTu^da`9$)$icDei1%YYzP5I}| z=t0J_0#1DZ(0;d`9y>jlSa|7CwX0_Er(3{>9rBoL4v%UHz}SA9Ox|+c19T&oO@U535wJzKw{ULCO3o$cEoc zflHHE1slYR5IPcqq*tL*eSoU{%TQae3e|xX@VW*ey=o|iDFl??L}PRV+S4NuZ$1{# zG-t+R8KSK6FhjRzqAbI@VeMUrvfL4)VaDcFwFPhZU4OgzF>Yc7Y0`#xHt6sQq`60iA^SNK5 zd*uKYoN&UU9+h{e?BG9IAH(SORR9D#<6EUy>pp{l*D;?M{U6#s17Vgsn!q2t$?*cV{9WDW1FB=kW!3ekdb)~z41`=mHnor zx|235O{w)1q%$SQlg%g2Hkk|ef7@?*7XaZ@n9A^+myq?r0pXQjTN+wDaNV1pgKc;K zAH4tm-7^5hH|@t>cQY34y$0@`_tssP-a+7l>~x5%ou5rW*yeZuxp}~>hPHhcv%i*T z#T&I*R!B15#MqFkP87w#B!%#$kl!UO{`ugVcD& zoCP$d?D%0WX6iY_X#lcvr-b_w5gRnft-|YDb|N{|)9T;2m=(t4lSu~3lPy!DH_8Pa3$&S&sg>>P8hC+_ z2^G^|Zc*ry=lmyW@yQ9fdHlu4elh$6-Mx=REw)P|z<=vwrG73pef#Zj*6eerYPJ8p z)0o^7Lb7zrB;7JeuL|jvA)FG3q-DmL4omT_?}D+^IvWT~6pV=k9IpcDmQkt?KnHDN z9RN}q8mwftfg;_&lqas*vyiF-!=j!FG{f{fQ+XipJPx%#5tV%*c8) zC%3|HPC=_q%G6|op~;333g>b+yX$7|(MDS>UbI38I9?S}dWP6bTy_X9lm#JxwU1zS z0;VdFS*@_KsOQ?r6Q4fVJ(Il#AP6pX^&je$YcCn;-cS7Ds=a_` zKI2inC;sYtdh<;;VKD@#emL&m`~zpnlHPwI(1$c@*Lb5umW>OW>RMF%hA7h_1agv3 zNF%?+yDkU->CKgL|40y8(_@(3u`!zA*N{T^!g0Qdj{Z<-fTsGN_|L%EXNPa}oOAvz zb^K%98Z@s{^37pj$E{zjYuPzR1;JaiRx(nkrF3@P&bWvKq%1*}t8mI)kX|LU*h(q2 zkxGJbA&P`Tkqzp|&2W%e^VtJm*=HcbPz6FrxV=jtO7+aH%mq1Qv7>U%r`6~t>}<2sXdv zXw+|Q9p;rvKhj#S=Jc*2%g&m}0$_=_*nyMHYnxYY;tWkZg&HXT*fhmr%O#iy?U@P8 zj;xDnPSVnKf5ck8XGf17KB)d;z*`2a-t|TJS1$fyZ=78)=lpAeMK%DezjiCiji1&a z{C8>{yhm%@l?d%x^9d=q%f{?fJiRHMGP$)LxYZsAS;`ujXTX?;&yP|SAXw!jBfF9< z*W}zO5v3a3-enPPQM4d9_b)0c0p=(>=T;mhOKFCYrz|8l0i~{vI%w*~_J_VWx^=?` z{re0<EAf~p`#W8H@_74{zv}S zV05Sd3DxBc0tb=#6)?FME<|x}fGu?fRT{)ZyAk~>gYkVtahu3j? zdPl^@6Pc(@(f9ycXuIX`o4YS;u@I}x77mnAMx(`v1iNfSGaD zM<%f1;2M_ozY2Xry+@J|&tqnhJ7oq0K%5<~&x~Hh10zZQKU%&-mZ@%541jER@OXaD zF1iZNmyi-dkPym(%{g1xo)|EPiIj3ThD z&d=k=ct2a3dKLzdh&wRl=K9IR43KFT7PMkafQd7~m5HqKLI-V{-M)4hpm!{K`n%2t zz}Rp*aNBjD=e+T+Nv9v1^nhrmuk%Q<73M1d90$m8SONWr%;leNJ3V+Q0f|jQ>qrvUl*W4l;{E=mElU(HWOz?zGBs1Q^z;! z*C5<#hzCf|x{oM3RL<$J7*pQRYtF?)WOOKCc>q|dLWG@7kwwTSA(-C2V`j?(ujTd) z7Y;n>OQ9y4``2Ma&R@FtG1Ex2_cwRGafIWQpUq)Ka`Je8N-ee+8GR!26vwnTPe zL=TIf=U##5?5{=phj5&xTkZbx^u*{dRuS?2%y3s61X_78{*e!62K)yB&&Bnh8^&IH zFJ35g@FA`AD;4Vs7mc)0HoV5$8{3P4Ipe})YUyeOjR~mM47~aPO5KAX;m)~-Q`Q&=A8=Qj{cZiU;k1Q3qVh00X-rVU&HOhcL9OWwQTRFz%dguKBl zXYWt*r8GlUdI!B)&ueG=qpl;OQPcF}FAV~JIR;R#0swCR{=Ze-Qspd?&Qi_}I}t4R z>o^Kqx08`?@f<#nuqL~WTx^ac%%0{mL?%rPAZGgr`eC_R|Hi6Q{0@?sB z{Mm<59~e5qt5i=(pDL=+h%A|1^TLJ!JH5-O0O9AXig(se-oBrbdWy5?AE$y7%m%?T zJg3+Dt>&kHa9n#F0977^w%gyTcmJ1&iN^1(cdw)19DgQW{yu_k`inT|oD&4WOO?{n z9*51J{b(>YO|aN(>84kJjfqVQtkWD~0MXC<<`ibOuSIKoD>18N%r|Be7S7&trhR6p zK@sv}2f4KzQ-^i<-c@4~{=~Krq})k$OgnKbNbmi0q&?do$lB6?O=KgFb&@qr7&MM}a){7X^SFKmIbxL|C$8N4Zk#dWqwe7h^7+M9Ozc@=_3-h=HXy zQif6vHZlm>+5C<@6-f3D5RIRc5MnEXKi+f53-5p3?DJ?&lyEmf{U5E&p|bp7;QhcC zp7G`V3HmERr}J{90x?IaL}~D_R#6Dw8yOYnd>4#LnxiY6ApAN}c-AVw?AT_^Zhr`Y z-%2iADksVX5g_vio5~>3a^;-_NYe+77^*oAe|mc&{7D%S*)9dxIm3dDUGZGMlo7i! zyR(Vxy;FwQv*3xY=R7~SZ%X{N_s=5^0NiY%r(D6smz<5Er7I37cXgi(;SeW-7&<=> z!uD#8XZ_+7&rEaD5E$1{X*4CW=Yoo_XohXY`4cas3_$eXoz~Rl+u!~HG{^5vAjS`U z=tKX2_5S(E--7@I^kDeuUpz{4@HM5>^O)I5u7{vRvf32WH0!#M_8W5lO#(f$E)e?2 z#5pn~oDID`W}r1Qj@jXLQ0-D2ZU3Ctn~p}$3sQd zrAoR}hIk+sG%qa9ivb^!-KDbI0P&Qek^i&RVquW<*sb>;;xsm%a(!d^YsdT*sVnW; z4r1uFZTK^8e8b^b_U4bS?p?6_Ctml0L#zkHY&@Fdt|l@Of64%~`8_?`!?z^53@>;} zJ66_&A*T%<0+Do_9ZdYXZ@hoY1@HdJs~)w5_Hba#P6EIq3LKBeJJod%bA%I(hP`%a3H-B9IqBqd83_`gh&+_5}rSj;F_gnny!sW zRuFWc{1#NFfuPf39kgR5ppe1uc;R4{2zP7YcqsKO2$h85Maw#B37dj35zysF(wX_V0i%Sy9a8gnh zqR}&8%UIaxcp1u7Y-80~aT2Mypldemh1b*{oQO)W422SRg`iftq@r4yL^!eMcyP+~C_B)^ zs)N99LA4tQ+KtFJ&&a%$kM{UhaL|TZ?Tvzu0rMs5lF_wRK2&2Ix;Y7QE0C35$WlFY z<`oX4SA+B_VBG`lx1idyq&p30zZ02tQtD2meE5^w;q@&G?YtuJ*fNOVA`uWS+*Q+i zo~;%iC!fPWE|}(+If#d;G)PDYr^My1{=;-<>r;pDr|;pkUjrZbr^h@4AfUzf|NJwH zdxsYOs5ZF#$snQ4)SJ!TCmE3|x;eDpLC~2+(4K|z!(AW&kPI4_kWLthD|I-PZjj?5 zukoKL_u_U+8Z@G(Wq=^0Bkxk3_Dg0KKkxQM10&EF3Ps8P9t-p_%mD7Z_+l*Xc<9^v ziC8=KZB(b#66uL^RN$Yflq$0jETspx+ykf51L>7R+3v7zPsDzb*G{pUbk|3ggU@Nx zoY>m=IP*Ek`ag!&3d-*wXwM*MO+)#usGA_bV7RqDlOCW?a)P!u#L+TS_+s|7Yonbh_CV`D% zEPk?#M;Tnudtd~e21rQAavj{6q1M*>e=;>S`I_U8J#+e=UwsGv{-^ag=MiK9&LavI z8um8rp{;n=pZ_=(6!^${*0 zYo{~MbGjoZ^nA)Ib?3Gn28bLuo&(3Lf@^(Homu#eN%*Z9Xyv0lISc|&>Ru4NN5Qst zLtFydnqIooK&R7$Y?k5F`XI~Q;VvJGi3$Pflp!j;a8v-@nT2XhL3d^W?L##u;e+7y zE;e@L*w8Lc;VB&v&Vc}&-^mT7Ys$<-7z&5B(=ex@M>r*@*|9K7^XhPFy~n!E=7A4f z`K#;k+*jd9@#{xK400aPP9?wxe*NP$&nrLAt<<}$+K+Q!F$h4=o<(P72ZGiVSSgqs zC>Rs^h2HSdKXlMWYkXU1E8V{o((z!+ICB<&wW=rz3E$TS&DIaM9`IT=D|)5Gv*T}U?+^bn3i zkZ!7U#D=H`o7q(nvX6{8|4Zksg_Ur`OGoujFgV!|( zLm5NQ|kwLHG5}eKu9+X1f?#h&Mbo2F{tJgf|(s4DdBbv zWt;l2YnCD_@vOm3N_A&r&x6UI$f95d3z8UsbRirM!PGEh|56t9zD3^Dj%QvsA#W6S zZ&jzBdTO$6cjf+hM4RAGKiCaNsJ*>P?O5S>7QrUn_(K8*2R@n;+c3Lh9XgHi#2Y;& zXL4#EZECI&ar70T%_89i1hW%p?$`kBx095qKxaK`6h|b*7_<7%ZMXh;OVI$V-Cwz5OGYtFx3x;6*`Scv}Q(G zby_Ka6z7AQ^8|g9H*RW8W+4_P1kGtQc5Fg*a5+dinf-%d(!WDoM*yH-Y514y`>Kxv z0MB$7b&vjW%sZ~T9Pk;A13Yx-|4{vRmp_fQ{;Xy`h~t5cxDTFyqJ}S%@}YwcRJ#G6 z($Y;h9-MNG-Exhbavj1cMJ4`R6)KYSm<;5ch%!=Jc0(*KH4=?sw%fiWJ(Ri^z^(Q` zcUoW-fFdzh%2_#^cm*NXUDgU}b_}{b16l2dtn@^fkxtX^sH_Zu!#Z?l2C6v?-6=tO z)q*~BrnE^$Q!|5z8JYUR;UV*RnX)68QNkc0E8XxXwu9UfJGH+3y~gyDk9)#rzTd_q zO6YkEh(MQB(R=i8pIa)QBuiD#;(0_tPzN0}#y5wmt?dR8*i?YE(myKbJ=-`c8Op3= zc|ZBhDKsayN9Zjw^%SRmjvyi-*6P6jdiVEUFcUw0-P^qu{$DEMkz`LjC*sn3--*_@ zK1H>|M^DkrUk$WAScObIiYd^PsM^NV(o6=H+<2jLkLonho*t#y9UC#TeJz^fTcJ8F zW)e)oVIl#h4Bv`i%YS9>_9Sx7_$=#wT5LnjanQe{% zQSJiV5(kqb4B^#;S2<kZ zSFPgT&$<03;8M13qhx--nDk*oNFn9*0}Ow96hU*^Xqp=O$}u=BNNd(V9v|EBCw$`X z-(H5W=@TrLq#>o~w4-#s8Ncp3?A#fo)&>oOFXbU&va0G08G zN<7x#Dqw!z}Zly$^(~NpjJ;QUXqXA#yKj=ezWH;ii+V`1=7E8jZ>rOtxEe8%A`lyxwL;GQBczv&Q%f~sTn&8xgfjYC})ZDQFs?$i< zEoX|tj6#h4Aj+cm#W(qnn_Ec5y$OEYO2;gHLuurMQtx zR=S_2egqqNX06bf8P5x23L=tXvkp2xS-$U@&eRR>25laB+%Nu&5d{Uk-*rU2`=uPH zPbsCA&AA;G#8YDwBWHDM%<)BJ%5*2SQuAmXDZh#4*k;U*tcTy4$qW)1mTbl%;)n!8 zWbc0Y`@`M@62I6SHpZFso6=z&1F*EDydw)bGab=E2mZuX1k=OmcrddOaPnQi;-sE( znQgvYFp3$rhl;ajgKUkkgaPGLB5nhSrB_}fOQi!JxV#RnC+X1%09zaIhJH*WGtUa1cFBA&Qd%p_&1$DJ$M-om*ntUMUW+A`Y(x{WJPCzd0QSAWAPW z2?+rI*B&4L^CkCQf-XJ*IQitq|KeYJXLxQ#KrB?PRu|GAX>((=oIf@@QD@V^GnSh^*sF zjtr7bu@gYv@R_t0ErrfR!R#o4$t_^jPG#xHjFMT^(m65_%+>MAem=8QDvT$6l$8((HT2KA9?2JwP^%=nW>wk#p^G-xnU0rh==UAsy^T5ph>=+tjo1=>? za-xSRZj+buHl-ZN%rRj~g%ihm;cS?_L~Vsg;Wq*kl@HZvS~mp=F{*>$XL8LGnopkk zB(T?2kGsWQXb!U1fuIg(+oj*3nHrv}wf=-wdWnI=Q;~z3Q4doxm!JK4z7cO^RwjC# z-DRWQUJxJzvkuUj*pAulYvDJi!k#^+MxI$iE;HSaMw4>NzeelA3Q}CORt&JYNLiTX zT&}Rd2WEuSK(D62w~F7<49Y)E^l~>xBOT`nn%C>HkhqTh@fTuLBm0 zJp;_2WY#O#K$N2Fh_ZeNrs2BXi?wB`4b>*ja-~w^_VEi)~O+SJ)r04GAN_7DK>osWWX|!6KzrM z;Lkt%4;(#vE`;Me!70~PFe`41Z-!Puhzi@_sx8_fGPDe`>Yhlsn{7~Kjzt>lxS6>_ zWaGpj!7Av)&2E6uR=$5BZGY?7z&AYf_ALiFA9=iH{&wm3LCxDou6qKYKc%!pB|S|*8tcbkK-f!h_~MkOiu&H9?RQL`10NWe_Shl5Cb~oSrH05 zrwL}1@k6m>@`;V|(-5dgOSsg^i!#JCvm;>T-s!JJE3Y#>28KYjZwW|>L@g-och8}; zn=#-_Z#v30&eKwnk(*6nW}BtMK(>R(**>K0)CJZW{`3e~t8gwL>O94{6=kvuWE6i3 z-x%h|UI4QNYslhrE{Q`p=gP8FgKEzbk(5G+V-}U&K7l=VEM7ARAb4aM05hZ0SHmn1 zqpMUJkkZ-TZ_SWDGnNAOC{h6kcY-jxv~Nr@z!xiuF%u;P)=u^DVF?-#O2un_^e3F#$H943uI?i1QdY> zM4`w;_}(V9-?@1BS#NJI)WAO9I`{D%03LV%&57+8d+Ne2PvV`d_2~eM@Vurcisk^r zifpwkPQH+k(uHtKkZviO4D>+43Fqg9%wQ)bu_jjOQDOf-Vt#7nL#qyy?}xMYK^q)| zqA%^q?EnX;_Ad{O9)6)Qvy6@-;Z<#Q)9&oX6RrHB_rgQ%5d!OP+qUR_cuaS3xG9f^+BA zuv|&wb27L=kkWZ)gf}m*-XNo-)9moiKw9_;Os~}Y0=`<0v zXA!iT@Eg-;IXh79Ss3@PE!&WEBFHEWhzk1clvEs+M4U!ukj$R5H&#);RNomO5TBJO zzyz~nOhn|=2a_G0&2kI&yg##1WKkv(Q-R_g(M~Xdtp5T-2mx|SV80C^-Kyg_hy3xH z`cIEI{zn>kHScl;z|7cq@fE-W1N7PRE^)NdhXN=WbUqZAC)tA?nKv9}0c1}BQg#@Ely^>wjt78@NRqa38j#gqyHS4L+qW#pwT&%zCZVqs1*r3L(% z(eT{X`t5Nw%916rb?n@ze?dK-5hl%4LwgFc> z>#68I_+aj;HG7F@AC8@22)QwCj)!<+DP%(qnd4NI3x*^zOo^1I!UgG*?G|hiJ)-J? zmA_5Yh3K?QV4^w8drMA>GJFc-xkwlWHReV_*9bRcN8s5lm6kdV^$gG4flEJg@*@WUdk!K< z!3zMrN95g{BQY4N?&*R{PGr)lN0DduTwyP|!4ijGOBk3rLx_lD5Fuzz->m(ad#?ZP z7aq5KU;fJfqW!z=IC{h9aqQ&Diy7)8TC2k~GwFEo#iu193F(v|qa%P-I4E@ua(&?* zs0}WMTkVcC@eIeEWI>sXbZr>4um#B>mA`|*&58nkalM-Urm(=BI33O!iI^-B&dkym z_{$`3Ds_WSsmiunk=YtFg<@kqf0}_(rsWnBkJ1T79aGlB+(ZZPr?x|P8W~LjVS$+` z&4E)8FA7L$vcPj>U0K-?w)~Rg^DG=Mw7Vw(%~&M0-={~raniqD^2h?fCI5W}@R<+7 zaokm4^k=fDf=nih&T^(}A788_#HZ z)|(!8i~s!d&qvFz;fSZ6fZ!%B35VXwT0K*1O;%(rqMXK(*#vmiUepIyq0+ku(k&a= zl08C8DVqw(I!-wQ)>gX3p^6rEq(YIwg$`kL! z9os*FayL$79lTa+?V74Nws~eOt*(h#ljGJ<>t8|D{-q?ma^iNA{%+I-AiM1ZV~QfB z*6MWqQR>`-tWposYtBWLUBP{V4BBtk%Rr&otNF4~nQ1d*I5mwkClE6l{6v&XRPxM5 zbi?l!5*`Bej8~U8*V(aatWd!|Rt%4yAkE}~- z;)TZ{{~OhwMW`>@liYf5LE0C!%E`cqEW^#Cw?lERYT zKZxFe*@_Tig)R3~kc_b10gdhDlC*>=KeR!}%>T0`$rMFmvcw#6174J7BaB;l#u;PW z{`jo@I{-iJENs8@09O*fk`*7z@%D|320y1ahjc6G8rlPu{v{C7NiC#^$<)Nmf~xVk z=4^_cyqYj((~H%7$?C)u$$>_X6Bf>xaS_UDV}w7`u+2y*sn??psqwDn+BOWZBvscm z7kS3fh-?LJBZ)P#hwOwur5Q{7*@Br-aL`HtS!9A-{IVJeX)a%Wqyxh?OhYM1YtZYh ztc+sWbKwy%M9;W*r}thi0Q7Ag!+oE45+t@UDL+p5U$v$LrQY&&E&EECc+KL(Br zDk$6aP>xQKfHY+70z}jjM1Nd%#sxlF2LdYCEmHqoe%wRrK*QtsFLel{GkpTHeoc~f zSy_VBQX;R`gRTXu;8we>O}3!=G)8(+kT)7NxQQ;Cn=PBc8JPt<7loG-?ZF(UJ%jPY zC5B0GvNvc>%aN>DEL)Nym`jQRM-&W;G#R8ZSIAsb!n;uYt=z8GXiF13>ukP zRR$HY^sbsD4(@jE&tq9sY-fGZ9--H3@T_GjNcJEyOnt$1XNRV?m(qYTtDz zu0H=fKst}7y&r0iRruQWewcOx%FY7HDpv zr-WZ36L5@nRS<+BKaY$td1_zJR^4y;kQnDkwPvAOQwcU=RK)30FbGd+8ADd4!&%Iq zDZzF)b~%Dkhh3I3djJ4%p-DtRR8UCCj^Dc=*?WSVbYDDh2Dbk3_Fc;W>a8lU&sqo} z7E2-e?2krP%9PAE8j+N&x(de5Z3bR@Qp0N9aJHL_j6oDwpJ8mCeh~vU!e(nGeo)dvJ&-f5FPagz^UI<1t(daVJXG;Xd@{P-%cx(KD z@*;H%P00u;YiIy`K!d-dPn-fr$l%rSt|-8u`<3F!7k-D)Tj_gLZMGgW&@bG`!9j-} z`0@GhrTZ*seuZXs(&>C-w*&#gMWuHMO7*^Im&g`cbBF=umqIRJq~|tsCufM+X+Y0| zXq1aR#WVUA3}A@*n3{KmIAunQAp6`_7%V;r5v#17Ks;E<_;SwY`D6=V%6I@@0*wwxp$vXY;1| ztqZl_(oQ&vmRLuT9-tYoiLykCkfQ38YH++NgyVp8}1^-*z#Ky&m2*%Tu+cD1;JTqyjJS(s#i zrH1Hf_&JM)ZID5@=9t(u&jRJG{PNs}=tKm~Nyu^+$SoT$n@$FDMz=LCO-z1Fs;5z4 zB1)NVxbbl!+>8Vq$mbRRB>(_!$>B>%ua^gjJr{tr;1p@MqNjZm6fv(%rfGV! z>FDluE8Qq}FM#wai633eC0BkE&BBtq6Ro|)}=|0Gk$D+Jqbg>t-l^A0ynToZOD z7pU*%DEOQU2wZ5ZP1bN+HfW_f1eDwVY!_ZbEr7FSN`ZS%(c(oO_NF-uP7-+qGS-Os zFy$j?PQrD|26o1UoQcA*ceXnK`L{s@x`?r_G64joH29*0b-Zo+_J_v+w%j;|3ffrV zFLH>eAC~oU=A9o$8Lgne~}UE6>KbBD7n&DEBOZQ?3)NuE`wKShH0{ zl(x^TfM8&*WZ%)0H4Q1qT#Eb{cP3>=7MN%cFLJiRw^X3huw!(UEx$i9cf=fPE(-)A zc>*r_oMxSA_Um%1x*);gxwAginlijBxd>51Q6sSEIVo4MWE`Dhsn@hD4-g2x;>d%6 z9XlQ_05Fyu)dzr4a>>!G`|@*4#tp_~dBo*+xlDQ*NlR6F7ICG2Now<*ZHGjWR0tQ< zz9n!=b+FQ8UJy=Z&()X;f^F|ycIzWd!T*kj5TLORmDdeP0>6~C+J|jUbTnBfQSM#{ zuht6^5=4>#kwgItO5G7Ty)OdWOK~FS{qTcC>ce94f*FU1n~&D8C*6O zFehXovS7yySte__Mfrtj%`Ct!A9M9XX0da2FsN`4feNY4*6%4Fx;0@Cq>A|lS=fZl zYaC~G*^7v{lA>OPg7NH<81QAHcVWoJAU+{mAi>9B7 zF3v-f$8vR_${N<{bfvY!S!jp|Ue^%3dLO`=h$Kil_DDdkKMlJTMkqA!EQXJY<#QQ% z6>ch6&M+z3ma#`>L&(TK5|HnYVdpWaAih`xLF=l;B3{g2I;AVy=Z_88NWYvu8M^I?6o@68$tQ{!!kGF8;JmsRpN1v--|N zVc%8?xz%^MiG6^zSA2Z84*;#}t^>va{fAde058&7tw~@x5=26Pgg~i2h*I}Zu9cUz zz|&owjm#@++>!1q%%BPjt2Y?$ccpW~u-{(QXsY)TMDd8c)Ad@M` z$oP|)pu_as+#Sd)7MP=2b|Hjx(jI=?TqT|p)s4k0+-gslDF|~g4y>WK2GVIic-2`T zn%(UKK<)VBaof5#qCV8#2hcBK%}yN3WOeV^@Ai^xn(h@eh43yQxGw1P*!LImvb9Q$%NH|uvJ-P1-D7=&giu|IY zIYYo){Eytru&pmqxE-6c0u%+!RQ8+a9$vBgYwejxEg3t(ShBCjIR-tM!8C)+Fm&Q( z#LTQU#%F(Yi#qDqC*$aa3m?7+ zsnpYnr%(ylf_|B8`6n`1flj#wA>GJ@D0w~2nn%{?8AXdvhVuR0y8a)#?>_Xu8W?!+ z34(jZPiL*xM96{K?lljgSBGT0kjH2ojw3Ux(Qp3 zgh)!RcwU`IKuQn7bu;L9Ci~!mHdv+-q&XdIc2-Om%ik4t*~}plqPgqto%d;zfMEiU zb~2lGPO=?^9Dm|rpwHxLbz0z{4RXqM&>=Ih8AKs6J3BBGpXQL&B1(dO6pRBRG5W)w zzm3m&{Y7&El~w?#REGes3(Q<*a4Du}1F6U-MZJ%tZ_5CO2?81DBgZ{Wr(B2EJ!qd$ zm=4jLx!{~C3`IW?ZVAFILA6!#ZiEmWkk}?qdVsm{K{zv`yEXcM`wxEy|IHtVGdi&! zL!Y6wcG6loyy3k10Hj+2>j1F@EE(=QF)u;~om6M9J-T@sP)=NzcF_}R=t_0378|YsSbbI3%7ggMFEEA=1Jt%mF2^eF!~ZYF?QaHAWrAn zv%G?Yb3z5>P(eVOON_Wcvo<^pI)G}=!g0&M97%q*$(dwfoMj`xYQIrB8XjhUf&fN~Af`|O2*v5xD1-y)l%U#;&G%LVFL!|I!reOkKj^-vVY_>!V z?lP|cnQovaJ=*lFFx62K0Lk@?o-asi-PT%~_SE1P zux5u-D=!GQj7sk!2;rof^2$eNdIYn>4`F881DM(V0Ggv4;LnUgwHsjV1FTYGia1jc z;h)KLUld?KfLpGk+P@6-p;ah#4Mt^ER(**x>h{<<@RsMzSn>sw?Hm>I{v(^RT;^OX z46-vxxt-PpS*=6nOxe$Q<)NatWDXx?yCLQY$u!Zm--1?c*o5Z{vxu{KP*F*eZAyeI zM+cqAb3>C-x*3o+juZFCSHJXCyyLa6eRvSi@9T#cnE?SZ`B@Q&ntph;hzTZ$2dnqx=EBJ5V6u7?FWtO8V?g|x9)cJf4um|zx=Nl0dT|}CjtV` zV5Qb@0-}bWsNB5}vfLHkB+5r?W(Q_=tVd&FJA&pkRHp&0I+1~g0<;3F&4NNn%)0$^cfX4y9yJM>y44YrWhxP8Z# z`%8g^F!C~2bD+Fz?wYXzrN zhga)|YB$iF*n-&|>(QDTfet#Ms)rCE#=`c1s^zYubr={DX>I^f_oOt{OM(g*LkZR15XvS(2mt!+5PxIM zV7jYC)g2EP9<4gxcZc9$B$`JA%}pFJ>nnTmJ1+UWY7dA+#7r`3f6E~#Ds-7FX~^78 zVL$|F$}2j7Qo-VZ6EM@*zFY48@uhq1jWymfp^jzd!_5&YAv`#h9yBMnB4|v2b&$P* zI8HO!7K<{nMx8;^8M0JIxqAq1r7Ka0vA|YC>y8X$pE=8Q&FlQI0c=@oEe6<#cG9e~ z6I&wA-%lAgAhW(^t6ra@-p_93WcRSBpu;g&gR#(A%mzB_O*&K67mYfz-$vrF#Tjrl zhof*Rh0evfaxz+^1F-Tz1Sl1>f*`o=$Bkz-4^jaf>CjxMhLr&{+neDzlOTY_oO6oy z#Y*XlQG{a+a$LxA%>@23!JF)akFqo>Hut({Q&1M6L=Xi8(u0i&wB6cn4FC@B_*jJ) z&ta{5IBCcWf)MD;>_BIFN2n;v9F9Y4UA#+Ja~XyT1v9bM5W+#ZXCZ1sE8$kUqZ6kS zJsnGLiS3drB^lX9n>5F6Y3F}ru>087?#QhHg2jjBELxUhAOHn6U%AROAtj|!-pFbo za!NGXS(d;LgYxskwH__?>x`q4@B3046EARYMQTJs&B zddi6mDR=r-tpKpTvI$-OeVKAUbHM7;9~b=>aX@NMus)tyr`oe2(g#+Z0*Y_+>9v^_np*Zz#%WBp zd9^;OFWf66TnSldW?@(<6jyf0nqAsn_Zi8|l>VJtW%=|qCF-yt8*e@v*|m0-c}F(r zoF~E=&HQ3ajpq(Lq`Grc^YW89Kg<;vps$)T{*%7Ops*!#13`OB|L8^8m z`o2ccZm#no*P(PJoQDBOtN^fFdYJY*Q8vT2C_;hyD;s>ou=CF#A>mbea)4esKaxbg zM9it^q;qQf5VpDk-;@oHGDrp;c_=WlV|Q!;002GfG6o4gQE9c3lQ(WKC5i25PGoz@ zTXQPOO&iP3LP!_Y{-vl5tzucKCJT&B=~}bKG`ct0VHwMOf=u~$N>qV!!z@NA$ZWQ6 zk%P1|Ub1;i!4M}h5F#V!nF6t#2~}jw*Bcq6sYV6En~5~++&m;5`FZ^X^YZRJ_nf`=T5HZR#vEgL3_}lqGTIwJ z`|uFFXB!C6M9{%wLgcHHGhEJwDM~s;AO%|yj(#2GIYkB`+v4A}hR(*azpf%xl^KsG z$|@hxuMz<}{JKkLnfZGGw5aq;b{R0KC$+5Koj4F-iO0o!MHkaMPeo^bSJ72eK^#?b zxHrD)xYL%tc9sy|MZ!s3ZiGWGgiW8DyIG%Brc^D4_esCcCNX30$@4`L5a7%+Sb|yh zTN#?XU^&oRgyXvGb>Iy&H~_x8`&Cw9athF$7IcLSwQ4@_-b^-v$;L(hpN)oTn*PiA z7r%PEaeU+{BX|0D;X*y#(9bY_WE)KmZ>kj55!h{2VK zluchMd&`QVdMqhGd$3GScGo>O0-svK%M#Qsudm6P zX-OAY@b84MG?zF)Qzz>hmK`5GlJ$O5 zqzGGZaWC0M<&_lCurs4?y?3^gbBs)sX`H24n#Mb!q&5{MPeCz=6ezu=G`2QUB`Tt` zt;s`?KcNDHNun1ar;?HFn#YniCON{l(H%Z2H2XH5Ma2VCr!1ARF4SN?G8eGOfh^BY zqoGHA5D~M^kd8*zj?li3|L!uPTW_=9X5f%i@-Ms5G>+xVU|^BEqW)K@z7nIh``uSqOzjLY&6V;X}2# z2?_ACnQ&wxAK>E#5S8pnCBr5=Nk>?alLZ7qC@#HC)S|*I+ZSfRGD1;-{^z6OxzX7u z*XE1Ab@uB9E9X8Lc*>K%wF+S6#v_QQJ`Y4uA3)y<>wN9 z8RnX+sQm!sTWNOdde2JQ-NxY49{I8MF?O@q+$T&3R7^gG$wp3B#867bN~!MBe>e}g zAHbu?7H~}S&}Il`I-fwhJVF?@872Z67U}z@;x?wYorGj+u9+#9#t_Xh)euEuGiA$i ztI6k+Wxfpjw7eWyFcnrB4vU}`wyf_-jC9+E8ouI_>Oc-Do0S_|fb{1In;_fGi(N|1 zaZjYMsKws|*claeHW3NhT7CzvPJ@KA5Kk~qq=^_938xhS=G27`>l9|(D=g+sj%+;q z%Idnl=kphTf^f?I6K+-Ouk_l#$FE&XART4Q+!xm5fy*X$Z!oC{QESTMPc6ern#4DY z*L1deoep43Cgi4755zGW-F+E4z{vm}|L8dVH^21v_}d@-Y0O3^$3%P~Gk1#9gPiO) z$!(MEcqd9C6}2$E{UpSlnL_RP*LIr zOjht^Q?;>u(p!e0WKo`yJzx*VXODVr#*LeWX)_YsY=xF<5(~hO>zFNf6Xu3VaX-A6 z%MtQ*5w|AkM9VFyR&KKk*w*ir;LlmqpM$wU)I{B2#{I%$pg1V|**O2lKmYA*gXzO} z5N@~u(ApuUXzL9i-+2n2v>h-+Mv>Yi66T0JY1b-0u!>kEZ6`_rUYt`%VC?R|4MGd# z!@gB2S69H8yk+ui;ZE*i?F0YiQFHot-~69(>R*39kgY6&`GOKWnVh>*HM@boR#6Mx zZRO%GRh3psue1Dv;b7!X^|`6MO;i;EXQ2}x23Q{Su$-SKd1;GZ6gZuw*(`%5KWdf< zshf?A^)%prfBcc}{Q>X|*JJUX zQ$dkF9fZ^6Q)2hU^@%|ixK=%vD#Fy_UL@T)-%LZyV9Se40bQ$Y3`)+RiffNe-brd7 z+9lX4m3_6fSY`4`P*LI8=o|jopV1FVv-@Vv(HIcqCN6UQY6(dDrVe+&W2zjm~3puqtWM9l5Gc`yZsO$R=_i! zaY71N3nkc*Y3%sjv+>z?FJ~t$@{xkhW*fK?07*s76n0h}5JfeuR5Lo(JY=JI+QKfX zzO{Keg3eOMz@f59QYuc8eJ|K`X^iK+JYW0jUq153|JoYjg$4Z2*ZmQG{WHIF0kqj! zmgD4Y7F1mwYAEKq=T?}S--V<*FO+O#pAIzHt;&{_I06{9$g+}bltPrW5G8G>I6<7W5ydS)#fAT%U_FQ@=)h|5f*QYwQs~4J z+^{Uf&2bs_2Wi-%J8k!4-dfw`MH-UxALMNOq`(ZtwT~h>5FuG3LR>pT)yDzvQRVLG+K5?A!x%yC?L>+8e;0i$G6*A^0mFGlxEZ+hGE70I?VM z#4eqJ;`En-jEWW!c~o2r*qw_*w&85`H~FX!W3pfw%K+s@pFw6k^N|d0d$^~F0)`2MSzMBMF~Mg4`G%oA3_S>Z{L zv=Dcu(VCh=(wRZjo+{=QR3Y=0pQAxQh5b$42M6$Sa^%J!un|#OwDr&qi{zcq9^~=; zTePk&)p2-2DkCzK7htOv;L_0a06yMEYpWl%0`2K>}}|8Kr?lpJGpRq zzzqNwd@pb{_xqE`=Ho|6q_5SbR;t413$pU0}{0&s?PY5n1Va_Fbv}uJ|wQ z=|!~Xc9uWI6Hgkl_`*q&RTBOHZY$pS$eV18JRQO0dErnL#Ym>+(2f!&6*bx9VhWAD zBv1y}5V$ZZF-8~FLpFv^N61D4^i~c5Y!Jt7BvUhJP0u5lnh~~S4qXOWDNLBKVRC{2 z;LIZUC$Y_?*(wP*l&svjIoPhs(dtHN!Cr;p^cvKdg0Qf0b2GunaS}H=Mc!WlpaD{p zkNPY9{^(;b&j~Mne**w;&1Zfc=syjbZ#k@pdI09&JiZKPR|A3KWWs3# z$H>ha(zbu5yf8Y?pvwUV`(ba&!YGP%Fk{b!JD+sl?JHly;$Qs!BM$;@%)?CSeTuN3 z<&ISOwuwiMxH11@Fp}0x;R;-ythJb=suQ^2qS>l+1+YrtBr75W>gDpZ&ocmoxIGQk zjY}F=xDm30Ss6GorD`a#RLVhtB84c55w$vKP0iJxLFXy*Q4eWv6{C$M3|5aIZgtR^ z+lJ2E4n*xK0LqFpl=gVFw8-1&37E9hSyn{NLq`rdnC8!#s;n29Whv3R;{%tj9DO_P;nV?XMhu@7YlAnBp@hwl60T3_?UWS*^vDUGDT-Vs6tru9E zQ}4X(a-99j-vpldJ&z;`2mmyiiUH;`wdQS}&YRhy$cjZ{h>eD#xbOumeflhxj3oS7 zUNItPL=;X~L{MHKg&3eHLDHE)(wRn-v_UE=H+NGDkc^lxXhw0HZp2cE(1f~~izKI{ z)xp%V?9Qz>va8n2y zagXyoM3%a>M%+D~fg6Wx@|}$-NcY%jPSqwWXB#GJ62x?*8TX)jE42_X8}?U*!_i01 zzT&4>PkQUwG&+7i?zrO)Z{crM6?+xHxDE8bwuZSU&GeEaKE#I4lMh&PB}JV>1gL0B zvqmrBM4p8#d!S#1_B(AEjTo>iiAjr}YkfKb zVjr@qf^q}Mh5?4v?hlz+8Eu~2p4;99=5gL{4C~VE;hGM#e$Uz%M?U$xiP8D#V2)_g zPRNyxz9?st=|yVKZnuVjr1+8rTu&76%Hb^*I;2C6tqimP1vxBJ{CgGm(`b0uwd$DL>khUTVj~XZnnkJIiC8EpUFx;`nY_OOJ?xeD+hE+^ zI5Zq*?|;jCerg>@j{U1oJZ}Ry_3{6JxwAix&t3TL)EILU0V%u4sWZ`4W!i1U`rFpi zG>HPNYWq_DYgcjXWxj&}I+q#y|HuE_4SmWZ+Wr&v%rZJ^E{dWvF~Q+hf_BV|C~0GA zz6e0I+;1E)Pkj>bmX|KnmNcimYsl;rolF6#k^J3t*Fm*Zn;Zn4P))Rv*UuK8&J-J; z{8L%Ab*2}vuvQZHWp{6G}!=oZ>4nUA=cTD(?Rd^h!(E??EhuL z&h3^^=-b)=l5=hZPFuoTr~e8nj&D**ZB$5)XWayGDv>W1lv=O4_pdYm99w4D8S5M- zPwm_Ra_0++8*SL^S1LOH5_1fEkA6gVfGgjA8cd!qGGi~Ki}3_!7yyMOc&k&>gJcc4 z5H~t`d7{A@@wME8WZ7uNS5r`#77D`f-fPX!FO z&2q5lL8<@%;PxM9eDYQUo$7;{am+q&U9hRTA<9EZ#n>df9`9nZ&pv8O|3B9G7V={` zSHaVU^)q&zerXb|tURLTfYBxciubWG+ev!Ug?42&luXSR5#XUCodYPIz(D*q$Fcbe ziLGcWEv8V?N!Q`3T_MM)gqxsJ#$-!(f0ic{%t>B?Pn2{pyZcnk?Kur5&#`g%E{xWW z0mcx(q*^UXH&;s6X-T668AZ_=x=jg9Krbn68saB9Wf?+<0VpS^1PXPb8eTzZxzc-(S@YO+d(_FDu^HQuN|-Wencuh z8HBE7=INobC`$juJw@xp@Fi|E0donv^aI!;W`fAq0Zaf9?LApcwoMYjxbsWy{LGfw z7qVoAZ6tz1RXDY<3-kNVKomvj9lINY<%30@LTd_nI)oney>nFN6?ilqCgDRINb7Nt z3t`kzITEo0r)&j)6UxdqDg#;rRf4!@IvpV2SgMnqbT&lVTP6nX$ny9AG}E3U^_L&S z4d4#|Fvi0jl=AFQYkgO3KN7Z)bv;8ZFL!c8JRC9yaXDRKo9xM4f{BrIE=AG#zjtMY zk(h^n^=H7*=RO5m=lhts-6ZcY`_qqv_Uuk1otffcQj@3}_U2eakzMZE^QwcIel)QA z683~d6LA^0*S8|!CK%!|Ca(&YUUSQPDRq5!eHef2FnLQaSV#v8245o zHOCO4I|n7Q08ToR>qJYjKT?&TG#M5wXs05ICC*+4_-! z4li-B@y2mzoilTElbL_Q#_B!yo)FjnEp7mFU@-PQ;UZjc?a$^0xDlXnO_NwPT_Xjd z34JAdF{>2tKeHbStup~m3zi@-VOCBZEdu_*IHpD`w~ zTw|Dpi!BhfrqG_rc zyUh(&31riR4Zue>TOczAtBT{Lv7NjZ5}3Phf!5|G0ISV3a-hGXaA(PmWn!??acxk!06yF@((9=NPsU(H zik_#krG0C8@`$*DGJq&uN|GerEcKo**O}eC?*ayNm@D4;qBXI!JCsE>hc+i9s7NHPWC%p%< zjCKu@?P#>P)5YBG)1l%R6$m)qTq(>_Fd^S7@E*5#irtUVP>2@1N`bSC!rN?hD~w?_ zx|og(2BRqGY=CtAXx#=Iono}HRLp4<7wYgR)dyd9>$^xj2x!;DTKRQvz7@Be0&EVW z6(aR@1=mkbR5}x)tSYKRR0)n|GIV2@*l3GrBylA|8t0t#F#SR9WpY;T}Z8&MNphL*NY|d=dJijPEt0N8jiFk3PUH24@vnum9qzv z(+7(rI^juE8xjzVAG-x9MhfS9+O3A=?N!bpSTQt!VI-Xy%sXZwGIZzdl6Kcy%NJ`@}M0Uiu%@7oCUFR@HgQ6I=RZ#KoCLdwEdKe~8YhBH# zzY3j?>UVAs-J_G))j#?1iyo8*H{1dc;r)Y)aPBJ@PrKwvsbRW`KqIPh<4BrMu;cmmZw%YQDgXE`@T@kQt-2h%#&~V`Y+(3|MC*7{r0auY#qRxe;gpA zW=w8oW$i4>WEHp3>Mp>08YKeHWM{vT?b*RBFFOmBV6&-8gAumu?AS5Ww0-`iV$eG2 zL^6%fj#C#Ma z^@LTbZ+haRs$#Ud@}y|?hI-aTf}Rb7!hixpf%B~3%v9|3K@8R@#%qTPkH4~S%Z3}s zhrMQmNGW4Lx8HVWe;6MfJ#-rY0Q|!9{{nZv_fp(3z8Sf}Hz-m^0U|j7QQbPjx|r*( zdLef#%`>Nv52?rppk~9ck}Sj-#$*SG3Q&xhc~_*=D^+(fx$AZN3*GcXx$4DdJnyt; z07`Wk=mdyM06=?s9x7=$p(ueWh!H%o0w}9L8c(%}tyTV$6Y(ZREF=+fB0HOatVw-X zac@$kIianq#vRzg7913PqT0h&(OKc140IQEqcyWwAmqK3(rz10n2PxQF6b->qnvcYk(=I7#rZ` z?|;c@TF>C2-2j*`!pb{;31^-9s~BhIZV-J#*~pKl&kyySc6lr2Rs~?-<-boPQr#P3 zYXX>A5%A*aR_n}DZXRIeoN4eiKl!k<01MB02_hBEL=m+}06SH%g;FuvW$#~?j~>tz zKJA)JKX`mT2_1i3ZJE+S&>bd%Os#dN&4kGt2?XC8&1EYvgvcfW?c6}F9dQY4EqH30 zL+2CQbZLEHxN;%}h$2jH-v<@9koMP*4mKcjx*KT3p0#I&Po|PzHL!^6vNld~gvJh? zUEMOOtB>M2&^klZnks~Il`j|@WSdLK`{k5hsTCM)94p+Hz{0(W*0P-Mz;%BF6}KPS z4FCY1c8qcCN`uS3a9{(#6-1QUy7uzlN&|=x4**ACLQXFQVpyg}R9IqJNVWosNDvYa zEm<2$wc{E#XC`s{a=!bBI^&0a3wi6v!!j7u&UyfJ2ZbRb*9~_0RK)FRs46ot(0da5 zr(d&a3h#a?rs8I>$L_DmH?*~lrh?WCzGRr{2rdY=S_Z>N8M4e5aPxH8M|`0qNJy69 zzMYT9H6RWN3o;u@I@9QG+Y4iI4A+hn845CdRlrU15MpL~Q?!IUEUv%UK!k6i;P7FY z=TZZJ%GL^Cm~d&T0f$BT@{X!98IY#^AIO6IQ)o`U zo$z}9wb+pod1?SVq*Tnola=t&RB+5EB0mcVgql9j5i3n*CdmQ~{h#YB>_XCAz__=D zeAM$_(ot5^7Rui`dZ)rCM4R9y53$%(ZN$V02dOO0bP5$GMcTE_kZl}A)>|$=PvH?T z?kyu5ZWP6rv#A^Ad-_?vdPimn3Hc$}0Eh@U1334^Zw0#l6N60O2BNEraG z$_`nYB?5?(b{XO+eEQ^qdf{w8*yj@lA@$WAL$2AFxl;;C8!GgeH6DawYVEbYYf(x!2VV8jQz-IV?1%25Cw^z z-bqD*$U-DR6WU;6am@^j$)MsGMvsuLA1W4q5$XwI#<;(Vaeoz6z1vh+1<}Qzo9@mQ z2WKY!;{VrrU_78??xJh{6t`?1#V785+NNgwgCZKaL6&R`v`($8b18yhky+Q=fO5Kw z$m0YHcj1uYsNk*ykI?*IUE(P)a{}hqhhsQ^+ozmabTfe)5qGAc;#O#& z%t6T+E}c=tKlD#SD{YHY{w#EW16aM2G_eGb#!S zEt(ybsmN2P{;8yk^(n#3e1?kDPrc}0&Yb@6=iUu`=D$9qMj^@!VJY?N)u#}5<^WP) zk%k;%6xafd*vq`}+-zt9p5WwXc#telFb5GKqs^o33?z}G*AlT{kcOc(HB7b_pEqnr zHa5?~>kwouPI9W42EjB?aY9oIJCLVCj5d~=_aD$Kkrl)4ryH@8gAs@ zJpbjlV13-a2NZo-)o@(nDq-@}yHcJ3gEg)>$q0!{p43-l5yD&(dB721*uWV5GE8;8 zM_s=kc=68%>AP-sr0ZU82U%A+~Sn;cDeGGQlR*YXdL8VIW&2Lkg4z7UGb-l#LX4Jv74 zw7vwbQ@ELc4TdBRDA;ov!8zg(PYXy&gBufks-wpw-CHFBD-wxIq>zsX81l>wI-Q&X;id<@k2X{%@%QsJ@a};Jo-3M#j)5BBIr5R5U$(@tj_8d?EMM@nQrs?`OFT4&HKZu@}>V!`@ z0DpWAkZJwT3|vV{XjF;7IxB~GLfkF_;*T=H`)0WEAzDUeIKNbtU5Z!KAY^*-5l5e_Ty?HaiW(x@;Uk>3~a zB5*wh#mSMJ7C+U1b~MKOp7`Dg>9 zjiWF+ZQfG7sT;eUCSs-3J@+3;hu6IGmH4ec|D}g-1CU=oeJ1dgdrw~hslQRA`qp!! z^8yDT3ih|n!VTotIa5{?MW875Oq~N@xoy`_E;>l7Ean)5*SA=`Fkbsw@k4VnqVMK! z9~-#xW{i^rM1_t^#$?5wqn!a z3hP*3DT#;2Emrg)8&g}Ik9x}(t{*OD{Y??U2EzfflHx%z%sk4nBQN=x$LE{3?ZI7F zZ9Ztu*C)IIlq0&7{>;DQET_wf=xQQW9|Xo27@c~ORc<_;w`iwa*PI9{Zij8He08>|ou)6x7)lkd~v$BTX=5ZM2i~(IeLMlq2k~Y{;F0d?x zgv^e4k~Sjz+5OBrs_nUWBA?!jxRJwEGlvZ@rGUsc3-#Yy5ac9#(`anEDa=^%q!cMB zFM_u)Rh%H6nugBC828re!+^HZQp*uy@@G`6K4^=4Fm|3;`7*}nLgce?4C&_a8WXSq z@#eXp8jvN#kxGfw!6Ww^z?;5wJ$~ZP|K#DX0199Z{Az$w{oJDr`UnAo20hY+RWk>y zyC&U8QJz{}v_y!Kjx|R&$)I5(KqKC|VFNb$X-xRFw|w)A?YFn!f(hRiIQWY{{Bi6X z-VIW!xvNZ2aR;PgE2~mQq(aQh!{VbEZg8*b$i!^t$_GC>!>)AT7*|$(EBTd0HQQeE z_io&kd+&X4*{g5$ z2f6?r_p%FlG*Hu8y3>ACLL`<646{Hv(dvGdJEUj~s*MAA8?hLZg| zsEr{u{Hk^TGyK*g)$Qa z$8TXG@YI6UpA``lk>fbvsy3X3CMZI3Xf*bupu+CW64JQrMaYEH#&eo7pTgTbh1wST zJEL|NDvFSg`q1Nn6NxU*YTwLkYYRgGx^R;XND~Sol1#bQK5a;_Wsan58}{;ha?QOo z)5rL}dx2M7_@L@qPG|!N^&9tn@vTP<=&y(|s5)Prrp`=&t#P*vDSe_^y4t9u4N@_) zyK%5h`LQ2+4^Jal{t9h$hZt{}?k3-R?Dzf(xcjysQ}(a<`sFVJtaT5D#}zuRlD756 zZ1J)^)ng&!vM{XX?VTtqc3KGv0ab$QtM>}QyR$>%v24bfCa*XVaL)mEP`TiVCiUG8 z3ddpXf;Cj_Eo3LJyL>*PBmqSU8=djEzs4@5NaT1`KJWst#+=1af`vb@w-Ypnl`(m< zaXOd;N#_xE*$zOFS~eQ%y}3EyicdVU6+rcM$$P+AMxO@o)nYz?Vag;}OEXRKWR{yH z2TpeZ1gZoSwJd&ynH>;|-Q-A%$05hE*)UjZy_dkh%1=IcF5Z2Jk(DFE|B8x0vNF7sOe{?0&?A&1I7hJI5x`0y?Z{_Mt=UakB$uh$Cl`{==+c4jQ0ar0~p5SNQax& zg(h~*y=uw7$Ov$Del{h7J|#KzdbG5W7(0V7u$1^t&s_YBHq3dRKb;A0JN)Xa_dKoD zVhq65mH4*UfC#Bls!v=5T&O4!CnJPWM6(@OtdwIS$yVFr;>(Vi3O6o3^{-UIOqE=l zE{9EE-Wp+H#~?(qzzDhNR~QF*=2x;zv*}3RGKgKS$Fcmj7id|Old2DsY`9r!0_41e z6T<1PX(5{?w{jzUgAG|akkCQY@7Cy&1@QM7tD5t8ZKgcWkFBH_zVPbjFdy&QMC16+wBmo9U6{!^fq)5c2k&uiq1yFRGM`p>u z!7s&0er~yR*vWCUkOrFuC+B){(89zqz$hPl*(z{=mu1*K0u;c5njsl@Pl)@e8~ZKk z!!J{3q=dSlUsVwt3Z11GZ7zj8NV##9gkw?PY(C5~EYzn2DacUxS&UT@l)DjHNK9am zmWYf2j<%PMW%&Fv@$`3m_))R}Om%=3a9RFitJ}dF_HOX5t zWkKFu$if=7B-lAj%G(hOwv4KaqPQ5lWsULXGE9*p=+Kyw8386Hdj~$Z`)pZxtKMN! zzHb$xJjFW*jD09Yd8Fv@Gk*4c1_1i)OCIqJ!1{=9yJ#DYRrgC2wLVEi(AgOIcxY3s zWV^{oiE4-~Cac6;5sh{a5j+-du(Z$t+zlP z7FC`Sb}X7T)P|;=t;dEZ;~kYM(8CDW0Zm<2hA0KoVch!rxbD_9;A4OD$ZP=4!(M+% zv%igVzV8?MhT`{Ar0xMUWuuES+=H7G;;CYi&RySfjF=p|+1il9!Wo&Y zM6q(`&{~tu^Oq>1_Z{I&pNio}h%WjGjObge1Q__l2R>_5lpG+atTK48E|}#%_W-X; z_JSoB*C6qaKc()7c&KTxs*n=4U)+))OC=>CFm>4I7`$Rwj0G^;@))wB;2o{9TmG_d z!(F#NQYA?4hFSgY!ljBz4t~73A{(EuB$#2%O-R7jwGprGiE5G&3#$y}=QcGHqGU&y z!Lct46m85%b8U_tzjqeDiHVxQ@+~$I#lw%qbSPr;YJnR9DJ(D z!o=YzEag#07^v>;dJ%J%E_^w-}_%s7+xw6%1*Y`uN}vG;DNqvDrye%}o#c2lvcw%ZlsaH9 zE%q??5HQ}nJ82?XhyA*J@T6f+vLSNz&`4(!@R$eTBs@Xx%phy%ivg~V3)fn?xztlczPhlu@=XHNU2Q*Rt_!{IT{TYsdmDx~OOxI+> zB(;w(=_dfH;+oj1FiOy^sut5>4|+UsY`yFWY%ieH0|?n-RLT~wDHzI~n;la&axf1L zf+PY675h)5)EW`ipK#R(*au*`^T<{JAyE(|G1Bk5oAPf=-D@cNZIHRoWJ4mQYNs0l zdpo`#+G0ce)y-&4FG8tgVlm-5(@vW1a?4nD!gv_WM(2+Q^B<^Ly!Fs4|NGuMZUgRL z9uuMnSiKc|>!$)&r4792$I+di0YM#CQM^oURy8w%;j`YngKPNd{}?;d_TI3RknZvX zO%D+{_zBfg-6lw*p}I&g71k)A%jY~mOH)-});$aHi3o`h?4p{a^Kw9NBnuOhjcMFl zqDhb@wz@?VYBr0!lE;luqRA;gnvgbV-BV^OVbK`9qJhnCw5!$W<-Bx#=Wsrs|O+?#mBTsLJMeOM%3ye?#whJu`-4Yu31GulEQ9^ zd-(veHyjQou-5q=qxG+=$o$##J(oTgUw&_L$2G4279Wqhvm77$#A|T#-~F9^0bcNO z=y(Q^YOfNhgG4U>@08g@e(55;?#NzO%lnaDnnqo`{vLv@zKR)BQlNW`V3wx~GD2r)K#i`$9S+=%&SbC__1gDy_Uo^YGpVkAmkx<_Mi&~ z@B=^)b>2N|@w(}+6LVyU`)GC5;MY+qaw%YyBlxH)YVRAJyiC`X;O(WkJ{ zZzDDz+I;r2UfTM>cXn@B=tI3B0fyb;rM__`fIq{<-*`3-TzS1#QG63KQi)|(ftyY? zM*}LM(UUj(zbqZM=*?w%Wpx76792m>0wE4ev+x#2G+CBjRi(og?B!xwj z@}UVQu{%gqJ~w#^laHkInwSYX9ha&=<(d=;3Q=;2i96l2rv{t6ZCSJm0E3 z2nLkPLJ?`D)UoS(pU?5TK{3_FRO z*yd8d&Gm^#wjhWsv^D1T%=U&7WJ^iHO|MIyN)W+dO^7DB_*PS?+^E_4nTd1FNuKA= zW24`nsPqqZjLv@Eq0gps>;LpGP;VmOtY_iq-#!o7wSSA&6hWuiOG3^tAvIh#?}Z4^!}$FUP{G zuQJ)#{M~T<_y_ahMh->HLdR{P(xv{lwv-l!H3_menVRFMG}vsgm--=NvIDHFa8kP= zWH&0$lFbCIF$t_S?=Z%^9$J4?Df9l(YoGYq!>_#bq@(}$FQWUpC!zbaS7CMi3s9}8 zg8)|87?O^-@M5_I)9f726q4zYqZF5mC2q~<(xGpGT}qkz1s*nUbXeL%CL z%elCMdL#gfh@vR&L8+Tb#h-vNpMi?+TsZB5-tvKOY)ha%-r0WAcaw^28*XuOlV1Q^ zc4i)RCSX4JY+P^~AgSeNs$GZ?e0rW+*+yIU%l(=7_J=Ra>C0l;NuuO&w3hKGxPOx;Z8a;I}{V(nSIvEKz4%6 zh%NfD(g&;^xCNXK%L&nHD=Ahr_Ic9`!Y~I1zl*1?)tyJ)Uqd$9Z2Ia- zNzL#=Ngxw%{e?wD%{&Ri+n$_Lit5-x!(gNHX~pUp%9sn3qMuYSUthoX+8ZOrt*q35 zODY+Yzo!rk8$Qoo<$WA=*1Ry4%-h(6g5%-J98Vn*C{X_u> zmTmsA9(HObMQuide9st*J*YxOh-?6|T&yM?AscKKeST$BDnd??XBhX_(3)K+m!Q9C zQPszD^BGAbA{CWsSqqRq1kHiyCUR4i8`yt>NQ6l#(qw3ORp;Hv$6p((YA~i6Yl}?AOl8%!Vz}CVf zw-6!A*xP!9nv=yI93gL|*wvWy(wH=PZ(&fuR)DMxp^^J?*wv3<^>|VrOrj!TYp%nN z*n%4oMz+Dfk3$pE!6x*0-Hc;S)P~jnxmR zP(wsw&ty?DRli^5ARgui4gxRRDE72pee}_QTT_Jd;B#L6pT>g${-nRQ{1KfE^HLzh zEFW=2PJm@a9l|sFh&nTfyK_z~bA#sFg;aS?P-rw6kSGtqJ(TQ{*vsyau7-uz0JPSW z<=IT0=iPifbUPK;Ir4DquLR=HK4@vp;&8ZBXE}Yya(}bkaVMF#OWF<2iRI4AhxuTs zVhX!kOdh=xj7UTN`FMvM&T*W1)6Hct>!4_=TvW)0y~2@KNU9sm#7Bgz4K4hbTSop& z(haHj3@S=Q%)74(@zfnf<(d*v{|UErfpbm)&ffi~)B$Y$b#Mt_;A=nl%gdXao9`H` zE&UbiJTE~QwymqY3(XddRH&*!0NS(LK`ItL^bV&}FC5=5EVQ_qA7M}_Hs{)Tvl&Kl zs`GHtclnm`@t_c%1X8^ukj9cm5)t4YnL!e9hKnt4LF4&6LM0Sp*NidLppXm%wM!*( z`*OB7I{&&$^k0CGAqgk56)$5+#;fZiuBXXTj5k&S)rw7#>U4x`xM@Y4(+MGC{-PB? zb9HJtf~RsDD@=6*h9FD<{cG`V6%7g0Q{5qe8vtDKowEVdz2W{H0D#v5wDQDXJG^oH z@Y_edl}~Wl>RZ};m;T{KY3@Gcacc^#*=^0Ju;8Vo$_nCvAtGx?uNkqWK)MdsNQ{pa z%48l6h-Zr5ud^}fd`xiqM0a+af|E;(NuFG6xdm17-9W=c4ghCWM$$%%8r=bGI!{Vd zJprGT0l3qGA*(Bb=e)}SWY&`SawCroULK+88245SXX=`IRA}Z@H*B)pgo6>UZwra6u)3CW2eT~Y4z@F?~p59i- zWPtzWJcAzh9pQ`pSjpKMa>zk)theB{AVii~6n1l@(bMUs%W{Jb~9784z^Hz22% zHcU1rK)h?czKlD&^%hprMN`(a0gyGOO)vB`D=X0T($ zJ;A!nA!urI5()zXwz(+>qC)L&X2FP%PbgaWfb5ON>&qDTRvaO|tO&(sst9^KK%NdK zBrI98At!=#1;!ivdtizYWt+GmCDf?RW=8-Fb8Zah_`78+UG~td&xalZ5G7q}TR~%d z^yoeG*&FF=8^@2lEgNm#Rl@gcM)J z18JP!wif?j*>pySfW%GN*F>^F&ih&&?}zrC@q zLFHs4W;p19Pxa;icC3xPOg{GLOLtivrd2ssG&_0N6yJ9h(cZ(g$d zRQ``|c_VIKzUT9s$M65Gw6}VkE7@#Cv5*~8K@^+P#EVIaYenA709L)XcW5-`vy>*;(0y> z0NxAmGk)mpY5#cdFM7*Ie`VZTJ!qXvmS>X~`D)<#dga9JX>{gyl^~A~TTRS`W&5R? zK3z5&qQ`YdeC>u=EU4!D^YIYbsP9Fh5E==)mHo$))c%BU7O*{P8cGeK088O^{}h^c zN2A!AbV6H;l*7FN`L*(vhdWJBC^R|&f-#zU$L@trhajRYyroKAXj9QJz?_cB{;kR&ut#%ir;#e- zzM4d9PARgJ9B7j9Db+1TWkzA@$-m-Z5&nOb^humxk}j<1#^QSfBf`FG@Z|MHKzM{+ zH2uz!BUd0pem!sJeK@`c-q~iExP-=zX+m<6J5fJaK7`TQu`>Bk1yV{x(r;jYFec~G z#*!rhB4NUyPrjRoj+w6q}=!zTwIkh-(>#_~A#~Ul?9l0A|9qh%4?CUREmgeFpj0YPqc@D=Z zQizAdiS5mqkzhKU0Vb*kOp4fY6@#LuN~SG7q6M*9(}@&NW!lyo z4rM1|vY1^$*DBJy-PSS|k$!{hQfk$8RmjJEY#h41U{^|TrcfOi_AHdEUmb` z@^s+3w|UclmJ<&p2$l$E=A2Jy55!(Q)jbPtX zarO8LJonfB4lnqPcbl)Cf7|8j%g27IckI4@(xX26HcHLY?&1E-h}&IEZQBou5@y)m z&oU&_as~ogSJ;b)VP6M@~nYdtajb-WYimT)eiNHEX@9o5~z;zpIYj0jZeD7b4daI*AUF}{l*#UE_JI_JqGH)RpYIOWhsiwZcQT5Dti6U=bJfdr~mj2pb1)L%O+Ah`-7Z zPy)Qo1X~n&E(?+NR!Y-O`<^s|S&RU^A3&2`1Xci7R1E|f1d}0zBv6oD#3haUHMMm0002r^@G5#ycVDN&?j*8;&&rGa{KM8%d0=PdF=k*7;P@!4dOymO%&J! ztgt|U8SUw9m|EBkC}oq(Y%dH5;m$E?2Cu6kU*$PjY> zjvpYrgJ6lM>^TLYXJ9uq$+2mxdh&2&uB6EYtE5Kl_|(n`sl%G*Q~h$c&g1(53m89j+_NfO>Zx&xf4h`FWWDcMLq#g zaoY+kv8Yw2Zfo*KiuahL`D42R004RdfW^PUi(kh`mT$*-Z~h>L^JZ=7n}>gY{qVi7 zAFLettj^O6PRug40DwAkJJ6Zi1yYKoRkzg&YxYYcDOiSlNRzi6y4)%X7(hxSqV@1)R>PW>Cn%La>Fk7m3z} ztx39U*u(n0HzM6!s&4|<3Dj(Feq=K#uC*GwSOfuiIzZZAx92T9YQx3sB}fF9Zmyp- z!D%B(TGi$&M_`>x%OrXXr6?-?d;7d^FS`Caq5=@$;NGV{9XR=9eCeexLblj5ot?8^ zT0VT>4ZWp<|05f&EwPlgL27u&ag|q?n%{-i^dd|nVzbCRe_>fVBdZahz!~KlXUQQV znao!>UlE%;dUv;woB-jctRMIN-3bF?i*%{TwR#a}pjD&QqK*06Sc^2;Z>p#I= zpZgS!Uw1tYUVZh0v)=G1{;F-VZae}!aW`(f;$1NJZMGM8?|SLf{EoME=C++rQA|zY zO!ae2mZrU&7F#)ptiNKp*m5(ADB##e{>c*Ml7?qou3ffSjLy?wZ)Cb@>6phjp}K9uC1n#_KwB^HLAA$S6hnLBXA4AvTH zZw3A1_hQ^zttUAv=^R%cv(^PO5b?(Zm#&mjLvgbV8^oO%>^}QKL`etDC^`#+Kx!<} zgl<5ZA=fRCHHhBOH98w%{lG1xA_b))r>fv8R*V}GlCDU{`48T^Z?OJ^&VKBC(ibpV z`d^@Fpm+KEG2D9_R`2NH{2%$_$L0o5-`CLyICdOwIQb;JCcO+VY`q3|{-1ZB-<_NL zPt%J#U!F|O%yS9Px>|TSufc3ESUrsK=CUmWsCEzbZKo!phF&uKEJ5#j*n`5>zQEyjrui_< zhEoxo`KX8f@p~xUT!GPfbr5h>Ofeg<$?OOvP$9Q2sX_t~*Nt=t)Uk!fq+;xR+*8q> z-ELJF)%7P!#mSzBljQJOilxMJqIHhmq1(yiBd8>?N=&Y_!!QDmr2|Suf0}FkO(JzC zYjb$zc)oG=^NyuAA8O&L&sxU~pWBb^Q~!YWo=xmH>*mMi22fQ4e?x>MMA5sWsEH*P(4Lrd;SYMoMn zB7n&cza(eem1XxWEV@m`jzh{D%V=NPUZbPM(Kt$ijbA4r&o2w5VIeOoj7ydxL z=gF4<_x}KJWej@F-#j)qfcl!=cORC%b}fGY!?U>XRUg1Bf8?+6&5!-o88h?qZ=7D( z{-dqw#r@^v6$`g$>%26~7;hZMXzhrV6<1P%WcAVxMN7gPn=E4ryCfi|ieRS7wHl5_ z2vKVaGrLbk)Se3Eb5U&_&8|lsgw3}v(Iv~ZlIrKN?s=FXg}(ApwjFn+HzNh+5TxC= zUlBlPx5=?MFJ9On>#w1I{CsNJwRs5ckb5}SNs={ zQh5Axz6X1M`A2ZoYknT>>+hOd*uDRS(~CQQygj?^*>P)nuF#4a$8N0X$g|-l`m2YE zi!c11i5+thc4P$Xl)&DhC;a|v8*95qmA#GP48?>Yr>(ryxaWd*QhX;elgPXHx3 zL>`D0YdxS6ybuc>lI!=T{m8jKTrmvn0*0(J%7#6R2kS87A}k~6&LZi|KqYOU1juTM zvAf7781=C0^+2jH0#QWc%~fn1x*b`6qlW34rDf_4YIfh*nBIO;i33z?t?KX{_gJPN znCXeQq|i#XnWYH=fuOT7Mr((W4OW|}Q3rUT(i&anLK6{@qC>gH+Yj7$@c;d;|MdGA zJ5HyM*$n^y__E7@r@kM2%PX*f3vk1kU&D8w`)1tqkzd|1w`=zcrslT4zBN7fthm*k zB_d{H%KXvhY0>Ej{ndlWN1G)_EB)U^;af2SJ}ho&3s`)=bq{S$oNK#o(Q71~SxoOd z1*+94sW7HV{5!;ZY=S_9#MyOO_AAlC>cau7xK^YI=Nb$7r^X?e;e=yIeLq+Rhv+9)kt$L(Co{Q&ob@2BXzONCzwRf3xzV znyR6mj4N0gBBj*PG~=KB@UQ;YkN@Y-Y#`b@p#yoe>j1uG6!SH&0X^<=+`qhvZhHl1 ze(=ix5&ropUsyWj#c%yz$L_xM$JP(s^OpY7p?^#V>zmA4Nx=v}h}%<`-FYfHb32Ju zWYKOAy~qI(nGyEvE2jqg$L>Zx>XlMgsbr(thM;mCY;3}%=Sit^ zrzV=)vk#ZELUPm{_S`@-yDmpC1I|lz=3qG|Nn|blLjKH%J2Pl6>_%sP2jX@Yq>8?` zS^SPzsfyJuiE#_dBLb5u7QTuK>+N#rhE&`H$%2`6jwtD1cHiR=wWq*FgIO2-wiss0 zhMO?yP>vCEB{^;ie_L-L?`wnk60X=3$NyMHMBDVQ#4j828sOTs;Jnjco6>2fT_T z&z(S)oEuM8ED%4lu=w97Zewcuezd0-Ao7#Lp@AOcb^?mA08>ToV=6Jc62T<$dw+ZT zm~`R@fsK`0#sQdxgF+;#?TA$KUr2%3ARVlORE*a2e9=OfLP%ut6xnbCajQdxH$P*r zdIakSZYei5B}bH*NMZh@b1=1SU&F9S^K$lcV?xWwm>lU~11d@ocV@imt%@HTZ7hLx zj_$VoB>)Hj2E&zu$cAf^^GM3HV^R?qhS?Y>Qln9tz4;9M+K2JdodA{|umXr4Ya75j zjvfV0KDoFht%Ly3lb`)e?0VYsd)u!0?wfveJ&tLo$&1NB2BLPCNJVzOLEyogxcF)7 zt)GIee^UU<%7V#_0Byjq+TE7@CY`DZfkIL$pJuCHnVgvN%H`9FFE38V(fShd!8($5 z7f`A^S(!K+(Rlqh;?`6FxVAdT`Wuy#Q2CPe>53?6qcgt?1^7tTv}ov12qFH86jYpG zytxe48RGVI`FYA&7NwvlLX>ncS~~^;5Vg9c-CFTI`EbKxFKlXuz&Z!(94d;-L`_b> zym9@(|9$!HCww9Qo1c0g&U?kD@teQ-7;XU`s2~6UOveB~%ilksr#$XmD`z}+=OxON1+!*?PZtk=kP@KXlNP+g|Ln$cmAV`n+pu;pEE&A|t> zN|o-tIjNeGU2ZO3n=xre60T^{E1>D;VMTjaty$D+qq}`C@^pya(mmjO1U6%W$q;qA z;1cj96+oyB1F5KJ~Ge^x^!ZIFtg^BgA63pXh?rJsN)O-3TH&cH_38ka<= zC+^<0W3hATH8}MxSDZ*8_!wL9Cs6+WcOqQ%?|^r`>HCl`U6KHsXD03VdF{^hi<8dG z)7#Svdy=UcrJ@#$(L7u~j?wxtaGpZW2D&-}W?wl-7Jnp(cpn?E1v|~>G1&-2F?AMq zqqDFZQPM7dmvJX{ZO|~lURVL0o)FmEm&{gY$F|RqIdL8Oz$|ElFn?g8L0?qe;xT?1Kk~`0#S@~uz{7ku4B$q=kzZ6 z?QN%>hpENAV697izVRw8$xg8QSp_B8TRH%fjxe|HtUx7CNC)d!KX^N)x9vq|VOP1x zH3rKEkoDJX@dnwW=q4QkN+C+xOw5R*==!^$!0piEn1|TVzNt?m{ z!;FKU{R50|8{_a1Eq@cM7wc-}=HjcNG_ozBt=IyUVHplE(%}Z$^E=BAU$h4q z)-C;kC&E&yNH|Jb)pcouxQibk98H1V0f&HktZx95HiKZLK!h{?_9Iw&G2@y)KM5<> zT()t}1yA|PSIp^OJ?H-0-ZwqHbWW??eRium{oQeU`uw;(wJRbul?~RBrK3WqQO66@ zgfJo!(PiYd=sc-rC&1(y#u|Gy$VZ#JIq1`H^%yz}JJFfjj;PhCN0%&-0TCQ4)kZwy zJyFv5QdS|vO<;JVNT6owsu*8kZbC#6k|Wz#Acz8@W%dTBNN9|i?LZbe%v9T&DTUU| zA`O=ggBeh9tN8m!fhc05Qz)J)(f^{Pt}_TL`M5C{tsOWR=PW#lj-9A5QwVp}9QxwtZ23S-?ZNsbt`^{o3RJ6Z#DeT&k)xb`9S520~lrm)& zJ${A4=c68aM+X?KFJWqa8``tm5Vg91l0g>kM5075$=`KY3>S-F)?&_zCZP3XB{j)Y z(3T~Wco$@utkjzVQ@~M}Yt*f-vl{BYgdPMSs3MBn(=cobnYW6|#-+edI2(hL3??1I zq@w~zbE-yWMmFkWuzDDCdrogQ7ZPTnrIbV_4Ewg^Bybxp-cKznG6hosQ-+f;OrC*F zUP_&dzasJTE+tTG_@=}Mii@1(`RZUiUZRT${3YO=bN+1ucz})IHvu#->GJKjL-!b8 z`OY4`jp>r{#nnt;ifNr?6RrZ#cfd(pFxVwjYvIBDSj#ej{`6d zLd@)G;3vV8&A2U4_vS`7i(fVlb(t@83?>_5uyPQijpK-?X3^@-A@0l;{&Pw>;Z_u6 z<>dauZ1?3>OdH9z$`-oR+5`9#b4|qsL6gECCbEzSdZ02%b{q{TQ7uX~;L=pKt~5$> zR9#AyeL(;`?%Ku0OWCw*19EoF<^pQ&a!80enke+s|r% zn*P#-81^p5k)*L_bm|FTJbHS3!IjsmKmJHJo7)j7Iy+I( zxdc33DfKu4P66{CQfk&Pcciqwh>;3$&k^i}HFN05Du%Dl`OAw%x2|5Gm-<0KMb)W8vg;3ttyP@Io*HS}U9q8T{PG-;BYYdvW@+J`Dgk zAIJb49{=gF!|i{+^9x`4lOIsK9(Ue!Cy5v1B-y77&NRlHp@>c;742d+yTH5{5zUaI zDZ|`0Y!cQwVxvhhgOzkKCT@gi4CW%>L|T&pAXP4I1AtA6Y?LD(_b`rPsJI0cCy0_M zQgI7W(kiFws>wQOUqv+}NOpSVL`0d`;t=EzZ!nO6N^9+)$&M#daK`@S9~@;=RdZyc zUOCdsKt2W&Vboipe6$JG>R_;T4B224s?`RJX~f4Y0oCF)2TO;bq8M{~PDj-0pmG%k z*(2F7!lsN(dD0s)#$dd56cGU`jsTOE6O3_TY^oyU;~^`h(A~D1RFZ&oj;!AYDtb>+ zko6|00F#5*AXZVv!1aSs_U^mxJ^saWe&}a0h4mBi52Jru=KmV1aqGW7_?b)5Uthqk z#hsvJ9kbJWarIrFOxo0KPj}i=glM*<)B+K49z_4LcY$}S0B34ntlq4L*ZB|jDRnpcf zZfS~QCKYj+Qd7neGO^JSm}9VMG3%I_V>TuNvnq8ZBnFHG2~n7Iln7%H?@-8atsp?M zhAPDHi=4bhAM?Ice*aZf$$;Z&+KC#XVhQnwWV+@!zbJ<)Fah|0^Hu)-4eC=Rt zKKYBE_~5OVfAj#SN4se49!%I=|7`cnB!L4P-mW#R-2Ql zHV6?IigRKlnhDw<%hO09kF-t|8&-z3Vm6AnaNIA}Q(lG8*<1n+y%LG3HI07OnG*x9Rh+>d7IqN(F8RBfzXJa%Q)*MG|fFh`} zg)$Y9SZz5q$XF`*s`>5WLPC$nh+8qD_7n^QFohejiXsr=h>#QOTp7+OXHA5N2q43T zlBl5ha-Fiyv;iBV00u{lIAI`SieqrD*$^{WBT8bROcXYG&UuzGb5`sCy4b45=_v0F z`q}f}{Ac4MpSl!#U-niEmk3|EVGfsEvI(X5-ztDdQ-yHp`(K8~zu~vB7jMLUA9^}= ze(Im`oR3|H_x<4?;k>SdLr8~1 zM2HYmQ~-UXK&=F=g`J?d4JLvatpQmM6%~(i)S3d=AnmV0X@<#*_<6$_a>YoZ1jZ;t zihyJWNuto{wxAG08-;Pi=;j1Agp?U^qM$mnK-7jYg;<7IHEaND7{$nTEC5LYMKPlK zG%vo#ur9h7xd9M>RRye86o1hlLoxWI9IAt2cgTV0_zINKP|V2YyWrUwXrqzmBe32C zXLo?sJJ78m%=8!-6V&aDI9UWG?WVBK#vqEJVpR@WQMCaSn@^+w1H_#cRMLVmjBIng za46aqgZDGYoB~b>Y{p<1Kr@UfhM*LiqGO2wq6k`>5|3E}+RMf7j0|WHgKszBya)wm zMTNmhmLeT>!TMa}Cc^faK3Z`HI~Th6+MRb{R;}aa&H+5g)dp XVs7XR57YU300000NkvXXu0mjfCT6Ji literal 0 HcmV?d00001 From 64df888eaa0b93f4133e5bd3d4ffee587e3c4ba3 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Thu, 3 Sep 2026 22:38:44 +0200 Subject: [PATCH 08/41] Installer le logo dans YunoHost --- manifest.toml | 2 +- scripts/_common.sh | 4 ++++ scripts/install | 1 + scripts/remove | 1 + scripts/restore | 1 + scripts/upgrade | 1 + 6 files changed, 9 insertions(+), 1 deletion(-) diff --git a/manifest.toml b/manifest.toml index 9a5cd6a..37026ca 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh1" +version = "1.0.0-rc.3~ynh2" maintainers = ["OverSu"] [upstream] diff --git a/scripts/_common.sh b/scripts/_common.sh index 42be628..d74ea89 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -3,6 +3,10 @@ source /usr/share/yunohost/helpers php_upload_max_filesize="250M" +install_yunohost_logo() { + install -D -m 0644 "$YNH_APP_BASEDIR/logo.png" "/usr/share/yunohost/applogos/$app.png" +} + prepare_persistent_paths() { mkdir -p "$data_dir/association" "$data_dir/grants" "$data_dir/medical-documents" \ "$data_dir/private-media" "$data_dir/media" "$data_dir/storage/logs" \ diff --git a/scripts/install b/scripts/install index 02b8b6d..3d92960 100755 --- a/scripts/install +++ b/scripts/install @@ -3,6 +3,7 @@ source _common.sh ynh_script_progression --message="Installation de Globinours..." ynh_setup_source --dest_dir="$install_dir" prepare_persistent_paths +install_yunohost_logo ynh_config_add_phpfpm ynh_config_add_nginx ynh_exec_as_app php "$install_dir/scripts/migrate.php" diff --git a/scripts/remove b/scripts/remove index d650d63..509b160 100755 --- a/scripts/remove +++ b/scripts/remove @@ -1,4 +1,5 @@ #!/bin/bash source _common.sh +ynh_safe_rm "/usr/share/yunohost/applogos/$app.png" ynh_config_remove_nginx ynh_config_remove_phpfpm diff --git a/scripts/restore b/scripts/restore index 6c1e58a..00185e7 100755 --- a/scripts/restore +++ b/scripts/restore @@ -5,6 +5,7 @@ ynh_restore "$data_dir" ynh_restore "/etc/nginx/conf.d/$domain.d/$app.conf" ynh_restore "/etc/php/$php_version/fpm/pool.d/$app.conf" prepare_persistent_paths +install_yunohost_logo ynh_exec_as_app php "$install_dir/scripts/migrate.php" ynh_systemctl --service="php$php_version-fpm" --action=reload ynh_systemctl --service=nginx --action=reload diff --git a/scripts/upgrade b/scripts/upgrade index 87b9480..340c476 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -7,6 +7,7 @@ touch "$data_dir/storage/maintenance.flag" trap 'rm -f "$data_dir/storage/maintenance.flag"' EXIT ynh_setup_source --dest_dir="$install_dir" --full_replace --keep="data storage public/media" prepare_persistent_paths +install_yunohost_logo ynh_config_add_phpfpm ynh_config_add_nginx ynh_exec_as_app php "$install_dir/scripts/migrate.php" From 9d89a871cd8b12055b6fc2b004b147e43ae72b47 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Thu, 3 Sep 2026 22:46:09 +0200 Subject: [PATCH 09/41] =?UTF-8?q?Mettre=20=C3=A0=20jour=20Globinours=20pou?= =?UTF-8?q?r=20PHP=208.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 37026ca..52b7a55 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh2" +version = "1.0.0-rc.3~ynh3" maintainers = ["OverSu"] [upstream] @@ -32,8 +32,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/9a2b4068da3c707aa32f365b2d7943398703c44b.tar.gz" - sha256 = "164f56084cf6c75fd1a6f2ae9c7639c65b09e54266b7d3fd07bb1902515a36b5" + url = "https://nnsprod.com/git/oversu/Globinours/archive/63224d8b068f8dc0cc81be3536e0f56bd9a1bfa8.tar.gz" + sha256 = "19b861ae8d944114360af3397182a338b9e536ac018b94577488a82413c9ee6d" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From 3eb0cc5f1692503b36b9eb4c737d42d9e42d97a5 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Thu, 3 Sep 2026 22:47:00 +0200 Subject: [PATCH 10/41] =?UTF-8?q?S=C3=A9curiser=20la=20mise=20=C3=A0=20niv?= =?UTF-8?q?eau=20depuis=20PHP=208.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.toml | 2 +- scripts/upgrade | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/manifest.toml b/manifest.toml index 52b7a55..6043e37 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh3" +version = "1.0.0-rc.3~ynh4" maintainers = ["OverSu"] [upstream] diff --git a/scripts/upgrade b/scripts/upgrade index 340c476..3e669d1 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,7 +1,10 @@ #!/bin/bash source _common.sh -if [[ -f "$install_dir/scripts/backup.php" && -f "$data_dir/refuge.sqlite" ]]; then +if [[ -f "$install_dir/scripts/backup.php" && -f "$data_dir/refuge.sqlite" ]] && \ + php -l "$install_dir/app/Services/BackupService.php" >/dev/null 2>&1; then ynh_exec_as_app php "$install_dir/scripts/backup.php" pre-upgrade-yunohost +elif [[ -f "$data_dir/refuge.sqlite" ]]; then + ynh_print_warn --message="La sauvegarde applicative préalable est ignorée car l'ancienne version n'est pas compatible avec PHP $php_version. La sauvegarde de sécurité YunoHost reste active." fi touch "$data_dir/storage/maintenance.flag" trap 'rm -f "$data_dir/storage/maintenance.flag"' EXIT From 72b68793efcb7518e81f3f4d79b4fafd1b6b0b1d Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Thu, 3 Sep 2026 22:56:52 +0200 Subject: [PATCH 11/41] Corriger le routage Nginx vers PHP --- conf/nginx.conf | 15 ++++++++------- manifest.toml | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index 2a8c85a..aa7d8a0 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -2,12 +2,13 @@ location __PATH__/ { alias __INSTALL_DIR__/public/; index index.php; client_max_body_size 260M; - try_files $uri $uri/ __PATH__/index.php?$query_string; + try_files $uri $uri/ @__APP__; location ~ /\. { deny all; } - location = __PATH__/index.php { - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME __INSTALL_DIR__/public/index.php; - fastcgi_param HTTP_PROXY ""; - fastcgi_pass unix:/var/run/php/php__PHP_VERSION__-fpm-__APP__.sock; - } +} + +location @__APP__ { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME __INSTALL_DIR__/public/index.php; + fastcgi_param HTTP_PROXY ""; + fastcgi_pass unix:/var/run/php/php__PHP_VERSION__-fpm-__APP__.sock; } diff --git a/manifest.toml b/manifest.toml index 6043e37..385e683 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh4" +version = "1.0.0-rc.3~ynh5" maintainers = ["OverSu"] [upstream] From 8ab7b9efdaf6826f9eb8eb5396d1b67b6e26e9cf Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Thu, 3 Sep 2026 23:11:29 +0200 Subject: [PATCH 12/41] =?UTF-8?q?Publier=20les=20correctifs=20d=E2=80=99in?= =?UTF-8?q?terface=20et=20le=20logo=20SSO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.toml | 6 +++--- scripts/_common.sh | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 385e683..5d10fa7 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh5" +version = "1.0.0-rc.3~ynh6" maintainers = ["OverSu"] [upstream] @@ -32,8 +32,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/63224d8b068f8dc0cc81be3536e0f56bd9a1bfa8.tar.gz" - sha256 = "19b861ae8d944114360af3397182a338b9e536ac018b94577488a82413c9ee6d" + url = "https://nnsprod.com/git/oversu/Globinours/archive/e3d8bf45fa43e7992320c39a9db01f604882dbaf.tar.gz" + sha256 = "ae1ffe387ed2dc44b607c9486fc91825894082bb95ae60946fd52624f567f784" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" diff --git a/scripts/_common.sh b/scripts/_common.sh index d74ea89..0347a54 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -5,6 +5,9 @@ php_upload_max_filesize="250M" install_yunohost_logo() { install -D -m 0644 "$YNH_APP_BASEDIR/logo.png" "/usr/share/yunohost/applogos/$app.png" + yunohost app config set "$app" permission_main_logo \ + --value="$YNH_APP_BASEDIR/logo.png" \ + --core } prepare_persistent_paths() { From bd3dff9dba5bcceef579a21637bdd2a0b9144baf Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Thu, 3 Sep 2026 23:12:20 +0200 Subject: [PATCH 13/41] =?UTF-8?q?Autoriser=20Nginx=20=C3=A0=20servir=20les?= =?UTF-8?q?=20m=C3=A9dias=20publics?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.toml | 2 +- scripts/_common.sh | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/manifest.toml b/manifest.toml index 5d10fa7..cea825d 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh6" +version = "1.0.0-rc.3~ynh7" maintainers = ["OverSu"] [upstream] diff --git a/scripts/_common.sh b/scripts/_common.sh index 0347a54..231b843 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -24,4 +24,6 @@ prepare_persistent_paths() { chown -R "$app:$app" "$data_dir" chmod -R u=rwX,g=rX,o= "$install_dir" chmod -R u=rwX,g=,o= "$data_dir" + chown -R "$app:www-data" "$data_dir/media" + chmod -R u=rwX,g=rX,o= "$data_dir/media" } From 32c33580e4f0735d7ec8f4889d21f6d64709a158 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Fri, 4 Sep 2026 11:45:31 +0200 Subject: [PATCH 14/41] =?UTF-8?q?Corriger=20l=E2=80=99enregistrement=20du?= =?UTF-8?q?=20logo=20SSO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.toml | 2 +- scripts/_common.sh | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index cea825d..5ccf5b6 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh7" +version = "1.0.0-rc.3~ynh8" maintainers = ["OverSu"] [upstream] diff --git a/scripts/_common.sh b/scripts/_common.sh index 231b843..4c4e9b1 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -5,9 +5,11 @@ php_upload_max_filesize="250M" install_yunohost_logo() { install -D -m 0644 "$YNH_APP_BASEDIR/logo.png" "/usr/share/yunohost/applogos/$app.png" - yunohost app config set "$app" permission_main_logo \ + if ! yunohost app config set "$app" _core.permission_main.permission_main_logo \ --value="$YNH_APP_BASEDIR/logo.png" \ - --core + --core; then + ynh_print_warn --message="Le logo du portail YunoHost n'a pas pu être enregistré. L'installation de Globinours continue." + fi } prepare_persistent_paths() { From 93647ef9e3f48b3d22bf3e020e38285ca557cd32 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Fri, 4 Sep 2026 11:54:28 +0200 Subject: [PATCH 15/41] =?UTF-8?q?Emp=C3=AAcher=20l=E2=80=99exposition=20de?= =?UTF-8?q?s=20sources=20PHP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/nginx.conf | 8 ++++++++ manifest.toml | 2 +- scripts/_common.sh | 2 ++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index aa7d8a0..f60f512 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,9 +1,17 @@ +location = __PATH__/index.php { + include fastcgi_params; + fastcgi_param SCRIPT_FILENAME __INSTALL_DIR__/public/index.php; + fastcgi_param HTTP_PROXY ""; + fastcgi_pass unix:/var/run/php/php__PHP_VERSION__-fpm-__APP__.sock; +} + location __PATH__/ { alias __INSTALL_DIR__/public/; index index.php; client_max_body_size 260M; try_files $uri $uri/ @__APP__; location ~ /\. { deny all; } + location ~ \.php$ { return 404; } } location @__APP__ { diff --git a/manifest.toml b/manifest.toml index 5ccf5b6..9b43956 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh8" +version = "1.0.0-rc.3~ynh9" maintainers = ["OverSu"] [upstream] diff --git a/scripts/_common.sh b/scripts/_common.sh index 4c4e9b1..92baf57 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -26,6 +26,8 @@ prepare_persistent_paths() { chown -R "$app:$app" "$data_dir" chmod -R u=rwX,g=rX,o= "$install_dir" chmod -R u=rwX,g=,o= "$data_dir" + chown "$app:www-data" "$data_dir" + chmod 0710 "$data_dir" chown -R "$app:www-data" "$data_dir/media" chmod -R u=rwX,g=rX,o= "$data_dir/media" } From 1a45355ed30fabff0a67194d4223c152c72c4a40 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Fri, 4 Sep 2026 12:07:30 +0200 Subject: [PATCH 16/41] =?UTF-8?q?Mettre=20=C3=A0=20jour=20Globinours=20pou?= =?UTF-8?q?r=20les=20fiches=20animales?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 9b43956..a5aa79c 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh9" +version = "1.0.0-rc.3~ynh10" maintainers = ["OverSu"] [upstream] @@ -32,8 +32,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/e3d8bf45fa43e7992320c39a9db01f604882dbaf.tar.gz" - sha256 = "ae1ffe387ed2dc44b607c9486fc91825894082bb95ae60946fd52624f567f784" + url = "https://nnsprod.com/git/oversu/Globinours/archive/72438556cd7d4771d7484046d5865ff42cebae65.tar.gz" + sha256 = "20e172c6a9f43dc773012298aa09db97644c53398020f3612b2ec5093b92460c" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From 7ae2307abf08ab3c0dcef09ea55663b487319461 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Fri, 4 Sep 2026 12:23:03 +0200 Subject: [PATCH 17/41] =?UTF-8?q?Aligner=20le=20paquet=20sur=20le=20mod?= =?UTF-8?q?=C3=A8le=20YunoHost?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 11 +++++++ .gitattributes | 2 ++ .github/ISSUE_TEMPLATE.md | 55 ++++++++++++++++++++++++++++++++ .github/PULL_REQUEST_TEMPLATE.md | 16 ++++++++++ README.md | 51 ++++++++++++++++++++--------- doc/ADMIN.md | 3 ++ doc/ADMIN_fr.md | 3 ++ manifest.toml | 5 ++- scripts/_common.sh | 28 ++++++++-------- scripts/backup | 15 +++++++++ scripts/change_url | 19 +++++++++++ scripts/install | 41 ++++++++++++++++++++++-- scripts/remove | 20 +++++++++++- scripts/restore | 29 ++++++++++++++++- scripts/upgrade | 37 ++++++++++++++++++++- tests.toml | 4 +++ 16 files changed, 303 insertions(+), 36 deletions(-) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 doc/ADMIN.md create mode 100644 doc/ADMIN_fr.md diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..43280ce --- /dev/null +++ b/.editorconfig @@ -0,0 +1,11 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 + +[*.toml] +indent_size = 4 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d0d6371 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +* text=auto eol=lf +*.png binary diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..2729a6b --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,55 @@ +--- +name: Bug report +about: When creating a bug report, please use the following template to provide all the relevant information and help debugging efficiently. + +--- + +**How to post a meaningful bug report** +1. *Read this whole template first.* +2. *Determine if you are on the right place:* + - *If you were performing an action on the app from the webadmin or the CLI (install, update, backup, restore, change_url...), you are on the right place!* + - *Otherwise, the issue may be due to the app itself. Refer to its documentation or repository for help.* + - *When in doubt, post here and we will figure it out together.* +3. *Delete the italic comments as you write over them below, and remove this guide.* +--- + +### Describe the bug + +*A clear and concise description of what the bug is.* + +### Context + +- Hardware: *VPS bought online / Old laptop or computer / Raspberry Pi at home / Internet Cube with VPN / Other ARM board / ...* +- YunoHost version: x.x.x +- I have access to my server: *Through SSH | through the webadmin | direct access via keyboard / screen | ...* +- Are you in a special context or did you perform some particular tweaking on your YunoHost instance?: *no / yes* + - If yes, please explain: +- Using, or trying to install package version/branch: +- If upgrading, current package version: *can be found in the admin, or with `yunohost app info $app_id`* + +### Steps to reproduce + +- *If you performed a command from the CLI, the command itself is enough. For example:* + ```sh + sudo yunohost app install the_app + ``` +- *If you used the webadmin, please perform the equivalent command from the CLI first.* +- *If the error occurs in your browser, explain what you did:* + 1. *Go to '...'* + 2. *Click on '...'* + 3. *Scroll down to '...'* + 4. *See error* + +### Expected behavior + +*A clear and concise description of what you expected to happen. You can remove this section if the command above is enough to understand your intent.* + +### Logs + +*When an operation fails, YunoHost provides a simple way to share the logs.* +- *In the webadmin, the error message contains a link to the relevant log page. On that page, you will be able to 'Share with Yunopaste'. If you missed it, the logs of previous operations are also available under Tools > Logs.* +- *In command line, the command to share the logs is displayed at the end of the operation and looks like `yunohost log display [log name] --share`. If you missed it, you can find the log ID of a previous operation using `yunohost log list`.* + +*After sharing the log, please copypaste directly the link provided by YunoHost (to help readability, no need to copypaste the entire content of the log here, just the link is enough...)* + +*If applicable and useful, add screenshots to help explain your problem.* diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..ef70e18 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,16 @@ +## Problem + +- *Description of why you made this PR* + +## Solution + +- *And how do you fix that problem* + +## PR Status + +- [ ] Code finished and ready to be reviewed/tested +- [ ] The fix/enhancement were manually tested (if applicable) + +## Automatic tests + +Automatic tests can be triggered on https://ci-apps-dev.yunohost.org/ *after creating the PR*, by commenting "!testme", "!gogogadgetoci" or "By the power of systemd, I invoke The Great App CI to test this Pull Request!". (N.B. : for this to work you need to be a member of the Yunohost-Apps organization) diff --git a/README.md b/README.md index 80ffb64..e87c3ac 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,46 @@ -# Globinours pour YunoHost — 1.0.0-rc.3 + -

- Logo de Globinours -

+

+ Logo of Globinours + Globinours, packaged for YunoHost +

-Ce paquet installe Globinours sur un domaine ou sous-domaine dédié. Il télécharge une archive immuable de l’application depuis le dépôt Forgejo officiel, puis vérifie son empreinte SHA-256 avant installation. +Lightweight animal shelter management -## Installation de test +[![🌐 Official app website](https://img.shields.io/badge/Official_app_website-darkgreen?style=for-the-badge)](https://globinours.fr) +[![App Demo](https://img.shields.io/badge/App_Demo-blue?style=for-the-badge)](https://demo.globinours.fr) +[![Version: 1.0.0-rc.3~ynh11](https://img.shields.io/badge/Version-1.0.0--rc.3~ynh11-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/globinours/) -Depuis un clone du paquet présent sur le serveur YunoHost : +
+ + +
-```bash -sudo yunohost app install /root/globinours_ynh --debug --force --no-remove-on-failure +## 📦 Developer info + +[![Automatic tests level](https://apps.yunohost.org/badge/cilevel/globinours)](https://ci-apps.yunohost.org/ci/apps/globinours/) + +🛠️ Upstream Globinours repository: + +Pull request are welcome and should target the [`testing` branch](https://github.com/YunoHost-Apps/globinours_ynh/tree/testing). + +The `testing` branch can be tested using: +``` +# fresh install: +sudo yunohost app install https://github.com/YunoHost-Apps/globinours_ynh/tree/testing + +# upgrade an existing install: +sudo yunohost app upgrade globinours -u https://github.com/YunoHost-Apps/globinours_ynh/tree/testing ``` -Choisir un domaine ou sous-domaine libre. Après l’installation, ouvrir son URL et terminer la création du premier administrateur dans l’assistant Globinours. - -Pour tester une mise à niveau du paquet : - +You can also switch to the testing branch to update from testing by default (as same as for APT when you chose to use a testing repos) with this command: ```bash -sudo yunohost app upgrade globinours -u /root/globinours_ynh --debug +sudo yunohost app setting globinours upgrade_channel -v testing ``` -Globinours utilise ses propres comptes applicatifs : l’intégration LDAP et l’authentification SSO YunoHost ne sont donc pas utilisées. +### 📚 App packaging documentation + +Please see for more information. diff --git a/doc/ADMIN.md b/doc/ADMIN.md new file mode 100644 index 0000000..edcc857 --- /dev/null +++ b/doc/ADMIN.md @@ -0,0 +1,3 @@ +Globinours stores its persistent data in `__DATA_DIR__` and its application files in `__INSTALL_DIR__`. + +The application uses its own user accounts. Open the application settings to manage users, backups and maintenance operations. diff --git a/doc/ADMIN_fr.md b/doc/ADMIN_fr.md new file mode 100644 index 0000000..ca300ca --- /dev/null +++ b/doc/ADMIN_fr.md @@ -0,0 +1,3 @@ +Globinours conserve ses données persistantes dans `__DATA_DIR__` et ses fichiers applicatifs dans `__INSTALL_DIR__`. + +L’application utilise ses propres comptes. Ouvrez ses paramètres pour gérer les utilisateurs, les sauvegardes et les opérations de maintenance. diff --git a/manifest.toml b/manifest.toml index a5aa79c..bfd97ec 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,11 +5,13 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh10" +version = "1.0.0-rc.3~ynh11" maintainers = ["OverSu"] [upstream] license = "AGPL-3.0-or-later" +website = "https://globinours.fr" +demo = "https://demo.globinours.fr" code = "https://nnsprod.com/git/oversu/Globinours" [integration] @@ -40,6 +42,7 @@ ram.runtime = "100M" [resources.system_user] [resources.install_dir] [resources.data_dir] + subdirs = ["association", "grants", "medical-documents", "private-media", "media", "storage/logs", "storage/backups", "storage/releases"] [resources.permissions] main.url = "/" [resources.apt] diff --git a/scripts/_common.sh b/scripts/_common.sh index 92baf57..6999d60 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,31 +1,29 @@ #!/bin/bash + +#================================================= +# COMMON VARIABLES AND CUSTOM HELPERS +#================================================= + source /usr/share/yunohost/helpers php_upload_max_filesize="250M" -install_yunohost_logo() { - install -D -m 0644 "$YNH_APP_BASEDIR/logo.png" "/usr/share/yunohost/applogos/$app.png" - if ! yunohost app config set "$app" _core.permission_main.permission_main_logo \ - --value="$YNH_APP_BASEDIR/logo.png" \ - --core; then - ynh_print_warn --message="Le logo du portail YunoHost n'a pas pu être enregistré. L'installation de Globinours continue." - fi -} - prepare_persistent_paths() { - mkdir -p "$data_dir/association" "$data_dir/grants" "$data_dir/medical-documents" \ - "$data_dir/private-media" "$data_dir/media" "$data_dir/storage/logs" \ - "$data_dir/storage/backups" "$data_dir/storage/releases" - ynh_safe_rm "$install_dir/data" - ynh_safe_rm "$install_dir/storage" - ynh_safe_rm "$install_dir/public/media" + for path_to_replace in "$install_dir/data" "$install_dir/storage" "$install_dir/public/media"; do + if [[ -e "$path_to_replace" || -L "$path_to_replace" ]]; then + ynh_safe_rm "$path_to_replace" + fi + done + ln -s "$data_dir" "$install_dir/data" ln -s "$data_dir/storage" "$install_dir/storage" ln -s "$data_dir/media" "$install_dir/public/media" + chown -R "$app:www-data" "$install_dir" chown -R "$app:$app" "$data_dir" chmod -R u=rwX,g=rX,o= "$install_dir" chmod -R u=rwX,g=,o= "$data_dir" + chown "$app:www-data" "$data_dir" chmod 0710 "$data_dir" chown -R "$app:www-data" "$data_dir/media" diff --git a/scripts/backup b/scripts/backup index 1fd0bfa..8f41a4b 100755 --- a/scripts/backup +++ b/scripts/backup @@ -1,6 +1,21 @@ #!/bin/bash + +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + source ../settings/scripts/_common.sh +source /usr/share/yunohost/helpers + +#================================================= +# DECLARE DATA TO BACK UP +#================================================= + +ynh_print_info "Declaring files to be backed up..." + ynh_backup "$install_dir" ynh_backup "$data_dir" ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" ynh_backup "/etc/php/$php_version/fpm/pool.d/$app.conf" + +ynh_print_info "Backup script completed for $app" diff --git a/scripts/change_url b/scripts/change_url index 1dc41ab..484ac86 100755 --- a/scripts/change_url +++ b/scripts/change_url @@ -1,4 +1,23 @@ #!/bin/bash + +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# MODIFY URL IN NGINX CONF +#================================================= + +ynh_script_progression "Updating NGINX web server configuration..." + ynh_config_change_url_nginx ynh_systemctl --service=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression "Change of URL completed for $app" diff --git a/scripts/install b/scripts/install index 3d92960..af0a8dc 100755 --- a/scripts/install +++ b/scripts/install @@ -1,10 +1,47 @@ #!/bin/bash + +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + source _common.sh -ynh_script_progression --message="Installation de Globinours..." +source /usr/share/yunohost/helpers + +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= + +ynh_script_progression "Setting up source files..." + ynh_setup_source --dest_dir="$install_dir" + +#================================================= +# APP INITIAL CONFIGURATION +#================================================= + prepare_persistent_paths -install_yunohost_logo + +#================================================= +# SYSTEM CONFIGURATION +#================================================= + +ynh_script_progression "Adding system configurations related to $app..." + ynh_config_add_phpfpm ynh_config_add_nginx + +#================================================= +# INITIALIZE THE APPLICATION +#================================================= + +ynh_script_progression "Initializing the database..." + ynh_exec_as_app php "$install_dir/scripts/migrate.php" + ynh_systemctl --service="php$php_version-fpm" --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression "Installation of $app completed" diff --git a/scripts/remove b/scripts/remove index 509b160..2dedbda 100755 --- a/scripts/remove +++ b/scripts/remove @@ -1,5 +1,23 @@ #!/bin/bash + +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + source _common.sh -ynh_safe_rm "/usr/share/yunohost/applogos/$app.png" +source /usr/share/yunohost/helpers + +#================================================= +# REMOVE SYSTEM CONFIGURATION +#================================================= + +ynh_script_progression "Removing system configurations related to $app..." + ynh_config_remove_nginx ynh_config_remove_phpfpm + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression "Removal of $app completed" diff --git a/scripts/restore b/scripts/restore index 00185e7..9e78ed5 100755 --- a/scripts/restore +++ b/scripts/restore @@ -1,11 +1,38 @@ #!/bin/bash + +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + source ../settings/scripts/_common.sh +source /usr/share/yunohost/helpers + +#================================================= +# RESTORE FILES AND DATA +#================================================= + +ynh_script_progression "Restoring application files..." + ynh_restore "$install_dir" ynh_restore "$data_dir" + +#================================================= +# RESTORE SYSTEM CONFIGURATION +#================================================= + +ynh_script_progression "Restoring system configurations related to $app..." + ynh_restore "/etc/nginx/conf.d/$domain.d/$app.conf" ynh_restore "/etc/php/$php_version/fpm/pool.d/$app.conf" + prepare_persistent_paths -install_yunohost_logo ynh_exec_as_app php "$install_dir/scripts/migrate.php" + ynh_systemctl --service="php$php_version-fpm" --action=reload ynh_systemctl --service=nginx --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression "Restoration completed for $app" diff --git a/scripts/upgrade b/scripts/upgrade index 3e669d1..ec102b1 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -1,19 +1,54 @@ #!/bin/bash + +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + source _common.sh +source /usr/share/yunohost/helpers + +#================================================= +# CREATE AN APPLICATION BACKUP +#================================================= + if [[ -f "$install_dir/scripts/backup.php" && -f "$data_dir/refuge.sqlite" ]] && \ php -l "$install_dir/app/Services/BackupService.php" >/dev/null 2>&1; then ynh_exec_as_app php "$install_dir/scripts/backup.php" pre-upgrade-yunohost elif [[ -f "$data_dir/refuge.sqlite" ]]; then ynh_print_warn --message="La sauvegarde applicative préalable est ignorée car l'ancienne version n'est pas compatible avec PHP $php_version. La sauvegarde de sécurité YunoHost reste active." fi + +#================================================= +# ENABLE MAINTENANCE MODE +#================================================= + touch "$data_dir/storage/maintenance.flag" trap 'rm -f "$data_dir/storage/maintenance.flag"' EXIT + +#================================================= +# DOWNLOAD, CHECK AND UNPACK SOURCE +#================================================= + +ynh_script_progression "Upgrading source files..." + ynh_setup_source --dest_dir="$install_dir" --full_replace --keep="data storage public/media" + +#================================================= +# UPDATE APPLICATION AND SYSTEM CONFIGURATION +#================================================= + prepare_persistent_paths -install_yunohost_logo ynh_config_add_phpfpm ynh_config_add_nginx ynh_exec_as_app php "$install_dir/scripts/migrate.php" + rm -f "$data_dir/storage/maintenance.flag" trap - EXIT + ynh_systemctl --service="php$php_version-fpm" --action=reload + +#================================================= +# END OF SCRIPT +#================================================= + +ynh_script_progression "Upgrade of $app completed" diff --git a/tests.toml b/tests.toml index 69cf81d..e3d18f7 100644 --- a/tests.toml +++ b/tests.toml @@ -1,6 +1,10 @@ test_format = 1.0 + [default] args.init_main_permission = "visitors" + + test_upgrade_from.1a45355.name = "Upgrade from 1.0.0-rc.3~ynh10" + [default.curl_tests] home.path = "/" home.expect_title = "Globinours" From 7a5f10624dd1c194cf23a410bc285d69bb7be243 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Fri, 4 Sep 2026 12:31:54 +0200 Subject: [PATCH 18/41] =?UTF-8?q?=C3=89viter=20le=20double=20chargement=20?= =?UTF-8?q?des=20helpers=20YunoHost?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- manifest.toml | 2 +- scripts/_common.sh | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index e87c3ac..7feabce 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Lightweight animal shelter management [![🌐 Official app website](https://img.shields.io/badge/Official_app_website-darkgreen?style=for-the-badge)](https://globinours.fr) [![App Demo](https://img.shields.io/badge/App_Demo-blue?style=for-the-badge)](https://demo.globinours.fr) -[![Version: 1.0.0-rc.3~ynh11](https://img.shields.io/badge/Version-1.0.0--rc.3~ynh11-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/globinours/) +[![Version: 1.0.0-rc.3~ynh12](https://img.shields.io/badge/Version-1.0.0--rc.3~ynh12-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/globinours/)
diff --git a/manifest.toml b/manifest.toml index bfd97ec..5900318 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh11" +version = "1.0.0-rc.3~ynh12" maintainers = ["OverSu"] [upstream] diff --git a/scripts/_common.sh b/scripts/_common.sh index 6999d60..1838c3f 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -4,8 +4,6 @@ # COMMON VARIABLES AND CUSTOM HELPERS #================================================= -source /usr/share/yunohost/helpers - php_upload_max_filesize="250M" prepare_persistent_paths() { From 9c7253a837988b21d5f2c3a2c7786f908ae75bea Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Fri, 4 Sep 2026 12:34:45 +0200 Subject: [PATCH 19/41] =?UTF-8?q?R=C3=A9tablir=20l=E2=80=99ic=C3=B4ne=20Yu?= =?UTF-8?q?noHost=20de=20Globinours?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- manifest.toml | 2 +- scripts/_common.sh | 6 ++++++ scripts/install | 1 + scripts/remove | 4 ++++ scripts/restore | 1 + scripts/upgrade | 1 + 7 files changed, 15 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7feabce..f3037ec 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Lightweight animal shelter management [![🌐 Official app website](https://img.shields.io/badge/Official_app_website-darkgreen?style=for-the-badge)](https://globinours.fr) [![App Demo](https://img.shields.io/badge/App_Demo-blue?style=for-the-badge)](https://demo.globinours.fr) -[![Version: 1.0.0-rc.3~ynh12](https://img.shields.io/badge/Version-1.0.0--rc.3~ynh12-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/globinours/) +[![Version: 1.0.0-rc.3~ynh13](https://img.shields.io/badge/Version-1.0.0--rc.3~ynh13-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/globinours/)
diff --git a/manifest.toml b/manifest.toml index 5900318..32fef5c 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh12" +version = "1.0.0-rc.3~ynh13" maintainers = ["OverSu"] [upstream] diff --git a/scripts/_common.sh b/scripts/_common.sh index 1838c3f..51b228d 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -6,6 +6,12 @@ php_upload_max_filesize="250M" +install_yunohost_logo() { + install -D -m 0644 \ + "$install_dir/resources/branding/Logo_Globinours_maxi.png" \ + "/usr/share/yunohost/applogos/$app.png" +} + prepare_persistent_paths() { for path_to_replace in "$install_dir/data" "$install_dir/storage" "$install_dir/public/media"; do if [[ -e "$path_to_replace" || -L "$path_to_replace" ]]; then diff --git a/scripts/install b/scripts/install index af0a8dc..dc09c0b 100755 --- a/scripts/install +++ b/scripts/install @@ -20,6 +20,7 @@ ynh_setup_source --dest_dir="$install_dir" #================================================= prepare_persistent_paths +install_yunohost_logo #================================================= # SYSTEM CONFIGURATION diff --git a/scripts/remove b/scripts/remove index 2dedbda..3d73865 100755 --- a/scripts/remove +++ b/scripts/remove @@ -13,6 +13,10 @@ source /usr/share/yunohost/helpers ynh_script_progression "Removing system configurations related to $app..." +if [[ -e "/usr/share/yunohost/applogos/$app.png" ]]; then + ynh_safe_rm "/usr/share/yunohost/applogos/$app.png" +fi + ynh_config_remove_nginx ynh_config_remove_phpfpm diff --git a/scripts/restore b/scripts/restore index 9e78ed5..3298419 100755 --- a/scripts/restore +++ b/scripts/restore @@ -26,6 +26,7 @@ ynh_restore "/etc/nginx/conf.d/$domain.d/$app.conf" ynh_restore "/etc/php/$php_version/fpm/pool.d/$app.conf" prepare_persistent_paths +install_yunohost_logo ynh_exec_as_app php "$install_dir/scripts/migrate.php" ynh_systemctl --service="php$php_version-fpm" --action=reload diff --git a/scripts/upgrade b/scripts/upgrade index ec102b1..582e61d 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -38,6 +38,7 @@ ynh_setup_source --dest_dir="$install_dir" --full_replace --keep="data storage p #================================================= prepare_persistent_paths +install_yunohost_logo ynh_config_add_phpfpm ynh_config_add_nginx ynh_exec_as_app php "$install_dir/scripts/migrate.php" From 6e388019eec607f543f134f8c8ef67103f59c97b Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Fri, 4 Sep 2026 12:51:47 +0200 Subject: [PATCH 20/41] Configurer le logo du portail YunoHost --- README.md | 2 +- manifest.toml | 2 +- scripts/_common.sh | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index f3037ec..980f5c7 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Lightweight animal shelter management [![🌐 Official app website](https://img.shields.io/badge/Official_app_website-darkgreen?style=for-the-badge)](https://globinours.fr) [![App Demo](https://img.shields.io/badge/App_Demo-blue?style=for-the-badge)](https://demo.globinours.fr) -[![Version: 1.0.0-rc.3~ynh13](https://img.shields.io/badge/Version-1.0.0--rc.3~ynh13-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/globinours/) +[![Version: 1.0.0-rc.3~ynh14](https://img.shields.io/badge/Version-1.0.0--rc.3~ynh14-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/globinours/)
diff --git a/manifest.toml b/manifest.toml index 32fef5c..d979607 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh13" +version = "1.0.0-rc.3~ynh14" maintainers = ["OverSu"] [upstream] diff --git a/scripts/_common.sh b/scripts/_common.sh index 51b228d..b485aca 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -7,9 +7,12 @@ php_upload_max_filesize="250M" install_yunohost_logo() { + local logo="$install_dir/resources/branding/Logo_Globinours_maxi.png" + install -D -m 0644 \ - "$install_dir/resources/branding/Logo_Globinours_maxi.png" \ + "$logo" \ "/usr/share/yunohost/applogos/$app.png" + yunohost user permission update "$app.main" --logo "$logo" } prepare_persistent_paths() { From 9c42dbdc350271714bc11ccf0777d4a4f0edc787 Mon Sep 17 00:00:00 2001 From: oversu <95a7002b-481b-4ef3-b578-f9c421550aa4@localhost> Date: Fri, 4 Sep 2026 12:56:15 +0200 Subject: [PATCH 21/41] Protect persistent data during upgrades --- README.md | 2 +- manifest.toml | 2 +- scripts/_common.sh | 39 +++++++++++++++++++++++++++++++++++++++ scripts/restore | 8 ++++++++ scripts/upgrade | 17 +++++++++++++++-- 5 files changed, 64 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 980f5c7..0f9f516 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Lightweight animal shelter management [![🌐 Official app website](https://img.shields.io/badge/Official_app_website-darkgreen?style=for-the-badge)](https://globinours.fr) [![App Demo](https://img.shields.io/badge/App_Demo-blue?style=for-the-badge)](https://demo.globinours.fr) -[![Version: 1.0.0-rc.3~ynh14](https://img.shields.io/badge/Version-1.0.0--rc.3~ynh14-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/globinours/) +[![Version: 1.0.0-rc.3~ynh15](https://img.shields.io/badge/Version-1.0.0--rc.3~ynh15-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/globinours/)
diff --git a/manifest.toml b/manifest.toml index d979607..25c80a8 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh14" +version = "1.0.0-rc.3~ynh15" maintainers = ["OverSu"] [upstream] diff --git a/scripts/_common.sh b/scripts/_common.sh index b485aca..676a018 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -15,8 +15,47 @@ install_yunohost_logo() { yunohost user permission update "$app.main" --logo "$logo" } +migrate_legacy_data() { + local legacy_data="$install_dir/data" + local legacy_storage="$install_dir/storage" + local legacy_media="$install_dir/public/media" + + if [[ -d "$legacy_data" && ! -L "$legacy_data" ]]; then + ynh_print_info "Migrating the legacy data directory to $data_dir..." + cp -a "$legacy_data/." "$data_dir/" + + if [[ -f "$legacy_data/refuge.sqlite" ]]; then + local migrated_database="$data_dir/refuge.sqlite.migrating" + sqlite3 "$legacy_data/refuge.sqlite" ".backup '$migrated_database'" + + local integrity_check + integrity_check="$(sqlite3 "$migrated_database" "PRAGMA integrity_check;")" + if [[ "$integrity_check" != "ok" ]]; then + rm -f "$migrated_database" + ynh_die --message="The migrated Globinours database failed its integrity check. The legacy data was left untouched." + fi + + mv -f "$migrated_database" "$data_dir/refuge.sqlite" + rm -f "$data_dir/refuge.sqlite-wal" "$data_dir/refuge.sqlite-shm" + fi + fi + + if [[ -d "$legacy_storage" && ! -L "$legacy_storage" ]]; then + ynh_print_info "Migrating the legacy storage directory to $data_dir/storage..." + cp -a "$legacy_storage/." "$data_dir/storage/" + fi + + if [[ -d "$legacy_media" && ! -L "$legacy_media" ]]; then + ynh_print_info "Migrating the legacy public media directory to $data_dir/media..." + cp -a "$legacy_media/." "$data_dir/media/" + fi +} + prepare_persistent_paths() { for path_to_replace in "$install_dir/data" "$install_dir/storage" "$install_dir/public/media"; do + if [[ -d "$path_to_replace" && ! -L "$path_to_replace" ]]; then + ynh_die --message="Refusing to replace the physical data directory $path_to_replace before it is migrated." + fi if [[ -e "$path_to_replace" || -L "$path_to_replace" ]]; then ynh_safe_rm "$path_to_replace" fi diff --git a/scripts/restore b/scripts/restore index 3298419..cbf410f 100755 --- a/scripts/restore +++ b/scripts/restore @@ -25,6 +25,14 @@ ynh_script_progression "Restoring system configurations related to $app..." ynh_restore "/etc/nginx/conf.d/$domain.d/$app.conf" ynh_restore "/etc/php/$php_version/fpm/pool.d/$app.conf" +migrate_legacy_data + +for migrated_path in "$install_dir/data" "$install_dir/storage" "$install_dir/public/media"; do + if [[ -d "$migrated_path" && ! -L "$migrated_path" ]]; then + ynh_safe_rm "$migrated_path" + fi +done + prepare_persistent_paths install_yunohost_logo ynh_exec_as_app php "$install_dir/scripts/migrate.php" diff --git a/scripts/upgrade b/scripts/upgrade index 582e61d..d0a1d61 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -11,13 +11,19 @@ source /usr/share/yunohost/helpers # CREATE AN APPLICATION BACKUP #================================================= -if [[ -f "$install_dir/scripts/backup.php" && -f "$data_dir/refuge.sqlite" ]] && \ +if [[ -f "$install_dir/scripts/backup.php" && -f "$install_dir/data/refuge.sqlite" ]] && \ php -l "$install_dir/app/Services/BackupService.php" >/dev/null 2>&1; then ynh_exec_as_app php "$install_dir/scripts/backup.php" pre-upgrade-yunohost -elif [[ -f "$data_dir/refuge.sqlite" ]]; then +elif [[ -f "$install_dir/data/refuge.sqlite" ]]; then ynh_print_warn --message="La sauvegarde applicative préalable est ignorée car l'ancienne version n'est pas compatible avec PHP $php_version. La sauvegarde de sécurité YunoHost reste active." fi +#================================================= +# MIGRATE LEGACY DATA +#================================================= + +migrate_legacy_data + #================================================= # ENABLE MAINTENANCE MODE #================================================= @@ -33,6 +39,13 @@ ynh_script_progression "Upgrading source files..." ynh_setup_source --dest_dir="$install_dir" --full_replace --keep="data storage public/media" +# Physical legacy directories were kept until their migration was complete. +for migrated_path in "$install_dir/data" "$install_dir/storage" "$install_dir/public/media"; do + if [[ -d "$migrated_path" && ! -L "$migrated_path" ]]; then + ynh_safe_rm "$migrated_path" + fi +done + #================================================= # UPDATE APPLICATION AND SYSTEM CONFIGURATION #================================================= From 9632e44eae6b57369c13d363ae781bbb0258fd8b Mon Sep 17 00:00:00 2001 From: eric_G <46165813+ericgaspar@users.noreply.github.com> Date: Sat, 5 Sep 2026 18:59:46 +0200 Subject: [PATCH 22/41] Update DESCRIPTION_fr.md --- doc/DESCRIPTION_fr.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/DESCRIPTION_fr.md b/doc/DESCRIPTION_fr.md index 13f4b64..4026f4b 100644 --- a/doc/DESCRIPTION_fr.md +++ b/doc/DESCRIPTION_fr.md @@ -1 +1,3 @@ -Ceci est une fausse description des fonctionalités de l'app +Globinours est une application web de gestion de refuge animalier, développée à partir de besoins concrets observés sur le terrain. + +Elle centralise les animaux, leur santé, leurs documents, leurs liens familiaux, les familles d’accueil, les contacts et les actions quotidiennes. Son objectif est simple : permettre aux bénévoles et responsables de trouver ou saisir une information en quelques secondes, sans traverser une succession d’écrans complexes. \ No newline at end of file From a2e827a11f45e029a7340481f36323ecc8e4f905 Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Mon, 7 Sep 2026 14:21:12 +0200 Subject: [PATCH 23/41] =?UTF-8?q?Mettre=20=C3=A0=20jour=20Globinours=20ver?= =?UTF-8?q?s=20la=20rc.4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 25c80a8..1e27516 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.3~ynh15" +version = "1.0.0-rc.4~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/72438556cd7d4771d7484046d5865ff42cebae65.tar.gz" - sha256 = "20e172c6a9f43dc773012298aa09db97644c53398020f3612b2ec5093b92460c" + url = "https://nnsprod.com/git/oversu/Globinours/archive/6e3beea2115e9c232a4c74ed54bdc987f3eb0ba3.tar.gz" + sha256 = "22156ff9cf300d77f88e5fbfa1d53408b2cd4a3cfdecc4d218c2f1cc0d802e00" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From a5d09300289519ea057d162084a4b198931b7ee8 Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Mon, 7 Sep 2026 15:07:20 +0200 Subject: [PATCH 24/41] =?UTF-8?q?Prot=C3=A9ger=20les=20donn=C3=A9es=20pers?= =?UTF-8?q?istantes=20=C3=A0=20la=20mise=20=C3=A0=20jour?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 +++ manifest.toml | 2 +- scripts/_common.sh | 49 ++++++++++++++++++++++++++++++++++++++++++++++ scripts/restore | 1 + scripts/upgrade | 15 ++++++++++++-- 5 files changed, 67 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 1330247..4fd7dac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ *.log .DS_Store +.manifest.v2.schema.json +.spdx_licenses +.tests.v1.schema.json diff --git a/manifest.toml b/manifest.toml index 1e27516..b16e505 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.4~ynh1" +version = "1.0.0-rc.4~ynh2" maintainers = ["OverSu"] [upstream] diff --git a/scripts/_common.sh b/scripts/_common.sh index 676a018..ae0a063 100755 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -65,6 +65,12 @@ prepare_persistent_paths() { ln -s "$data_dir/storage" "$install_dir/storage" ln -s "$data_dir/media" "$install_dir/public/media" + repair_and_verify_permissions +} + +repair_and_verify_permissions() { + ynh_print_info "Checking Globinours persistent-data permissions..." + chown -R "$app:www-data" "$install_dir" chown -R "$app:$app" "$data_dir" chmod -R u=rwX,g=rX,o= "$install_dir" @@ -74,4 +80,47 @@ prepare_persistent_paths() { chmod 0710 "$data_dir" chown -R "$app:www-data" "$data_dir/media" chmod -R u=rwX,g=rX,o= "$data_dir/media" + + if ! ynh_exec_as_app test -r "$data_dir" || ! ynh_exec_as_app test -w "$data_dir"; then + ynh_die --message="The Globinours system user cannot read and write its persistent data directory." + fi + if ! runuser -u www-data -- test -x "$data_dir" || ! runuser -u www-data -- test -r "$data_dir/media"; then + ynh_die --message="Nginx cannot access the Globinours public media directory." + fi + if [[ -f "$data_dir/refuge.sqlite" ]]; then + local integrity_check + integrity_check="$(ynh_exec_as_app sqlite3 "$data_dir/refuge.sqlite" "PRAGMA quick_check;")" + if [[ "$integrity_check" != "ok" ]]; then + ynh_die --message="The Globinours database failed its integrity check." + fi + fi +} + +inventory_persistent_data() { + local inventory_file="$1" + + : > "$inventory_file" + if [[ -f "$data_dir/refuge.sqlite" ]]; then + printf '%s\n' "refuge.sqlite" >> "$inventory_file" + fi + for persistent_subdir in association grants medical-documents private-media media; do + if [[ -d "$data_dir/$persistent_subdir" ]]; then + find "$data_dir/$persistent_subdir" -type f -printf '%P\n' | + sed "s#^#$persistent_subdir/#" >> "$inventory_file" + fi + done + sort -u -o "$inventory_file" "$inventory_file" +} + +verify_persistent_inventory() { + local inventory_file="$1" + local missing_file + + while IFS= read -r persistent_file; do + [[ -z "$persistent_file" ]] && continue + if [[ ! -f "$data_dir/$persistent_file" ]]; then + missing_file="$persistent_file" + ynh_die --message="Persistent data disappeared during the operation: $missing_file" + fi + done < "$inventory_file" } diff --git a/scripts/restore b/scripts/restore index cbf410f..045e798 100755 --- a/scripts/restore +++ b/scripts/restore @@ -36,6 +36,7 @@ done prepare_persistent_paths install_yunohost_logo ynh_exec_as_app php "$install_dir/scripts/migrate.php" +repair_and_verify_permissions ynh_systemctl --service="php$php_version-fpm" --action=reload ynh_systemctl --service=nginx --action=reload diff --git a/scripts/upgrade b/scripts/upgrade index d0a1d61..94c3fe1 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -24,12 +24,17 @@ fi migrate_legacy_data +data_inventory="$(mktemp)" +data_guard="$data_dir/.globinours-upgrade-guard" +inventory_persistent_data "$data_inventory" +touch "$data_guard" + #================================================= # ENABLE MAINTENANCE MODE #================================================= touch "$data_dir/storage/maintenance.flag" -trap 'rm -f "$data_dir/storage/maintenance.flag"' EXIT +trap 'rm -f "$data_dir/storage/maintenance.flag" "$data_guard" "$data_inventory"' EXIT #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE @@ -56,7 +61,13 @@ ynh_config_add_phpfpm ynh_config_add_nginx ynh_exec_as_app php "$install_dir/scripts/migrate.php" -rm -f "$data_dir/storage/maintenance.flag" +if [[ ! -f "$data_guard" ]]; then + ynh_die --message="The persistent data directory was replaced during the upgrade." +fi +verify_persistent_inventory "$data_inventory" +repair_and_verify_permissions + +rm -f "$data_dir/storage/maintenance.flag" "$data_guard" "$data_inventory" trap - EXIT ynh_systemctl --service="php$php_version-fpm" --action=reload From 79edfabcfbb09cef9c88d12d4490740448e118a1 Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Mon, 7 Sep 2026 15:54:43 +0200 Subject: [PATCH 25/41] chore: publier Globinours rc.5 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index b16e505..7b0aefc 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.4~ynh2" +version = "1.0.0-rc.5~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/6e3beea2115e9c232a4c74ed54bdc987f3eb0ba3.tar.gz" - sha256 = "22156ff9cf300d77f88e5fbfa1d53408b2cd4a3cfdecc4d218c2f1cc0d802e00" + url = "https://nnsprod.com/git/oversu/Globinours/archive/1df26401a3e9a45359437fa91a8e86f5d0e9df05.tar.gz" + sha256 = "8c91f00bd0ca1d68cb99295908cfb4bf858dccabfa398e44ad6c6f9acf768d1c" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From ca1935871e3f85c6dfe0aa005263c5f3af1ca896 Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Mon, 7 Sep 2026 19:37:29 +0200 Subject: [PATCH 26/41] =?UTF-8?q?fix:=20servir=20les=20m=C3=A9dias=20persi?= =?UTF-8?q?stants?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- conf/nginx.conf | 4 ++++ manifest.toml | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index f60f512..7da685b 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -5,6 +5,10 @@ location = __PATH__/index.php { fastcgi_pass unix:/var/run/php/php__PHP_VERSION__-fpm-__APP__.sock; } +location ^~ __PATH__/media/ { + alias __DATA_DIR__/media/; +} + location __PATH__/ { alias __INSTALL_DIR__/public/; index index.php; diff --git a/manifest.toml b/manifest.toml index 7b0aefc..b5aa8bc 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.5~ynh1" +version = "1.0.0-rc.6~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/1df26401a3e9a45359437fa91a8e86f5d0e9df05.tar.gz" - sha256 = "8c91f00bd0ca1d68cb99295908cfb4bf858dccabfa398e44ad6c6f9acf768d1c" + url = "https://nnsprod.com/git/oversu/Globinours/archive/3f82acbbd8106ef75599b869e21ce0eb748e44a1.tar.gz" + sha256 = "cd1d9e82923b9f0e3f9b9eda5266ba9298a95226081f06002457982f0f343ede" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From 70faedab50a0f71c26d6741163d61abe372bfe0f Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Mon, 7 Sep 2026 23:32:44 +0200 Subject: [PATCH 27/41] chore: publier Globinours rc.7 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index b5aa8bc..1bddb7f 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.6~ynh1" +version = "1.0.0-rc.7~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/3f82acbbd8106ef75599b869e21ce0eb748e44a1.tar.gz" - sha256 = "cd1d9e82923b9f0e3f9b9eda5266ba9298a95226081f06002457982f0f343ede" + url = "https://nnsprod.com/git/oversu/Globinours/archive/04cbe54dd1992935779cf1caddd879c24f6a2885.tar.gz" + sha256 = "48a3bb379305b400282795d42bc136f0ffe8d5d2b593f0f6a63e428fd78377a0" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From cf1b862512259e4ee766a206c55572013413f859 Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Mon, 7 Sep 2026 23:57:02 +0200 Subject: [PATCH 28/41] chore: publier Globinours rc.8 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 1bddb7f..eedf92f 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.7~ynh1" +version = "1.0.0-rc.8~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/04cbe54dd1992935779cf1caddd879c24f6a2885.tar.gz" - sha256 = "48a3bb379305b400282795d42bc136f0ffe8d5d2b593f0f6a63e428fd78377a0" + url = "https://nnsprod.com/git/oversu/Globinours/archive/220c0ece82fde874ed5647262c79ac308ee3a51b.tar.gz" + sha256 = "3f0dccc37da237a6d1539a1125497cc953b3937f2c40effb10a060603c903267" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From 219adf2a1b27bf6880fb7c266f1d2d7fa9e07c7c Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Tue, 8 Sep 2026 00:09:18 +0200 Subject: [PATCH 29/41] Pointe le paquet vers Globinours rc.9 Refs #7 #8 #11 #14 #15 #19 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index eedf92f..30b5b7c 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.8~ynh1" +version = "1.0.0-rc.9~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/220c0ece82fde874ed5647262c79ac308ee3a51b.tar.gz" - sha256 = "3f0dccc37da237a6d1539a1125497cc953b3937f2c40effb10a060603c903267" + url = "https://nnsprod.com/git/oversu/Globinours/archive/6bda723f227c820d906d36c4fffd4328756a6e2c.tar.gz" + sha256 = "b9bfc79c1c97ad9211fd0be809eb141a470ece08d24055779a6655bc57505adf" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From c8e19cde844adc5e1a94ed3fd61f41313843b7bc Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Tue, 8 Sep 2026 00:23:47 +0200 Subject: [PATCH 30/41] Pointe le paquet vers Globinours rc.10 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 30b5b7c..1fcbca3 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.9~ynh1" +version = "1.0.0-rc.10~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/6bda723f227c820d906d36c4fffd4328756a6e2c.tar.gz" - sha256 = "b9bfc79c1c97ad9211fd0be809eb141a470ece08d24055779a6655bc57505adf" + url = "https://nnsprod.com/git/oversu/Globinours/archive/a21f3f2bb461d8affe6e42e18e4e10a1d682dd71.tar.gz" + sha256 = "4dd84f15732ac396501167a500632c00ebe88e2274712c8d784fa8182a54afcf" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From 114899106f3b4cc80ab6437af7168e3e6e4b02b2 Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Tue, 8 Sep 2026 00:34:11 +0200 Subject: [PATCH 31/41] Pointe le paquet vers Globinours rc.11 Refs #10 #21 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 1fcbca3..cb1a6d4 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.10~ynh1" +version = "1.0.0-rc.11~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/a21f3f2bb461d8affe6e42e18e4e10a1d682dd71.tar.gz" - sha256 = "4dd84f15732ac396501167a500632c00ebe88e2274712c8d784fa8182a54afcf" + url = "https://nnsprod.com/git/oversu/Globinours/archive/e7176b6371be62765eade4f8b33143c48a24972f.tar.gz" + sha256 = "1fd435541cdf05898d2ab49d02455c043cd39c4d1e7b29fdfc0a80b04436f2ef" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From d432829146a7ee964413b1a63e5db997e42d2cb1 Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Tue, 8 Sep 2026 00:45:28 +0200 Subject: [PATCH 32/41] Pointe le paquet vers Globinours rc.12 Refs #14 #18 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index cb1a6d4..2be0d1b 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.11~ynh1" +version = "1.0.0-rc.12~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/e7176b6371be62765eade4f8b33143c48a24972f.tar.gz" - sha256 = "1fd435541cdf05898d2ab49d02455c043cd39c4d1e7b29fdfc0a80b04436f2ef" + url = "https://nnsprod.com/git/oversu/Globinours/archive/1378aefa9ce51ac938003bff659653e0da4eb10a.tar.gz" + sha256 = "e440608608a8c8d66c06e9307a36f401d18d112b220f29a2f0a1a2bf555e6d3e" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From 59e6b30dbff3c0cd5daf5038d489d987ff2e6452 Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Tue, 8 Sep 2026 00:59:00 +0200 Subject: [PATCH 33/41] Pointe le paquet vers Globinours rc.13 Refs #24 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 2be0d1b..aa5bd27 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.12~ynh1" +version = "1.0.0-rc.13~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/1378aefa9ce51ac938003bff659653e0da4eb10a.tar.gz" - sha256 = "e440608608a8c8d66c06e9307a36f401d18d112b220f29a2f0a1a2bf555e6d3e" + url = "https://nnsprod.com/git/oversu/Globinours/archive/b906cf7b882bbe96f7f947b4581e81bddae00858.tar.gz" + sha256 = "62c4cac48db2eb4ceede8d88d5107b5121d0876a58559466437866c959b5a79b" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From 14af62ac3b2196b1d7de8d8e922250917ae6e784 Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Tue, 8 Sep 2026 01:01:52 +0200 Subject: [PATCH 34/41] Pointe le paquet vers Globinours rc.14 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index aa5bd27..f6566ae 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.13~ynh1" +version = "1.0.0-rc.14~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/b906cf7b882bbe96f7f947b4581e81bddae00858.tar.gz" - sha256 = "62c4cac48db2eb4ceede8d88d5107b5121d0876a58559466437866c959b5a79b" + url = "https://nnsprod.com/git/oversu/Globinours/archive/ccaeb2b535aab28d9165898f8983e764a670734f.tar.gz" + sha256 = "95d5346f5f02c4c153dad230170b79fee6006c66a3a4f39fae8c955ca11b8414" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From 691ce1dfefe067546af745052c7a00dfaa7736aa Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Tue, 8 Sep 2026 01:05:08 +0200 Subject: [PATCH 35/41] Pointe le paquet vers Globinours rc.15 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index f6566ae..6dbff2c 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.14~ynh1" +version = "1.0.0-rc.15~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/ccaeb2b535aab28d9165898f8983e764a670734f.tar.gz" - sha256 = "95d5346f5f02c4c153dad230170b79fee6006c66a3a4f39fae8c955ca11b8414" + url = "https://nnsprod.com/git/oversu/Globinours/archive/f41504c85274d0956b425ad9983784f2639d9feb.tar.gz" + sha256 = "e4f62a6665ede7e1d847809c9368e4a6ccf1418e7da3ecd6f400b396ae9daaf8" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From f4ae488d5e3ccf1b35ce8fa2a92b2caae2e8abcc Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Tue, 8 Sep 2026 22:29:42 +0200 Subject: [PATCH 36/41] Pointe le paquet vers Globinours rc.17 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 6dbff2c..5ee889b 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.15~ynh1" +version = "1.0.0-rc.17~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/f41504c85274d0956b425ad9983784f2639d9feb.tar.gz" - sha256 = "e4f62a6665ede7e1d847809c9368e4a6ccf1418e7da3ecd6f400b396ae9daaf8" + url = "https://nnsprod.com/git/oversu/Globinours/archive/5909f55abaedfaaf086f385aecad250e120ac5cb.tar.gz" + sha256 = "bd6f58b5d5e75e1b39c826814d7440a72fc2183759deab31219e8677a87a609c" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From 17b58444b3b75f29853889eddc594addcebd2711 Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Tue, 8 Sep 2026 22:31:06 +0200 Subject: [PATCH 37/41] =?UTF-8?q?Int=C3=A8gre=20le=20menu=20mobile=20de=20?= =?UTF-8?q?Globinours=20rc.17?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 5ee889b..739539c 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.17~ynh1" +version = "1.0.0-rc.17~ynh2" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/5909f55abaedfaaf086f385aecad250e120ac5cb.tar.gz" - sha256 = "bd6f58b5d5e75e1b39c826814d7440a72fc2183759deab31219e8677a87a609c" + url = "https://nnsprod.com/git/oversu/Globinours/archive/e786756f2214ab89c0dc2667fdd484cfa5f2a176.tar.gz" + sha256 = "d685aa88adef339fddc56a29649bd6aec475baceca23f1f81e8c0ae2c6489c4a" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From 39b5ccaacf53e4c2d2363eeea792abe15b58969b Mon Sep 17 00:00:00 2001 From: Alex Noel Date: Tue, 8 Sep 2026 22:55:45 +0200 Subject: [PATCH 38/41] Ajoute une capture de Globinours --- doc/screenshots/example.jpg | Bin 0 -> 138532 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/screenshots/example.jpg diff --git a/doc/screenshots/example.jpg b/doc/screenshots/example.jpg new file mode 100644 index 0000000000000000000000000000000000000000..104a3e5f7f9bc84fe748e377df01390449cb60a0 GIT binary patch literal 138532 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

r?h=pw%Hrqoq(V>alyCVp3 z;|IH4{?+ufjjk3KrYlYcLmDQOi}&aCutz z3blDTC{nLgG2evn>0E1cbzm!=`pc`HFGS}cH6F#mo)t-a;(lT;Ai0TTx)UzDJ~7B> zRNF{%TL4%fA59=14&pe<*Nprm#E-?aDA1Zzk&C5p=y6>Y%DiIU|ACriQ<@GJ9)*&E zTtET=9RtE+m?%r*5u@(Qv&Vw<)jOkl#CA@Wk(n&l=i7KZ>%*KoKTkAj+QtWHt~pHa zQY#v^uD$9Xmqv|ohU=kUC4@i>5ajcyI>Ocz>OAG%^aZ32mzzgjfVPkYUWAXJ^saCY zMpm!4)^=zI7C$l6Tn2Ytu%iaTXAv4?vPg8k`|N*&T&L-X7vkN|^G0#+jOMZ9Uo;gg zjz#7(CgnY}alas?=#j%mZqso%-#+cC+^;EHaVf1KSbqIIZXJl;uw1GTkDRvVpf!2N z!ZP&e9me$SvJF`vhc?u2)}-5mD&fqKfQ?x~(LGiD5~mi8tmVk5<~)x4jV-)D^QEX8Qt#I7&L z@OWs!W~Yv&C6Nx4&sExPAB`1SD_pp3VBL@g?>b%@G39@17SJ5(RX#6x)TN*AL6Nm@ zSvNI3>)-NW83Xm;B$(N9Dz|?tlb43n|Go@vu1yz8RSUpTBN%Xbo0jdlL&X{U$pVk2 z#AXB^h%M}Dp}-#?D98)`Zomub9{Q%%IPvy!Yu^3pi#EB{;=wms1WmNAFyy9jV=E;OFikhov?O(c7QaHU#nqM(Gn3UtY ze5ZkCInnPWcHs8hj5l+J#jgEqh~Sv0_#i8x#Z(MSJ5)W9cq9=4;$ypFYa96mlDyD| zkiJ?Y+9%2xKdEP+oh-%_YL-I(KFaY$K7nfnPKjnb7>`~5$=75%hb6VLMi@y^t-)$; znpccF{Sw5U%Os(u$hek9fi5}YelOb8K*DomDtTT_s&sQHEQ}&3X|VmJ$SnV(!4HmD z)5A%xJ>jcKccPrH7S0+}6WKbjlXw&6n=+6}ss*^Hsmp(M;`qd6Q9t={mNp>t-9ETX zr*+BfJuV#462<+6uwN{^XRT|&?Q%8MyPs8EcjC*7`ZJQ0VD)tQL>2QHY*8jiO!=yF zdpKs_lLq&}gW59Vz~>{_g?_}oN9+2eoR$(a@jX?o+Dv(w8!!1ZRiD%jb(l8r$UiR12^$@D@^j$ z7$+C8slkM@d*=P&&Gq{@Qk$A(J!<<52tuA>` zq-);I5frvSrV4xO>3M3wGz8)MRUHH_Fo6-IyU>ojHt#~3vx8MX?doTX$SoIrTYiBCnY!U-i|$Kr_G~k%H#l-(M{Qpn%9Foad~lex z+#am8d&e1DWm{xa!yfxpqO&10-$$TWb=a&*5oW5!wy4hLY&%2*S41dW(7AQp#q{O# zD)`r_7Lg;vI?NZ*5sB*=#WkGW|~Rj?49s=c=Kky2o*k*R24j3XCP+ zBe@^DK%_TIgU3gZxE2*7r^nrDt8Yizer|~}+&ZQ{e7c{8d0fk?cd~B!FoNi{?0<8} zK861a*HKdF`45ie;)jp7q93ETZgyw@;nJ`cM_T&xkGy`g9F=`&IKdk1Tf~kZ1c%egoQtG+17C5q3xKJm1 z$R!|JL(vroUDsbAiYMfYl0ATb^qds2#ww#^TXaILoT~a=y?x6Q-^mPxC}YQKmHl@K zzZM9PB3Fq~}Xj3Hib56BsHf`>91rP`%BkW`3 zl2z1|$2XV01vS|SmbyDDd7v7&=zLK<7jJKl)MrJw1+%SkxAi!z$~Hyig=Qh)s(Hy} z@BR;OZy6O=(`}75l3+m^4I13tHNl}9Z`^~^K;uqGaEBm`yVF>3CxqZma8Ga#K|-*Q z+j*by-SeI?&N)BsIN$xlVASsN+EuI8UUN>Q0;@9n*GF@o2RY!F+gxsN&*2keqyirD zt{Y{^r9ELS=jkKN^!w`d*|E>7Pih0n9KPwlzJ&JFto;F?h>$98+JX0ghf6&Tog+-~fCnk2w^Y&w!=yzLayYG+&)WMEa<)lQmpxj~ehPbI4bF;w z_V$v^nXAs}AVA@<^$_dsC0#FER9pKsv(k>REn7)-wJeHd@7q^-t)BpglT#b(smZB$# z(8*GbCxy?8=L|z5?!K22At2Fn6}cdZ&6C$&B<(z#{;j_?G#($lIg^Z&AIYlT%^@{1 z&h{-w2#00;qzu8*#yO9RvqWAwa4lRT3e=P~4{CAf5=BrJeztGvgNEJ$(&u7?opW#n}P(R7m z{xeXYXbK{h|9z}z|L=oU$SUTRmQ}*SQe=yWR0)YDY2*+-dEd zH~(Mfi{RaI=_Ao2iBi7)y{#nL?t8U{O`q^U3oz;@l-IPVj!RnqqLUa(r&Nh&!$#V% zjRAc|EH}%RK5TIrAWOxnfU|2`o~Gh#T!?Y5G+)QR3btx<_1YgW7fBfg>R7j z3}?jwJP8Urf{%z#P}rtw+DmZpFT?uH7BLFqW%kh>@akJ=ipuo_0+{prN1Lb)M{&Hf zsC!9>A;RH|OKC}i#F^2a_N%F2*{>N4+2X4iFm@@wC)fX2p=Hx-qM@F0JM?Nvy_I8ypprDVtB~tvSC@@ z-;#ZnkNqg~?zqm4tL%RNb5ElA-HF{Vuvp`M{N0MVM!>IzuYL%pb|x32yI5=fY~;m= zXeMR$s+|pyDMT{*@gB=)cMj$r4)jd1=vWPt{>d+ekbgj;^E{6IFN zH3v`471_K^8>TP+uj|$i##in#2T4Nj{>Pt*{;S6cg1;$$Jd9ZbwYQAbeockHqwV>* zB$_rGc)4jl%=6ou3e#U<>rRQ{ZT!t!n+8n8`G55B-&%)YA==pV+vO-A3pI-vZ|T(roLy!^K! zLZe|KUtf|ug!}<4T6~HuG2>1Nny{cVh1vsWfLnh{Zc3^LRzaO@m`uAdw zNU6PZH8ZQ`9aIqWWtwSgnc5aj!Yd%UmPDQ;GR8B;6nFKsE@Cz_!&z^K(TDl=QshB* zv?4|^FVX4lv$Hfs3XSCzPlzUI!Ys$dkBACPCUECPYnzGH=oo(`W9TR)=>gS2LS?N- zUm5RGc4u?4Vxh;S9ZVCo;Vu8&Xp?-Co8cjw(fDUl3d^3q=HwlN*=ZRyFtYF`T)?{W zG9drm*!KUhI3$Zbq=Nb*7e~ro5=f}mNU)s&g8PHsCrINNu!lLob__9d9a;b1EC{BV z*p15bKt}dtW9|QO76*L)wZKyT@60w`*G^ojqJFFnZuvd{*TS?ccuGhp#JyYBKA(nMa+o`2NI(yR+>Zy0d(M; zJadQQbh$DA?9JyC9`0_^UGBsdX2AY%D>F4%!%WV;eg={3=^)t5o;U4aWLmds-+h7s z5>J@~A=zbTMzGbf^%u0S(O5NZ) zLgnTH=nDrt5L&oRvhgFN@s;24;>NMfV()!mva|@6aJR!?=c^q-}P*iX*Nq z#j^$@BSd0t@LLiPRmmPVE`H01D4OEQxYinE>MF(-k{mEXeXuLS`6Fx%p7T(jmJhdt zCd+VrTrvVtHi^q)5U;%WNF{Vja#qtjARKuXiThR|;MjFF!#@qFrulCvZfb@1n|x(_5UPDEn&U#|c08q8_GOeWiwvn^!g|f|bil ze$r65uI@1G0lpaQNzsEn#_3vlmY+~EdW(9$ZIXrfM4@JL)cRP z6NC-=4}|Sy)1Va+&rFY%W%pl4CnEviNY-ccAa1pw{dl@K33hL*uzI2^o$Jv?KJJFq z(XysgI&8{88wBlY<&URlA!7aBb|*XUH#S($Ro^b~O9-@hB4rN;XxQGbe99ImMluWk zUd|S8J#!(tDSPGkoH}z=Ot^)*fAId}+|a2dcX;NPIwf(u@tWNHKY;kHcf>=dRt$|S zc44b0|Kz|awDr^hPHs0++EuPc@`=P)UDuy@zdm{R19mM!87^3#%%X2C_7ANP>P(j-BeD z>*7FT;O8MmT^2K0=4`ISRa%8Aj8fH;B zykGPi2VV>O{Q=x1i6u6QoB#{|0KA-^?!KFQ9-7i~>V$;m;Eh%jfR*g|Fj!3jYw}m* z_(^TALs)(B9ov-bd5{qwez$%L5jJ2o2KLh#PUTm?*c}iGx}RIW;7qQY46Aax)*8Al zOG~f{JkjKme`;ck&QK*T>0&8&`bi6B5rc!L9bq1xx(!%j8ry@Vrsg0=B z@;U?pe64XmZIqNrNsqZ$x$+b1S!7O9j*6Yh5L?~hbYFB}rDoZ#{CF|`$1iQ;Ax~<) zHmPNjfAJ3yTA*LWCBxlpaZC}+ikoZPXaa|^$@OGPUDPn9t!Qu&WiW`RJ7rSVadE4k|%?70T{o%i zf6jJ^VISrs{|sletd@SV2r;l)eYFm`gEcsq(@P%w@ZOD7`kkVE3*1+@Xp}ry;Z;O# zm@jW!Zi)~WBKu0=u*+xVfizXf|K&KylbXN9Y!D3zKC|N9LI_~v3po>-eo2M)=!+gB zHvvuprASj~1nK1@Q_D0qyqOY!A?e_sZmsw!lE{S_XwciN!{%C-6GTY{<1InVJN3AW0sMZBHIWtEW4KuVGO{epDQ>5EnnTzjji+(ZT9y`24rX_d$06KJP zojR;1+VLfh*&9EpWKnsSBE2rsuA5*_X9ET$DP*HFv~UXb<2wizPwBf2kS|^{uvAPW z;vD?h=Z6~a+w?HfP9l$zf&}m%Kna7j+12@nt&6X%NTf?{Qozh$PweR92J?7qt|Pj; z#&0@f`d_8-@5oYrcfGg@cZ%Ie6M8Vyzy8rkCcc8X=Rjt=H+hbeY3=IF4|cKKZn)TF z_$asc#V+Hdq_?4(Z8=9G%BcC4Lyk?{XDvLszN;WX<=sQUJ%h#1hAyUf>_qo$mC>{F zANjxOR%wy-^!%-db6~P9M5tv%__%SR2~x&fXQMWtI=UJ+yO-3f$`{yQ?uN0-nAByq zC9EoqNk@)A__2vFm*uL!gt<#uzsDHgYZnQgtGIi(FghDa10Ko%-7>_$W(S#dwcK0n zU8IU(u7eB`Z(06Q=k_(u2~h42KpdVOc$)L~;k#V0#<|nkXg()OU_f~5ciTBW&`kgItQ9Oo&`UimSc-fpKifj_gN0&7G zzqvT`Zu1NbLto2KAb0DNFGvIv%UhQ;fk$toWr8eR6=|rMZ%imcr@B@y@M< zEp9Nnq87*1%0qNkxl|6C4Q(tNOSOECG$uVhnbk9iVAq^U#sMK=#MPmNS4U?uXbm1* z3HJ+{8w@kIy&jVvU9}93F_%>ft*}T;^$IGNxs{hoHcl?u7*gq_nz(Omv2)oNj_SHG0@a{sC-@e&`>2Tw##(Pf5KJH^ZE6({30-*?LgUVtN^Ao*t;iHQipq4>zRW zG393cx)o{A(-4dPt)rwX92{wyVSMsq#H5GqBdWvsON&okXsVKckS~E zlAi2{Z>hueOLJ6jTNS;eA_%LoWYwT?t9JP0MHm96F*Q>;i`(`KfDB2PD{xYqw22qw zRg+TGb7p18!MA-oDGR!%9Kb*>cI3giF11V>o5nd!fq*z+dhv)RNV$OpvyCPA=QKa0AQe{v#5P7>fD zVu6p7-SDw0_PR$_tphptp+A5L)By1oqXz!X90M7&)K6opW-hj0OO!~dK{{o()X3N* z!T>RE%aUZ?k6d-?0YCWfVpltr-mlL#;ytV0bTR`NDpsqUoqwV74+MRiDx4!w;wf&d zvKecx8|1Dh>p|fue{6cuS#E2c7)KYEQ`bJ)-#T(~e^;by@DdqN!>yz#LsgeBC6&&# zXe_EkUZ@sZ!4~bZ+Mh;wvbOBZl#vUKpr2DMm zi3Gslgq_=p_7kQAy=RbY~@)TN(;sp;NDcqvpCpefN>`Gb8YZSPx%5Wz`UAGU>h43q5$ z83TvUZ&3_uZqhob(rTQ;O5@8dr_pnZxz#$wLZ5~g*bSSq70n?^vdC>O4EgbV54Rj# z_^U#9p2-J5hik5WA3{oH;3eV&EC4RM1e2*}=05iTM(oDO_QGPbv!T~ZvMP=Ec9*jp z7S$rr$t8vAge@8MXm9r|EPa!XJOzQ1O&`Z|bLMp}m=2z&VnZ7?@%V?^jvC7ix;3wN zBOR}p*=Ibnvd9C)lG8&_Bj1iPTn;!#Yb#EN2yJJZ6}4aqwqH8OsA|&L6SScT;JKEzI4{ z-3#^~Rw;Q1LKX{}b(N<94nFsxwg5SS!Yg4qY_q5bUS#ONZgvcv3Xjl==;1m{dLp8& zQD%Y?ig*Wm!T4cWMVsm?fXHBN#z{`E`z4Nz4tOiZZziHTV9`V^rk$z1lQy1G40-sJ zWXrAyw^+m-;1Mm@SodgL}QF7bg|GrR_Mnon~|#N3&KNp*mf4=wF}=Rgn`@x{7k&-g-)Z zkTbmTL$NG#_3?RXMJ;Gl%AhR-g$;Mr{8y1$fMpS_$;=VuhcXRuG1r@um(1GX7sP%7d0)UjB!c(X80^CIhUlWzY+m}-s2cxn3eDl>K zkQTRyzHRNqY!7m-36XQ1Ck3jX(Nq%PK<-BN>Q)hMrXO4^kdw=F-`-+zW=?vO`EFGX zx#ik=UIE8qPQEWY_-wv0-9lnoVKj*DJjxfjRjo`S$^(LXb5-mPwz{Rl2@RB9;9HcK zjymIpAEjcqmHV2#&+LE3n9&x37b+UZCx_L9sVyy1ZNW1>1Qu8Jc8-75SpFyONeUVA z5I!CcB-j5x?8MA$`Tnba00CEV5)tsJ?)YExf9Z+cm-dkNct#S_vZ)EkHDAmTggdRw z1|h&BxaCs{g37;uD~+QIc@(@ar!*vQ0mf<1DrUX71HaFn7>PgEJ27IkG@SJ+l; z<9Iq%>E!B>Nmdj7J1VJf1y*j~*gA@D9t)Lhb@4k=e`Lng62|(Umz^$r+?<-Ann#{t ztj5Oh6KEqdQ)yn!CUd?{F=*4)TCWzU%J2?*rnPN)&2Pr%YOqCxs{U%oW^$Tk1J0hR zlkLGpShkk-?j=MaMhBBl`a3Ne1wQfXWuK!IZ9#H%9{ygfY$VLE0QY-S(p$w=w!OVs znOyc7$wn@5X!RGNPF1S1m1CUJPRzf%&^f|+{8JwExkuwA-Vea0Il)K*POl!mIM@-!z*a`nq< zrySa=R9J|vWI2vyZ?sP{Mp3`Z*J|BzHm)(t#}&28f*B+3nrP4v>bx_qVHDWM1l23S zW=DaVW6Wv$&`?N-hqoKklL>TYB*4B4M;sz{!@V|4j=s z#oHLb6_q(2wQAaqZlP+}m|4;N?Z$R%)nerz@ca)TI@PpjvPWb2VQst(WB?&b4S-_@ z(GC_SWe~w5Q5*P+NRwCavSPmWAh?D5X@KY_``v0cUs{ z`sH%yIeh~L{^qN;a!>JQUW2ysR_Dw}Pp($V!gFyG4$3S;js?JWVchn_;O6c)iJ~o` z@+Sh!Czb2QrPwOb;;2vJAC+y)y@W&{2wk>TB5N)c4XNfBB}Ix3-q~Jvavdk){3!Vd zv~+#6SF9$oiRRd9@h6z|cl1&S@}D!qib@g3!S;1dw!xaulZ#G{2qVOp=)n8v-)C6( zbP0!=6e$uvsSOMEITr|HU|4!KxutQHYnSY$$qAHj0zb8#qmUiU`si-Aoi{(zEuZNn zL(@!h#cl5e7Q1~MDcuhZA2JyQX)cUn^t46oH{`993q=6XqB50*Ty1tO9YSeg-TLk`nj0{1bfwQ<^(vg}$K6i4 z;O!R^=4hZ-YQMGs$Y|F#E6u)qY1N4_bn#q)Le>HvPSlb)*7wx@jg#lTsaMj&r;L9Xx%0`N{U1Rhjvr?}~5W(2{ zux0K9OMJ1G$XTk1$o&<|Mov4^pY&;jr}3jQFWY>IKU8dGtP`4MDWNjX1gC^F*UTd0 zPZ%BCj8~Y>e=>ZIoU+X1s>U%o1IdM`K^@Lk%^l~(A$RbUeYoP-! zzw$nK9jx<`SJll*0K4VpV}ocb;uqpqxtnSj38m==1;cV;bvl|A!!D9%lh3%YTH3?E z;}2rSbjRDT+-0|EX7>y7AK6ZCD+r^s^tJSeFdDpw8;l(?0IsNRCkV0M5$brlG533} zMfJSSK`L0KyYbKRG;FP*FtI~YHt5)1RP{-3A3Ho5D55#%fd_rU+FCi*Fd-bHjL^-)w@(2?>l9bTzH&AiN6Qh)c zjQ3bsR>zYKV7>+X5Y6iT?T|3eNW@5jRwuKR%zmfExK7y&VfyP=p;&G=Vt~nMMwxzv z&7US?=FpzABELwgWqt%*ekqoc?X+3f+&6W0c~k>L3N)>?O0QC@X|)MK?ZDk?{S=5$ zT-VweOHQn{XH4tQYx@kYvHzJV+%8Oz^tx2Wl=2Kqyz6K*#W#`Dl)RyZXOWWf$!n51 zW}~di@QCmD=qTOq)g$PIT_S88MZ=rtUOWQ}7pPRqKwK7`?T@=&MC{sR%klpdV{v*4 zpU%LP|n%DUF##7TqQsAG8!!x=kx>#J*#j2N@-nvT{`q z8>)wTop|n_4KDS^sSJ~dmYI3BB}aw+-;_Q&dEBZ6%{En7MNFR(M^7g3UL$nOU636<<~Zweo&>kRgcpN z6;;L;)=nyIyYKHO3Ldn6M!ZzMri%4;d>#L8LG2G9oxFoY?Dw|#56z)YVn_r?^dCUjU^%GyjD+*Ow9)y|iX+w~27p=0h%@+o5ub%) z)K4q>L9++UcAsVK?+nkSxKjyMlaC;gAavtHzIFyxr#53Mq_^r>PbpvfRvbgz{Y!R% z_>tFHU}}2Z-HCCoS{p8urjiGlfrt8`WPcXpc#$EK>$ic+L63Ov4$~9l;kwB(2MOXI z1H=)xp@|mOXAy<^k+`|^;jyHI2vvxib@fSACbhB=YEMZrz4r6@eMchqS)wU2y%n7m zwN{)B_6BZOFH(|I6N(IYReL6;$Xb;`%7v3cGlhy|Ss8^N`)CsvJ4Qk1yLr+#GNy<* z=w{~fz{e$5&L^Ho#P(J}sbe!4?rbTH-STd2@TPrHQxyF$A!HPbO;a|pK_v`@7L@6Lo2%h+aSC* zFd`HZ(#J7l9b#JY!sW-N#5Dcpmz8~zz2?lATl}uO3)F_uMluou^N=BhjHFDWgk{93 ziGK3(io|aGoo3|~G~l&wR|lGW^RkAu9t+doH+qjk&z$zE)U`{RIZKEOa{Cdl^OG2M z5~>p9PRR8@RCbI$W8;F^K65)>J3h0QT0>mRr2&jjm;zoYxiB&Bm1G&Xwz7Ydy>t%} z9}<~4C&f%jN;h^FY7#6PB_KT_cEW$z?KYq7P&BU3%eYfg-Glc7%EU_AJ~u?K_S!^u zC5(3$)q(@buFVwy?0KUvpzSb76yo0kZj9rNn~hCPGu35a6V|pD_c_BES*$CSiK|wh zTqk7_5RWQ{)G;$ARy^rc$ikYl)ucc>A7ovE^sv3WEXw2$LV3C^M-B85VzZJX zIo>pFbZbzm(N^SW3y*QU+DlrENQ8^l8qG+H?1h&j=GCdO2{nik&D93!96j%Xi;SbY zbZEMR7BwwDD9T%A(a)-;s8Ljmd9^E{)s%$b1%*x#TshdMSKE=0E1_l?IYnZKMn2Pa zK$R_7DaludS~->n7U6}nNoK7Y?ouf?gpc|c)f`Mfs4a}1jq%JeqmMVttTjZB*83j7 zGCN*Pqzcx^E^|>$h3}LbSF3YDYMHQXe1z-bkHgIjmf#^XMYyM)*&ajLE6;m6EcTZn%N>rl}@M#&r`VEAnIdhFA@hwOEOMfv74Lg~*NB2&0fOS%5m4Hf{|5{KRv z>~;6dAD+U5WwSL?bKXP~7=0@v3}Xp{1h=sK5_H$dLS6%XS^5}p!Mh`KKFn1ZL8NBiaD&b=?^V{NbP=oQO zvdS3QZ~U`PY=y|fxz=E`Gt08i>9~-rAV0sD9A0uIWzm#;r!jj`BKB!cmV&z}G*jef zuhB!jYsvWR;{>nMfEW>`v@g>e@n9yUz?uoN%#FcY9qr7L_IL^{s6!yP2)9>vFzHQE zcZ_SS0ey2Ag+oAmup|anI?pDa{lo}aoZ;IK?rz$D0N*p(J1v(Me^_Qm*XF2ik~U<6 zV!dxYY2f%pFJGN}9$R^S@CT6nGwG_kwU!7Q8HIUA&uxw8;z%F>ozCCuzxu59ku@w! zrhfK^)v4j-6U%~WHqA#T-Acmk)PfCklX4?Q4t4wLISLWI{P5>111W3*Cx%Mu9s~lY zBl`Ya+NbQJ!iO;fGEBIl$}LGsMYccYmuf`#k4N3mpB3%ANO+P>i-Z9s$i;*hme(gm?DEh5FxH0kW>CI`#^Ol!O9x0h<6V)UwE`J2W--u6xSeuy1=6@@ z?mEd-G4Tz{W~OdzN<3`{i}x~`iDQ4K!o;U$iej5gD%!R@GdHC?f+Mbjpf6haNi$l; z4n%|f?paGcg~BZM@c3rx#H3{o7}2h0@@#Z=)ktS7dNk1coM`^p0}l zi|c3IJNWFXY;tO%OKTHbiV-T9Oyht^K*^QxQi;YQDfKQB- zzo86OmXwNumD&TI99q*nQQ}Z3df-uE4iOIyJMiifh_W|GHq_`SLyH%I5tIrRdR5z_ zuwu_HzE+% zX@@mi_b-#xJdXZ}(vgvLW6Bh)as40O{9D=r_{y_ubPn(6c(}x*(R^6UehsRp-OZ9< z+pxDsA9Ou2@^e>@_Re8q>sZlb&~`6KR*SfgTD;ltzye=OcXUin?;>0T(Xi7@jv&)w zPQ_jCO)V@@_V>Cp7Rg?5@XviD?w`3Nav7_+W#muPJReU=wI;HJl-e*D=h>I6U)eV8 zYzI)t>?r}ids^3R>FEubS1K*#RNVZi5NVdv=#S-< zg3MH(8(qf6c@cc`UzAGHr(lG7(aC~yxn8DxS21^U?tE<6`lqDZ;e@wC z29*v;s!6q95^3OBAev65+unqz56pW)OuGhkW3QLnLDniwhFk>(=-G1q2~-uWoXtWU zpIHe&pf1&KS*y(^cmrlW$vVlU$8QSc*ZDta)C`ON6u00JOcy7ohmn zC>#;_RZgvJt>59p#B=aSx`v#Oh~Tq^J!kq(?IzMx;Ug?&L!&3}IrY>BuZni-y1fvx7i(T{bN8m{DEqWsefr}< zR>q?3TGkqvMP<&X(k*QH39dzD>v1L%dV7po(uW zcs<@JW3yApriFzbJkCRGV#=bF?{6_LJW9otHdX~N@Hn!(xQtFK>u5ScN*tew#8?k- z5ed9=b`piiGz<)E#i)K!+zYGTv|e|C?C2dl?FDJ+Mk=>0a5O@i*{vHEc~@2^3h)>Y zsquA7nC*TWi7_A28YEQAw|zGyjFK;DnwdFxGC;@PcC*E##Wki~?(MiNGIO%z*K1v1 zf|o*>Ze`GYeI7u(&rG#-MkifB18S9o#t*vJ2#d^Zy55|xy4)97#xf#J~Rl!+PQ~} z*2XFu2zQ#N-ddpj93sR@{GGNElI#Pdwp%W^O#U6-R==kMX=^N1GYe8g)^>acfdFfW~txT6fn5Pf3YXrA##Aqd=ymUyX0M9%5yQUBE z+WXrk19oHMQf|ixcf&|Zu5i?CKa=i1fUN8{`JB*pte+|>L4OS!;Q}SKEn%pFHv1@& zy`%?ot)Dw;#^}hnUXjzesT>szR%#v;d(rtThF{$WEbffXT2iC9EjQuoV#DMuPGEUR zzNTB6SY4h+jigHiQT8rSc7&v2NbgkJlI}@v?}n4R7Fx(d38imnx!A^TnD-vONjEH| zvWna4l@}M`{4Obhjv%RZf^q4jU6gy?86>0I67v(6d@Um{m(RveAQge&26sKl#$j~^ zK1p)6n%nJZcCMM4FqB)#x3SD4AY4QiZ~yJkVVKkQw(ntp}Hbp8Qw z6~`Iw)E=&hD{MLE3P>=^CC9ooGlsh&b`VnAzU_2m<0erTC43JyH9oNjCd> zEgF2aJ${13T!l@OI%8$jse*mmc zQ`&IMe|r1@sCK!dH|D&L5x;yWu$^stx<2{Wb0J~lO=GZKwJ%VcpYam>lXtVU-(Pu1qovBqJ&K!%~QZoBAj%2ll!f`AD>_< zXI&Z7$5&0~;Y<)GLoN z5%^<5lG}#O!hxmi1)udAQQ<+8$EdS$u2xx5ljKvv@+U)smX;vrn!54&(bH;h_z7JM zAz&xeQUrJtm`V#J}kah9|CVs@aBvfOBqA5rt3XzkWF^5Mde_O z)a6I=k4KDo>>M}@(gfMrS1A;eRav7+$z_O^@4WfABLv%O6-;t$duYYVp{bsuR+(f& zcde@;H=9NihOK+keHMB+=poAc5nhBqBOH*3qONgwwTmLT)|j4;o!>P{iBRlyD)*BR z^HhUB0N?JNgw6z|6MpjgylI*}uNcRC);B{YN;a=yT2FEL247NQ;MowgpzVfJ}Rip&m{7KJ?ejMebU??C5@ z)6|*W7*f$r%JvL`nRLd_JA^tb&cr1L!+Xra@p=hj+T(5~D}3B~{6g9j>8Vb4G;KCI zsRNE>JRxb7i0Kk|Som6k@2MgqQ-Bw5$a*l0F|b6Dh3#TEA5O;(sCaLQmc@Sbix82+ z#-%Y>E5MsxQiUb}#u^Vli>mZOqiKaewFQsb9QOH)NMM5!M+heFOw_`B1r~QgvCSGi zu!;5tZI?3Wfp|c4y}wckT^s5UE{=T8ZGF*kU(eb=U!QOv#)7T#X! zn`?q0Y|81i8|5r`xfrCfNDYJ4up|AHP$WN@<>Yv58E*W*)M>_TaF=A2pdz z^!eMbZRc$TeF5^RLF0oRoln04X;c zHBH=Qh_9;s-aDQUpJ;wP8_T*`j;fAwf)UB2>mlM?PO&ikL&(Lj&M}UybXplPiqTY! zKC6pF^LyVIXSLr&s$bT?b9am@nP5l(cXDaT*|GAiWv2u?)4ts-4`+#JyJuIj9@b7a zrJ{R+?Xup*cLN7dvduEta48@Hhw-v#3uXK3$CV&>@NT^MxrM6FU57sPBhoaXS<2{@P6q+hM6sSVv(z zfig|>{aZx3d0-l4^g_#VJU8crim24nY<^tTMokcGUuO|D4Cm{jdDR=v3I4)Wk({@M zf@#$DBqWARPw!C5>f_ev-i$Bgut?a*IgCwKR?ejGKGq;4)1+IrDYBs%6dz(ti#nNd zox$o%+n;f$x_+O2>DaZNwlh}t8**|_74@J*!BHJ)y`F}@H{tZ}uo^+E;62JpIhf`W zceNsl`4p)UnH#SL(u{EduvsEyj2NNcC|3#_MJohrpVz5EP-QKjTB@Ir#`^!)7-Vz(yhL3(^4bN5lEw)u-4+K~6^5=>b<(fFrEBr)hXXa@MvkU zJ3pMg93;6aXY-*p(9Np0+K7?BVohTy>GMf1TzIiVuO@uV_x!e=FM-?$9;l?wwbAs| zcM#@nV>HN$m=MU$kQJ!9H*GcP8)bKIDc#@@$|_Pa#Yn+rnY*J~5_)*D`0hgv5(?b! zx#L0hda@I{_7A{Z?2$U^aOo%AUh%L6I)OqIX2`!3vm^*q|6j!{4s=T-OmiFz z{W|DJNI61O(sF5?O9diqWjfnWy2rL@pL&cr)tb?qU|y&WZ4$yvxIg3?A*AW zDUys~_CjT>k%8AxMUItBR@W5_=X9AYX&2(4Ah~w!kf1v`K*HQ zlh(#>uT==)8D-!Vp@>z=RU1&B5vtf_wN>n)^z2LNbV?l(is7dJH0yCOlAh}kTj(^| zQ(A1WN{zsf_teg@CJPV|=ZhH2b@i+1!1e*t2X|h)t&P zG1p&DFrg>mxTs!j^&hirT5f8&KIiV`MYWKO7L6{Hj;t^wH%$sMVJ|$V8~l)of+F!D z5UW+BOh{3(WD(kwn}71&7M2vvr<3_%a$#M>q{;ysEkyrY1%v3g5CHm7+$$!Y-YigA zr8*@M=))hDor`-1qnd5;?;oQy_$->7&;Jn4A2EyMqk#8jcqgZdqE6q-E!#|5a&jsL zDB)33s(XyxPaoAp=2$LQ{iyxqdaC4ve^OZ%eVZdao#S7q>GjEoRb3suDKV!{*c}X4 z8%@TLbOMuEMa+F^%w&&1(*1Jl<&D08XAnVlM3Q(^dWu?iT*x=cS^+0TB0#l zMBnyaRDepQTKX>3+ch(-7Hu>zizqhK3l$i@x5XsztT@6Y1t&?6Tnp9OiQy`BYpV}f zZeT_>N3E7(h_0h!xxBwuWn~(aCJC4=;C42_vagw&y~C#HiomzojYk9b*7z6+zs^~ zV-NHn_$HS!OUJ#XKx`8xNq%gM9=Km-S8dEO>hF?I-x@RQy3vdEGiscqb<-BQuZU`L zeW~`E)elu-@-wRZNy?R^?s_ljuCuJR%KDUrS96QmIWLTf4II4_i@V1ffR|^XEw#m4eLdc}hlp$x9q(sxceeN&ey+_7~OmmhDk& zh#VV%cwtO^(LKp?g+Wop#>UFKazg{1JgZMSghk5`mt#FbuD8X7U&*>K%pA#_E}$-K z5o_t0nEFqTOvW*LL~7zHwQ@zE4tWz!j~Z>>Z^h;wO%>7{JslooLf2|E!0f90$zz4i ztmV1@FSJ_5d?#&aCG3+N>@XwunUkloGXH%7>HIK7!bkgZtMr|fVgxSj6QJW;-%%|P zO+WL_2~-spTZx);RZ5O8{8)j_hQ5}&eHbGog1JTBKDftHuX; zVWDIX{Qx$FrB^SRM^jEl`X%tP*r~ZP`tVHY<&asFK2YE0$K(s`$h4Ww>EY+gYTLNc~ghT$Ax7NJuRqzYQ2eUQwkEp;KuJ#vZ;^)>rHI zSU`|AAU$TKq`4=G{6Pqju{5zM4Ck6hWvFQ0(_HS5r?9sfzF`D+OQ3d+QH&uP7D}CY zSi2&UOxF64x~YY4uybPVXd+z80n*6|S7|twsR)CpB< z-O~hO44E2;mFWc>^M=;4NnecIoDsRV3agJJYE@1h5{`1McisG%UZ-3)D`_avJH_5O z75?LG`Oe1RZ%l#TD37*e7%Q{>Ss96DvVEzAPA9p#eRO6U-{WS>)#Hi0C{v8TDgPF< z-=NUE2jp97lu{uf!%>hY>eyQuYOfwP$_A7G-Fc=+!RnOGmBad&HX9n^vz{Cum1YUF z`TKQfEQSbEY2n#Ng3)x(O3Kz?ey9T-Bozc5bHv2^Ebu^gg&JHU&W6oazP<42luBuO z`u;UFeYWLot3%Z3T$O5Lpb5f{0UrJd<-#j&a<-tdQaF-{t1gRK6*`jT%|{NybqL~4#K6~xZdS5Tlx*~z`Kn? z7f40-X+v*ba~^l_l8k=E30?m%MdSOjO^c0jO?Ci)$^3K;D2{m@ zQSBpp&~l*5hCTDedKf5YWHMB+(HSQWtIg04p$0l8^5bTIkBi{JN7J+xUMIxCo6H)C z8~FohGkDk%9(S0?kF`AgdZd3>3>~mmRYy7xS;ZTsoc;ie18WPf#)c^A##oe3UR*@6 zLGzctDKtA5_Vn;j8Bk?5hsGydSf#mjWs4(vXjAYFKA%b|&(LMbZ&%fMdKm&8i#Bgl z4R2co_W&rq`&B|jNah%lq|}T|HZ~c|eP+&QporOY{$#+-qo^MbD~08-vhYz8_izs# zh|zP1cyH&Y_~sMp2o5M6qcMA=Xqc&@BNJEXOkrWPO;d;f`Wh}5ma8&0w%Wya+SsJ8 zF=QN#&uT(PK;#kIG~_C=E}_h8zo@>52+rsQiF3m%cZn;lR9XA{r0>C#a!wkV5*$MF6iw%#% zh#5+1XryE4pgfUMrVy%8s{UtZLzd(NaydOF-6A3N6GrmPi#(XIvSIbsZWZ_HC#SZ&DRvU z62qm>;8bIP^P<|n4yLJ~5{2cXlF+F$O|t;FRvUr%ezOc2Itv4(8Y<0lF{`z8_ecv& z+R~Ii=jCrrHOk}Xn#v1YBW<{uDU`Q)yFR`a4;WRTDE#)V43Mk=)%bE4^Q4<+u2=&e+z zlJ8vYB_-+>1V{3I&xq%Ghn36Leebz-rDm;0^C9id>rd2{KdZIF%aL%VL;B1qX=}04 z-3X(Tw;1hdp8#>WR2oZ3eSIev1TKn=Yh29!vz4-?|CIOWR44g5R;V;p>JnwtS~5D5 zW`|FPy(-`CmHri?)~FLh{{XRWGm0MJylSAyDs3d#f2@Spc;{Xk(KcuW|tZpuBLvg2&wrQ()>cN zVtNOrJ@T)1IFDhpe<#U*3Jp7WKdib*LiRM*=4rE%u%G+}j8BRbnw$b-b1M($p4UaI z(W(2}ARF+GU*GP)TBvtu8^R0@&Engv4iu^^ZR+O9aC$D1K^;3proh&vzJx9>9<`kT z4&&%KJR3jJY7kye0S>98g>t+LK`G4XAV&=V?IWK)>{otS@!G&Z{}jW$$MWiTNV8h^ z39ee}v5|6`<_OZqM5P8k*x3CT3+e9qOdsbdgb!Bc&FVb=Z}Hu;16CW??YFS$vSB^}`HZ-&_@PF3_zyUKT0xG5tmSl}o!M;EA%8vr(? zr~26Y+2osI4KZAf^r-8fD+lz4!#05J;+hc>vOViw`W{3qQTD-NaU>J@Z3$%W0uw>LJb*^ocHF2 z=Z|^uPPW%1a`C!Sd&^ob=PCv@XYXhjg{UrMJRu#Iy7_fI?$ZF2Au3ikFx9SE&I>XangWWCP=U3s`Y(Q{(vUhNKb#OHcU zHEA$aVpf7F^_B1iU%i^1S@{2aWHT$97 zewm+^S1%0)b;T8M@RG+z@DxjU``4=_-j8!OBPkflcb2SSRNnQ7G?ZBeXTGVv0)=R; zBU`fFi}sZSO@#vvwq($6O+f1YbdU9~7tY45 z4i*(ZiW^KVl=UK)kmPQ+_erTRB%TW4DX{Cs()3z}`H|~}fXOxG>lq)qNTj-t`)8Z^ zD~kC>v|o^nRdE}m!*_jcUCNC(#0NZH#p8r4v61|`mE><_zpj_OK*eoy(J3e;t>-F& z$N*)1>^};h^{N%*ngAvJ`0Jk(Zez78f!sOD9ik41hb27F3mwf0MM&T@T^wlpBLT9d z^KsbtvmcB&bn4u>kT0!R>*a?UBeNz-t5>&w#(x~E>8bJg6Kjcx)R0{yN@Y-A%WnXD z&tY#5-yT~qzr%;sQQc$9ye9e;snbLKKe4olhyPd5*c*-q`&YGU z?jZtlc2CWOHyrF17C)Rf6X@8qUzyJQb*DXaC(Fz()yAdkDdwtsvGI$qC_JwgA9x)g z7UIEY;GYzk)w2NhR@hx5gd@Wjh)tT(=UyCE>enNFBr|5_eC_B&lorNd=}hvBJvh)8 z#1wWOqwu-)HgTtCOIA)vfVd%TSlv`rZp=3xzb-eG4Bs#~L@}1o{5~VAIc!8s+nTyq zdj@4!b@|}GyMePT?ojQpj?o$I%`^UpbN`10&2gNt-~MQQvEM6#Ov`uI^3c{(V=+{wI(=Z9v}_z>g|nyT7}Oy%Z9|sfJfD?0WAwbliNgEw6nr>hx0iVyGZ42uoV@ z+*<{X9gO#q3axT4@ujP2VWly2I;ej<6PYv8aJ;hJ_0|Xs=;?j}@Xm$@G){j8%Fi1F zYsk`CfAbN0@15N<`h;Z0%@C=Dr_k+ErGz3Ml?KP>?1G6D{cgzdC)w*E?be`oIi`&R zrp$l8S;z0Kv!Wz4-i%X0wYESP95h)jyFle`gJXW}AC^448V~`h=1v zopZuGAj&O?HUr3_?DMQ?Ye|#isg@y=T_EDH9yl2NbkVwV5x8@IPRl5TKtbo6C1`16 z$3q{#hj+dHc_(2M^vs3U5nqFF3W?=69-I^dP58Im-)KO#KOU%Ic-20tMFE4D4hy(*VH zi8nlvLdnIM4LYx8zG-5t<*;tq*RJ8md$aT`YT^8k z5Bmg6?3rIh9!i9G83@lRYg(Ea<0+K!d?ct+ug1~Nzi9@KCS4zVy;Woacj*FMpyQCF z??*iMJ?UbH{-pXg@taCUbJdDg7B~n`Aw|{KnU;!>!&BZOC_*qqrC4o)IicTocPLi! z%y!)N?W$j66Q>%w&^J;f3B^paK76KgaFUj#IbMpmgMPE!p^wXq_%&pFr;or)4YQMz)vN5~VOKU-H(2^eZ-C1%vu^qcwC?*6HJn)NaPt^8N%7_zl4m(3O(JsySApv#nLX31=$wl`3&3xJQK%p%c_FxE(3 zz-c2;0#Rz}VrI6kIO$=p%XSCj|b%WxEV>;YzQitDGrJN?3y>_lxf} z%LB$NA@znD5#J9f$Bm!H>&LI={tiM^`L5-@f^ykNWP8Ku2yhC3*sN}3(=1f0D-MdP z8dzaxRn6v#g{%vR<{oGy%xx7BaaSMW$wZ~1D z%Or*0`+a3=6|5=wEMCsKHmZ~!x;bE>?%%5}J#`plaMJ(Iy6k4U+1%nPH+mK~HQKaQ z&5uAzzAxp)86`E|KHC@^&DPQ!%ZF+~z=rfrlerD7ewYM{PYTl*Eq~5a<>PsxvABi; zAR(FhmDJd4)jN&3gMFE$2z$mOmhS=k&)Q02CJMgko0GMkjaK^m6MjvjDOcAT=5K3Y z9`NJZv+@OZG_!cD3sp&TdS-e&&b}=6&uoG1q(C6=&f#D>iQ6hRRG2*jyvrk4khHqj zctx^drn^$+S4T_KjPZ@o&E@FpjJ~4I~l_)o2br0mf`PtK!Gq}!9T~cFYZd+H7 zKJ*pZ_E0Opn5b}2;~1e*uEYbw4rArHRvLLM)21}m>?0b4K0Tt@tX^y+0~H52-_scw zfk@y27wNIA_pZIj6npK3fe|b+F52NZJwc;wMWL0bG$&N-s9Eb}%Nk#N$zp;cB3dXI4&|x7BY^^HD4ulAk(mUo3eh)Pp=;~^6^uY2 za@gUj$1Rbc=I<4>cW(~<>G8L*n|orJ$9xijyd2J;ie#SWpr zG3%YCO`x~ZrR8zDmNd+G`e_V#o9nf|u7uojnyRbT{$;V5R2tT#omiVwP7XGMRsz|u z9=u_S-=x2-c}%azo%ZKuOxIpdUd%Bn;(p3YwR*d=nqA@Uk~3tF)SMD|Mbwwmrja+w z6{f+5B5prU-eB67+tX)W6=8WO;iSxyJDca#Xs@X1wmUT=DPYCG#)@P8d+i9`qoO%8 z3lD5HZ6gOVhH?xV_{)_hV1jCq8RfTZdaN^4-hixfN@AOacL;A+_LE6YM5On3F{-hT zG@$t9&A4}xb65h6F<1^zjXo;%NvfG4RfziQhDE2F%(P&cM}Q-r>Bl>cPR^y2{Gg$= zK&L@P;-Sx7QV>(PeK1>XRIcNkwS`U-hW{Z5QE2x>Ik187^JfY?k)lJ3a=Hs|EQ$z` zYwRBk>Hhl4Kacd)FT6r${bLoS8C6nXOY8DWDvdG+$KljmA|}d=A{}^x$M#h~2XnIgeantIQkX(gdXRn% zfd}A%qz=T#3}-(ys+Mn!_G4BPW=X91Fxy2{$L_m?323^# zLJK|<-;og!ft{PproegSacu(gKIk%VkuOqa)1-$-G>F zZf#CBJd%rYZ`0K=-SjlT7H8#TXV^y5UT>d5v%glvPpv)NGSN6ialy(2d9X=c)z{V) zCwZ3DB`-ZzBD1@^a@rY@-u3Yl!4-mlaz`!P+BX~$m?#DW+OYj>dmL!71msjvU9xnK zsx}adX}3l3tt%FW6ti0BYc_FhWnRW6F?35Ju%M*__+x>dF{gMMc$&WLPI#PTloNGT z=!*wSPsV8v<|T4|5OFJA_NIDZXRw4|eVN-yVzV@_Z6JS>@x}}m*gB2A2zeXBl%AwX zO|w@I*zwSb^}m;=Kcv$Ca-CL+Z+PE^Xmh}ijTms2pee$u(Y6e1tp(q|=o2<}szpug z@Dsi^`J|>B^32fT{?vCe_ARU1U6vPf$PG`NGOxDLI9a=9Rw$tcdzavYxjv}I{;2aS z)oho#QtVs_vg+QH_rhiO0m!!-dRh&?lE9J^8eJvut<>uX3_bMwdrtS$csNkCK&_bU z6oOZS19FF!Ki2X~Xnw^2j%R zECPxq40(Hsebl$dyt;Vm->Unb2j2oyb)bBfmJOM{u6trCWNQ6;*u|Vamkg@D$Efm? zJ!WG4=Q}E=^MB(vZ6BtESiUjS-)S!{#^E}OUtAG;!lx_Y_PDI|pK3u0yu4INN==wF zJd@8IzI=;IQrvC{3~26W`T&Ov3u&_Ow_cWrPB{(x$WT!kSL~-&ZSB5O_3y!}djP>| zPJO@M{`~;9dD)?QdCtB8$$4W+J;osx-pC%vK%73nMo8PLp`}&Cg~d^mHtjs6_B!vW zILr-{mlZgos47BnzVDNjq2P{Vu3KdleDiu$QnKIq2b=uBN_jZH;}J%vS1D1?!ZmzM zDKw>OGA7T!n`C4&KIJNDcAlXUC^&hKWK8iJ`^tRsUshX4km}6CEdDwKO=U^9LMMMF z9a;;wwP;-4{+!4Wsg6fp*nH@vOsreP8ZGhzD7_Q@BT(ggCYA6?R!F7dCA6FBgRjJg zCuwdGn17UsC$w2;y~t9rXBFwK%+#SfrQAj@t{d7!aEOW>z0T861@=jkGMz7C`WC|N zB`HN3x*G`xUgwG}jdl^jm(xC+gl{;-SJP!S%r(bCHVNNXkOU_$-QH`Jt*S} z2D4@t(zE-JgPYN=5$fBre&pA9G!n1t-?$;lZTFr=a(xAus{VejjHGQgXY3~?Oa8gANsiGFj|8RtO!J5WkCpi* zIOCsPO=?ES5}z9_>_QIKIdAW~JZ|w?wDbcF>##m>Ox*UvDqCFii}EZyyMEIpX6Q2P z`_?oDM4kH#?$uR6%eSKnpAJc*z#ffT0LFP(M3kkH(?1GLZREwU`v=H{eMl?p`7GU_ zf?1(ESl1c}aPZ{*BZk!4og&s0&Znk;1 zD8JjmszvhyFD1;s3?$kpnQB31Im-zbF~#f+&@A;@@E*8b6zR)VFC2w1@GYZdA?_~% zZ+UxP49JMd3Y2}E znQbY(WDd($NKYskI4-I+#qGjUYY}ZPtuCGPO}9i)bPxmN1!#`hut5=6v=B+}9HlR)NwbZa3z72p5to{LzrJFdWrapS+OWB010rp*98lf@7D&XspS zh9+35Lnr7!Qp-{NaFGyL>j&N^V7+Qqn$x5?)z_%e31jD#$gBB9C#bc^ z5UrT{rCdCk9V>y!>$^B^qt;$FR@7RyzEv12AK=J|&CVoKA{{NPIogds{);{5A z^Vw#se^YJ;oEe;UazgsTIc>5f-P_{gZW8Kok{1Z9Yo%|VFx*GN9iDy#(nxmo<)=Oa z8$vOeQ!m)bHK5u^K6^?z32{Ar;R(;@U5&BPr%)zOT1~l!iu5}P3kdc{U1u6vwZ}<3 z6scvAd_inau>TQk@8MUc75vOD%L?B*=V$rA9CoMk;S%2S;SXy4N8RN74?z|@^fK(l zQ@;PvGjSIY|1bKyADExK_jRJevur#VhKL}NGLu8NkL`csGw+$B|Bvm;Rr~M4daw<~ zcE-Od*)yDkU4cA7<%gKzhkC*NBqo9NrL+l~-@SqGKuxxr4T?|} zE<28*bpJU7%J=8s46-rZ*7gS*e%^x!G4xJ(%bI4T*C15(VbJ1ng z-~UN0a+RLK=q9zP1WR*Fk@X^#+UB;>-ZJ{mU&uFQB&3&tB>$MtAFK5P9=H@!RclJsSi(2?>ZJT;6cgMg6RTQyqm3xt;6EU1249CzSr-{I1HY~*-cW!U8se1aY;a)iM`x}?oT~~^2zS#Q+Qn-=scHzz`b=}$(Qx+c z*gGlNk=}clH`eJ;#H0)|n591$h)bt-Ed3MzFehOlIf*^&V{H-0=jY6l!8Ex>p#m|` z3kYOOVX9S_R&w|hauk7al~HTBS=H|mikZXNzi*dl*|<8Gz+ArZpvXp{v3jeOx?tEkTamVszw{ET|E@shv^n4p-RKYiira9Qr)~iSUbo zyVHbWd3nqs z#t6m#DN0OtqjK3+SX4Sq<#ka_>ATb2h3td+VDpF2HmRikAd%WPNn|G(HeFE+;uOpI z>Mq~ay*QiiP3S}>JWo{0Qo3$_V#!bkE*Xxh<;2%3&&Cg8Ps%oPvk7uERF87-?K1xc zYbFMRRb*1te+0w^>m>8P;*x!IWqjopxu|*T$P$j|A(qa%cSXwH6|>Fx4CeCgyIo6Z zjNFCh=yVbAFr!3mNNi7K&xxvYSc*dh=9IuUZIqSgHzeqd*HGI$Xpo^U-@&AJl*(te z9L$Q`plTQvrf6eIyWOI1&3YBSmX1Afk5i{6{_`t*Ezo|hX@Pn5f(cQY_geBLtpnCF zb()c$(6%*h>0(*U_(iE)%uGr*R8s&coc|3p)q`FWci7&@E^*GVNbew$n8s%^N& z#{lY;v~snMM6n-`7{$u;N&ZJbZiF=uGRZO^*`hL#d~{r47LKG6zk8~|KG{juhBbp| zDp5>#4O2!V*{-(TTmQ`AM8!rV4i!7>-~ZBIW%Lh9h~X+v6QTb3ctpG9z#<+p^CtRv%dlyi}LD?*Fp)H%6JxDnD*D$?Qm6Lym ztnknIRIH4JBQj~Q6LXQvo^PBE!;C&iLwXJ>!bjxi*7*Xx5k}SH1>Z`aL3sUn)iTmC zhARS33u^9JGGmr*C!+j)B}EIcRQcaHykcC7A7Doh-7J%hkh({)8V4}rYzt7f!5L3D zs?=M)U2Tw+@~}3icG;nu!XD+@)WF%17^=u+ZmF+(N#0$E zh3(=1<675(aqOT`V+a&pxS!kA~wE@j=pQg`>04A>Y=<(7(rX_gmh0^RX2A%xnFWIe9BVUCHkLGtrEi zwk2~#gr)Ykv%Y3+M*U_QOkK(o@bATz;xoeE%6Ba#STf_w9_!v%e^}zMI0_lb9irdH z^UkbWaFZq9(1Fu|sQXk@ks2+~@o%zW$W51>aYXYWS`WOs7N=$UhXI;`E}6?u&9&8* z8;*LU*o=u_-64Psg4r%F)C~L;j$J}bp1z6)(tOj)c!&If_v^)2pdZ1``$ay#5FQx{ zOMiTHq~|V|Mh6<QCV8u8Cn(KaF0RD2Jvc~dnHgzX(g5|zetctXMtK`-lbva ziq5FXVJ~~bg#=Eg;K{p4NBE#uX3GMj!VP1Iy?QSgZDdqnoNA1MIcg%k5HaSuV53J- z7v%7_J9!UKW=;sO(GIPH&lrD?k(;(L`jd%sMOrC^@#2FN2l5=o{n( z+q!N#0G|X(OFZz3_nXvWtzzcJd`K-F^Yd_!56XD21a^AvPeYcF6SRTk6F+vu3pkjJDMzi@%CG*;~C? zcC)?Y*dF(nt?Bh}!$YA)Im7cs`@r`2Yh@cF$|>=FAzg_mQI3nNzV3ua13sMF`~ZpmFzTyq z0e8Wpw*TMjL!((5heCO&7s?UvADQ4NsDc($WiqvshU|VeRb8d;$2V{X>vKh26QS5k zraJA}pZy5_G9g~Od*p$MZ+Y)4+JUO#Yjz&k#8l30V^Up{872_#x&veD0h#x!Wy3?= zu}_jkSw)T!#X~P!Eg5*qk$rjPzBHnF==IAv=@QW- z@Q`G2eR*bfoYH4hP-SKDy9=3`RF97xj7%`Jv-5M!QUbSwepZ)YGj112h=Seq3vNwL zHH6W48PitA(X%yd+-?h`a%TH>Y2G2j*iaqF26*rAY-#yE9Ih-J zuN*?=9*}@8->|+u5FfVVz)eYbJQ@1_o^6`Co?H~ugxt2o&2{_hyMDN{%ZjZfo0b?B z9?q24AEEQ%1nFucQ-69SRGxBGh=BC9KS6ULs`fwuy{PqqvT&V$o9D&&m`$9W`R9fM zAb@^n+L5STVKi8t=>C_INotJ>mbYe00nU(XIipb%TEmqV6JjnZW9rv|_P)MUmVjqF z)jecsKE<>UEsfD3L*T7dR`f1q8qmzF=Aq5k^*N4GM2)17i%^5FQ16US*)siDkUijl zWNqa<{7lppmD7_;v(~V1Xfk0pOG|d|la*Sajk3jNnz3VXZQs9~{ZW&zPV@CX%gtwY zl3}4Vp;VEfqBAQbhXP}UQHDSGdynHzr2On8y^TOG0GQ-|vCs2l-b3!}|NWGek-jr$ zDa3>tqBw-48|P^GX+*Mg7A~K@5)GsPVhETAy?z5{y2#8|_0@rXmR<8g2=&RqJj1%g ze*UU4;{LtZy`{v=JWMRuXKSIkCIlRwaU)5d7 zaU2|uty}QXG;4Hu^7iQMg`mtd#*?#WQSndjoj{qw0p>?~#z1;sXe6=eudv%6;iYD% zk(I-IxD*fWzLdg^0lmJ~xCozmK9QL{QZ;?|D8`*1lnzZXZZuzFqJ8hBt+nN9H2*Rt z4Q}<2KSq3-YNod>&hXv_+_I)77sv%)bCC9|QFTV;j$n%x32kT#GZ?%Y zkh`_bDxWCp>Zk7oM7*WJTwZi%wboI(V*TlxwhrP-AD<3XX*ihJ3Q06l`wzLvsfXv3 zzf51%3+nBFcvLFSxO%i4s2j^mM#{_mmK@L*UkkFI!$xWv2ToV7bs0%!-9%2!ap^r3 zHkxgjk*8XuaGefcLHJ}viwxCJGp>>^btM4q%vrqxT@-r zWnhBt4YBoVNPoV~{t|G)y>akGYbIdZQ}B;iZ|QZ~58rjXSn2QuB1xsm3|O9IhlgP} zpqfsdDYgj=DpmE$XyO4ad<_{+Bs+2&ZO9LXx+mto8nZZMv=e-M#DM0HOTtGUM=7O;VVnEDDfm?zcWz zcyg)ONJ7rH%#grFv92$IKHeqigkSpD`Tyk)nn6crxMqe1b|f~SooqxFj*Bpgg)+Z` zC%e`q2HT0t?ad^0l<#O+!*-Hm=W!Iy%ry<=vh4ciU!NJLf^K#nuUvdgvhW+`_G@h| zbTZB&rQ6}mRBo@=AcaRq$3Cz8db#ycrjcJB=NzDBs6GT~6b@%rITcUh$Tr$B@DFrR4UqA&D($z=W8yIKg;7o|P}#=G zEsWPo8)P@VuYa_Sx#ISWU6GBQ##bV>eQ&*|e1O_3JJXt(pEn;vXL4V>$8wfT4*_z9 zemD0tGE_l~Blp|OCMw1Bm~8XV{+61w+&oHZDg5rqK5tqLD}4B-QC;5QD%EyOO=jf+ zvvl7SJpWY{;~+sd-^oxa%?^3+Sz;y&|Juzq7xKk?rI=9=Ow1nfnVWlBJmG*}>Kjy( zg0JkV?9r37i@tCxAwjlstM`S!K~qxbI@ZYH&%jcXc(rHgdE$E4$yVS$(9B)q=`1sZ zoBi@vF%ZyK&b6UnD;D)9<;ie+*N_!l<1AK{-vOt@QAWXCspR}-YTP^1=0P?7j3%5z zFRk`Je*ye|{{<_a0e>Vg_!0C8v!pAq4IaBU=Oo?7*6uIXBpTdw?t(TC{R@3E{WPHr z(f~ykxVB&R(9OBp8Ne$I3^yP~IYjOr4|TT3BCBAt?7RJ1^nBvh z*YWMQr%()*ZQW}(9`rF411oJ+8;qS4ZF2TJuF^myYbFt4hp%?0CQpqOE5362-tx3c zA_8?~e!zjUY+Sz*k_3WD-}BE6sx=-YP|woH4QOf=Vp6e@9%NIE)mD@7Q@z5PkK~Tp zeV*!g&8L-91=~H*`{yN>%)z#1%t#{h$ChDmjTlR{oNyP~u}PT0OWQvK*vUb><^`2- zrMfOJaozkHjS1m7q>bV|DFT#>^)$aWY(E0SdFY`ZnO>!E-6fh7weQaWYn7|gyzHe7q#81> z_(rzU$ZI)MN~K2eyYvScn6uCtbADMfkXHg5W1Qa89fzMJXjdBs#z-a&#!k!zWuI`W zyTJN;C%a39sS3!GKE6Ci4ytl1r3W(y(`+7^OM2HR5cm>|z4(1gE+>NA zaZMAu8Wa&1P)Ni@R?T%7Ll^)jS%bvi(WtNY1j=# zcVC=Dlf?#*%X)NR{1ar}` z?|t}?Hf1KC@G3@;b*}L00%H*AIf|N#1RLRSSIc#Myw)@Jf|%a{ zqG7mW)Qcn5Q0|t@F(7FRYbDi*uy`<$ckM%!_)44|*>w9kfKc4YNTqADl|zL$dv|3Q zh@vmyZ5&GMNzk;j&B|c%= zQ$$qma@Zhbj+RWMi_2@Yb%57gw0(0+rn+R)RXh>F3ILx)<%pl%I5Qaq>s-qS10zxu zAlRafhs~6xj3^-j$G&CZb3~riBMPzGGY@h?NesLHa2L~hFSiBrG?TKh3fK{+pX2vs zcNH1*D))&McnRe;GlgW)x6xql`z8&M(u=RzIdah^@IQY%tUkl&i0Ke!9c=~{>;P(( zoG4$ewAvmt&!gsz-nVKN%15qHe=+c+Xi7L`Et)g!J~QI=j?c&iZjhLVF9*I5Cva-j zX^XPnTy+wB2v5Yombloh?8(jt`=2nR`^1jZB=vHqY@9s}(R3GjE?VlaC*fph=G839 zBiC0uIXfn$aMtb2jpA-F{|D@wK#nx`L6K4@?EAx6aAz6&b!53f;=b|w#cZ7paNCFP zluNm@LjmC87R);pA72(J_J`5L(tiq7#cUXIh$Vbw*%oDwmmu~3 z8cZUsKbE2y&I~UUz+$mP!(hz5(OC88V4Hl#CWR~OUG8i7BmWV0R zNthagybLQ4wiDo9qN5IVt--3@rM0P#s5^49C!!Xcy z$ZeT~4_C5mpwj0S*r!x@JF)ffq`GpJKK(KrbrpW1C}*adol3Y#Wud492BLNCOEQDpm7HV z)c!(}h8^I#-b)IWjjqWVwfLxQyPa{be%G*T`a+?(_c0y}r9)};PpPC{#BgV~ z&jLqmM)JG0Q=-g}F~n@M`x~&XK_~LImK&&#C@HrU#Nr{6L(s6FuA`5MjUtCy`e|Ta z>vRHC9h1+KJR1)CJfzz==<#ofsq#H(DhAKhdy=y3r`_i=X=p;X(8lntBv*)t7BrmDLOu zs`ZL?*f|v0PyMbvQLHG8MLg88q|M z!RqqzBxG)fX@kvT#Ro>h1~NrUy!!l=VV+_S^_e3U;o&SLCl4|bcF@e^3e}*SFapom z*;fqof7tB{HP~wxQWkZcq91YH4T|59|GsH_&L>U1G`N@=e#)nmX0x&O5qB=kOKk-Y zwRtq~@%qzmTE<}h6v0s@A2`EZ_jb3-P_fACAW5=hwUczQ)bevuNLg;Sx4rRP0w?); zX$Ot%XQpVcJl<&5@^E8J1v{hq%t5DUlKGd0hrfr)e%HB}?Z(wpXbj`Q?LXpla=O)5 zXZmSn)ve@Q*#co>$>B9(&zTLiA7mfz=Vrk`0~!#xL!m`nvm|5KGpTfc=R!@2QeELy zMq>}xcOKuS_Jis*G4rO{Eh?mb!t!?r^02cK{sqmtwEJ_$phIf5I*<-d}We36|0= zo?vjwk9G)HG#b1fh%9OwkZP2}OG;>l9dNziNB;MJL}R&@R6By*4IRJvJG2rjd zvB*RE#T$R<8u}Q8#0f#NlpIkH33mvg%AU>V;-bRTbF6mQT~B zjgM9DE?)8D`&fGp{c`m-6Atm0Lr8fU#@H{)x^u!}5jZ|VWII--!sq8xydj50kZUWE zDrxlRmmblPP{`4*!e+P|Q+DQ2V1t#Hjme8BFPMxSZXC(!a{ORN8GwbSDT zjiJ;L8njbK>(!0DVY8q>Ne(p!=#x(dRH|^;-~u^FkNwSF{94b$w;;9sa#@?5liqG- z54Cc7+Or}rB*5NlM7NWk%+Jrye!J9XAi4>OcYlzBT*oX1WgfC^kRBW*6CQIfr5W;B zLBG=Cnx^>;O&F1Zy+r@o9|5J#Km-=~>Svgz7)#ccxok77?bC6yGeW7%ei=J46;ey- zUw^*rSL`R`7`!}N-~OOtqingASF)S3uvI-~aXo!+2ZDSndGgh_cAB}C?+~F7_!WH$ z5zqURj6L4dr1*s$2 zV{a~rQ@rs;>^bdD5z3$NbR?2SqJ~dFmTukM_6Zs$!viv}C(MUF3A$5w#%-?}z35*5 ztunDR`1r|gww%&3zS{V&_%-GTnl7BRYJZ&~l!B zoyxutZ{D3mkoS3Z8pb zF>~P(e1Re%A|U?qAAt~iPqyCR;~k^cZyle1EQOdd)pbz(G?cGN1i-WpK|dMrHFt`} ziuNbkp!S8$-jWsl+K%>AUXx5=Z)OgWM~c(u5i>z{xnlZ;-$r&V`vXanZ^@sZGcS~X z`Oct4>jcto-H(1Eh|m(aIeYi)^HPET<@bbXdBOKf$R8E4g{icOOOi$lVup|xeti7{9$V?(<@wo5hl*u@5YJQoLz_-kzKDBCl1U^2Uiks--`Ekp z{)eC6ofJc)x-6X>c@<`Wp!UFLL(ol0*3$0_SPG=nsn!3otji!Bs2Q^2;&`{j8 zWm~_PSQ7LqoOKlKmvoiX7@3Q9%F2V`#>8GO4PhA_VwUB#r#7IiK>E3!q%Mim$yNQb zzMWCpxLHF9KnfX@Sxcbk#j5HY%;)D1j(SnNw1+T6Bi>&0KID zKeDX6yCNH~b9l@6P!JvbrwI7@a1^lCH|Py-W&oO3rwG2bH$5S9od3ygA+#|=N1%US zv-?Y(R`+9`JIPMhgZ1PV$PL3XTGrO`Jw0Fa+Pg5XRMZpuC!~7 zx24yEi*yx)Yz&VtM{Qfpgq@sC3Sf){+*qr9)l_clUQMzLICKg}^ z4x901QX>$Je7HhROGEq=ubEL9yK6c9lLNJaW;);$W*=40gJcPO`uVmxvSxl9-}aiD zVI{f#4*RehRLGa%mz<#0^waGOuZw>Tb!8f7I8}H;(nKLjfxb41k?v_jQ0e%tGrqh{ z`(8~}*g)y+zWVAQGkHB3?=R#2wa!uiyQ}^mWE{MgvvpE;RKlR{FMV**wWh(6W)#SX zG-`q6SMd2wVfqNy;qQ)O(;UbWrpY^o-mA~>6|pRvPky|BEQ0B&>zh>+^1Z%6IWAr+ ziros&mQjpIBNmjaxsOIrynZ6V^0zk*W~U#$!?`mt{QnU3mQhi@QQJ2lC?O!-NOz}{ z(lNjQL&MNHz|f7LA{_$^GjuZp4BahC%h27TbgF~_ivMTs=XuxtemeJu>)W-~xz4@! zar_Q)9^TGPdVuN{-f>3hg@~pLKk?US2KNO-1zI$oHE)jaI5Yb!n1DrA1~KI>Y{d)- zcam3V)GWTU;dUrt>Xv1p@YcyP4Dx7Pp43>Jq8F`5@A);XlPgpev@LYjZ!xM$C`w97 z#PP&PSw{A899&h;{MQL{m9>}_rfi6wGjsED zk~m2hNn-^YfAuP(9p|)WVY%CFupgmbIw3Mpu8Se1manqUB+|?eGu7H0<3noDe}{I<@s_+BGRTrFH%I^$3BtIa~{mX^=xAdGQgwg zP=Z&L|8VS)DX~`xxwuRa&^f;R`OBu-&pS{0{xRDtc1q{q_Guik#2C&ekE4jc5tk-C zjE)P7^DuRu+X4}fP$ie=am3eJ2LlLyNdZQy{XsC<5cvx1@zC$Ffc$%}d0Q03j3Yj&YdoWE~@KdSQMa1j^xCPWK zA;(zS+tz3$pD5zM9V->*x8a)}>$V`XjLv&GBn4mi3k*3% zy3IE#A1@1D`AN#euhm+7!QBK3&bz-lE~a;q6)nhzyDKTC^qmJ*=TE_ml=RdUJ~Ct$ zorl}+t4*Jz@AfvbK?0G$b)dwW5%EWS!}#FrGCYF98}EU6cjS1tFUBw?Ffi2KWQE!` z!2P3s|0z&a0l-WXNHi3=H|o1r>+sY7 z)PaT6zQLWxuk41xQ`*eS^(PJ63?K;6E)PaEjc;uDDt#w41vQ((+gn$B#_HFMJE`RJMr zNk>L|%iLK^!0m{)P3LmUva?=`D#}1^fVNLm3T|Fp>5NaZ^b|~2brF^>7eg@Ec5cGh zxWWV>0cq@7{b6Qh?a@XD)O5N1S$w&C&qEsLT2`dUHOfQpPUr89mR*oSTV_a0 zJlcLzDJRJ3T(umqMjKu zHl`?g(^7U?yL?J-i#8(~YKQDXetNPk zN8h99x5AYkJu)Mpcm?i_hbQV1j2-T7{<(Zr`^AgbpXS-T#>)I5g*iL!t(sD|DHssM zX@*^xj9VuODJ(30L3qYI)^AWOr(v{fFij^%j*X2^@k8GX{Lzf`HWd<<2Z0cFYNU#< zBfG}FSB1)b#C{%;Pr7`3Rp6uLT#^i)aCg`AieTjf9OM#-i|$Oa5~J~cw5UkPO@LL%9abJC#ly%R1Tt|C_;)$ zjq}XMVzkafxJ!1f7wINWIuIBg{UQ{<{*8_ie+wBE(4afc1^gV{+(^FPzKB9wZ0SgD z6RWH_*qGo}Qy}Wk_*z`nL(oqH$K%NiQ)edLK}frhm&7J~!&c6_vk$uAKE4r^^{Z>v z)}7r~g*lsXsU^Yue^RS&W;1vi=6D#6hNVPcDj{SbY}ZcROFpLFbM2N@9D1tOlP%y6 zUWh63XteL)Pe#XNk~d1J-XWy7kM!IVX+7@GsN1fR8eI)%=nN{_sEHTDkKgEm#C)IY z-jQ{(z5blskYm^p?_VsJYm9L05jrolrUz(UWxuoR=;-&S9g=!x{9^%CNPGQ>q>3bk z`f7p(dU}+~)BoXVY-t*C#pG=F#t@E184o)yLX=p30pDoZEForM&wV3=&k@5UB-)KH za9PJ+$LG3lN7u$BheCm0%yy!(pMELMsB8&8H%lIQ5lQr?>^{H(5MkmqLU5D$;@hLM zly2t1w{uTfT|@-l^pD}xB&yT|n_pBjHJw*>*ym&+>TibE0)pV&H0HS&_a`^eC8x}uQC1nu)NF#BVvq^-rK&m-7rlCSDz z>K2wzUBDxe@L~kAfqo9KW;!^sD0%ioyilLo2oU@&^+pRUHhr>+aGqZ|3u#_c_sPt1 zBve~Ig6F%HcfnK1kPg60<+*JmMKydcf^A95(I0e+%~O-poInw-b!vQ}N8v61;g$G? zchoxueVPx5h8DTW*%p-`-S{~mUi*a(dBx z)^7y+3rJ}Zpd*?L(;Q}Xy|D-M2L;O~XdAsX*36ul-)fov5AV4K?LbwFW-2u~Q@gCd ziFsnZRcm@L@my)<5ABgbsRM;#kT04&d=-8y1>Gm4tFg6@`3rqXT|#Y0bU}-UZ;OK( zs&nQF%KcWDEAcRGda2!bUN}fP@`n)9C$NSM{7bPwt z-61`0v?@amNa)Fc9cza50TNRS_-7?Y&&7H?~-23gT7$w-FhNx<`7j)HVC5!!z?9MDGyw((;Q0Hvql< z0h3ug&M5Hhn7=~dr!_FyQZqK^8ltrYu}$K)wO@TVQ<8T_w3euceC0+>r<3!GIY-#B zeDX@%1^TKm+hoD9z$O!VuGDr*@4xl8ek+?Z|0b??$kfT(*8ZLRI8UgqkGUDESnc*R zfi{8H^SXZK{E9u`tO0D-#C%h9=K~)r-xQd1`C{Ggn3!zk*HwJXAd(}!lSg@PJ&W#j zyEOKuK`8gqoLnC}>I;9!$<96j@4<;vfsp$rP!hK-4~lQESkv#6dGyS)Pr)~_9bzEO zvr$}Rx%q}2-TR4be% zp_PiPNf!Pr&R&ikSL*b?kX8bY1pXkwJI+Ifh;u?cK_EZ>h%Ud3`aX%V;Pari+7Ms8 zpG#fVMmU;oUT2?I_Gs*PLPKZrr6ee(-8J1S5G-{)hI^Jie(5o3i+!;4EN@5`6=b&?AextP_$mpc|hYLVmmx*-PPwfv{ z+S(`?XAKSJm(_T18tfZ>vg54a3^XpJL%W|07>izw+lG2e4x35XAPUi~C%nfKTAfm@%ZJkJqrC*T}~w6f(?Y6zPZ~r$f}^g zCXVDW!CLFS-L1pnYfU&$p?<`@pPtfq71y3<%3dohmte~p+EQT*_rnD$(rbxf117)6 z>)~su|A$8llm(j3e1}o!@_o2}QFjn;VkG(l8HkGuQ$O%A2cy~~;>)BubBf3Jl;;Mq ziklprt@RshhHuzZ+{FP1CXE!16Aa4;&v`7UorQolED6aawT0Hl(j%&{Am$$ z8EU@4z~Wpp;qg-(-hvZd?#q(-ysT?1F9g~0Zm2m`K?kFgo)}ZPqD8TX3 zQV$lGt6)|U$?g49!CCIO&yE(8NMKbjfia05oS*bN;MDsMFOmb>+Rt?3(Q?wfbrFv5 z*U?fv*8M4~vJ*eZw23-cWb$52`!dP(%lj%A@qc)N96v&5o>QQ2CUq3fyBuu|#_D`y z?8Ls@DSlLri560|iL~`w6~CtFzSHYe=1mY@tD{&EUW%~3t+n;bmo=zXv=*av=j2z9 zAX)mFk~XsYx>=F}EFVAwzB zXs<_6_T3imO^RdsZ@L)$dAq2um~xpAS3U#_s95nBT_Wwx8%c4cX9PDEo!#`uDKM_O zs=O96_u}!V`bi*KI6)!7=VEApi+9L)Hgh`m{D-6r)M#Qq$~hWo`eaj216r0dWD>>0 zljRf@WW#yn@tdc_fj@6V{ZxA4`kUdB2aQxdCZ0b5iZ1|wKTH@ob5Ygn=D|-%|Rkxb=lU=QN`PJR?S;A_5na#CV6| z$wwIbO||xT+vI-vo?vpPKMENityM zw~!k5RCm9?MoC-tY*DL*>EuZ8dxDK=q||pT0+uPCS6uDr^8#R%kLj&Vo0I>-N6GnO zUitBz+A^st4^vXS>OHCXRK1b;A9DwLk-ulh)xTh$64Dnb=w^*~C@Q88&7O8SGi6J7_DwS#-`Uo%JOIa(=4FUHmS;aia~V*1e7;HLIB)4 zc&%|^?2>!U_@p#zx0+UhJ!I^~?%bW+xlvT#!`2cw#?oXZhxL`WN(n3b-NeC95jrN? zHrH}x`(F;i{zbkd7w*tQ$->B7tL5pS7DpY+`{@DFGJ%sTD5pNBtF2my6+DvLZhFbshDlHH+w@amSo#_EXw8xBSbG?PiRT4an8Hc5vSYq~a%}oon_`=zh>Y-? z#*l@Rk;T2Og;jhA9=jY`QYi4HhQmwzxQ~6mR{X-EsVklfZ^*##2K7hQ-t|D7!J54b z=Qq3m;VoCnURB>>J6?aw?o~ui_@nBp^~amm+Y9>FukSmOK$8IF4mT46oDNj@M|e z>P#$(?igbW5d0D#7rAwGF1J_c(=R;+;;mjcX*rII9UTMIl~HyHrhbKNWXy>z2W2w^ zwLE06RtW#YJE@SnA$Mt3BcvjV6+ZuioAotoMVC6UePLQ!YnP{uCFZ74#Tm3ICDaH( zBXN#*i%e-xZJZndi!nbd2bvZnPMQC=QlcNj|DO!ZwsxET&Zp~qJWW8}QT@e}rs>|C z(Iw*z(vNJRdN5{{+%=N=L0aa`f@7bx`+#+&i2v}krYru#JLpaP9mc))1Uf1Q#s)s{ zSy{N;d0S4J<*TCt!HR3NfzQW=hIWzUFrzRK<`4^k+MNnav4i-?J(ln-? z0Vk`2UUqnaHmqmzpCaN6&YK9TJ(Y~A=Blb$suz~Nga2M*N%Te1&6_&8RTT|_{UO39 zEh$Ai(xEQ)6Uk{BaSVn-h@M{8o0HGKhf|4kbrcM{XnOB|FD@=LI2CxY75OVXyGOLM z=@RZ(ZACc;xgjn(ne9o+bpiS&m@j0ZrYp+t2j5F__?ZQjaMvqYHoTMAodCLc?m|V4 zAzkhhBsQB(IM7^OnXsH%*%@r|JYa+-J6JEFz}G1-UGU)wQ2SfZM|JJDsM1+hez7kP z75}ujM_P4iE^UrlYQ)-D(ceQj?9{h;){0%SnHspO2^)-0_rGkZ*jK(Y2(+=(>k z*@yRcf#v+`G*81a?biQ)>^9+2T=+xt;kFJxN z>aY2j1=Th09sK)jw5v>nP-XvyTpoQN~ST~gtK|w@2SUE0{*mytaiEg)Iy4HxIA+NjJxWmio zY5&*B!8Pc1L}kGpIF+UNko(BNabn;!Wrr9F!QC(MB4jyO-FN5Oaav_RC=^+lGPY!* z%k-b0`sU{6BlCN8xG&;RUl;8}rn@u9IEX~$>-RQp0+8(nAawmlg9OW#X>Mlf)?hK%z;jOl9lO-)~W1hTU7i3g=~ zJ}FN+utPf^3CGBx^`^TOC^ifJj@OK-gWdEsk_9>CR`~rb7QI1zjP*{;Q-}teqFj;9 zpfaSSYxYNuV?S?p&x*<2F!#Kv--JA5H1GReDvZ5N8D+pI3;mM^8(Ot_P?6c2ifll> zeiK{BM0n4_^nqLN5;qeYYxcX8BZWHYY53TWvKYUHU?HJAZY4W@ot{c$sXo&deRyMvP?=`j7 zM}DiZuA*QKXY+U&2SJ}hxt)0yd3>jYecl9tT8>;=6_FktL- zV{eOPBgn&@|1v~9ix+6DOhaPw#aM08-d|JI?B}GGo0l(A=zQZ{?=8uTMuj_c5`Qgj z%3Zg_8tq{&x(ue|i9li|dusgM7O*F<5Q`1&y05>&+;{Re;(aU3)*uPi7AXMJsJH!E zt}AxK($}VsyU)Bo`wZaAgAnLI5Enhr*NX2nf*Tk_-6&=e7-;exrMQI+4-pP;VKTkl zTNpH)DYgmQ246-25D?39`wcboxr9^d@W}`WTpp3`livs5C}fNt{#x2`1Sob zix=>n$q#G@1+}cOs{HRgyNN}s?C|b148vS8p{*89fTIO#^9=XCU47Zq;CD`4 zrjUH&7bWv8w~ti}`lLB(P3FG*OqqA!u|$t9QcK+?U?f|!b;L|UB;B59_kSMFrypI4 zRs7;!WU!$jP54MVDXhBY1D1Ab9Wa`Hu4%1=Y%W&UqM;Us>b)CzIeH%dA@#!_Xie)R z6OYF%Yfke5R=NEz;Lhb_fUEXrV@c);P~uY1FK$ajR&u7$XnpzxBwearU*c{jSICs2 z#eFID8%qaEdx{WN+%z&AVrHp>=a#G|FWpJ`Y(egmz60iMO^Ba}{y%jI}n?VV0}zzWv{l0cLMqx6ma8>6J7 zhME5bSB>Zkque}(M;A$tf}K+6xb$|<8|2J$NmEiX*B%~4B%2rVu?RYXKV1rt7zl7y zGg9wb-vM!CD3hbTd?&F@q^jUWlkp?TkCm^cne8p<_zdN|3Xm-SsHhNVcRLPP_%CC;qLLkZ&VBXyRsfQE(ESrEaIIYIB ze2B->&&B4qYMewK0^i6l^$Offi2<92nTXe_$^AshwRuLglPdz{FQJJVNxFLGAG?<* zoJrrDN=BXnsVCmGOTS$;tqS0G$ssM<^&*nWHP81AjW$A8OVxDJFGwGl&vY@Y*2=>M z>HRyr{0LVZM9hlRV$7Sry1N$|H3<-Uwr@G0sOFjfkV2(`*k%{@!5@&hX9~m9<-|Zu zYEnS#lC~WQYn`X_o@A>^wUNuI#axv+w_!oml$@Ku!q;5$!K1#~kU`h2iamjDd4kK` z&qryyH8bQ|elhM?!LKvL5C=$W1wqYRw7y1xTsvZm#V^_5)Ks-An4{{K(#8Cfps#2W zQ{OuMH7fSQqlu%@S~m!HN7?@ICz#YLRje`%zN3cq!%kWcr1V}?e>~B66ax;rVRIBcV8JqX|1ziz0pSy#~6}m_$ zJKO|JEJZNQnTjM2>}$5WQ{9_BTYE4%ReOooxG^z)9(vO)=g$dvP(u~oeIDeRjo|*N zV=AoQMm)7u_bWvAy#nZ~&ZsB1oJ|05wWVZMK(ygRt~MET#S78vW|-%o1XrGlTv}iqH!@1HqhyF!u-k@jA;uz1 zM;6;`Yr`;zdgG7Jdbt>#o3G>)m(r9cFQ@vz)~*hh=nD=?>#->!3*aRdg*R5taeo|r zW%B0*_sUSyLDP;Tk8Ff%CTUJ(EwVc#F9)98Z1mV1VRIW+^7_%=Z*gvLBrm5&WS8#} zrGb$|BRMNKL|8}{3xgHMs9a)0+-UR(<(NIA-#G??f^~7z{}LAp=4xRfJ^7v1OP+QejrfAF?@*N6Zg+kZDCs7;!;r-*XovVeR0K9O@Mh5;O)iY?j zI=JK7W_<68F$SgFekgU)>!WlxY!hqjYEcnS#5F@v{9=F9rALg1T$4BMSqGT55bYAq z7NB2a&LCk1qf_uZ%hdXqDr(V<<)yxEpp!F%^}gLtsZ7u=yX$81$CqQGb5?9%^S1#X zd6u~_N7gPwAQo(MJjk7jJH{Hb@2G7l6H}(xxe}8_Tl-JCpFnE{iL1(|q<{}3Mjg6G zFGM8jO=8`07L&;UiNX?xFl@+{4-7I7JU{xA6%cNyf0!J(C?#{(K2p0DjuDc>e(vaL zKxs7i2!az<9@#Xpry!SSSiB;HR-P!<(t`>F_tBPJ1}YU!cb#0dB&3=Jhird&$*I>) zKwbDxw9a)<2S;6C`{o(^hTH>h@u}Jp78{4$k0O^G+d?frdf&XaT4PjlL-g{T1)0m! zn3Sqc!L{-scBRCRd;sH_WiG%++v4uQ=CR)VG%B}M~?*Ab)t|fQz&upwV z5G7)G!|csM<0tMfZRU3*_iG_3Ve|b8B4?qQ&=bpg?D6pDl>G&FV{*yiuU_ z1kym-V3rm)7s#s{<9J~WhvgtRj2NY42#mR{?)DS{0}G5br|!+N+z zdui*t4ItK6v?7~I%m{o%{_TAM+tioa{D}?{#b}V4x4w&nz-PEm5KUq9bcJtfEaqx~ z%rMY(iO;NoK6@~Z!rL|?!-#xc76-vi_|%s2-q)n6ar<6Nb=d(LVR*4froURvyIhfy zJ@3r5|E_e7FSfh=W~=p1nkZwISiZHkvL{`!b-42|f-ssYayuWCTa-NfbD23~!nr%L zcWLo$f{pF~DsR1Y#x$EJmr7zARy8J*Zb`UXKvU%OlLea{LxudrvRD_?MGc%0#mzT- zo8Zc)dDfyCHl>~m1#$!7jA7{>jP?Ln}S>{HeS^K7`Cxs z7%^v6khCbDSRVU#uqY318^?B=ooHAf9%+9X{h{o>+8`NV)N>Dt$zjvJy z3$IOd(#oTj3iO!&mA2hi?

9QK>Rz#=!A2Kd}YLDaEMYkOaL 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

WtSK-&qG@tkH*813ujc`!`vw`{^X#4+K^T>Iv&+ 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 Date: Thu, 10 Sep 2026 00:41:47 +0200 Subject: [PATCH 39/41] Auto-update READMEs --- README.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 0f9f516..0c023ca 100644 --- a/README.md +++ b/README.md @@ -12,13 +12,17 @@ Lightweight animal shelter management [![🌐 Official app website](https://img.shields.io/badge/Official_app_website-darkgreen?style=for-the-badge)](https://globinours.fr) [![App Demo](https://img.shields.io/badge/App_Demo-blue?style=for-the-badge)](https://demo.globinours.fr) -[![Version: 1.0.0-rc.3~ynh15](https://img.shields.io/badge/Version-1.0.0--rc.3~ynh15-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/globinours/) +[![Version: 1.0.0-rc.17~ynh2](https://img.shields.io/badge/Version-1.0.0--rc.17~ynh2-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/globinours/)

+ +## Screenshots +![Screenshot of Globinours](./doc/screenshots/example.jpg) + ## 📦 Developer info [![Automatic tests level](https://apps.yunohost.org/badge/cilevel/globinours)](https://ci-apps.yunohost.org/ci/apps/globinours/) @@ -36,11 +40,6 @@ sudo yunohost app install https://github.com/YunoHost-Apps/globinours_ynh/tree/t sudo yunohost app upgrade globinours -u https://github.com/YunoHost-Apps/globinours_ynh/tree/testing ``` -You can also switch to the testing branch to update from testing by default (as same as for APT when you chose to use a testing repos) with this command: -```bash -sudo yunohost app setting globinours upgrade_channel -v testing -``` - ### 📚 App packaging documentation -Please see for more information. +Please see for more information. \ No newline at end of file From 7feba43a73381e29380ed8f5d7a5891c8fd13334 Mon Sep 17 00:00:00 2001 From: OverSu Date: Thu, 10 Sep 2026 01:17:23 +0200 Subject: [PATCH 40/41] Publie le paquet Globinours rc.18 --- manifest.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifest.toml b/manifest.toml index 739539c..a17b28d 100644 --- a/manifest.toml +++ b/manifest.toml @@ -5,7 +5,7 @@ id = "globinours" name = "Globinours" description.en = "Lightweight animal shelter management" description.fr = "Gestion légère et complète pour refuges animaliers" -version = "1.0.0-rc.17~ynh2" +version = "1.0.0-rc.18~ynh1" maintainers = ["OverSu"] [upstream] @@ -34,8 +34,8 @@ ram.runtime = "100M" [resources] [resources.sources.main] - url = "https://nnsprod.com/git/oversu/Globinours/archive/e786756f2214ab89c0dc2667fdd484cfa5f2a176.tar.gz" - sha256 = "d685aa88adef339fddc56a29649bd6aec475baceca23f1f81e8c0ae2c6489c4a" + url = "https://nnsprod.com/git/oversu/Globinours/archive/81f259ea6ef722de7e3b6da071c092fdd81630a6.tar.gz" + sha256 = "7ea9618f27c6aeb68b30fe117e0fec4b31af48e082eb52a46e0134ab401c7784" in_subdir = true autoupdate.strategy = "latest_forgejo_commit" autoupdate.upstream = "https://nnsprod.com/git/oversu/Globinours" From 116834b67492066daed204ac06686f76437a3fc7 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 10 Sep 2026 01:17:30 +0200 Subject: [PATCH 41/41] Auto-update READMEs --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0c023ca..8679d2e 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Lightweight animal shelter management [![🌐 Official app website](https://img.shields.io/badge/Official_app_website-darkgreen?style=for-the-badge)](https://globinours.fr) [![App Demo](https://img.shields.io/badge/App_Demo-blue?style=for-the-badge)](https://demo.globinours.fr) -[![Version: 1.0.0-rc.17~ynh2](https://img.shields.io/badge/Version-1.0.0--rc.17~ynh2-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/globinours/) +[![Version: 1.0.0-rc.18~ynh1](https://img.shields.io/badge/Version-1.0.0--rc.18~ynh1-rgb(18,138,11)?style=for-the-badge)](https://ci-apps.yunohost.org/ci/apps/globinours/)