From 0904a6bdbdc05252a1e0b44df2d3df8c8adfa34f Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 9 Jun 2026 16:39:37 -0300 Subject: [PATCH 1/8] Update localized screenshots and move them into submodule --- .gitlab-ci.yml | 1 + .gitmodules | 3 + .../fdroid/ui/screenshots/CategoryItems.kt | 1219 ++++++++++++++--- .../org/fdroid/ui/screenshots/DetailsItem.kt | 73 +- .../fdroid/ui/screenshots/DiscoverItems.kt | 221 ++- .../org/fdroid/ui/screenshots/MyAppsItems.kt | 260 +++- fastlane | 1 + .../ar/images/phoneScreenshots/1_Discover.png | 3 - .../ar/images/phoneScreenshots/2_Search.png | 3 - .../ar/images/phoneScreenshots/3_My_Apps.png | 3 - .../ar/images/phoneScreenshots/4_Details.png | 3 - .../images/phoneScreenshots/1_Discover.png | 3 - .../ast/images/phoneScreenshots/2_Search.png | 3 - .../ast/images/phoneScreenshots/3_My_Apps.png | 3 - .../ast/images/phoneScreenshots/4_Details.png | 3 - .../be/images/phoneScreenshots/1_Discover.png | 3 - .../be/images/phoneScreenshots/2_Search.png | 3 - .../be/images/phoneScreenshots/3_My_Apps.png | 3 - .../be/images/phoneScreenshots/4_Details.png | 3 - .../bg/images/phoneScreenshots/1_Discover.png | 3 - .../bg/images/phoneScreenshots/2_Search.png | 3 - .../bg/images/phoneScreenshots/3_My_Apps.png | 3 - .../bg/images/phoneScreenshots/4_Details.png | 3 - .../bn/images/phoneScreenshots/1_Discover.png | 3 - .../bn/images/phoneScreenshots/2_Search.png | 3 - .../bn/images/phoneScreenshots/3_My_Apps.png | 3 - .../bn/images/phoneScreenshots/4_Details.png | 3 - .../ca/images/phoneScreenshots/1_Discover.png | 3 - .../ca/images/phoneScreenshots/2_Search.png | 3 - .../ca/images/phoneScreenshots/3_My_Apps.png | 3 - .../ca/images/phoneScreenshots/4_Details.png | 3 - .../cs/images/phoneScreenshots/1_Discover.png | 3 - .../cs/images/phoneScreenshots/2_Search.png | 3 - .../cs/images/phoneScreenshots/3_My_Apps.png | 3 - .../cs/images/phoneScreenshots/4_Details.png | 3 - .../cy/images/phoneScreenshots/1_Discover.png | 3 - .../cy/images/phoneScreenshots/2_Search.png | 3 - .../cy/images/phoneScreenshots/3_My_Apps.png | 3 - .../cy/images/phoneScreenshots/4_Details.png | 3 - .../da/images/phoneScreenshots/1_Discover.png | 3 - .../da/images/phoneScreenshots/2_Search.png | 3 - .../da/images/phoneScreenshots/3_My_Apps.png | 3 - .../da/images/phoneScreenshots/4_Details.png | 3 - .../de/images/phoneScreenshots/1_Discover.png | 3 - .../de/images/phoneScreenshots/2_Search.png | 3 - .../de/images/phoneScreenshots/3_My_Apps.png | 3 - .../de/images/phoneScreenshots/4_Details.png | 3 - .../el/images/phoneScreenshots/1_Discover.png | 3 - .../el/images/phoneScreenshots/2_Search.png | 3 - .../el/images/phoneScreenshots/3_My_Apps.png | 3 - .../el/images/phoneScreenshots/4_Details.png | 3 - .../images/phoneScreenshots/1_Discover.png | 3 - .../images/phoneScreenshots/2_Search.png | 3 - .../images/phoneScreenshots/3_My_Apps.png | 3 - .../images/phoneScreenshots/4_Details.png | 3 - .../images/phoneScreenshots/1_Discover.png | 3 - .../images/phoneScreenshots/2_Search.png | 3 - .../images/phoneScreenshots/3_My_Apps.png | 3 - .../images/phoneScreenshots/4_Details.png | 3 - .../eo/images/phoneScreenshots/1_Discover.png | 3 - .../eo/images/phoneScreenshots/2_Search.png | 3 - .../eo/images/phoneScreenshots/3_My_Apps.png | 3 - .../eo/images/phoneScreenshots/4_Details.png | 3 - .../images/phoneScreenshots/1_Discover.png | 3 - .../images/phoneScreenshots/2_Search.png | 3 - .../images/phoneScreenshots/3_My_Apps.png | 3 - .../images/phoneScreenshots/4_Details.png | 3 - .../es/images/phoneScreenshots/1_Discover.png | 3 - .../es/images/phoneScreenshots/2_Search.png | 3 - .../es/images/phoneScreenshots/3_My_Apps.png | 3 - .../es/images/phoneScreenshots/4_Details.png | 3 - .../et/images/phoneScreenshots/1_Discover.png | 3 - .../et/images/phoneScreenshots/2_Search.png | 3 - .../et/images/phoneScreenshots/3_My_Apps.png | 3 - .../et/images/phoneScreenshots/4_Details.png | 3 - .../eu/images/phoneScreenshots/1_Discover.png | 3 - .../eu/images/phoneScreenshots/2_Search.png | 3 - .../eu/images/phoneScreenshots/3_My_Apps.png | 3 - .../eu/images/phoneScreenshots/4_Details.png | 3 - .../fa/images/phoneScreenshots/1_Discover.png | 3 - .../fa/images/phoneScreenshots/2_Search.png | 3 - .../fa/images/phoneScreenshots/3_My_Apps.png | 3 - .../fa/images/phoneScreenshots/4_Details.png | 3 - .../fi/images/phoneScreenshots/1_Discover.png | 3 - .../fi/images/phoneScreenshots/2_Search.png | 3 - .../fi/images/phoneScreenshots/3_My_Apps.png | 3 - .../fi/images/phoneScreenshots/4_Details.png | 3 - .../images/phoneScreenshots/1_Discover.png | 3 - .../fil/images/phoneScreenshots/2_Search.png | 3 - .../fil/images/phoneScreenshots/3_My_Apps.png | 3 - .../fil/images/phoneScreenshots/4_Details.png | 3 - .../fr/images/phoneScreenshots/1_Discover.png | 3 - .../fr/images/phoneScreenshots/2_Search.png | 3 - .../fr/images/phoneScreenshots/3_My_Apps.png | 3 - .../fr/images/phoneScreenshots/4_Details.png | 3 - .../ga/images/phoneScreenshots/1_Discover.png | 3 - .../ga/images/phoneScreenshots/2_Search.png | 3 - .../ga/images/phoneScreenshots/3_My_Apps.png | 3 - .../ga/images/phoneScreenshots/4_Details.png | 3 - .../gd/images/phoneScreenshots/1_Discover.png | 3 - .../gd/images/phoneScreenshots/2_Search.png | 3 - .../gd/images/phoneScreenshots/3_My_Apps.png | 3 - .../gd/images/phoneScreenshots/4_Details.png | 3 - .../gl/images/phoneScreenshots/1_Discover.png | 3 - .../gl/images/phoneScreenshots/2_Search.png | 3 - .../gl/images/phoneScreenshots/3_My_Apps.png | 3 - .../gl/images/phoneScreenshots/4_Details.png | 3 - .../he/images/phoneScreenshots/1_Discover.png | 3 - .../he/images/phoneScreenshots/2_Search.png | 3 - .../he/images/phoneScreenshots/3_My_Apps.png | 3 - .../he/images/phoneScreenshots/4_Details.png | 3 - .../images/phoneScreenshots/1_Discover.png | 3 - .../images/phoneScreenshots/2_Search.png | 3 - .../images/phoneScreenshots/3_My_Apps.png | 3 - .../images/phoneScreenshots/4_Details.png | 3 - .../hi/images/phoneScreenshots/1_Discover.png | 3 - .../hi/images/phoneScreenshots/2_Search.png | 3 - .../hi/images/phoneScreenshots/3_My_Apps.png | 3 - .../hi/images/phoneScreenshots/4_Details.png | 3 - .../hr/images/phoneScreenshots/1_Discover.png | 3 - .../hr/images/phoneScreenshots/2_Search.png | 3 - .../hr/images/phoneScreenshots/3_My_Apps.png | 3 - .../hr/images/phoneScreenshots/4_Details.png | 3 - .../hu/images/phoneScreenshots/1_Discover.png | 3 - .../hu/images/phoneScreenshots/2_Search.png | 3 - .../hu/images/phoneScreenshots/3_My_Apps.png | 3 - .../hu/images/phoneScreenshots/4_Details.png | 3 - .../id/images/phoneScreenshots/1_Discover.png | 3 - .../id/images/phoneScreenshots/2_Search.png | 3 - .../id/images/phoneScreenshots/3_My_Apps.png | 3 - .../id/images/phoneScreenshots/4_Details.png | 3 - .../is/images/phoneScreenshots/1_Discover.png | 3 - .../is/images/phoneScreenshots/2_Search.png | 3 - .../is/images/phoneScreenshots/3_My_Apps.png | 3 - .../is/images/phoneScreenshots/4_Details.png | 3 - .../it/images/phoneScreenshots/1_Discover.png | 3 - .../it/images/phoneScreenshots/2_Search.png | 3 - .../it/images/phoneScreenshots/3_My_Apps.png | 3 - .../it/images/phoneScreenshots/4_Details.png | 3 - .../ja/images/phoneScreenshots/1_Discover.png | 3 - .../ja/images/phoneScreenshots/2_Search.png | 3 - .../ja/images/phoneScreenshots/3_My_Apps.png | 3 - .../ja/images/phoneScreenshots/4_Details.png | 3 - .../kn/images/phoneScreenshots/1_Discover.png | 3 - .../kn/images/phoneScreenshots/2_Search.png | 3 - .../kn/images/phoneScreenshots/3_My_Apps.png | 3 - .../kn/images/phoneScreenshots/4_Details.png | 3 - .../ko/images/phoneScreenshots/1_Discover.png | 3 - .../ko/images/phoneScreenshots/2_Search.png | 3 - .../ko/images/phoneScreenshots/3_My_Apps.png | 3 - .../ko/images/phoneScreenshots/4_Details.png | 3 - .../lt/images/phoneScreenshots/1_Discover.png | 3 - .../lt/images/phoneScreenshots/2_Search.png | 3 - .../lt/images/phoneScreenshots/3_My_Apps.png | 3 - .../lt/images/phoneScreenshots/4_Details.png | 3 - .../lv/images/phoneScreenshots/1_Discover.png | 3 - .../lv/images/phoneScreenshots/2_Search.png | 3 - .../lv/images/phoneScreenshots/3_My_Apps.png | 3 - .../lv/images/phoneScreenshots/4_Details.png | 3 - .../ml/images/phoneScreenshots/1_Discover.png | 3 - .../ml/images/phoneScreenshots/2_Search.png | 3 - .../ml/images/phoneScreenshots/3_My_Apps.png | 3 - .../ml/images/phoneScreenshots/4_Details.png | 3 - .../nb/images/phoneScreenshots/1_Discover.png | 3 - .../nb/images/phoneScreenshots/2_Search.png | 3 - .../nb/images/phoneScreenshots/3_My_Apps.png | 3 - .../nb/images/phoneScreenshots/4_Details.png | 3 - .../nl/images/phoneScreenshots/1_Discover.png | 3 - .../nl/images/phoneScreenshots/2_Search.png | 3 - .../nl/images/phoneScreenshots/3_My_Apps.png | 3 - .../nl/images/phoneScreenshots/4_Details.png | 3 - .../nn/images/phoneScreenshots/1_Discover.png | 3 - .../nn/images/phoneScreenshots/2_Search.png | 3 - .../nn/images/phoneScreenshots/3_My_Apps.png | 3 - .../nn/images/phoneScreenshots/4_Details.png | 3 - .../pa/images/phoneScreenshots/1_Discover.png | 3 - .../pa/images/phoneScreenshots/2_Search.png | 3 - .../pa/images/phoneScreenshots/3_My_Apps.png | 3 - .../pa/images/phoneScreenshots/4_Details.png | 3 - .../pl/images/phoneScreenshots/1_Discover.png | 3 - .../pl/images/phoneScreenshots/2_Search.png | 3 - .../pl/images/phoneScreenshots/3_My_Apps.png | 3 - .../pl/images/phoneScreenshots/4_Details.png | 3 - .../images/phoneScreenshots/1_Discover.png | 3 - .../images/phoneScreenshots/2_Search.png | 3 - .../images/phoneScreenshots/3_My_Apps.png | 3 - .../images/phoneScreenshots/4_Details.png | 3 - .../images/phoneScreenshots/1_Discover.png | 3 - .../images/phoneScreenshots/2_Search.png | 3 - .../images/phoneScreenshots/3_My_Apps.png | 3 - .../images/phoneScreenshots/4_Details.png | 3 - .../pt/images/phoneScreenshots/1_Discover.png | 3 - .../pt/images/phoneScreenshots/2_Search.png | 3 - .../pt/images/phoneScreenshots/3_My_Apps.png | 3 - .../pt/images/phoneScreenshots/4_Details.png | 3 - .../ro/images/phoneScreenshots/1_Discover.png | 3 - .../ro/images/phoneScreenshots/2_Search.png | 3 - .../ro/images/phoneScreenshots/3_My_Apps.png | 3 - .../ro/images/phoneScreenshots/4_Details.png | 3 - .../ru/images/phoneScreenshots/1_Discover.png | 3 - .../ru/images/phoneScreenshots/2_Search.png | 3 - .../ru/images/phoneScreenshots/3_My_Apps.png | 3 - .../ru/images/phoneScreenshots/4_Details.png | 3 - .../sc/images/phoneScreenshots/1_Discover.png | 3 - .../sc/images/phoneScreenshots/2_Search.png | 3 - .../sc/images/phoneScreenshots/3_My_Apps.png | 3 - .../sc/images/phoneScreenshots/4_Details.png | 3 - .../sk/images/phoneScreenshots/1_Discover.png | 3 - .../sk/images/phoneScreenshots/2_Search.png | 3 - .../sk/images/phoneScreenshots/3_My_Apps.png | 3 - .../sk/images/phoneScreenshots/4_Details.png | 3 - .../sl/images/phoneScreenshots/1_Discover.png | 3 - .../sl/images/phoneScreenshots/2_Search.png | 3 - .../sl/images/phoneScreenshots/3_My_Apps.png | 3 - .../sl/images/phoneScreenshots/4_Details.png | 3 - .../sq/images/phoneScreenshots/1_Discover.png | 3 - .../sq/images/phoneScreenshots/2_Search.png | 3 - .../sq/images/phoneScreenshots/3_My_Apps.png | 3 - .../sq/images/phoneScreenshots/4_Details.png | 3 - .../sr/images/phoneScreenshots/1_Discover.png | 3 - .../sr/images/phoneScreenshots/2_Search.png | 3 - .../sr/images/phoneScreenshots/3_My_Apps.png | 3 - .../sr/images/phoneScreenshots/4_Details.png | 3 - .../sv/images/phoneScreenshots/1_Discover.png | 3 - .../sv/images/phoneScreenshots/2_Search.png | 3 - .../sv/images/phoneScreenshots/3_My_Apps.png | 3 - .../sv/images/phoneScreenshots/4_Details.png | 3 - .../sw/images/phoneScreenshots/1_Discover.png | 3 - .../sw/images/phoneScreenshots/2_Search.png | 3 - .../sw/images/phoneScreenshots/3_My_Apps.png | 3 - .../sw/images/phoneScreenshots/4_Details.png | 3 - .../ta/images/phoneScreenshots/1_Discover.png | 3 - .../ta/images/phoneScreenshots/2_Search.png | 3 - .../ta/images/phoneScreenshots/3_My_Apps.png | 3 - .../ta/images/phoneScreenshots/4_Details.png | 3 - .../th/images/phoneScreenshots/1_Discover.png | 3 - .../th/images/phoneScreenshots/2_Search.png | 3 - .../th/images/phoneScreenshots/3_My_Apps.png | 3 - .../th/images/phoneScreenshots/4_Details.png | 3 - .../tr/images/phoneScreenshots/1_Discover.png | 3 - .../tr/images/phoneScreenshots/2_Search.png | 3 - .../tr/images/phoneScreenshots/3_My_Apps.png | 3 - .../tr/images/phoneScreenshots/4_Details.png | 3 - .../uk/images/phoneScreenshots/1_Discover.png | 3 - .../uk/images/phoneScreenshots/2_Search.png | 3 - .../uk/images/phoneScreenshots/3_My_Apps.png | 3 - .../uk/images/phoneScreenshots/4_Details.png | 3 - .../vi/images/phoneScreenshots/1_Discover.png | 3 - .../vi/images/phoneScreenshots/2_Search.png | 3 - .../vi/images/phoneScreenshots/3_My_Apps.png | 3 - .../vi/images/phoneScreenshots/4_Details.png | 3 - .../images/phoneScreenshots/1_Discover.png | 3 - .../yue/images/phoneScreenshots/2_Search.png | 3 - .../yue/images/phoneScreenshots/3_My_Apps.png | 3 - .../yue/images/phoneScreenshots/4_Details.png | 3 - .../images/phoneScreenshots/1_Discover.png | 3 - .../images/phoneScreenshots/2_Search.png | 3 - .../images/phoneScreenshots/3_My_Apps.png | 3 - .../images/phoneScreenshots/4_Details.png | 3 - .../images/phoneScreenshots/1_Discover.png | 3 - .../images/phoneScreenshots/2_Search.png | 3 - .../images/phoneScreenshots/3_My_Apps.png | 3 - .../images/phoneScreenshots/4_Details.png | 3 - .../images/phoneScreenshots/1_Discover.png | 3 - .../images/phoneScreenshots/2_Search.png | 3 - .../images/phoneScreenshots/3_My_Apps.png | 3 - .../images/phoneScreenshots/4_Details.png | 3 - tools/take-screenshots.py | 9 +- 268 files changed, 1463 insertions(+), 1104 deletions(-) create mode 100644 .gitmodules create mode 160000 fastlane delete mode 100644 src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/be/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/be/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/be/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/be/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/da/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/da/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/da/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/da/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/de/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/de/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/de/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/de/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/el/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/el/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/el/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/el/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/es/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/es/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/es/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/es/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/et/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/et/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/et/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/et/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/he/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/he/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/he/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/he/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/id/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/id/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/id/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/id/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/is/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/is/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/is/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/is/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/it/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/it/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/it/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/it/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/th/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/th/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/th/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/th/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/4_Details.png delete mode 100644 src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/1_Discover.png delete mode 100644 src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/2_Search.png delete mode 100644 src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/3_My_Apps.png delete mode 100644 src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/4_Details.png diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 82893a609..c3ca44408 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -19,6 +19,7 @@ workflow: - saas-linux-medium-amd64 variables: JAVA_HOME: /usr/lib/jvm/java-21-openjdk-amd64 + GIT_SUBMODULE_STRATEGY: none before_script: - test -e /etc/apt/sources.list.d/trixie-backports.list || echo "deb http://deb.debian.org/debian trixie-backports main" >> /etc/apt/sources.list diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..8a1137a46 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "fastlane"] + path = fastlane + url = https://gitlab.com/fdroid/fdroidclient-fastlane.git diff --git a/app/src/androidTest/java/org/fdroid/ui/screenshots/CategoryItems.kt b/app/src/androidTest/java/org/fdroid/ui/screenshots/CategoryItems.kt index 1f2383b88..5975aa7b1 100644 --- a/app/src/androidTest/java/org/fdroid/ui/screenshots/CategoryItems.kt +++ b/app/src/androidTest/java/org/fdroid/ui/screenshots/CategoryItems.kt @@ -6,11 +6,39 @@ import org.fdroid.ui.categories.CategoryItem fun getCategoryItems(localeList: LocaleListCompat) = listOf( + CategoryItem( + id = "Action Game", + name = + mapOf( + "ar" to "العاب الآكشن", + "cs" to "Akční hra", + "de" to "Action-Spiel", + "en-GB" to "Action Game", + "en-US" to "Action Game", + "et" to "Märulimängud", + "fa" to "بازی کنشی", + "fi" to "Toimintapeli", + "fr" to "Jeu d'action", + "ga" to "Cluiche Gníomhaíochta", + "id" to "Game Aksi", + "ja" to "アクション", + "nl" to "Actie Spel", + "pl" to "Gra akcji", + "pt-BR" to "Jogo de ação", + "ro" to "Joc de acțiune", + "ru" to "Экшен-игра", + "vi" to "Game hành động", + "zh-CN" to "动作游戏", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "AI Chat", name = mapOf( + "af" to "AI Chat", "ar" to "محادثة ذكاء اصناعي", + "be" to "ШІ Размова", "bg" to "Разговори с ИИ", "ca" to "Xat d'IA", "cs" to "AI chat", @@ -30,6 +58,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "hu" to "MI csevegés", "id" to "Chat AI", "is" to "AI-spjall", + "it" to "Chat IA", "ja" to "AI チャット", "kn" to "AI ಚಾಟ್", "ko" to "AI 채팅", @@ -39,9 +68,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "nl" to "AI-chat", "nl-BE" to "AI Chat", "pl" to "Czat AI", + "pt" to "Conversar com IA", "pt-BR" to "Conversar com IA", + "pt-PT" to "Conversar com IA", "ro" to "Chat AI", "ru" to "Чаты с ИИ", + "sk" to "AI Chat", "sl" to "Klepet z UI", "sq" to "Fjalosje IA", "sr" to "Ћаскање са вештачким паметњаковићем", @@ -60,6 +92,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "مدير تطبيق", + "be" to "Кіраўнік Праграм", "bg" to "Управление на проложения", "ca" to "Gestor d'aplicacions", "cs" to "Správce aplikací", @@ -72,6 +105,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "es" to "Gestor de aplicaciones", "et" to "Rakendustehaldur", "fa" to "مدیر کاره", + "fi" to "Sovellusten hallinta", "fr" to "Gestionnaire d'applications", "ga" to "Bainisteoir Aipeanna", "he" to "מנהל יישומונים", @@ -79,6 +113,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "hu" to "Alkalmazáskezelő", "id" to "Manajer Aplikasi", "is" to "Forritastýring", + "it" to "Gestore di app", "ja" to "アプリマネージャー", "kn" to "ಅಪ್ಲಿಕೇಶನ್ ಮ್ಯಾನೇಜರ್", "ko" to "앱 관리자", @@ -88,9 +123,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "nl" to "Appbeheerder", "nl-BE" to "App Manager", "pl" to "Menedżer aplikacji", + "pt" to "Gestor de apps", "pt-BR" to "Gerenciador de aplicativos", + "pt-PT" to "Gestor de apps", "ro" to "Manager aplicații", "ru" to "Менеджер приложений", + "sk" to "Správca aplikácií", "sl" to "Upravitelj orodij", "sq" to "Përgjegjës Aplikacionesh", "sr" to "Управник програма", @@ -109,6 +147,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "متجر التطبيقات والمُحدِّث", + "be" to "App Store і абнаўленні", "bg" to "Магазин за приложения и обновяване", "ca" to "Botiga d'aplicacions i actualitzador", "ckb" to "ئاپستۆر و نوێکەرەوەکان", @@ -129,7 +168,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ga" to "App Store & Nuashonraitheoir", "gl" to "Tenda de aplicacións e actualizador", "he" to "חנות יישומונים ומעדכן", - "hr" to "Trgovina aplikacija i ažuriranje", + "hr" to "Trgovina aplikacija i alat za aktualiziranje", "hu" to "Alkalmazásbolt és -frissítő", "id" to "Toko Aplikasi & Aplikasi Pembaruan", "is" to "Forritasafn og uppfærslur", @@ -148,12 +187,13 @@ fun getCategoryItems(localeList: LocaleListCompat) = "pt-BR" to "Loja de apps e atualizador", "pt-PT" to "Loja de apps e atualizador", "ro" to "Magazin aplicații & Actualizări", - "ru" to "Приложения и обновления", + "ru" to "Магазин приложений и обновления", "sc" to "Butega de aplicatziones e atualizadore", + "sk" to "Obchod s aplikáciami a aktualizácie", "sl" to "App trgovina in posodobitve", "sq" to "Shitore & Përditësues Aplikacionesh", "sr" to "Складиште и надграђивач програма", - "sv" to "App Store och uppdateringsprogram", + "sv" to "Appbutik & uppdateringsprogram", "sw" to "Ghala la Programu", "ta" to "ஆப் கடை & அப்டேட்டர்", "tr" to "Uygulama Deposu ve Güncelleyici", @@ -165,11 +205,83 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Battery", + name = + mapOf( + "ar" to "البطارية", + "be" to "Батарэя", + "bg" to "Батерия", + "ca" to "Bateria", + "cs" to "Baterie", + "de" to "Akku", + "el" to "Μπαταρία", + "en-GB" to "Battery", + "en-US" to "Battery", + "eo" to "Baterio", + "es" to "Batería", + "et" to "Akuhaldus", + "fa" to "باتری", + "fi" to "Akku", + "fr" to "Batterie", + "ga" to "Ceallraí", + "hr" to "Baterija", + "hu" to "Akkumulátor", + "id" to "Baterai", + "is" to "Rafhlaða", + "it" to "Batteria", + "ja" to "バッテリー", + "nb" to "Batteri", + "nl" to "Batterij", + "pl" to "Bateria", + "pt" to "Pilha", + "pt-BR" to "Bateria", + "pt-PT" to "Pilha", + "ro" to "Baterie", + "ru" to "Батарея", + "sk" to "Batéria", + "sl" to "Baterija", + "sq" to "Bateri", + "sr" to "Батерија", + "tr" to "Batarya", + "uk" to "Батарея", + "vi" to "Pin", + "zh-CN" to "电池", + "zh-TW" to "電池", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), + CategoryItem( + id = "Board Game", + name = + mapOf( + "ar" to "العاب الطاولة", + "cs" to "Desková hra", + "de" to "Brettspiel", + "en-GB" to "Board Game", + "en-US" to "Board Game", + "et" to "Lauamängud", + "fa" to "بازی صفحه‌ای", + "fr" to "Jeu de société", + "ga" to "Cluiche Boird", + "id" to "Game Papan", + "ja" to "ボードゲーム", + "nl" to "Bordspel", + "pl" to "Gra planszowa", + "pt-BR" to "Jogo de tabuleiro", + "ro" to "Joc de societate", + "ru" to "Настольная игра", + "vi" to "Game cờ", + "zh-CN" to "桌游", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Bookmark", name = mapOf( "ar" to "علامة", + "be" to "Закладка", "bg" to "Отметки", "ca" to "Adreça d'interès", "cs" to "Záložka", @@ -209,8 +321,9 @@ fun getCategoryItems(localeList: LocaleListCompat) = "pt-BR" to "Marcador", "pt-PT" to "Marcador", "ro" to "Semn de carte", - "ru" to "Закладки", + "ru" to "Закладка", "sc" to "Sinnalibru", + "sk" to "Záložky", "sl" to "Zaznamek", "sq" to "Faqerojtës", "sr" to "Забелешка", @@ -231,6 +344,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "المتصفح", + "be" to "Аглядальнік", "bg" to "Мрежов четец", "br" to "Merdeer", "ca" to "Navegador", @@ -257,6 +371,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "is" to "Vafri", "it" to "Browser", "ja" to "ブラウザ", + "kab" to "Iminig", "kn" to "ಬ್ರೌಸರ್", "ko" to "브라우저", "lb" to "Browser", @@ -271,8 +386,9 @@ fun getCategoryItems(localeList: LocaleListCompat) = "pt-BR" to "Navegador", "pt-PT" to "Navegador", "ro" to "Navigator web", - "ru" to "Браузеры", + "ru" to "Браузер", "sc" to "Navigadore", + "sk" to "Prehliadač", "sl" to "Brskalnik", "sq" to "Shfletues", "sr" to "Прегледник", @@ -293,6 +409,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "حاسبة", + "be" to "Калькулятар", "bg" to "Калкулатор", "ca" to "Calculadora", "cs" to "Kalkulačka", @@ -318,6 +435,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "is" to "Reiknivél", "it" to "Calcolatrice", "ja" to "計算機", + "kab" to "Tamsiḍent", "kn" to "ಕ್ಯಾಲ್ಕುಲೇಟರ್", "ko" to "계산기", "lt" to "Skaičiuotuvas", @@ -331,10 +449,11 @@ fun getCategoryItems(localeList: LocaleListCompat) = "pt-BR" to "Calculadora", "pt-PT" to "Calculador", "ro" to "Calculator", - "ru" to "Калькуляторы", + "ru" to "Калькулятор", "sc" to "Carculadora", + "sk" to "Kalkulačka", "sl" to "Kalkulator", - "sq" to "Llogaritës", + "sq" to "Makinë Llogaritëse", "sr" to "Рачунар", "sv" to "Kalkylator", "sw" to "Kikokotoo", @@ -353,6 +472,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "التقويم والأجندة", + "be" to "Каляндар і парадак дня", "bg" to "Календар и график", "ca" to "Calendaris i Agendes", "cs" to "Kalendář a agenda", @@ -367,7 +487,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "es-MX" to "Calendario y Agenda", "et" to "Kalender ja päevakava", "fa" to "تقویم و دستور کار", - "fi" to "Kalenteri & esityslista", + "fi" to "Kalenteri ja päivyri", "fr" to "Calendrier & Agenda", "ga" to "Féilire agus Clár Oibre", "gl" to "Calendario e axenda", @@ -384,15 +504,16 @@ fun getCategoryItems(localeList: LocaleListCompat) = "lv" to "Kalendārs un dienaskārtība", "my" to "ပြက္ခဒိန်နှင့် လုပ်ငန်းစဉ်များ", "nb" to "Kalender & Agenda", - "nl" to "Kalender & agenda", + "nl" to "Kalender & Agenda", "nl-BE" to "Kalender & Agenda", "pl" to "Kalendarz i harmonogram", "pt" to "Calendário e agenda", "pt-BR" to "Calendário e agenda", "pt-PT" to "Calendário e agenda", "ro" to "Calendar & Agenda", - "ru" to "Ежедневники", + "ru" to "Календари и ежедневники", "sc" to "Calendàriu e agenda", + "sk" to "Kalendár a diár", "sl" to "Koledar in urnik", "sq" to "Kalendar & Plane", "sr" to "Календар и роковник", @@ -408,11 +529,61 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Card Game", + name = + mapOf( + "ar" to "العاب البطاقات", + "cs" to "Karetní hra", + "de" to "Kartenspiel", + "en-GB" to "Card Game", + "en-US" to "Card Game", + "et" to "Kaardimängud", + "fa" to "بازی کارتی", + "fr" to "Jeu de cartes", + "ga" to "Cluiche Cártaí", + "id" to "Game Kartu", + "ja" to "カードゲーム", + "nl" to "Kaartspel", + "pl" to "Gra karciana", + "pt-BR" to "Jogo de cartas", + "ro" to "Joc de cărți", + "ru" to "Карточная игра", + "vi" to "Game bài", + "zh-CN" to "纸牌游戏", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), + CategoryItem( + id = "Casual Game", + name = + mapOf( + "cs" to "Ležérní hra", + "de" to "Casual Game", + "en-GB" to "Casual Game", + "en-US" to "Casual Game", + "et" to "Vabaaja mäng", + "fr" to "Jeu occasionnel", + "ga" to "Cluiche Ócáideach", + "id" to "Game Kasual", + "ja" to "カジュアルゲーム", + "nl" to "Casual spel", + "pl" to "Gra rekreacyjna", + "pt-BR" to "Jogo casual", + "ro" to "Joc ocazional", + "ru" to "Казуальная игра", + "vi" to "Game casual", + "zh-CN" to "休闲游戏", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Clock", name = mapOf( "ar" to "ساعة", + "be" to "Гадзіннік", + "bg" to "Часовник", "br" to "Horolaj", "ca" to "Rellotge", "cs" to "Hodiny", @@ -425,6 +596,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "es" to "Reloj", "et" to "Kellad", "fa" to "ساعت", + "fi" to "Kello", "fr" to "Horloge", "ga" to "Clog", "he" to "שעון", @@ -432,6 +604,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "hu" to "Óra", "id" to "Jam", "is" to "Klukka", + "it" to "Orologio", "ja" to "時計", "kn" to "ಗಡಿಯಾರ", "ko" to "시계", @@ -441,9 +614,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "nl" to "Klok", "nl-BE" to "Klok", "pl" to "Zegar", + "pt" to "Relógio", "pt-BR" to "Relógio", + "pt-PT" to "Relógio", "ro" to "Ceas", "ru" to "Часы", + "sk" to "Hodiny", "sl" to "Ura", "sq" to "Sahat", "sr" to "Часовник", @@ -462,12 +638,13 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "التخزين السحابي ومزامنة الملفات", + "be" to "Воблачнае Сховішча і сінхранізацыя файлаў", "bg" to "Облачно хранилище и синхронизиране", "ca" to "Emmagatzematge al núvol i sincronització d'arxius", "cs" to "Cloudové úložiště a synchronizace souborů", "da" to "Cloudlager og filsynkronisering", - "de" to "Cloud-Speicher / Dateisynchronisierung", - "el" to "Cloud Αποθηκευτικός Χώρος & Συγχρονισμός Αρχείων", + "de" to "Cloudspeicher / Dateisynchronisierung", + "el" to "Μεταφόρτωση και συγχρονισμός αρχείων", "en-GB" to "Cloud Storage & File Sync", "en-US" to "Cloud Storage & File Sync", "eo" to "Nuba konservado kaj dosiera samtempigo", @@ -491,7 +668,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "lv" to "Mākoņkrātuve un datņu sinhronizēšana", "my" to "Cloud သိုလှောင်မှုနှင့် ဖိုင်ချိတ်ဆက်ခြင်း", "nb" to "Skylagring & Filsynkronisering", - "nl" to "Cloudopslag & bestandssynchronisatie", + "nl" to "Cloudopslag & Bestanden Synchroniseren", "nl-BE" to "Cloud opslag & Bestand Synchronisatie", "pl" to "Przechowywanie w chmurze i synchronizacja plików", "pt" to "Armazenamento na nuvem e sincronização de ficheiros", @@ -500,6 +677,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Stocare în cloud & Sincronizare fișiere", "ru" to "Хранение и синхронизация", "sc" to "Archiviatzione in sa nue e sincronizada de documentos", + "sk" to "Úložisko v cloude a synchronizácia súborov", "sl" to "Shranjevanje v oblaku in sinhronizacija datotek", "sq" to "Depozitim Në Re & Njëkohësim Kartelash", "sr" to "Складиште у облаку и усклађивање датотека", @@ -585,7 +763,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Conectivitate", "ru" to "Связь", "sc" to "Connetividade", - "sk" to "Pripojiteľnosť", + "sk" to "Pripojenie", "sl" to "Povezljivost", "sn" to "Mahakiro", "so" to "Ku", @@ -614,6 +792,8 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "التواصل", + "be" to "Кантакты", + "bg" to "Контакт", "ca" to "Contacte", "cs" to "Kontakt", "da" to "Kontakt", @@ -625,6 +805,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "es" to "Contactos", "et" to "Kontaktihaldus", "fa" to "آشنا", + "fi" to "Yhteystiedot", "fr" to "Contact", "ga" to "Teagmháil", "he" to "פרטי קשר", @@ -632,6 +813,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "hu" to "Névjegy", "id" to "Kontak", "is" to "Tengiliðir", + "it" to "Contatto", "ja" to "連絡", "kn" to "ಸಂಪರ್ಕಿಸಿ", "ko" to "연락처", @@ -640,9 +822,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "nl" to "Contact", "nl-BE" to "Contact", "pl" to "Kontakt", + "pt" to "Contacto", "pt-BR" to "Contato", + "pt-PT" to "Contacto", "ro" to "Contact", "ru" to "Контакты", + "sk" to "Kontakty", "sl" to "Stiki", "sq" to "Kontakt", "sr" to "Додир", @@ -651,7 +836,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "tr" to "İletişim", "uk" to "Контакти", "vi" to "Danh bạ", - "zh-CN" to "联络", + "zh-CN" to "联系人", "zh-TW" to "聯絡", ) .getBestLocale(localeList) ?: "Unknown Category", @@ -720,7 +905,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "nl-BE" to "Ontwikkeling", "nn" to "Utvikling", "pa" to "ਡਿਵੈਲਪਮੈਂਟ", - "pl" to "Rozwój", + "pl" to "Rozwój oprogramowania", "ps" to "پرمختيا", "pt" to "Desenvolvimento", "pt-BR" to "Desenvolvimento", @@ -752,12 +937,75 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Dice", + name = + mapOf( + "ar" to "النرد", + "cs" to "Kostky", + "de" to "Würfel", + "en-GB" to "Dice", + "en-US" to "Dice", + "et" to "Täringumängud", + "fa" to "تاس", + "fr" to "Dés", + "ga" to "Dísle", + "id" to "Dadu", + "ja" to "賽子", + "nl" to "Dobbelsteen", + "pl" to "Kości", + "pt-BR" to "Dados", + "ro" to "Zar", + "ru" to "Игральные кости", + "vi" to "Xúc xắc", + "zh-CN" to "骰子", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), + CategoryItem( + id = "Diet", + name = + mapOf( + "ar" to "حمية", + "cs" to "Dieta", + "de" to "Diät", + "el" to "Δίαιτα", + "en-GB" to "Diet", + "en-US" to "Diet", + "eo" to "Dieto", + "es" to "Dieta", + "et" to "Toiduvalik", + "fa" to "رژیم", + "fr" to "Régime alimentaire", + "ga" to "Aiste bia", + "hr" to "Dijeta", + "hu" to "Étrend", + "id" to "Diet", + "is" to "Mataræði", + "ja" to "ダイエット", + "nl" to "Diëet", + "pl" to "Dieta", + "pt" to "Dieta", + "pt-BR" to "Dieta", + "pt-PT" to "Dieta", + "ro" to "Dietă", + "ru" to "Диета", + "sk" to "Strava", + "sl" to "Dieta", + "sr" to "Исхрана", + "tr" to "Diyet", + "vi" to "Ăn kiêng", + "zh-CN" to "饮食", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "DNS & Hosts", name = mapOf( "ar" to "DNS والمضيفون", "ba" to "DNS һәм хост", + "be" to "DNS і хасты", "bg" to "DNS и хостове", "ca" to "DNS i Allotjament", "cs" to "DNS a hostitelé", @@ -767,7 +1015,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "en-GB" to "DNS & Hosts", "en-US" to "DNS & Hosts", "eo" to "DNS kaj retgastigo", - "es" to "DNS y bloqueos de red", + "es" to "DNS y Hospedajes", "et" to "Nimelahendus ja hostid", "fa" to "ساناد و میزبان‌ها", "fr" to "DNS & Hôtes", @@ -794,6 +1042,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "DNS & Gazde", "ru" to "DNS и хосты", "sc" to "DNS e retzidores (hosts)", + "sk" to "DNS a hostitelia", "sl" to "DNS in gostitelji", "sq" to "DNS & Strehë", "sr" to "ДНС и домаћини", @@ -809,11 +1058,28 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Download", + name = + mapOf( + "cs" to "Stahování", + "de" to "Download", + "en-US" to "Download", + "et" to "Allalaadimised", + "fa" to "بارگیری", + "pl" to "Pobieranie", + "pt-BR" to "Download", + "ro" to "Descărcare", + "zh-CN" to "下载", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Draw", name = mapOf( "ar" to "رسم", + "be" to "Маляванне", "bg" to "Рисуване", "ca" to "Dibuix", "cs" to "Kreslení", @@ -852,6 +1118,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Desen", "ru" to "Рисование", "sc" to "Disinnu", + "sk" to "Kreslenie", "sl" to "Riši", "sq" to "Vizatim", "sr" to "Цртање", @@ -872,16 +1139,17 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "قارئ الكتب الإلكترونية", + "be" to "Чытальнікі электронных кніг", "bg" to "Четене на електронни книги", "ca" to "Lector de llibres electrònics", "cs" to "Čtečka e-knih", "da" to "E-bogslæser", "de" to "E-Book-Reader", - "el" to "Αναγνώστης ηλεκτρονικών βιβλίων", + "el" to "Ανάγνωση ηλεκτρονικών βιβλίων", "en-GB" to "Ebook Reader", "en-US" to "Ebook Reader", "eo" to "Legiloj de bitlibroj", - "es" to "Lector de libros electrónicos", + "es" to "Lector de libro-e", "et" to "E-raamatute lugemine", "fa" to "کتابخوان", "fi" to "E-kirjan lukija", @@ -910,6 +1178,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Carte electronică", "ru" to "Читалки", "sc" to "Leghidore de libros eletrònicos", + "sk" to "Čítačka e-kníh", "sl" to "Bralnik e-knjig", "sq" to "Lexues Elibrash", "sr" to "Читач е-књига", @@ -925,23 +1194,49 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Educational Game", + name = + mapOf( + "ar" to "الالعاب التعليمية", + "cs" to "Vzdělávací hra", + "de" to "Lernspiel", + "en-GB" to "Educational Game", + "en-US" to "Educational Game", + "et" to "Harivad mängud", + "fa" to "بازی آموزشی", + "fr" to "Jeu éducatif", + "ga" to "Cluiche Oideachasúil", + "id" to "Game Edukasi", + "ja" to "教育向けゲーム", + "nl" to "Educatief spel", + "pl" to "Gra edukacyjna", + "pt-BR" to "Jogo educacional", + "ro" to "Joc educațional", + "ru" to "Образовательная игра", + "vi" to "Game giáo dục", + "zh-CN" to "益智游戏", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Email", name = mapOf( "ar" to "البريد الإلكتروني", "ba" to "Email", + "be" to "Электронная пошта", "bg" to "Електронна поща", "br" to "Postel", "ca" to "Correu electrònic", "cs" to "E-mail", "da" to "E-mail", "de" to "E-Mail", - "el" to "Email", + "el" to "Ηλεκτρονικό ταχυδρομείο", "en-GB" to "Email", "en-US" to "Email", "eo" to "Retpoŝto", - "es" to "Correo electrónico", + "es" to "Correo-e", "es-MX" to "Email", "et" to "E-post", "fa" to "رایانامه", @@ -956,6 +1251,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "is" to "Tölvupóstur", "it" to "Email", "ja" to "Eメール", + "kab" to "Imayl", "kn" to "ಇಮೇಲ್", "ko" to "이메일", "lb" to "E-Mail", @@ -972,6 +1268,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "E-mail", "ru" to "Электронная почта", "sc" to "Posta eletrònica", + "sk" to "E-mail", "sl" to "E-pošta", "sq" to "Email", "sr" to "Е-пошта", @@ -987,25 +1284,51 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Emulator", + name = + mapOf( + "ar" to "مُحاكي", + "cs" to "Emulátor", + "de" to "Emulator", + "en-GB" to "Emulator", + "en-US" to "Emulator", + "et" to "Emulaatorid", + "fa" to "شبیه‌ساز", + "fr" to "Émulateur", + "ga" to "Aithriseoir", + "id" to "Emulator", + "ja" to "エミュレータ", + "nl" to "Emulator", + "pl" to "Emulator", + "pt-BR" to "Emulador", + "ro" to "Emulator", + "ru" to "Эмулятор", + "vi" to "Giả lập", + "zh-CN" to "模拟器", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "File Encryption & Vault", name = mapOf( "ar" to "تعمية الملفات والخزنة", "ba" to "Файлдарҙы шифрлау һәм Һаҡлағыс", + "be" to "Шыфраванне файлаў і сховішча", "bg" to "Шифроване на файлове и хранилище", "ca" to "Xifratge de fitxers i caixa forta", "cs" to "Šifrování souborů a trezor", "da" to "Filkryptering og boks", "de" to "Dateiverschlüsselung / Tresor", - "el" to "Κρυπτογράφηση Αρχείων & Ασφαλής Φάκελος", + "el" to "Κρυπτογράφηση Αρχείων & Φακέλων", "en-GB" to "File Encryption & Vault", "en-US" to "File Encryption & Vault", "eo" to "Dosiera ĉifrado", "es" to "Cifrado de archivos y bóvedas", "et" to "Krüptimine ja andmehoidlad", "fa" to "رمزنگاری پرونده", - "fi" to "Tiedoston salaus & holvi", + "fi" to "Tiedostojen salaus", "fr" to "Chiffrement de fichiers & Coffre-fort", "ga" to "Criptiú Comhad & Cruinneachán", "he" to "הצפנת קבצים וכספת", @@ -1020,7 +1343,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "lv" to "Datņu šifrēšana un glabātava", "my" to "ဖိုင်လုံခြုံရေး နှင့် သိုလှောင်ခန်း", "nb" to "Filkryptering & Hvelv", - "nl" to "Bestandsversleuteling & kluis", + "nl" to "Bestandsversleuteling & Kluis", "nl-BE" to "Bestanden versleuteling en kluis", "pl" to "Szyfrowanie plików i sejf", "pt" to "Criptografia de ficheiros e cofre", @@ -1029,6 +1352,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Criptare fișiere și seif", "ru" to "Шифрование файлов", "sc" to "Tzifradura de documentos e cassaforte", + "sk" to "Šifrovanie súborov a trezor", "sl" to "Šifriranje datotek in trezor", "sq" to "Fshehtëzim & Kasafortë Kartelash", "sr" to "Шифровање и складиштење датотека", @@ -1044,12 +1368,29 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "File Manager", + name = + mapOf( + "cs" to "Správce souborů", + "de" to "Dateimanager", + "en-US" to "File Manager", + "et" to "Failihaldurid", + "fa" to "مدیر پرونده", + "pl" to "Menedżer plików", + "pt-BR" to "Gerenciador de arquivos", + "ro" to "Manager fișier", + "zh-CN" to "文件管理器", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "File Transfer", name = mapOf( "ar" to "نقل الملفات", "ba" to "Файлдарҙы тапшырыу", + "be" to "Перадача файлаў", "bg" to "Прехвърляне на файлове", "ca" to "Transferències de fitxers", "cs" to "Přenos souborů", @@ -1059,7 +1400,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "en-GB" to "File Transfer", "en-US" to "File Transfer", "eo" to "Dosiera kunhavigo", - "es" to "Transferencia de archivos", + "es" to "Transferencia de archivo", "et" to "Failide edastamine", "fa" to "انتقال پرونده", "fi" to "Tiedostonsiirto", @@ -1087,6 +1428,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Transfer fișiere", "ru" to "Передача файлов", "sc" to "Tràmuda de documentos", + "sk" to "Prenos súborov", "sl" to "Posredovanje datotek", "sq" to "Shpërngulje Kartelash", "sr" to "Пренос датотека", @@ -1107,18 +1449,20 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "مدير مالي", + "be" to "Кіраўнік Фінансаў", "bg" to "Управление на файлове", "ca" to "Gestor de finances", "cs" to "Správce financí", "da" to "Økonomihåndtering", "de" to "Finanzmanager", - "el" to "Διαχειριστής Οικονομικών", + "el" to "Διαχείριση Οικονομικών", "en-GB" to "Finance Manager", "en-US" to "Finance Manager", "eo" to "Financ-administriloj", "es" to "Contabilidad y finanzas", "et" to "Rahahaldus", "fa" to "مدیر مالی", + "fi" to "Raha-asiat", "fr" to "Gestionnaire de finances", "ga" to "Bainisteoir Airgeadais", "he" to "ניהול כספים", @@ -1143,6 +1487,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Manager financiar", "ru" to "Финансовый менеджер", "sc" to "Gestore de finàntzias", + "sk" to "Správca financií", "sl" to "Upravitelj financ", "sq" to "Përgjegjës Financash", "sr" to "Управник новцем", @@ -1162,17 +1507,20 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "جدار حماية", + "be" to "Заслона", + "bg" to "Защитна стена", "ca" to "Tallafoc", "cs" to "Firewall", "da" to "Firewall", "de" to "Firewall", - "el" to "Τοίχος Προστασίας", + "el" to "Τείχος Προστασίας", "en-GB" to "Firewall", "en-US" to "Firewall", "eo" to "Farjoŝirmiloj", "es" to "Cortafuegos", "et" to "Tulemüürid", "fa" to "دیوار آتش", + "fi" to "Palomuuri", "fr" to "Pare-feu", "ga" to "Balla dóiteáin", "he" to "חומת אש", @@ -1180,6 +1528,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "hu" to "Tűzfal", "id" to "Firewall", "is" to "Eldveggur", + "it" to "Firewall", "ja" to "ファイアウォール", "kn" to "ಫೈರ್ವಾಲ್", "ko" to "방화벽", @@ -1189,11 +1538,15 @@ fun getCategoryItems(localeList: LocaleListCompat) = "nl" to "Firewall", "nl-BE" to "Firewall", "pl" to "Zapora", + "pt" to "Firewall", "pt-BR" to "Firewall", + "pt-PT" to "Firewall", "ro" to "Firewall", "ru" to "Брандмауэр", + "sk" to "Firewall", "sl" to "Požarni zid", "sq" to "Firewall", + "sr" to "Ватрени зид", "sv" to "Brandvägg", "sw" to "Firewall", "tr" to "Güvenlik Duvarı", @@ -1204,11 +1557,57 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Flashlight", + name = + mapOf( + "ar" to "مصباح", + "be" to "Ліхтарык", + "bg" to "Фенерче", + "ca" to "Llanterna", + "cs" to "Svítilna", + "de" to "Taschenlampe", + "el" to "Φακός", + "en-GB" to "Torch", + "en-US" to "Flashlight", + "eo" to "Poŝlampo", + "es" to "Linterna", + "et" to "Välklambid", + "fa" to "چراغ‌قوه", + "fi" to "Taskulamppu", + "fr" to "Lampe de poche", + "ga" to "Tóirse", + "hr" to "Svjetiljka", + "hu" to "Zseblámpa", + "id" to "Senter", + "is" to "Vasaljós", + "it" to "Torcia", + "ja" to "懐中電灯", + "nb" to "Lommelykt", + "nl" to "Zaklamp", + "pl" to "Latarka", + "pt" to "Lanterna", + "pt-BR" to "Lanterna", + "pt-PT" to "Lanterna", + "ro" to "Lanternă", + "ru" to "Фонарик", + "sk" to "Baterka", + "sl" to "Svetilka", + "sr" to "Лампе", + "tr" to "Fener", + "uk" to "Ліхтарик", + "vi" to "Đèn pin", + "zh-CN" to "手电筒", + "zh-TW" to "手電筒", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Forum", name = mapOf( "ar" to "المنتدى", + "be" to "Форум", "bg" to "Форум", "br" to "Forom", "ca" to "Fòrum", @@ -1222,6 +1621,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "es" to "Foros", "et" to "Foorumid", "fa" to "انجمن", + "fi" to "Foorumi", "fr" to "Forum", "ga" to "Fóram", "he" to "פורום", @@ -1246,8 +1646,10 @@ fun getCategoryItems(localeList: LocaleListCompat) = "pt-PT" to "Fórum", "ro" to "Forum", "ru" to "Форум", + "sk" to "Fórum", "sl" to "Klepetalnica", "sq" to "Forum", + "sr" to "Збор", "sv" to "Forum", "sw" to "Jukwaa la majadiliano", "ta" to "மன்றம்", @@ -1264,6 +1666,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "معرض", + "be" to "Галерэя", "bg" to "Галерия", "ca" to "Galeria", "cs" to "Galerie", @@ -1302,6 +1705,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Galerie", "ru" to "Галерея", "sc" to "Galleria", + "sk" to "Galéria", "sl" to "Galerija", "sq" to "Galeri", "sr" to "Излог слика", @@ -1318,100 +1722,27 @@ fun getCategoryItems(localeList: LocaleListCompat) = .getBestLocale(localeList) ?: "Unknown Category", ), CategoryItem( - id = "Games", + id = "Game Helper", name = mapOf( - "af" to "Speletjies", - "ar" to "الألعاب", - "ast" to "Xuegos", - "ba" to "Уйындар", - "be" to "Гульні", - "ber" to "ⵓⵔⴰⵔⵏ", - "bg" to "Игри", - "bn" to "গেমস", - "bn-BD" to "গেমস", - "bo" to "རྩེད་རིགས།", - "br" to "C'hoarioù", - "ca" to "Jocs", - "ckb" to "یاری", - "cs" to "Hry", - "cy" to "Gemau", - "da" to "Spil", - "de" to "Spiele", - "el" to "Παιχνίδια", - "en-GB" to "Games", - "en-US" to "Games", - "eo" to "Ludoj", - "es" to "Juegos", - "es-AR" to "Juegos", - "es-MX" to "Juegos", - "et" to "Mängud", - "eu" to "Jolasak", - "fa" to "بازی", - "fi" to "Pelit", - "fil" to "Laro", - "fr" to "Jeux", - "fy" to "Spultsjes", - "ga" to "Cluichí", - "gd" to "Geamannan", - "gl" to "Xogos", - "he" to "משחקים", - "hi" to "गेम्स", - "hr" to "Igre", - "hu" to "Játékok", - "hy" to "Խաղեր", - "id" to "Permainan", - "is" to "Leikir", - "it" to "Giochi", - "ja" to "ゲーム", - "kab" to "Uraren", - "kmr" to "Lîsk", - "kn" to "ಆಟಗಳು", - "ko" to "게임", - "lb" to "Spiller", - "lt" to "Žaidimai", - "lv" to "Spēles", - "mk" to "Игри", - "ml" to "കളികൾ", - "mn" to "Тоглоомууд", - "mr" to "खेळ", - "my" to "ဂိမ်းများ", - "nb" to "Spill", - "ne" to "खेलहरू", - "nl" to "Spellen", - "nl-BE" to "Spellen", - "nn" to "Spel", - "pa" to "ਖੇਡਾਂ", - "pl" to "Gry", - "ps" to "لوبې", - "pt" to "Jogos", - "pt-BR" to "Jogos", - "pt-PT" to "Jogos", - "ro" to "Jocuri", - "ru" to "Игры", - "sc" to "Giogos", - "si" to "ක්‍රීඩා", - "sk" to "Hry", - "sl" to "Igre", - "sn" to "Mitambo", - "so" to "Geemamka", - "sq" to "Lojëra", - "sr" to "Игре", - "sv" to "Spel", - "sw" to "Michezo", - "ta" to "விளையாட்டுகள்", - "te" to "ఆట", - "th" to "เกม", - "tr" to "Oyunlar", - "tzm" to "uraren", - "ug" to "ئويۇنلار", - "uk" to "Ігри", - "ur" to "گیمس", - "vi" to "Trò chơi", - "yue" to "遊戲", - "zh-CN" to "游戏", - "zh-HK" to "遊戲", - "zh-TW" to "遊戲", + "ar" to "مُساعد الالعاب", + "cs" to "Herní pomocník", + "de" to "Spielhilfe", + "en-GB" to "Game Helper", + "en-US" to "Game Helper", + "et" to "Mängude abitarvikud", + "fa" to "یاریگر بازی", + "fr" to "Aide au jeu", + "ga" to "Cúntóir Cluiche", + "id" to "Bantuan Game", + "ja" to "ゲームヘルパー", + "nl" to "Spellenhelper", + "pl" to "Pomocnik do gry", + "pt-BR" to "Ajudante de jogo", + "ro" to "Instrument de ajutor pentru joc", + "ru" to "Игровой помощник", + "vi" to "Trợ giúp game", + "zh-CN" to "游戏助手", ) .getBestLocale(localeList) ?: "Unknown Category", ), @@ -1444,7 +1775,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "es-MX" to "Gráficos", "et" to "Graafika", "eu" to "Grafikoak", - "fa" to "گرافیک", + "fa" to "نگاشتار", "fi" to "Grafiikka", "fil" to "Grapiks", "fr" to "Graphisme", @@ -1520,13 +1851,14 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ca" to "Registre d'hàbits", "cs" to "Sledování návyků", "de" to "Gewohnheitstracker", - "el" to "Ιχνηλάτης Συνηθειών", + "el" to "Καταγραφή Συνηθειών", "en-GB" to "Habit Tracker", "en-US" to "Habit Tracker", "eo" to "Spuriloj de kutimoj", "es" to "Seguimiento de hábitos", "et" to "Elustiil", "fa" to "ردیاب عادت", + "fi" to "Rutiinien seuranta", "fr" to "Suivi des habitudes", "ga" to "Rianaitheoir Nósanna", "he" to "מעקב הרגלים", @@ -1550,8 +1882,10 @@ fun getCategoryItems(localeList: LocaleListCompat) = "pt-PT" to "Rastejador de hábitos", "ro" to "Jurnal de obiceiuri", "ru" to "Трекер привычек", + "sk" to "Sledovanie návykov", "sl" to "Sledilnik navad", "sq" to "Ndjekës Zakonesh", + "sr" to "Праћење навика", "sv" to "Vanespårare", "sw" to "Kifuatilia Tabia", "ta" to "பழக்கமான டிராக்கர்", @@ -1563,17 +1897,52 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Health Manager", + name = + mapOf( + "ar" to "مدير الصحة", + "cs" to "Správce zdraví", + "de" to "Gesundheitsmanager", + "el" to "Διαχείριση Υγείας", + "en-GB" to "Health Manager", + "en-US" to "Health Manager", + "eo" to "Administriloj de sano", + "et" to "Tervisehaldus", + "fa" to "مدیر سلامتی", + "fr" to "Responsable santé", + "ga" to "Bainisteoir Sláinte", + "hr" to "Upravljač zdravljem", + "hu" to "Egészségkezelő", + "id" to "Manajer Kesehatan", + "is" to "Heilsustjórnun", + "ja" to "健康管理", + "nl" to "Gezondheidsbeheer", + "pl" to "Menedżer zdrowia", + "pt" to "Gestão de saúde", + "pt-BR" to "Gerenciamento de saúde", + "pt-PT" to "Gestão de saúde", + "ro" to "Manager de sănătate", + "sk" to "Správca zdravia", + "sl" to "Upravljalnik zdravja", + "tr" to "Sağlık Yönetimi", + "vi" to "Quản lý sức khỏe", + "zh-CN" to "健康管理工具", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Icon Pack", name = mapOf( "ar" to "حزمة الأيقونات", + "be" to "Пачкі значкоў", "bg" to "Пакет с пиктограми", "ca" to "Pack d'icones", "cs" to "Balíček ikon", "da" to "Ikonpakke", - "de" to "Symbol-Paket", - "el" to "Πακέτο Εικονιδίων", + "de" to "Symbolpaket", + "el" to "Πακέτα Εικονιδίων", "en-GB" to "Icon Pack", "en-US" to "Icon Pack", "eo" to "Bildsimbol-pakaĵoj", @@ -1605,6 +1974,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Pachet iconițe", "ru" to "Наборы значков", "sc" to "Pachete de iconas", + "sk" to "Balík ikon", "sl" to "Zbirka ikon", "sq" to "Paketë Ikonash", "sr" to "Омот сличица", @@ -1723,17 +2093,19 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "جرد", + "be" to "Інвэнтар", "ca" to "Inventari", "cs" to "Inventář", "da" to "Inventar", "de" to "Inventar", - "el" to "Απόθεμα", + "el" to "Απογραφή", "en-GB" to "Inventory", "en-US" to "Inventory", "eo" to "Administriloj de posedaĵoj", "es" to "Inventario", "et" to "Varahaldus", "fa" to "موجودی", + "fi" to "Varasto", "fr" to "Inventaire", "ga" to "Fardal", "he" to "מלאי", @@ -1750,8 +2122,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "nl" to "Inventarisatie", "nl-BE" to "Voorraad", "pl" to "Zasoby", + "pt" to "Inventário", "pt-BR" to "Inventário", + "pt-PT" to "Inventário", "ro" to "Inventar", + "ru" to "Инвентарь", + "sk" to "Inventár", "sl" to "Popis imetja", "sq" to "Inventar", "sv" to "Inventarie", @@ -1769,6 +2145,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "لوحة المفاتيح وIME", + "be" to "Клавіятура і ўвод", "bg" to "Клавиатура и въвеждане", "ca" to "Teclat i IME", "cs" to "Klávesnice a IME", @@ -1806,6 +2183,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Tastatură & IME", "ru" to "Клавиатуры и ввод", "sc" to "Tecladu e mètodos de intrada (IME)", + "sk" to "Klávesnica a IME", "sl" to "Tipkovnica in urejevalec vnosa IME", "sq" to "Tastierë & IME", "sr" to "Тастатура и начин уноса", @@ -1826,12 +2204,13 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "مُطلِق", + "be" to "Запускальнік", "bg" to "Начален екран", "ca" to "Llançador", "cs" to "Launcher", "da" to "Launcher", "de" to "Launcher", - "el" to "Εκκινητής", + "el" to "Εκκίνηση Εφαρμογών", "en-GB" to "Launcher", "en-US" to "Launcher", "eo" to "Aplikaĵlanĉiloj", @@ -1863,6 +2242,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Lansator", "ru" to "Лаунчер", "sc" to "Aviadores de aplicatziones", + "sk" to "Spúšťač", "sl" to "Zaganjalnik", "sq" to "Nisës", "sr" to "Покретач", @@ -1883,6 +2263,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "مشغل الوسائط المحلي", + "be" to "Лакальны Медыя Прайгравальнік", "bg" to "Местно изпълняване на медия", "ca" to "Reproductor local de mitjans", "cs" to "Přehrávač lokálních médií", @@ -1920,6 +2301,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Vizualizator media local", "ru" to "Медиаплееры", "sc" to "Leghidore multimediale locale", + "sk" to "Prehrávač miestnych médií", "sl" to "Lokalni predvajalnik glasbe", "sq" to "Lojtës Mediash Vendore", "sr" to "Местни извођач садржаја", @@ -1940,17 +2322,19 @@ fun getCategoryItems(localeList: LocaleListCompat) = name = mapOf( "ar" to "متتبع ومشارك الموقع", + "be" to "Адсочванне і абагульванне месцазнаходжання", "bg" to "Публикуване и споделяне на местоположение", "ca" to "Seguiment i compartició d'ubicació", "cs" to "Sledování a sdílení polohy", "de" to "Standort-Tracker / -Teiler", - "el" to "Ιχνηλάτης & Διαμοιραστής Τοποθεσίας", + "el" to "Εντοπισμός & Κοινοποίηση Τοποθεσίας", "en-GB" to "Location Tracker & Sharer", "en-US" to "Location Tracker & Sharer", "eo" to "Spuriloj (kaj kunhavigiloj) de pozicio", "es" to "Seguir y compartir mi ubicación", "et" to "Asukoha logimine ja jagamine", "fa" to "ردیابی و هم‌رسانی مکان", + "fi" to "Sijainnin seuranta ja jakaminen", "fr" to "Suivi & partage de localisation", "ga" to "Rianaitheoir Suímh & Roinnteoir", "he" to "מעקב ושיתוף מיקום", @@ -1968,9 +2352,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "nl" to "Locatie bijhouden en delen", "nl-BE" to "Locatietracker en -deler", "pl" to "Śledzenie i udostępnianie lokalizacji", + "pt" to "Rastreador e compartilhador de localização", "pt-BR" to "Rastreador e compartilhador de localização", + "pt-PT" to "Rastreador e compartilhador de localização", "ro" to "Localizare și partajare locație", "ru" to "Отслеживание и публикация местоположения", + "sk" to "Sledovanie a zdieľanie polohy", "sl" to "Sledilnik in delilnik položaja", "sq" to "Gjurmues & Dhënës Vendndodhjesh", "sv" to "Platsspårare och delare", @@ -1983,6 +2370,29 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Meditation", + name = + mapOf( + "ar" to "الاسترخاء", + "cs" to "Meditace", + "de" to "Meditation", + "en-GB" to "Meditation", + "en-US" to "Meditation", + "et" to "Mediteerimine", + "fa" to "مراقبه", + "fr" to "Méditation", + "ga" to "Machnamh", + "nl" to "Meditatie", + "pl" to "Medytacja", + "pt-BR" to "Meditação", + "ro" to "Meditație", + "ru" to "Медитация", + "vi" to "Thiền", + "zh-CN" to "冥想", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Messaging", name = @@ -2026,6 +2436,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Mesagerie", "ru" to "Сообщения", "sc" to "Messagìstica", + "sk" to "Správy", "sl" to "Sporočila", "sq" to "Shkëmbim Mesazhesh", "sr" to "Поруке", @@ -2112,7 +2523,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Finanțe", "ru" to "Финансы", "sc" to "Dinare", - "sk" to "Financie", + "sk" to "Peniaze", "sl" to "Denar", "sn" to "Mari", "so" to "Lacag", @@ -2234,17 +2645,19 @@ fun getCategoryItems(localeList: LocaleListCompat) = id = "Music Practice Tool", name = mapOf( + "ar" to "أداة تدريب موسيقية", "bg" to "Инструмент за музикална практика", "ca" to "Eina de pràctica musical", "cs" to "Nástroj pro cvičení hudby", "de" to "Musikübungstool", - "el" to "Εργαλείο Εξάσκησης Μουσικής", + "el" to "Μουσική εξάσκηση", "en-GB" to "Music Practice Tool", "en-US" to "Music Practice Tool", "eo" to "Muzik-ekzerciloj", "es" to "Práctica musical", "et" to "Muusikatarvikud", "fa" to "ابزار تمرین آهنگ", + "fi" to "Soitonharjoittelu", "fr" to "Outil de pratique musicale", "ga" to "Uirlis Cleachtaidh Ceoil", "he" to "כלי תרגול מוזיקה", @@ -2260,7 +2673,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "lv" to "Mūzikas vingrināšanās rīks", "my" to "ဂီတလေ့ကျင့်ရေး ကိရိယာ", "nb" to "Musikkøvingsverktøy", - "nl" to "Hulpmiddelen voor muzikanten", + "nl" to "Hulpmiddel om muziek te oefenen", "nl-BE" to "Muziek oefentool", "pl" to "Narzędzie do ćwiczeń muzycznych", "pt" to "Ferramenta de prática musical", @@ -2268,9 +2681,10 @@ fun getCategoryItems(localeList: LocaleListCompat) = "pt-PT" to "Ferramenta de prática musical", "ro" to "Instrumentul de practică muzicală", "ru" to "Инструмент для музыкальной практики", + "sk" to "Nástroje na cvičenie hudby", "sl" to "Orodje za vadbo glasbe", "sq" to "Mjet Praktimi Muzike", - "sv" to "Muskikövningsapp", + "sv" to "Musikövningsapp", "sw" to "Zana ya Mazoezi ya Muziki", "ta" to "இசை பயிற்சி கருவி", "tr" to "Müzik Çalışma Aracı", @@ -2383,13 +2797,14 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ca" to "Analitzador de xarxa", "cs" to "Analýza sítě", "de" to "Netzwerkanalyse", - "el" to "Αναλυτής Δικτύου", + "el" to "Διάγνωση Δικτύου", "en-GB" to "Network Analyser", "en-US" to "Network Analyzer", "eo" to "Analiziloj de retkonektoj", "es" to "Diagnósticos de red", "et" to "Võrguanalüüs", "fa" to "تحلیلگر شبکه", + "fi" to "Verkkoanalysaattori", "fr" to "Analyseur de réseau", "ga" to "Anailíseoir Líonra", "he" to "מאבחן רשת", @@ -2397,6 +2812,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "hu" to "Hálózatelemző", "id" to "Penganalisis Jaringan", "is" to "Greining netkerfa", + "it" to "Analizzatore di rete", "ja" to "ネットワークアナライザ", "kn" to "ನೆಟ್‌ವರ್ಕ್ ವಿಶ್ಲೇಷಕ", "ko" to "네트워크 분석기", @@ -2406,9 +2822,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "nl" to "Netwerkanalyse", "nl-BE" to "Netwerk analysetool", "pl" to "Analizator sieci", + "pt" to "Analisador de rede", "pt-BR" to "Analisador de rede", + "pt-PT" to "Analisador de rede", "ro" to "Analiză rețea", "ru" to "Сетевой анализатор", + "sk" to "Analyzátor siete", "sl" to "Pregledovalnik omrežja", "sq" to "Analizues Rrjeti", "sw" to "Kichanganuzi cha Mtandao", @@ -2435,7 +2854,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "en-GB" to "News", "en-US" to "News", "eo" to "Legiloj de novaĵoj", - "es" to "Noticias", + "es" to "Novedades", "et" to "Uudised", "fa" to "اخبار", "fi" to "Uutiset", @@ -2448,6 +2867,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "is" to "Fréttir", "it" to "Notizie", "ja" to "ニュース", + "kab" to "Isallen", "kn" to "ಸುದ್ದಿ", "ko" to "뉴스", "lb" to "Noriichten", @@ -2464,6 +2884,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Știri", "ru" to "Новости", "sc" to "Novas", + "sk" to "Správy", "sl" to "Novice", "sq" to "Lajme", "sr" to "Вести", @@ -2496,6 +2917,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "es" to "Notas", "et" to "Märkmikud", "fa" to "یادداشت", + "fi" to "Muistiinpano", "fr" to "Note", "ga" to "Nóta", "he" to "הערה", @@ -2505,6 +2927,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "is" to "Minnispunktur", "it" to "Appunti", "ja" to "ノート", + "kab" to "Tazmilt", "kn" to "ಗಮನಿಸಿ", "ko" to "메모", "lb" to "Notiz", @@ -2521,6 +2944,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Notițe", "ru" to "Заметки", "sc" to "Nota", + "sk" to "Poznámky", "sl" to "Beležka", "sq" to "Shënim", "sr" to "Белешка", @@ -2546,7 +2970,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "cs" to "Přehrávač online médií", "da" to "Online medieafspiller", "de" to "Online-Mediaplayer", - "el" to "Διαδικτυακός Αναπαραγωγέας Πολυμέσων", + "el" to "Διαδικτυακή Αναπαραγωγή Πολυμέσων", "en-GB" to "Online Media Player", "en-US" to "Online Media Player", "eo" to "Ludiloj de foraj aŭdvidaĵoj", @@ -2577,6 +3001,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Vizualizator media pe Internet", "ru" to "Онлайн-медиаплееры", "sc" to "Leghidore multimediale in lìnia", + "sk" to "Prehrávač online médií", "sl" to "Predvajalnik spletnih vsebin", "sq" to "Lojtës Mediash Në Internet", "sr" to "Мрежни извођач садржаја", @@ -2592,6 +3017,30 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Party Game", + name = + mapOf( + "ar" to "العاب الحفلة", + "cs" to "Párty hra", + "de" to "Partyspiel", + "en-GB" to "Party Game", + "en-US" to "Party Game", + "et" to "Peomängud", + "fa" to "بازی مهمانی", + "fr" to "Jeu de société", + "ga" to "Cluiche Cóisire", + "id" to "Game Pesta", + "ja" to "パーティゲーム", + "nl" to "Party spel", + "pl" to "Gra towarzyska", + "pt-BR" to "Jogo de festa", + "ro" to "Joc de petrecere", + "vi" to "Game party", + "zh-CN" to "派对游戏", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Pass Wallet", name = @@ -2601,7 +3050,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ca" to "Cartera de paraules de pas", "cs" to "Peněženka na lístky", "de" to "Passcode-Wallet", - "el" to "Πορτοφόλι Πάσου", + "el" to "Πορτοφόλι Εισιτηρίων", "en-GB" to "Pass Wallet", "en-US" to "Pass Wallet", "eo" to "Biletujoj (por lojalec-kartoj)", @@ -2632,10 +3081,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Portofel tichete", "ru" to "Кошелек", "sc" to "Portafòlliu de cartas e billetes", + "sk" to "Peňaženka na preukazy", "sl" to "Denarnica kartic", "sq" to "Kuletë Fjalëkalimesh", "sr" to "Новчаник лозинки", "sv" to "Passplånbok", + "sw" to "Pass Wallet", "ta" to "பணப்பையை கடந்து செல்லுங்கள்", "tr" to "Şifre Cüzdanı", "ug" to "ئىم ھەميانى", @@ -2674,13 +3125,14 @@ fun getCategoryItems(localeList: LocaleListCompat) = "is" to "Lykilorð og 2FA", "it" to "Password & Autenticazione a 2 Fattori", "ja" to "パスワード&2要素認証", + "kab" to "Awal n uɛeddi & A2F", "kn" to "ಪಾಸ್ವರ್ಡ್", "ko" to "비밀번호 및 2단계 인증", "lt" to "Slaptažodžiai ir 2 fakt. autentif.", "lv" to "Paroles un divpakāpju autentificēšana", "my" to "စကားဝှက်နှင့် အဆင့်ဆင့်လုံခြုံရေး", "nb" to "Passord & 2FA", - "nl" to "Wachtwoorden & 2FA", + "nl" to "Wachtwoorden & Tweestaps-Authenticatie (2FA)", "nl-BE" to "Wachtwoord en 2FA", "pl" to "Hasło i uwierzytelnianie dwuskładnikowe (2FA)", "pt" to "Palavras-passe e dois fatores", @@ -2689,10 +3141,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Parole & 2FA", "ru" to "Пароли и авторизация", "sc" to "Crae de intrada e autenticatzione a duos fatores", + "sk" to "Heslá a 2FA", "sl" to "Gesla in dvostopenjsko preverjanje pristnosti", "sq" to "Fjalëkalime & 2FA", "sr" to "Лозинке и двострука пријава", "sv" to "Lösenord och 2FA", + "sw" to "Nenosiri na 2FA", "ta" to "கடவுச்சொல் & 2FA", "tr" to "Şifre & 2FA", "ug" to "ئىم ۋە ئىككى ئامىللىق دەلىللەش", @@ -2730,7 +3184,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "es" to "Llamadas de teléfono y SMS", "es-AR" to "Teléfono y SMS", "es-MX" to "Teléfono & SMS", - "et" to "Telefon & SMS", + "et" to "Telefon ja SMS", "eu" to "Telefonoa eta SMS", "fa" to "تلفن و پیامک", "fi" to "Puhelin ja tekstiviestit", @@ -2798,6 +3252,29 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Platformer Game", + name = + mapOf( + "cs" to "Plošinová hra", + "de" to "Plattformspiel", + "en-GB" to "Platformer Game", + "en-US" to "Platformer Game", + "et" to "Platvormimängud", + "fa" to "بازی سکویی", + "fr" to "Jeu de plateforme", + "ga" to "Cluiche Ardáin", + "id" to "Game Platformer", + "ja" to "プラットフォーマーゲーム", + "nl" to "Platform spel", + "pl" to "Gra platformowa", + "pt-BR" to "Jogo de plataforma", + "ro" to "Joc platformer", + "vi" to "Game platformer", + "zh-CN" to "平台游戏", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Podcast", name = @@ -2842,10 +3319,11 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Podcast", "ru" to "Подкасты", "sc" to "Podcast", + "sk" to "Podcast", "sl" to "Podkast", "sq" to "Podkast", "sr" to "Довод", - "sv" to "Pod", + "sv" to "Podd", "sw" to "Podikasti", "ta" to "போட்காச்ட்", "tr" to "Podcast", @@ -2874,7 +3352,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "es" to "Transporte público", "et" to "Ühistransport ja sõiduplaanid", "fa" to "حمل‌ونقل عمومی", - "fi" to "Joukkoliikenteen kartta ja aikataulu", + "fi" to "Joukkoliikenne", "fr" to "Transports en commun", "ga" to "Léarscáil & Amchlár Iompair Phoiblí", "he" to "מפה ולו״ז תחבורה ציבורית", @@ -2893,13 +3371,14 @@ fun getCategoryItems(localeList: LocaleListCompat) = "nb" to "Offentlig transport", "nl" to "Openbaar vervoer", "nl-BE" to "Openbaar vervoer", - "pl" to "Mapa transportu publicznego i rozkład jazdy", + "pl" to "Transport publiczny", "pt" to "Mapa de transporte público e horários", "pt-BR" to "Mapa de transporte público e horários", "pt-PT" to "Mapa de transporte público e horários", "ro" to "Transport public & Orar", "ru" to "Транспорт и расписания", "sc" to "Oràrios e mapas de sos trasportos pùblicos", + "sk" to "Verejná doprava", "sl" to "Javni prevoz", "sq" to "Transport Publik", "sr" to "Карта и ред вожње јавног превоза", @@ -2910,11 +3389,74 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ug" to "ئاممىۋى قاتناش خەرىتىسى ۋە ۋاقىت جەدۋىلى", "uk" to "Карта та розклад руху громадського транспорту", "vi" to "Phương tiện giao thông", - "zh-CN" to "公共交通地图和时间表", + "zh-CN" to "公共交通", "zh-TW" to "大眾運輸", ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Puzzle Game", + name = + mapOf( + "ar" to "العاب الالغاز", + "cs" to "Logická hra", + "de" to "Puzzlespiel", + "en-GB" to "Puzzle Game", + "en-US" to "Puzzle Game", + "et" to "Mõistatusmängud", + "fa" to "بازی معمّایی", + "fr" to "Jeu de réflexion", + "ga" to "Cluiche Puzail", + "id" to "Game Puzzle", + "ja" to "パズルゲーム", + "nl" to "Puzzelspel", + "pl" to "Gra logiczna", + "pt-BR" to "Jogo de quebra-cabeça", + "ro" to "Jocuri de puzzle", + "vi" to "Game xếp hình", + "zh-CN" to "解谜游戏", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), + CategoryItem( + id = "Radio", + name = + mapOf( + "ar" to "مذياع", + "cs" to "Rádio", + "de" to "Radio", + "el" to "Ραδιόφωνο", + "en-GB" to "Radio", + "en-US" to "Radio", + "eo" to "Radio", + "es" to "Radio", + "et" to "Raadio", + "fa" to "رادیو", + "fi" to "Radio", + "fr" to "Radio", + "ga" to "Raidió", + "hr" to "Radio", + "hu" to "Rádió", + "id" to "Radio", + "is" to "Útvarp", + "ja" to "ラジオ", + "nb" to "Radio", + "nl" to "Radio", + "pl" to "Radio", + "pt" to "Rádio", + "pt-BR" to "Rádio", + "pt-PT" to "Rádio", + "ro" to "Radio", + "ru" to "Радио", + "sk" to "Rádio", + "sq" to "Radio", + "tr" to "Radyo", + "vi" to "Radio", + "zh-CN" to "收音机", + "zh-TW" to "收音機", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Reading", name = @@ -3021,7 +3563,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ca" to "Gestor de receptes", "cs" to "Správce receptů", "de" to "Rezeptmanager", - "el" to "Διαχείριση συνταγών", + "el" to "Διαχείριση Συνταγών", "en-GB" to "Recipe Manager", "en-US" to "Recipe Manager", "eo" to "Administriloj de kuir-receptoj", @@ -3053,10 +3595,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Manager rețete", "ru" to "Рецепты", "sc" to "Manigiadore de retzetas", + "sk" to "Správca receptov", "sl" to "Upravitelj receptov", "sq" to "Përgjegjës Recetash Gatimi", "sr" to "Управник упутства", "sv" to "Recepthanterare", + "sw" to "Kidhibiti cha Mapishi", "ta" to "செய்முறை மேலாளர்", "tr" to "Tarif Yöneticisi", "ug" to "رىسالە باشقۇرغۇچ", @@ -3083,6 +3627,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "es" to "Religión", "et" to "Usk ja religioon", "fa" to "مذهبی", + "fi" to "Uskonto", "fr" to "Religion", "ga" to "Reiligiún", "he" to "דת", @@ -3090,18 +3635,22 @@ fun getCategoryItems(localeList: LocaleListCompat) = "hu" to "Vallás", "id" to "Agama", "is" to "Trúarbrögð", + "it" to "Religione", "ja" to "宗教", "kn" to "ಧರ್ಮ", "ko" to "종교", "lv" to "Ticība", "my" to "ဘာသာရေး", "nb" to "Religion", - "nl" to "Godsdienst", + "nl" to "Religie", "nl-BE" to "Religie", "pl" to "Religia", + "pt" to "Religião", "pt-BR" to "Religião", + "pt-PT" to "Religião", "ro" to "Religie", "ru" to "Религия", + "sk" to "Náboženstvo", "sl" to "Vera", "sq" to "Fe", "sv" to "Religion", @@ -3114,6 +3663,137 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Role-Playing Game", + name = + mapOf( + "cs" to "Hra na hrdiny", + "de" to "Rollenspiel", + "en-GB" to "Role-playing Game", + "en-US" to "Role-playing Game", + "et" to "Rollimängud", + "fa" to "بازی نقش‌آفرینی", + "fr" to "Jeu de rôle", + "ga" to "Cluiche Ról-imirt", + "id" to "Game Bermain Peran", + "ja" to "ロールプレイングゲーム", + "nl" to "Rollenspel", + "pl" to "Gra fabularna", + "pt-BR" to "Jogo de RPG", + "ro" to "Joc de rol", + "vi" to "Game nhập vai", + "zh-CN" to "角色扮演游戏", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), + CategoryItem( + id = "Remote Access", + name = + mapOf( + "ar" to "الوصول عن بُعد", + "cs" to "Vzdálený přístup", + "de" to "Fernzugriff", + "el" to "Αποομακρυσμένη Πρόσβαση", + "en-GB" to "Remote Access", + "en-US" to "Remote Access", + "eo" to "Fora aliro", + "es" to "Acceso Remoto", + "et" to "Kaugligipääs", + "fa" to "دسترسی از راه دور", + "fi" to "Etäkäyttö", + "fr" to "Accès à distance", + "ga" to "Rochtain Chianda", + "hr" to "Udaljeni pristup", + "hu" to "Távoli elérés", + "id" to "Akses Jarak Jauh", + "is" to "Fjaraðgangur", + "ja" to "リモートアクセス", + "nb" to "Fjernkontroll", + "nl" to "Toegang op Afstand", + "pl" to "Zdalny dostęp", + "pt" to "Acesso remoto", + "pt-BR" to "Acesso remoto", + "pt-PT" to "Acesso remoto", + "ro" to "Acces la distanță", + "ru" to "Удаленный доступ", + "sk" to "Vzdialený prístup", + "tr" to "Uzaktan Erişim", + "vi" to "Truy cập từ xa", + "zh-CN" to "远程访问", + "zh-TW" to "遠端存取", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), + CategoryItem( + id = "Remote Controller", + name = + mapOf( + "ar" to "متحكم بعيد", + "cs" to "Vzdálené ovládání", + "de" to "Fernbedienung", + "el" to "Τηλεχειριστήριο", + "en-GB" to "Remote Controller", + "en-US" to "Remote Controller", + "eo" to "Teleregiloj", + "es" to "Mando a Distancia", + "et" to "Kaugjuhtimispuldid", + "fa" to "واپایش از راه دور", + "fi" to "Kaukosäädin", + "fr" to "Télécommande", + "ga" to "Rialaitheoir Cianrialtáin", + "hr" to "Daljinski upravljač", + "hu" to "Távirányító", + "id" to "Alat Kontrol Jarak Jauh", + "is" to "Fjarstýring", + "ja" to "リモコン", + "nb" to "Fjernkontroll", + "nl" to "Afstandsbediening", + "pl" to "Pilot", + "pt" to "Controlo remoto", + "pt-BR" to "Controle remoto", + "pt-PT" to "Controlo remoto", + "ro" to "Control la distanță", + "ru" to "Пульт дистанционного управления", + "sk" to "Diaľkové ovládanie", + "tr" to "Uzaktan Kumanda", + "vi" to "Điều khiển từ xa", + "zh-CN" to "遥控器", + "zh-TW" to "遙控器", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), + CategoryItem( + id = "Schedule", + name = + mapOf( + "ar" to "جدولة", + "cs" to "Plán", + "de" to "Terminplan", + "en-GB" to "Schedule", + "en-US" to "Schedule", + "eo" to "Horplanoj", + "et" to "Ürituste päevakavad", + "fa" to "زمان‌بندی", + "fr" to "Calendrier", + "ga" to "Sceideal", + "hr" to "Raspored termina", + "hu" to "Ütemezés", + "id" to "Jadwal", + "is" to "Vinnuáætlun", + "ja" to "スケジュール", + "nl" to "Rooster", + "pl" to "Harmonogram", + "pt" to "Agenda", + "pt-BR" to "Agenda", + "pt-PT" to "Agenda", + "ro" to "Planificare", + "sk" to "Plánovanie", + "tr" to "Planlama", + "vi" to "Lịch trình", + "zh-CN" to "计划", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Science & Education", name = @@ -3142,7 +3822,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "es" to "Ciencia y Educación", "es-AR" to "Ciencias y Educación", "es-MX" to "Ciencia y Educación", - "et" to "Teadus & haridus", + "et" to "Teadus ja haridus", "eu" to "Zientzia eta hezkuntza", "fa" to "علم و آموزش", "fi" to "Tiede ja koulutus", @@ -3187,7 +3867,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Știință & educație", "ru" to "Наука и образование", "sc" to "Iscièntzia e educatzione", - "sk" to "Veda a výuka", + "sk" to "Veda a vzdelávanie", "sl" to "Znanost & Izobrazba", "sn" to "zveScience neFundo", "so" to "Sayniska & Waxbarashada", @@ -3307,6 +3987,53 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Shooter Game", + name = + mapOf( + "cs" to "Střílečka", + "de" to "Shooter", + "en-GB" to "Shooter Game", + "en-US" to "Shooter Game", + "et" to "Laskmismängud", + "fa" to "بازی شلیکی", + "fr" to "Jeu de tir", + "ga" to "Cluiche Lámhachóra", + "id" to "Game Tembak-menembak", + "ja" to "シューティングゲーム", + "nl" to "Schietspel", + "pl" to "Gra strzelanka", + "pt-BR" to "Jogo de tiro", + "ro" to "Joc cu împușcături", + "vi" to "Game bắn súng", + "zh-CN" to "射击游戏", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), + CategoryItem( + id = "Strategy Game", + name = + mapOf( + "ar" to "العاب ستراتيجية", + "cs" to "Strategická hra", + "de" to "Strategiespiel", + "en-GB" to "Strategy Game", + "en-US" to "Strategy Game", + "et" to "Strateegiamängud", + "fa" to "بازی استراتژی", + "fr" to "Jeu de stratégie", + "ga" to "Cluiche Straitéise", + "id" to "Game Strategi", + "ja" to "戦略ゲーム", + "nl" to "Strategiespel", + "pl" to "Gra strategiczna", + "pt-BR" to "Jogo de estratégia", + "ro" to "Joc de strategie", + "vi" to "Game chiến thuật", + "zh-CN" to "策略游戏", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Shopping List", name = @@ -3349,6 +4076,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Listă cumpărături", "ru" to "Список покупок", "sc" to "Lista de còmporas", + "sk" to "Nákupný zoznam", "sl" to "Nakupovalni seznam", "sq" to "Listë Blerjesh", "sr" to "Списак за куповину", @@ -3397,7 +4125,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "lv" to "Sabiedriskais tīkls", "my" to "လှုမှုကွန်ယက်", "nb" to "Sosialt nettverk", - "nl" to "Sociaal netwerk", + "nl" to "Sociaal Netwerk", "nl-BE" to "Sociaalnetwerk", "pl" to "Sieć społecznościowa", "pt" to "Rede social", @@ -3406,10 +4134,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Rețea socială", "ru" to "Соцсети", "sc" to "Retes sotziales", + "sk" to "Sociálne siete", "sl" to "Družabna omrežja", "sq" to "Rrjet Shoqëror", "sr" to "Друштвена мрежа", "sv" to "Socialt nätverk", + "sw" to "Mtandao wa Kijamii", "ta" to "சமூக வலைப்பின்னல்", "tr" to "Sosyal Ağ", "ug" to "ئىجتىمائىي تور", @@ -3420,6 +4150,30 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Sport Game", + name = + mapOf( + "ar" to "لعبة رياضة", + "cs" to "Sportovní hra", + "de" to "Sportspiel", + "en-GB" to "Sport Game", + "en-US" to "Sport Game", + "et" to "Spordimängud", + "fa" to "بازی ورزشی", + "fr" to "Jeu de sport", + "ga" to "Cluiche Spóirt", + "id" to "Game Olahraga", + "ja" to "スポーツゲーム", + "nl" to "Sportspel", + "pl" to "Gra sportowa", + "pt-BR" to "Jogo de esporte", + "ro" to "Joc sportiv", + "vi" to "Game thể thao", + "zh-CN" to "体育游戏", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Sports & Health", name = @@ -3447,7 +4201,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "es" to "Deportes y Salud", "es-AR" to "Deportes y Salud", "es-MX" to "Deportes & Salud", - "et" to "Sport & tervis", + "et" to "Sport ja tervis", "eu" to "Kirola eta osasuna", "fa" to "ورزش و سلامت", "fi" to "Urheilu ja terveys", @@ -3491,7 +4245,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Sport & sănătate", "ru" to "Спорт и здоровье", "sc" to "Isport e Salude", - "sk" to "Šport & Zdravie", + "sk" to "Šport a zdravie", "sl" to "Šport & zdravje", "sn" to "Nhabvu neUtano", "so" to "Ciyaaraha & Caafimaadka", @@ -3651,6 +4405,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Activitate", "ru" to "Задачи", "sc" to "Faina", + "sk" to "Úlohy", "sl" to "Opravila", "sq" to "Punë", "sr" to "Задатак", @@ -3693,6 +4448,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "is" to "Textaritill", "it" to "Editor di Testo", "ja" to "テキストエディタ", + "kab" to "Amaẓrag n weḍris", "kn" to "ಪಠ್ಯ ಸಂಪಾದಕ", "ko" to "텍스트 편집기", "lt" to "Tekstų redaktorius", @@ -3708,10 +4464,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Editor text", "ru" to "Текстовые редакторы", "sc" to "Editore de testu", + "sk" to "Textový editor", "sl" to "Urejevalnik besedila", "sq" to "Përpunues Tekstesh", "sr" to "Управник писања", "sv" to "Textredigerare", + "sw" to "Mhariri wa maandishi", "ta" to "உரை ஆசிரியர்", "tr" to "Metin Düzenleyici", "ug" to "تېكىست تەھرىرلىگۈچ", @@ -3722,6 +4480,38 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Text to Speech", + name = + mapOf( + "ar" to "تحويل النص إلى كلام", + "cs" to "Text na řeč", + "de" to "Text-zu-Sprache", + "en-GB" to "Text to Speech", + "en-US" to "Text to Speech", + "eo" to "Parolsinteziloj", + "et" to "Kõnesüntees", + "fa" to "متن به گفتار", + "fr" to "Synthèse vocale", + "ga" to "Téacs go Caint", + "hr" to "Tekst u govor", + "hu" to "Szöveg beszéddé alakítása", + "id" to "Text to Speech", + "is" to "Texti-í-tal", + "ja" to "テキスト読み上げ", + "nl" to "Text naar Spraak", + "pl" to "Synteza mowy", + "pt" to "Texto para fala", + "pt-BR" to "Texto para fala", + "pt-PT" to "Texto para fala", + "ro" to "Conversie text în vorbire", + "sk" to "Prevod textu na reč", + "tr" to "Metinden Sese", + "vi" to "Chuyển văn bản thành giọng nói", + "zh-CN" to "文本转语音", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Theming", name = @@ -3760,7 +4550,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "gl" to "Aparencia", "he" to "עיצוב", "hi" to "विषय", - "hr" to "Teme", + "hr" to "Izgled", "hu" to "Stílus", "hy" to "Ոճ", "id" to "Personalisasi", @@ -3907,6 +4697,60 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Time Tracker", + name = + mapOf( + "ar" to "متتبع الوقت", + "cs" to "Sledování času", + "de" to "Zeiterfassung", + "en-GB" to "Time Tracker", + "en-US" to "Time Tracker", + "eo" to "Temp-mezuriloj", + "et" to "Ajakasutuse jälgimine", + "fa" to "ردیاب زمان", + "fr" to "Compteur de temps", + "ga" to "Rianaitheoir Ama", + "hr" to "Praćenje vremena", + "hu" to "Időkövető", + "id" to "Pelacak Waktu", + "is" to "Tímastjórnun", + "ja" to "タイムトラッカー", + "nl" to "Tijd Bijhouden", + "pl" to "Miernik czasu", + "pt" to "Rastreador de tempo", + "pt-BR" to "Rastreador de tempo", + "pt-PT" to "Rastreador de tempo", + "ro" to "Urmărirea timpului", + "sk" to "Sledovanie času", + "tr" to "Zaman Takipçisi", + "vi" to "Theo dõi thời gian", + "zh-CN" to "时间追踪工具", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), + CategoryItem( + id = "Timer", + name = + mapOf( + "ar" to "مُئَقِّت", + "cs" to "Časovač", + "de" to "Timer", + "en-GB" to "Timer", + "en-US" to "Timer", + "et" to "Taimerid", + "fa" to "زمان‌سنج", + "fr" to "Minuteur", + "ga" to "Amaireadóir", + "nl" to "Timer", + "pl" to "Minutnik", + "pt-BR" to "Cronômetro", + "ro" to "Temporizator", + "vi" to "Đếm thời gian", + "zh-CN" to "计时器", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Translation & Dictionary", name = @@ -3940,7 +4784,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "lv" to "Tulkošana un vārdnīca", "my" to "ဘာသာပြန်နှင့် အဘိဓာန်", "nb" to "Oversettelse & Ordbok", - "nl" to "Vertalen & woordenboek", + "nl" to "Vertalen & Woordenboek", "pl" to "Tłumaczenie i słownik", "pt" to "Tradução e dicionário", "pt-BR" to "Tradução e dicionário", @@ -3948,6 +4792,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Traducere & dicționar", "ru" to "Перевод и словари", "sc" to "Tradutzione e ditzionàriu", + "sk" to "Preklad a slovník", "sl" to "Prevajalec in slovar", "sq" to "Përkthim & Fjalor", "sr" to "Превод и речник", @@ -3995,7 +4840,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "lv" to "Vienību pārveidotājs", "my" to "ယူနစ် ပြောင်းလဲမှု", "nb" to "Enhetskonvertering", - "nl" to "Eenheden omrekenen", + "nl" to "Eenheden Omrekenen", "pl" to "Konwerter jednostek", "pt" to "Conversor de unidades", "pt-BR" to "Conversor de unidades", @@ -4003,6 +4848,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Convertor unități", "ru" to "Перевод единиц", "sc" to "Cunvertidore de unidades", + "sk" to "Prevodník jednotiek", "sl" to "Pretvornik enot", "sq" to "Shndërrues Njësish", "sr" to "Претварач јединца", @@ -4018,6 +4864,30 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Visual Novel", + name = + mapOf( + "ar" to "رواية صورية", + "cs" to "Vizuální román", + "de" to "Visual Novel", + "en-GB" to "Visual Novel", + "en-US" to "Visual Novel", + "et" to "Visuaalromaanid", + "fa" to "رمان تصویری", + "fr" to "Roman visuel", + "ga" to "Úrscéal Amhairc", + "id" to "Novel Visual", + "ja" to "ヴィジュアルノベル", + "nl" to "Visueel verhaal", + "pl" to "Powieść wizualna", + "pt-BR" to "Romance visual", + "ro" to "Romanul vizual", + "vi" to "Visual novel", + "zh-CN" to "视觉小说", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Voice & Video Chat", name = @@ -4027,7 +4897,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ca" to "Xat de veu i vídeo", "cs" to "Hlasový a video chat", "da" to "Stemme- og videochat", - "de" to "Sprach-/Video-Chat", + "de" to "Sprach- / Video-Chat", "el" to "Φωνή & Βιντεοκλήσεις", "en-GB" to "Voice & Video Chat", "en-US" to "Voice & Video Chat", @@ -4050,7 +4920,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "lv" to "Balss un video tērzēšana", "my" to "အသံနှင့် ဗီဒီယိုဖြင့် ပြောဆိုခြင်း", "nb" to "Stemme- & Video-chat", - "nl" to "Bellen & videobellen", + "nl" to "Bellen & Videobellen", "pl" to "Czat głosowy i wideo", "pt" to "Chat de voz e vídeo", "pt-BR" to "Ligação de voz e vídeo", @@ -4058,6 +4928,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Apeluri audio & Video", "ru" to "Голосовые и видеочаты", "sc" to "Tzarrada de boghe e vìdeu", + "sk" to "Hlasový a video chat", "sl" to "Glasovni in slikovni klepet", "sq" to "Fjalosje Me Zë & Video", "sr" to "Ћаскање гласом и видеом", @@ -4067,7 +4938,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "tr" to "Sesli ve Görüntülü Görüşme", "ug" to "ئۈن ۋە سىن سۆھبەت", "uk" to "Голосовий та відеочат", - "vi" to "Trò chuyện thoại và video", + "vi" to "Gọi thoại và video", "zh-CN" to "音视频聊天", "zh-TW" to "語音與視像聊天", ) @@ -4090,7 +4961,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "eo" to "VPN kaj retperiloj", "es" to "Redes privadas (VPN) y proxies", "es-MX" to "VPN & Proxy", - "et" to "VPN ja proksiteenused", + "et" to "VPN-id ja proksiteenused", "fa" to "پیشکار و وی‌پی‌ان", "fi" to "VPN ja välityspalvelin", "fr" to "VPN & proxy", @@ -4102,13 +4973,14 @@ fun getCategoryItems(localeList: LocaleListCompat) = "is" to "VPN og milliþjónn", "it" to "VPN & Proxy", "ja" to "VPN & プロキシ", + "kab" to "VPN & Upṛuksi", "kn" to "VPN", "ko" to "VPN 및 프록시", "lt" to "VPN ir įgaliotieji serveriai", "lv" to "VPN un starpniekserveris", "my" to "VPN နှင့် Proxy", "nb" to "VPN & Mellomserver", - "nl" to "VPN & proxy", + "nl" to "VPN & Proxy", "pl" to "VPN i proxy", "pt" to "VPN e proxy", "pt-BR" to "VPN e proxy", @@ -4116,6 +4988,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "VPN & Proxy", "ru" to "VPN и прокси", "sc" to "VPN e serbidores intermediàrios", + "sk" to "VPN a proxy", "sl" to "VPN in posredniški strežniki (proxy)", "sq" to "VPN & Ndërmjetës", "sr" to "Нестварна лична мрежа и посредник", @@ -4157,6 +5030,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "is" to "Veski", "it" to "Portafoglio", "ja" to "ウォレット", + "kab" to "Ṭṭezḍam", "kn" to "ವಾಲೆಟ್", "ko" to "지갑", "lt" to "Piniginė", @@ -4171,6 +5045,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Portofel", "ru" to "Кошельки", "sc" to "Taschinu", + "sk" to "Peňaženka", "sl" to "Denarnica", "sq" to "Kuletë", "sr" to "Новчаник", @@ -4227,6 +5102,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Fundal", "ru" to "Обои", "sc" to "Isfundu", + "sk" to "Tapety", "sl" to "Ozadja", "sq" to "Sfond", "sr" to "Позадинска слика", @@ -4270,6 +5146,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "is" to "Veður", "it" to "Meteo", "ja" to "天気", + "kab" to "Tignewt", "kn" to "ಹವಾಮಾನ", "ko" to "날씨", "lt" to "Orai", @@ -4284,10 +5161,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Meteo", "ru" to "Погода", "sc" to "Mèteu", + "sk" to "Počasie", "sl" to "Vreme", "sq" to "Mot", "sr" to "Временске прилике", "sv" to "Väder", + "sw" to "Hali ya hewa", "ta" to "வானிலை", "tr" to "Hava Durumu", "ug" to "ھاۋا رايى", @@ -4298,6 +5177,30 @@ fun getCategoryItems(localeList: LocaleListCompat) = ) .getBestLocale(localeList) ?: "Unknown Category", ), + CategoryItem( + id = "Word Game", + name = + mapOf( + "ar" to "لعبة الغاز كتابية", + "cs" to "Slovní hra", + "de" to "Wortspiel", + "en-GB" to "Word Game", + "en-US" to "Word Game", + "et" to "Sõnamängud", + "fa" to "بازی واژه‌ای", + "fr" to "Jeu de lettres", + "ga" to "Cluiche Focal", + "id" to "Game Kata", + "ja" to "言葉遊び", + "nl" to "Woordspel", + "pl" to "Gra słowna", + "pt-BR" to "Jogo de palavras", + "ro" to "Joc de cuvinte", + "vi" to "Game chữ", + "zh-CN" to "单词游戏", + ) + .getBestLocale(localeList) ?: "Unknown Category", + ), CategoryItem( id = "Workout", name = @@ -4315,7 +5218,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "es" to "Ejercicio físico", "et" to "Treening", "fa" to "ورزش", - "fi" to "Harjoitus", + "fi" to "Kuntoilu", "fr" to "Entraînement", "ga" to "Babhta traenála", "he" to "כושר", @@ -4331,7 +5234,7 @@ fun getCategoryItems(localeList: LocaleListCompat) = "lv" to "Trenēšanās", "my" to "လေ့ကျင့်ခန်း", "nb" to "Trening", - "nl" to "Trainen & work-out", + "nl" to "Work-Out", "pl" to "Trening", "pt" to "Exercício físico", "pt-BR" to "Exercício físico", @@ -4339,10 +5242,12 @@ fun getCategoryItems(localeList: LocaleListCompat) = "ro" to "Antrenament", "ru" to "Тренировки", "sc" to "Allenamentu", + "sk" to "Cvičenie", "sl" to "Telovadba", "sq" to "Stërvitje", "sr" to "Вежбање", "sv" to "Träningspass", + "sw" to "Mazoezi", "ta" to "பயிற்சி", "tr" to "Antrenman", "ug" to "چېنىقىش", diff --git a/app/src/androidTest/java/org/fdroid/ui/screenshots/DetailsItem.kt b/app/src/androidTest/java/org/fdroid/ui/screenshots/DetailsItem.kt index 2a0434836..076e2e141 100644 --- a/app/src/androidTest/java/org/fdroid/ui/screenshots/DetailsItem.kt +++ b/app/src/androidTest/java/org/fdroid/ui/screenshots/DetailsItem.kt @@ -7,35 +7,42 @@ val appMetadata = repoId = 1L, packageName = "org.fdroid.basic", added = 1680776466000L, - lastUpdated = 1772364577000L, + lastUpdated = 1777704496684L, name = mapOf( "en-GB" to "F-Droid Basic", "es" to "F-Droid Basic", - "pl" to "F-Droid Podstawowy", + "nb" to "F-Droid Basic", + "pl" to "F-Droid Basic", "pt" to "F-Droid Básico", "pt-PT" to "F-Droid Básico", "ru" to "F-Droid Basic", + "sv" to "F-Droid Basic", "ar" to "F-Droid Basic", + "be" to "F-Droid Basic", "ca" to "F-Droid bàsic", "cs" to "F-Droid Basic", "de" to "F-Droid Basic", "en-US" to "F-Droid Basic", "eo" to "F-Droid Baza", "et" to "F-Droid Basic", - "fa-IR" to "اف‌دروید پایه‌ای", + "fa" to "اف‌دروید پایه‌ای", "fr" to "F-Droid Basic", "ga" to "F-Droid Bunúsach", "he" to "F-Droid בסיסי", - "hu-HU" to "Alap F-Droid", - "is-IS" to "Grunnútgáfa F-Droid", + "hr" to "F-Droid Basic", + "hu" to "Alap F-Droid", + "id" to "F-Droid Basic", + "is" to "Grunnútgáfa F-Droid", + "it" to "F-Droid Basic", "ja" to "F-Droid Basic", + "nl" to "F-Droid Basis", "pt-BR" to "F-Droid Básico", "ro" to "F-Droid Basic", "sr" to "Основни F-Droid", - "sv-SE" to "F-Droid Basic", - "ta-IN" to "எஃப்-டிராய்டு அடிப்படை", - "tr" to "F-Droid Temel", + "sw" to "F-Droid Basic", + "ta" to "எஃப்-டிராய்டு அடிப்படை", + "tr" to "F-Droid Basic", "uk" to "F-Droid Basic", "zh-CN" to "F-Droid Basic", "zh-TW" to "F-Droid Basic", @@ -44,38 +51,42 @@ val appMetadata = mapOf( "en-GB" to "The minimal client app for the app store that respects freedom and privacy", "es" to "Aplicación para la tienda de aplicaciones; respeta la libertad y la privacidad", + "nb" to "Den minimale klient-appen for app-butikken som respekterer frihet og personvern", "pl" to "Minimalistyczna apka kliencka dla sklepu z apkami szanująca wolność i prywatność", "pt" to "App cliente mínima para a loja de apps que respeita a liberdade e a privacidade", "pt-PT" to "App cliente mínima para a loja de apps que respeita a liberdade e a privacidade", "ru" to "Минималистичный магазин приложений, уважающий свободу и приватность", - "ar" to "تطبيق عميل خفيف لمتجر التطبيقات والذي يحترم الحرية والخصوصية", + "sv" to "Den minimala klient-appen för app-butiken som respekterar frihet och privatliv", + "ar" to "تطبيق عميل بسيط لمتجر التطبيقات الذي يحترم الحرية والخصوصية", + "be" to "Мінімальная кліентская праграма што паважае вашыя свабоду і прыватнасць", "ca" to "El client mínim del centre d'aplicacions que respecta la llibertat i privadesa", "cs" to "Minimální klient pro obchod s aplikacemi, který respektuje svobodu a soukromí", "de" to "Der minimale Client für den App-Store, der Freiheit und Privatsphäre respektiert", "en-US" to "The minimal client app for the app store that respects freedom and privacy", "eo" to "Minimuma kliento por la aplikaĵa vendejo respektanta liberecon kaj privatecon", "et" to "Lihtsustatud variant F-Droidi rakendustepoe kliendist", - "fa-IR" to "کارخواه کمینه برای فروشگاه کاره‌ای که به آزادی و محرمانگی احترام می‌گذارد", + "fa" to "کارخواه کمینه برای فروشگاه کاره‌ای که به آزادی و محرمانگی احترام می‌گذارد", "fr" to "L’application minimale pour le magasin d’applis respectueux de la vie privée", "ga" to "Aip íosta cliant don siopa a léiríonn meas ar shaoirse agus ar phríobháideachas", "he" to "יישומון הלקוח המזערי לחנות יישומונים שמכבד חופש ופרטיות", - "hu-HU" to "Az alap app a tárolóban, amely tiszteli a szabadságot és a magánéletet", - "is-IS" to - "Lágmarksviðmót forritsins fyrir hugbúnaðarsafnið sem virðir frelsi og gagnaleynd", + "hr" to "Minimalalna aplikacija za trgovinu aplikacija koja poštuje slobodu i privatnost", + "hu" to "Az alap app a tárolóban, amely tiszteli a szabadságot és a magánéletet", + "id" to "Aplikasi klien minimal untuk toko aplikasi yang menghormati kebebasan dan privas", + "is" to "Lágmarksviðmót forritsins fyrir hugbúnaðarsafnið sem virðir frelsi og gagnaleynd", + "it" to "Il client minimale per l'app store che rispetta la libertà e la privacy", "ja" to "自由とプライバシーを尊重するアプリストアの簡略版クライアント", + "nl" to "De minimale clientapp van de appwinkel die vrijheid en privacy respecteert", "pt-BR" to - "App cliente mínimo para a loja de apps que respeita a liberdade e a privacidade", + "O app minimalista para a loja de aplicativos que respeita a liberdade e a privac", "ro" to "Client minim pentru magazinul de aplicații ce respectă libertatea și intimitatea", "sr" to "Клијент апликација за продавницу апликација која поштује слободу и приватност", - "sv-SE" to "Den minimala klient-appen för app-butiken som respekterar frihet och privatliv", "sw" to "An app cliant íosta don siopa app a urramaíonn saoirse agus príobháideachta", - "ta-IN" to - "விடுதலை மற்றும் தனியுரிமையை மதிக்கும் பயன்பாட்டு கடைக்கான குறைந்தபட்ச வாங்கி பயன", - "tr" to "Özgürlük ve gizliliğe saygılı uygulama mağazası için sade bir istemci uygulaması", + "ta" to "விடுதலை மற்றும் தனியுரிமையை மதிக்கும் பயன்பாட்டு கடைக்கான குறைந்தபட்ச வாங்கி பயன", + "tr" to "Özgürlüğe ve gizliliğe saygılı uygulama mağazası için en sade istemci uygulaması", "uk" to "Мінімалістичний клієнтський застосунок, який поважає свободу й приватність", "zh-CN" to "尊重自由和隐私的应用商店的极简客户端应用", - "zh-TW" to "尊重自由和隱私的應用商店最小客戶端應用程序", + "zh-TW" to "尊重自由和隱私的應用商店最小用戶端應用程序", ), description = mapOf( @@ -91,8 +102,12 @@ val appMetadata = "AVISO: A versão básica do cliente F-Droid tem menos funções (por exemplo, não tem o \"Por perto\" ou a função de pânico). Está preparado para o Android 13 e pode fazer atualizações sem intervenção do utilizador, sem precisar da extensão privilegiada ou de ", "ru" to "ПРИМЕЧАНИЕ: Basic-версия клиента F-Droid имеет урезанный набор функций (например, нет общего доступа к близлежащим ресурсам и функции паники). Она нацелена на Android 13 и может выполнять обновления без участия пользователя и без особого расширения или roo", + "sv" to + "OBS: Basic-versionen av F-Droid Client har en reducerad funktionsuppsättning (t.ex. ingen när-delning och ingen panikfunktion). Den riktar sig till Android 13 och kan göra obevakade uppdateringar utan privilegierad förlängning eller root.\n\nF-Droid är en ", "ar" to - "ملاحظة: الإصدار الأساسي من عميل F-Droid يحتوي على مجموعة ميزات مخفضة (على سبيل المثال، لا توجد مشاركة قريبة ولا توجد ميزة الذعر). وهو يستهدف Android 13 ويمكنه إجراء تحديثات غير مراقبة بدون امتداد أو جذر مميز.\n\nF-Droid عبارة عن كتالوج قابل للتثبيت لتطبيقا", + "ملاحظة: النسخة الأساسية من عميل F-Droid تأتي بميزات محدودة (على سبيل المثال، لا تتوفر ميزة المشاركة القريبة أو ميزة الطوارئ). تستهدف هذه النسخة نظام أندرويد 13، ويمكنها إجراء تحديثات تلقائية دون الحاجة إلى صلاحيات إضافية أو الجذر.\n\nF-Droid هو دليل قابل ل", + "be" to + "Увага: Базавая версія Кліента F-Droid мае зменшаны набор функцый (напр. няма функцый абагульвання і панікі). Ён нацэлены на Android 13 і можа выконваць аўтаматычныя абнаўленні без пашыраных прывіляў альбо root.\n\nF-Droid гэта каталог для ўсталёўкі Вольнаг", "ca" to "NOTA: La versió bàsica del client de l'F-Droid té un conjunt de funcionalitats reduït (p. ex. no hi ha compartició propera i funció del pànic). Està orientada a l'Android 13 i pot fer actualitzacions desateses sense extensions de privilegis ni permisos d'a", "cs" to @@ -105,7 +120,7 @@ val appMetadata = "RIMARKO: la baza versio de kliento F-Droid estas senigita de kelkaj ebloj (kiel proksima interŝanĝo kaj panika butono). Ĝi celas Android 13 kaj povas ĝisdatigi aplikaĵojn fone sen uzi ĉefuzantan permeson aŭ la privilegian aldonaĵon.\n\nF-Droid estas instal", "et" to "NB! F-Droid Basic on piiratud funktsionaalsusega klient (nt. puuduvad naabritega jagamine ja paanikarežiimi keelamine). Ta on mõeldud Android 13-le ja saab paigaldada uuendusi iseseisvalt, priviligeeritud laienduse või juurkasutajata.\n\nF-Droid on paigald", - "fa-IR" to + "fa" to "نکته: نگارش پایه‌ای کارخواه اف دروید مجموعه ویز؛ی‌های کم‌تری دارد (برای نمونه هم‌رسانی نزدیک و دکمهٔ هراس). اندروید ۱۳ را هدف قرار داده و می‌تواند به‌روز رسانی‌های پس‌زمینه را بدون ریشه یا افزونهٔ ممتاز انجام دهد.\n\nاف‌دروید کالانمایی قابل نصب از کاره‌های", "fr" to "REMARQUE : la version Basic du client F-Droid a un jeu de fonctionnalités réduit (par ex. pas de partage de proximité et aucune fonction \"no panic\"). Elle est destinée à la plateforme Android 13 et peut faire des mises à jour sans extension privilégiée o", @@ -113,30 +128,32 @@ val appMetadata = "NÓTA: Tá sraith gnéithe laghdaithe ag an leagan Bunúsach de Chliant F-Droid (e.g. gan aon chomhroinnt in aice láimhe agus gan aon ghné scaoill). Díríonn sé ar Android 13 agus is féidir leis nuashonruithe gan duine a dhéanamh gan síneadh pribhléideach ná fr", "he" to "הערה: לגרסה הבסיסית של לקוח F-Droid יש מערכת תכונה מופחתת (לדוגמה, אין שיתוף סמוך ואין תכונה פאניקה). הוא מכוון לאנדרואיד 13 ויכול לעשות עדכונים ללא הרחבה מועדפת או root.\n\nF-Droid הוא קטלוג של יישומי תוכנה חופשית עבור אנדרואיד. יישומון לקוח F-Droid מקל ל", - "hu-HU" to + "hu" to "MEGJEGYZÉS: Az alap F-Droid verzió csökkentett funkciókészlettel rendelkezik (pl. nincs közeli megosztás és nincs pánik funkció). Az android 13-as rendszert célozza meg, és képes felügyelet nélküli frissítéseket végezni jogosultsági kiterjesztés vagy root ", - "is-IS" to + "id" to + "CATATAN: Versi Basic dari Klien F-Droid memiliki fitur yang lebih terbatas (misalnya, tidak ada berbagi terdekat dan tidak ada fitur panik). Versi ini menargetkan Android 13 dan dapat melakukan pembaruan otomatis tanpa ekstensi istimewa atau akses root.\n", + "is" to "ATHUGAÐU: Grunnútgáfa (Basic) F-Droid forritsins er með færri eiginleika (t.d. ekki deilingu til tækja í nágrenninu og enga neyðaraðgerð). Hún miðast við Android 13 og getur séð um uppfærslur án afskipta notandans án forgangsviðbótarinnar eða rótaraðgangs.", "ja" to "注意:F-DroidクライアントのBasic版は、機能が制限されています(例えば、近くへ共有やパニック機能がありません)。Android 13がターゲットで、特権の拡張やroot無しで更新出来ます。\n\nF-DroidはAndroidのための自由かつインストール可能なソフトウェアアプリの目録です。F-Droidクライアントアプリは、あなたのデバイス上での閲覧、インストール、更新の追跡を簡単にします。\n\nF-Droidは互換性のあるリポジトリへ接続します。標準のリポジトリはf-droid.orgでホスト", + "nl" to + "NOTITIE: De basisversie van de F-Droid-client heeft een gereduceerd aantal functies (bvb geen dichtbij delen en geen paniekfunctie). Het is gericht op Android 13 en kan zelfstandig updates uitvoeren zonder bevoorrechtte extensie of root.\n\nF-Droid is een ", "pt-BR" to "AVISO: A versão básica do cliente F-Droid tem um número reduzido de funções (por exemplo, não tem o \"Por perto\" ou a função de Pánico). Ela \"atinge\" o Android 13 e pode fazer atualizações sem intervenção do usuário, sem precisar da extensão privilegiad", "ro" to "NOTĂ: Versiunea de client F-Droid Basic are un set redus de funcții (de exemplu, fără partajare în apropiere și fără funcție de panică). Aceasta vizează Android 13 și poate face actualizări nesupravegheate fără extensia privilegiată sau root.\n\nF-Droid es", "sr" to "Напомена: Основна верзија клијента F-Droid има ограничен сет функција (нпр. нема опцију за дељење у близини и нема функцију за хитне случајеве). Она је намењена за Android 13 и може да обавља ажурирања без повишених привилегија или рута.\n\nF-Droid је ката", - "sv-SE" to - "OBS: Basic-versionen av F-Droid Client har en reducerad funktionsuppsättning (t.ex. ingen när-delning och ingen panikfunktion). Den riktar sig till Android 13 och kan göra obevakade uppdateringar utan privilegierad förlängning eller root.\n\nF-Droid är en ", - "ta-IN" to + "ta" to "குறிப்பு: எஃப்-டிராய்டு கிளையண்டின் அடிப்படை பதிப்பு குறைக்கப்பட்ட அம்சத் தொகுப்பைக் கொண்டுள்ளது (எ.கா. அருகிலுள்ள பங்கு இல்லை மற்றும் அச்சம் நற்பொருத்தம் இல்லை). இது ஆண்ட்ராய்டு 13 ஐ குறிவைக்கிறது மற்றும் சலுகை பெற்ற நீட்டிப்பு அல்லது வேர் இல்லாமல் கவனிக்", "tr" to - "NOT: F-Droid İstemcisinin Temel sürümünün düşürülmüş özellikleri mevcuttur (mesela nearby share ve panik özelliği yok). Android 13'ü hedef alır ve özel eklenti veya root gerektirmeden gözetimsiz güncellemeler yapabilir.\nF-Droid, Android için özgür yazılım", + "NOT: F-Droid İstemcisinin Basic (Temel) sürümü daraltılmış bir özellik setine sahiptir (örneğin yakındakilerle paylaşım ve panik özelliği yoktur). Android 13'ü hedefler ve ayrıcalıklı bir eklentiye veya root erişimine ihtiyaç duymadan katılımsız (arka plan", "uk" to "ПРИМІТКА. Базова версія F-Droid Client має скорочений набір функцій (наприклад, немає функції спільного доступу поблизу та функції паніки). Він націлений на Android 13 і може виконувати автоматичні оновлення без привілейованого розширення або root-права. ", "zh-CN" to "注意:F-Droid 客户端基础版本的功能不全 (如没有“附近”分享和应急功能)。它针对 Android 13 ,可以在没有特权扩展或 root 的情况下执行无人值守更新。.\n\nF-Droid 是 Android 系统自由软件应用的可安装目录。 F-Droid 客户端应用使得浏览、安装和跟踪设备上的应用更新变得轻而易举。\n\n它可以连接到任何兼容 F-Droid 的存储库。默认存储库托管在 f-droid.org 上,其中只包含真正的自由软件。\n\nAndroid 本身是开放的,意思是你可以从任何地", "zh-TW" to - "注意:F-Droid 用戶端基本版的功能集較少(例如,沒有附近共享和恐慌功能)。它以 Android 13 為目標,無需特權擴充或 root 即可進行無人值守更新。\n\nF-Droid 是適用於 Android 的自由軟體應用程式的可安裝目錄。 F-Droid 用戶端應用程式可以輕鬆瀏覽、安裝和追蹤裝置上的更新。\n\n它可以連接到任何與 F-Droid 相容的儲存庫。預設 repo 託管在 f-droid.org,其中僅包含真正的自由軟體。\n\nAndroid 本身是開放的,這意味著您可以自由地從任何", + "注意:F-Droid 用戶端基本版的功能集較少(例如,沒有附近共享和恐慌功能)。它以 Android 13 為目標,無需特權擴充或 root 即可進行無人值守更新。\n\nF-Droid 是適用於 Android 的自由軟體應用程式的可安裝目錄。 F-Droid 用戶端應用程式可以輕鬆瀏覽、安裝和追蹤裝置上的更新。\n\n它可以連線到任何與 F-Droid 相容的軟體庫。預設 repo 託管在 f-droid.org,其中僅包含真正的自由軟體。\n\nAndroid 本身是開放的,這意味著您可以自由地從任何", ), webSite = "https://f-droid.org", changelog = "https://gitlab.com/fdroid/fdroidclient/-/blob/HEAD/CHANGELOG.md", diff --git a/app/src/androidTest/java/org/fdroid/ui/screenshots/DiscoverItems.kt b/app/src/androidTest/java/org/fdroid/ui/screenshots/DiscoverItems.kt index ac9c91d11..82f44fc90 100644 --- a/app/src/androidTest/java/org/fdroid/ui/screenshots/DiscoverItems.kt +++ b/app/src/androidTest/java/org/fdroid/ui/screenshots/DiscoverItems.kt @@ -6,6 +6,59 @@ import org.fdroid.ui.discover.AppDiscoverItem fun getNewApps(localeList: LocaleListCompat) = listOf( + AppDiscoverItem( + packageName = "org.fairscan.app", + name = + mapOf("en-US" to "FairScan – PDF Scanner", "ru" to "FairScan – Сканер в PDF") + .getBestLocale(localeList) ?: "Unknown App", + isInstalled = true, + imageModel = + "https://f-droid.org/repo/org.fairscan.app/en-US/icon_jXreg-23j73Q35sj5mioXnOD8m6Y9V6kLjX037gxq00=.png", + ), + AppDiscoverItem( + packageName = "com.github.catfriend1.syncthingfork", + name = + mapOf( + "en-US" to "Syncthing-Fork", + "vi" to "Syncthing-Fork", + "he" to "Syncthing-Fork", + "pt-PT" to "Syncthing-Fork", + "zh-CN" to "Syncthing-Fork", + "ru-RU" to "Syncthing-Fork", + "es-419" to "Syncthing-Fork", + "fr-FR" to "Syncthing-Fork", + "es-ES" to "Syncthing-Fork", + "be" to "Syncthing-Fork", + "tr-TR" to "Syncthing-Fork", + "ro" to "Syncthing-Fork", + "ca" to "Syncthing-Fork", + "it-IT" to "Syncthing-Fork", + "uk" to "Syncthing-Fork", + "zh-TW" to "Syncthing-Fork", + "bg" to "Syncthing-Fork", + "cs-CZ" to "Syncthing-Fork", + "nl-NL" to "Syncthing-Fork", + "de-DE" to "Syncthing-Fork", + "ja-JP" to "Syncthing-Fork", + "da-DK" to "Syncthing-Fork", + "ko-KR" to "Syncthing-Fork", + "id" to "Syncthing-Fork", + "sr" to "Syncthing-Fork", + "hu-HU" to "Syncthing-Fork", + "sv-SE" to "Syncthing-Fork", + "et" to "Syncthing-Fork", + "pl-PL" to "Syncthing-Fork", + "pt-BR" to "Syncthing-Fork", + "ar" to "Syncthing-Fork", + "sk" to "Syncthing-Fork", + "es-US" to "Syncthing-Fork", + "fi-FI" to "Syncthing-Fork", + ) + .getBestLocale(localeList) ?: "Unknown App", + isInstalled = false, + imageModel = + "https://f-droid.org/repo/com.github.catfriend1.syncthingfork/en-US/icon_egWOwTWZpQ_1CxmdrwP5wRta5EVmCCuzQWxjI5JTs0w=.png", + ), AppDiscoverItem( packageName = "jp.nonbili.noutube", name = mapOf("en-US" to "NouTube").getBestLocale(localeList) ?: "Unknown App", @@ -13,6 +66,64 @@ fun getNewApps(localeList: LocaleListCompat) = imageModel = "https://f-droid.org/repo/jp.nonbili.noutube/en-US/icon_A1nC0BkAzsvNhws7y1thjfhF8LJJReXVUORApHsstDE=.png", ), + AppDiscoverItem( + packageName = "app.comaps.fdroid", + name = + mapOf( + "pt-PT" to "CoMaps - Mapas e Navegação - Offline e Privada", + "zh-CN" to "CoMaps — 隐私保护下的离线远足、骑行、驾驶", + "lv" to "CoMaps - dodies ceļā bezsaistē ar privātumu", + "hr" to "CoMaps - Pješačite, biciklirajte, vozite Offline i", + "sl" to "CoMaps – potujte brez povezave, zasebno", + "ru-RU" to "CoMaps - Карты и путешествия с приватностью", + "fr-FR" to "CoMaps - Randonnée, Vélo, Conduite hors ligne", + "es-ES" to "CoMaps - Senderismo, ciclismo y conducción offline", + "lt" to "CoMaps – keliaukite atsijungę ir privačiai", + "en-US" to "CoMaps - Hike, Bike, Drive Offline with Privacy", + "tr-TR" to "CoMaps - Gizlilikle Yürüyün, Sürün, Gezin", + "ro" to "CoMaps - călătorește offline cu confidențialitate", + "bn-BD" to "কোম্যাপস - অফলাইনে হাইকিং, সাইকেলিং ও ড্রাইভিং", + "ca" to "CoMaps - Camina, pedala o condueix privadament", + "it-IT" to "CoMaps - Navigazione Offline con Privacy", + "uk" to "CoMaps — ходьба та поїздки офлайн із приватність", + "zh-TW" to "CoMaps — 隱私保護下的離線遠足、騎行、駕駛", + "gl-ES" to "CoMaps - Aplicación de mapas privada, sen conexión", + "bg" to "CoMaps - Хайкинг, Велосипед, Пътуване без Интернет", + "cs-CZ" to "CoMaps – pěšky, na kole a autem offline a soukromě", + "nl-NL" to "CoMaps - Wandel, fiets, rijd offline met privacy", + "de-DE" to "CoMaps – Offline navigieren mit Datenschutz", + "da-DK" to "CoMaps - vandr, cykl og kør offline med privatliv", + "id" to "CoMaps- Navigasi Offline dengan Privasi", + "sr" to "CoMaps - пешачење, бицикл и вожња, са приватношћу", + "el-GR" to "CoMaps - Πλοήγηση εκτός σύνδεσης με ιδιωτικότητα", + "eu-ES" to "CoMaps - mapak offline eta dena pribatuan", + "hu-HU" to "CoMaps – túrázás, kerékpározás, autózás offline", + "no-NO" to "CoMaps - Gå, Sykle, Kjør Uten Internett", + "sv-SE" to "Comaps- Vandra, Cykla, Kör Offline, Privat", + "et" to "CoMaps - sinu privaatne kaart", + "pl-PL" to "CoMaps - Nawiguj offline z zachowaniem prywatności", + "kn-IN" to "ಸಹ ನಕ್ಷೆಗಳು - ಆಫ್‌ಲೈನ್ ಮತ್ತು ಗೌಪ್ಯತೆಯೊಂದಿಗೆ", + "pt-BR" to "CoMaps - Mapas e Navegação Offline com Privacidade", + "ar" to "CoMaps - تنزه وتنقل وقُد دون إنترنت مع الخصوصية", + "sk" to "CoMaps - kráčaj, bicykluj a jazdi v súkromí", + "fi-FI" to "CoMaps - Navigoi yksityisesti ilman verkkoyhteyttä", + "kw" to "CoMaps - Viajya gans Privetter", + "fa-IR" to "CoMaps - کوه‌نوردی، دوچرخه‌سواری و رانندگی آفلاین", + "pt" to "CoMaps - Mapas e Navegação - Offline e Privada", + "ta-IN" to "இணைவரைபடங்கள் - மலையேறு, வண்டி, தனிமையில் இயக்கு", + "en-GB" to "CoMaps - Hike, Bike, Drive Offline with Privacy", + "mt" to "CoMaps - Imxi, Suq Rota u Karozza bil-Privatezza", + "bn" to "CoMaps - অফলাইনে হাইক, বাইক, ড্রাইভ করুন", + "brh" to "CoMaps - آفلائن مش لگ، سائکل سواری و موٹر سواری", + "en-CA" to "CoMaps - Hike, Bike, Drive Offline with Privacy", + "eo" to "CoMaps - Migru, Biciklu, Veturigu Eksterrete", + "ast" to "CoMaps - Mapas ensin conexón con privacidá", + ) + .getBestLocale(localeList) ?: "Unknown App", + isInstalled = true, + imageModel = + "https://f-droid.org/repo/app.comaps.fdroid/en-US/icon_Xqa9hlGluoI0ME9XbHrLOaAJ_dX9wWMtDhLgpFYbUOI=.png", + ), AppDiscoverItem( packageName = "net.thunderbird.android", name = @@ -20,7 +131,7 @@ fun getNewApps(localeList: LocaleListCompat) = "ar" to "ثَندَربِرْد: حرّر صندوق بريدك", "be" to "Thunderbird: Вольная Пошта", "bg" to "Thunderbird: Освободете пощата", - "br" to "Thunderbird: Dieubit hor boest degemer", + "br" to "Thunderbird: Dieubit ho poest degemer", "ca" to "Thunderbird: allibereu la vostra safata d'entrada", "co" to "Thunderbird : Messaghjeria libera", "cs-CZ" to "Thunderbird: Svobodná pošta", @@ -38,7 +149,8 @@ fun getNewApps(localeList: LocaleListCompat) = "fr-FR" to "Thunderbird : Courriel libre", "fy" to "Thunderbird: Befrij jo Postfek", "ga" to "Thunderbird: Saor Do Phost", - "gd" to "Thunderbird: Saorsa dhan phost agad", + "gd" to "Thunderbird: Saorsa dhan phost", + "gl-ES" to "Thunderbird: O teu correo libre", "hi-IN" to "थंडरबर्ड - इन्बॉक्स मुक्त करें", "hr" to "Thunderbird: Oslobodite svoju poštu", "hu-HU" to "Thunderbird: Szabad levelezés", @@ -47,6 +159,7 @@ fun getNewApps(localeList: LocaleListCompat) = "it-IT" to "Thunderbird: libera la tua casella di posta", "iw-IL" to "ת'אנדרבירד: שחרר את תיבת הדואר שלך", "ja-JP" to "Thunderbird: 受信トレイをもっと自由に", + "ko-KR" to "Thunderbird: 이메일을 자유롭게", "lt" to "Thunderbird: lais. savo gaut.", "mnw" to "ဂစေံလလဳ: သၠးကဠာလိက်မၞး", "nl-NL" to "Thunderbird: Bevrijd uw e-mail", @@ -64,7 +177,7 @@ fun getNewApps(localeList: LocaleListCompat) = "sv-SE" to "Thunderbird: Frigör din inkorg", "ta-IN" to "இடிபறவை: உங்கள் உள்பெட்டி விடுவி", "tr-TR" to "Thunderbird: Özgür E-posta", - "uk" to "Thunderbird: Вільна е-пошта", + "uk" to "Thunderbird: Вивільніть Вхідні", "vi" to "Thunderbird: Giải phóng hộp thư của bạn", "zh-CN" to "Thunderbird:解放收件箱", "zh-TW" to "Thunderbird: 釋放你的收件匣", @@ -83,60 +196,6 @@ fun getNewApps(localeList: LocaleListCompat) = imageModel = "https://f-droid.org/repo/io.element.android.x/en-US/icon_YBz4_OnMHd7E2Bd_oEza9ImLSlHTpL_C-ovHcKljeFA=.png", ), - AppDiscoverItem( - packageName = "org.breezyweather", - name = mapOf("en-US" to "Breezy Weather").getBestLocale(localeList) ?: "Unknown App", - isInstalled = true, - imageModel = - "https://f-droid.org/repo/org.breezyweather/en-US/icon_e18rWq0tKc__3173BVXmiiasM_F7yrUbs6kh7lQffto=.png", - ), - AppDiscoverItem( - packageName = "helium314.keyboard", - name = - mapOf( - "ar" to "HeliBoard", - "bg" to "HeliBoard", - "bn" to "হেলিবোর্ড", - "ca" to "HeliBoard", - "cs-CZ" to "HeliBoard", - "de-DE" to "HeliBoard", - "en-US" to "HeliBoard", - "es-ES" to "HeliBoard", - "et" to "HeliBoard", - "fi-FI" to "HeliBoard", - "fr-FR" to "HeliBoard", - "gl-ES" to "HeliBoard", - "hu-HU" to "HeliBoard", - "id" to "HeliBoard", - "is-IS" to "HeliBoard", - "it-IT" to "HeliBoard", - "iw-IL" to "הליבורד HeliBoard", - "lv" to "HeliBoard", - "nl-NL" to "HeliBoard", - "pa-PK" to "ہیلی‌بورڈ", - "pl-PL" to "HeliBoard", - "pt" to "HeliBoard", - "pt-BR" to "HeliBoard", - "ru-RU" to "HeliBoard", - "ta-IN" to "எலிபோர்டு", - "tr-TR" to "HeliBoard", - "uk" to "HeliBoard", - "zh-CN" to "HeliBoard", - ) - .getBestLocale(localeList) ?: "Unknown App", - isInstalled = true, - imageModel = - "https://f-droid.org/repo/helium314.keyboard/en-US/icon_-nkf9NO4Zp7Y0YX1AOcQdZMf32R_bPt8AZC2Ycn2v1I=.png", - ), - AppDiscoverItem( - packageName = "dev.imranr.obtainium.fdroid", - name = - mapOf("de" to "Obtainium", "en-US" to "Obtainium", "ru-RU" to "Obtainium") - .getBestLocale(localeList) ?: "Unknown App", - isInstalled = false, - imageModel = - "https://f-droid.org/repo/dev.imranr.obtainium.fdroid/en-US/icon_8o6Dm3kPEr-C-8U1QdRd9B6DrkXPqLJQ7or0KN7ut_4=.png", - ), ) fun getRecentlyUpdatedApps(localeList: LocaleListCompat) = @@ -148,6 +207,7 @@ fun getRecentlyUpdatedApps(localeList: LocaleListCompat) = "ar" to "K-9 Mail", "be" to "Пошта K-9", "bg" to "K-9 Поща", + "br" to "Postel K-9", "ca" to "K-9 Mail", "co" to "K-9 Mail", "cs-CZ" to "K-9 Mail", @@ -165,6 +225,7 @@ fun getRecentlyUpdatedApps(localeList: LocaleListCompat) = "fy" to "K-9 Mail", "ga" to "K-9 Mail", "gd" to "Post K-9", + "gl-ES" to "K-9 Mail", "he" to "K-9 דוא\"ל", "hi-IN" to "K-9 Mail", "hr" to "K-9 Mail", @@ -258,14 +319,14 @@ fun getRecentlyUpdatedApps(localeList: LocaleListCompat) = packageName = "com.kunzisoft.keepass.libre", name = mapOf( - "ar" to "KeePassDX Passkey Vault", + "ar" to "خزنة مفتاح مرور KeePassDX", "cs-CZ" to "Trezor pro klíče KeePassDX", "de-DE" to "KeePassDX Passkey-Tresor", "en-US" to "KeePassDX Passkey Vault", "es-ES" to "KeePassDX Passkey Vault", "et" to "KeePassDX salasõnahoidla", "fr-FR" to "KeePassDX - Passkey local", - "hr" to "KeePassDX Passkey Vault", + "hr" to "KeePassDX trezor za lozinke", "hu-HU" to "KeePassDX jelszótároló", "id" to "KeePassDX Passkey Vault", "it-IT" to "Cassaforte passkey KeePassDX", @@ -277,10 +338,12 @@ fun getRecentlyUpdatedApps(localeList: LocaleListCompat) = "pl-PL" to "KeePassDX – Bezpieczny sejf", "ru-RU" to "KeePassDX - менеджер паролей", "sq" to "Kasafortë Kyçklm. KeePassDX", + "ta-IN" to "KeePassDX பாச்கி வால்ட்", "th" to "ตู้นิรภัยพาสคีย์คียพาสดีเอ็กซ์", - "tr-TR" to "KeePassDX Passkey Vault", + "tr-TR" to "KeePassDX Passkey Kasası", + "ur" to "کی پاس ڈی ایکس پاس کی تجوری", "zh-CN" to "KeePassDX 密码库", - "zh-TW" to "KeePassDX 密碼(金鑰/單字)保險庫", + "zh-TW" to "KeePassDX 密碼金鑰保險庫", ) .getBestLocale(localeList) ?: "Unknown App", isInstalled = false, @@ -300,59 +363,95 @@ fun getMostDownloadedApps(localeList: LocaleListCompat) = "pt-PT" to "Organic Maps - Mapas offline", "zh-CN" to "Organic Maps・离线地图与导航 & GPS", "iw-IL" to "Organic Maps・מפת אופליין ו-GPS", + "ms-MY" to "Organic Maps: Peta & Navigasi", "lv" to "Organic Maps・Kartes・Navigācija", + "am" to "Organic Maps・ከመስመር ውጭ ካርታ & GPS", + "en-SG" to "Organic Maps・Offline Map & GPS", + "af" to "Organic Maps・Aflynkaart & GPS", "kk" to "Organic Maps: Карталар", "hr" to "Organic Maps: offline karte", "th" to "Organic Maps: แผนที่gps", "si-LK" to "Organic Maps・ඔෆ්ලයින් සිතියම්", "sl" to "Organic Maps・Offline Karte", "ru-RU" to "Organic Maps: GPS карты офлайн", + "es-419" to "Organic Maps: mapas sin conexión y GPS", "ne-NP" to "Organic Map・अफलाइन नक्सा & GPS", + "jv" to "Organic Maps・Peta Offline & GPS", "fr-FR" to "Organic Maps: gps hors ligne", "es-ES" to "Organic Maps: mapas offline", "mk-MK" to "Organic Maps・Мапи и навигација", + "ta-IN" to "Organic Maps・ஆஃப்லைன் வரைபடம்", "be" to "Organic Maps: GPS карты офлайн", + "or" to "Organic Maps・ଅଫଲାଇନ୍ ମ୍ୟାପ୍ ଓ GPS", + "en-ZA" to "Organic Maps・Offline Map & GPS", + "fr-CA" to "Organic Maps: gps hors ligne", "lt" to "Organic Maps・žemėlapis & GPS", "ms" to "Organic Maps: Peta & Navigasi", + "sq" to "Organic Maps・Hartë Offline & GPS", + "fa-AE" to "Organic Maps・نقشه آفلاین و GPS", "en-US" to "Organic Maps・Offline Map & GPS", + "bs" to "Organic Maps: Offline mape i GPS", "tr-TR" to "Organic Maps: Haritalar ve GPS", "ro" to "Organic Maps: hărți offline", + "en-GB" to "Organic Maps・Offline Map & GPS", + "ug" to "Organic Maps・تورسىز خەرىتە GPS", "hi-IN" to "Organic Maps・ऑफ़लाइन मैप", + "bo" to "Organic Maps・དྲ་རྒྱ་མེད་ས་ཁྲ། GPS", "mr-IN" to "Organic Maps ऑफलाईन नकाशे", "bn-BD" to "Organic Maps・मैप्स और नेविगेशन", "ca" to "Organic Map・Mapa Offline i GPS", "it-IT" to "Organic Maps: Mappe Offline", "uk" to "Organic Maps: GPS карти офлайн", + "fa-AF" to "Organic Maps・نقشه آفلاین و GPS", + "mn-MN" to "Organic Maps・Офлайн газрын зураг ба GPS", "zh-TW" to "Organic Maps・離線地圖與導航 GPS", + "as" to "Organic Maps・অফলাইন মেপ আৰু GPS", "zh-HK" to "Organic Maps: 地圖與導航", "gl-ES" to "Organic Maps・Mapa fóra de liña", + "mi" to "Organic Maps・Mahere Tuimotu GPS", + "en-AU" to "Organic Maps・Offline Map & GPS", "bg" to "Organic Maps: офлайн GPS карти", + "my-MM" to "Organic Maps・အော့ဖ်လိုင်းမြေပုံနှင့် GPS", "cs-CZ" to "Organic Maps・mapy offline, GPS", "ml-IN" to "Organic Maps・ഓഫ്‌ലൈൻ മാപ്പ്", "nl-NL" to "Organic Maps: offline kaarten", + "en-CA" to "Organic Maps・Offline Map & GPS", "de-DE" to "Organic Maps Offline Karten", + "zu" to "Organic Maps・Imephu Offline ne-GPS", "ja-JP" to "Organic Maps: マップ & ナビゲーション", "da-DK" to "Organic Maps: Offline Kort", "fa" to "Organic Maps・نقشه آفلاین و GPS", + "en-IN" to "Organic Maps・Offline Map & GPS", + "hy-AM" to "Organic Maps・Offline Map & GPS", "ur" to "Organic Maps・Offline Map & GPS", + "mai" to "Organic Maps・ऑफलाइन नक्शा आ GPS", "ko-KR" to "Organic Maps・GPS 지도 길찾기 앱 & 地图", "id" to "Organic Maps: pemetaan offline", + "ky-KG" to "Organic Maps・Офлайн карта жана GPS", "sr" to "Organic Maps・Mape i navigacija", "el-GR" to "Organic Maps: Χάρτες & GPS", "eu-ES" to "Organic Maps・Offline Map & GPS", "hu-HU" to "Organic Maps offline navigáció", "lo-LA" to "Organic Maps・ແຜນທີ່ອອບໄລນ໌", "no-NO" to "Organic Maps・kart & navigasjon", + "rm" to "Organic Maps: Carta Offline & GPS", + "sw" to "Organic Maps・Ramani Offline na GPS", + "te-IN" to "Organic Maps・ఆఫ్‌లైన్ మ్యాప్", + "uz" to "Organic Maps: Oflayn xarita va GPS", "sv-SE" to "Organic Maps: kartor & GPS", "et" to "Organic Maps: gps offline", "pl-PL" to "Organic Map・mapy i GPS offline", "kn-IN" to "Organic Maps・ಆಫ್‌ಲೈನ್ ಮ್ಯಾಪ್", + "fil" to "Organic Maps・Offline na Mapa at GPS", "pt-BR" to "Organic Maps - Mapas offline", "ar" to "Organic Maps・خرائط بدون إنترنت", "ka-GE" to "Organic Map: ნავიგაცია, რუკები", "sk" to "Organic Map・Offline Mapy & GPS", + "pa" to "Organic Maps: ਆਫਲਾਈਨ ਨਕਸ਼ੇ", "gu" to "Organic Maps・ઓફલાઇન નકશો", + "is-IS" to "Organic Maps・Ótengd kort og GPS", "az-AZ" to "Organic Maps – Xəritə və GPS", + "es-US" to "Organic Maps: mapas sin conexión y GPS", "fi-FI" to "Organic Maps: offline kartat", ) .getBestLocale(localeList) ?: "Unknown App", diff --git a/app/src/androidTest/java/org/fdroid/ui/screenshots/MyAppsItems.kt b/app/src/androidTest/java/org/fdroid/ui/screenshots/MyAppsItems.kt index 7ecdf198f..2ebfbfbcf 100644 --- a/app/src/androidTest/java/org/fdroid/ui/screenshots/MyAppsItems.kt +++ b/app/src/androidTest/java/org/fdroid/ui/screenshots/MyAppsItems.kt @@ -8,6 +8,71 @@ import org.fdroid.ui.utils.getPreviewVersion fun getUpdates(localeList: LocaleListCompat) = listOf( + AppUpdateItem( + repoId = 1L, + packageName = "app.comaps.fdroid", + name = + mapOf( + "pt-PT" to "CoMaps - Mapas e Navegação - Offline e Privada", + "zh-CN" to "CoMaps — 隐私保护下的离线远足、骑行、驾驶", + "lv" to "CoMaps - dodies ceļā bezsaistē ar privātumu", + "hr" to "CoMaps - Pješačite, biciklirajte, vozite Offline i", + "sl" to "CoMaps – potujte brez povezave, zasebno", + "ru-RU" to "CoMaps - Карты и путешествия с приватностью", + "fr-FR" to "CoMaps - Randonnée, Vélo, Conduite hors ligne", + "es-ES" to "CoMaps - Senderismo, ciclismo y conducción offline", + "lt" to "CoMaps – keliaukite atsijungę ir privačiai", + "en-US" to "CoMaps - Hike, Bike, Drive Offline with Privacy", + "tr-TR" to "CoMaps - Gizlilikle Yürüyün, Sürün, Gezin", + "ro" to "CoMaps - călătorește offline cu confidențialitate", + "bn-BD" to "কোম্যাপস - অফলাইনে হাইকিং, সাইকেলিং ও ড্রাইভিং", + "ca" to "CoMaps - Camina, pedala o condueix privadament", + "it-IT" to "CoMaps - Navigazione Offline con Privacy", + "uk" to "CoMaps — ходьба та поїздки офлайн із приватність", + "zh-TW" to "CoMaps — 隱私保護下的離線遠足、騎行、駕駛", + "gl-ES" to "CoMaps - Aplicación de mapas privada, sen conexión", + "bg" to "CoMaps - Хайкинг, Велосипед, Пътуване без Интернет", + "cs-CZ" to "CoMaps – pěšky, na kole a autem offline a soukromě", + "nl-NL" to "CoMaps - Wandel, fiets, rijd offline met privacy", + "de-DE" to "CoMaps – Offline navigieren mit Datenschutz", + "da-DK" to "CoMaps - vandr, cykl og kør offline med privatliv", + "id" to "CoMaps- Navigasi Offline dengan Privasi", + "sr" to "CoMaps - пешачење, бицикл и вожња, са приватношћу", + "el-GR" to "CoMaps - Πλοήγηση εκτός σύνδεσης με ιδιωτικότητα", + "eu-ES" to "CoMaps - mapak offline eta dena pribatuan", + "hu-HU" to "CoMaps – túrázás, kerékpározás, autózás offline", + "no-NO" to "CoMaps - Gå, Sykle, Kjør Uten Internett", + "sv-SE" to "Comaps- Vandra, Cykla, Kör Offline, Privat", + "et" to "CoMaps - sinu privaatne kaart", + "pl-PL" to "CoMaps - Nawiguj offline z zachowaniem prywatności", + "kn-IN" to "ಸಹ ನಕ್ಷೆಗಳು - ಆಫ್‌ಲೈನ್ ಮತ್ತು ಗೌಪ್ಯತೆಯೊಂದಿಗೆ", + "pt-BR" to "CoMaps - Mapas e Navegação Offline com Privacidade", + "ar" to "CoMaps - تنزه وتنقل وقُد دون إنترنت مع الخصوصية", + "sk" to "CoMaps - kráčaj, bicykluj a jazdi v súkromí", + "fi-FI" to "CoMaps - Navigoi yksityisesti ilman verkkoyhteyttä", + "kw" to "CoMaps - Viajya gans Privetter", + "fa-IR" to "CoMaps - کوه‌نوردی، دوچرخه‌سواری و رانندگی آفلاین", + "pt" to "CoMaps - Mapas e Navegação - Offline e Privada", + "ta-IN" to "இணைவரைபடங்கள் - மலையேறு, வண்டி, தனிமையில் இயக்கு", + "en-GB" to "CoMaps - Hike, Bike, Drive Offline with Privacy", + "mt" to "CoMaps - Imxi, Suq Rota u Karozza bil-Privatezza", + "bn" to "CoMaps - অফলাইনে হাইক, বাইক, ড্রাইভ করুন", + "brh" to "CoMaps - آفلائن مش لگ، سائکل سواری و موٹر سواری", + "en-CA" to "CoMaps - Hike, Bike, Drive Offline with Privacy", + "eo" to "CoMaps - Migru, Biciklu, Veturigu Eksterrete", + "ast" to "CoMaps - Mapas ensin conexón con privacidá", + ) + .getBestLocale(localeList) ?: "Unknown App", + installedVersionName = "2026.05.06-10-FDroid", + update = + getPreviewVersion( + versionName = "2026.05.06-11-FDroid", + size = 65470491, + ), + whatsNew = "foo bar", + iconModel = + "https://f-droid.org/repo/app.comaps.fdroid/en-US/icon_Xqa9hlGluoI0ME9XbHrLOaAJ_dX9wWMtDhLgpFYbUOI=.png", + ), AppUpdateItem( repoId = 1L, packageName = "app.organicmaps", @@ -18,64 +83,104 @@ fun getUpdates(localeList: LocaleListCompat) = "pt-PT" to "Organic Maps - Mapas offline", "zh-CN" to "Organic Maps・离线地图与导航 & GPS", "iw-IL" to "Organic Maps・מפת אופליין ו-GPS", + "ms-MY" to "Organic Maps: Peta & Navigasi", "lv" to "Organic Maps・Kartes・Navigācija", + "am" to "Organic Maps・ከመስመር ውጭ ካርታ & GPS", + "en-SG" to "Organic Maps・Offline Map & GPS", + "af" to "Organic Maps・Aflynkaart & GPS", "kk" to "Organic Maps: Карталар", "hr" to "Organic Maps: offline karte", "th" to "Organic Maps: แผนที่gps", "si-LK" to "Organic Maps・ඔෆ්ලයින් සිතියම්", "sl" to "Organic Maps・Offline Karte", "ru-RU" to "Organic Maps: GPS карты офлайн", + "es-419" to "Organic Maps: mapas sin conexión y GPS", "ne-NP" to "Organic Map・अफलाइन नक्सा & GPS", + "jv" to "Organic Maps・Peta Offline & GPS", "fr-FR" to "Organic Maps: gps hors ligne", "es-ES" to "Organic Maps: mapas offline", "mk-MK" to "Organic Maps・Мапи и навигација", + "ta-IN" to "Organic Maps・ஆஃப்லைன் வரைபடம்", "be" to "Organic Maps: GPS карты офлайн", + "or" to "Organic Maps・ଅଫଲାଇନ୍ ମ୍ୟାପ୍ ଓ GPS", + "en-ZA" to "Organic Maps・Offline Map & GPS", + "fr-CA" to "Organic Maps: gps hors ligne", "lt" to "Organic Maps・žemėlapis & GPS", "ms" to "Organic Maps: Peta & Navigasi", + "sq" to "Organic Maps・Hartë Offline & GPS", + "fa-AE" to "Organic Maps・نقشه آفلاین و GPS", "en-US" to "Organic Maps・Offline Map & GPS", + "bs" to "Organic Maps: Offline mape i GPS", "tr-TR" to "Organic Maps: Haritalar ve GPS", "ro" to "Organic Maps: hărți offline", + "en-GB" to "Organic Maps・Offline Map & GPS", + "ug" to "Organic Maps・تورسىز خەرىتە GPS", "hi-IN" to "Organic Maps・ऑफ़लाइन मैप", + "bo" to "Organic Maps・དྲ་རྒྱ་མེད་ས་ཁྲ། GPS", "mr-IN" to "Organic Maps ऑफलाईन नकाशे", "bn-BD" to "Organic Maps・मैप्स और नेविगेशन", "ca" to "Organic Map・Mapa Offline i GPS", "it-IT" to "Organic Maps: Mappe Offline", "uk" to "Organic Maps: GPS карти офлайн", + "fa-AF" to "Organic Maps・نقشه آفلاین و GPS", + "mn-MN" to "Organic Maps・Офлайн газрын зураг ба GPS", "zh-TW" to "Organic Maps・離線地圖與導航 GPS", + "as" to "Organic Maps・অফলাইন মেপ আৰু GPS", "zh-HK" to "Organic Maps: 地圖與導航", "gl-ES" to "Organic Maps・Mapa fóra de liña", + "mi" to "Organic Maps・Mahere Tuimotu GPS", + "en-AU" to "Organic Maps・Offline Map & GPS", "bg" to "Organic Maps: офлайн GPS карти", + "my-MM" to "Organic Maps・အော့ဖ်လိုင်းမြေပုံနှင့် GPS", "cs-CZ" to "Organic Maps・mapy offline, GPS", "ml-IN" to "Organic Maps・ഓഫ്‌ലൈൻ മാപ്പ്", "nl-NL" to "Organic Maps: offline kaarten", + "en-CA" to "Organic Maps・Offline Map & GPS", "de-DE" to "Organic Maps Offline Karten", + "zu" to "Organic Maps・Imephu Offline ne-GPS", "ja-JP" to "Organic Maps: マップ & ナビゲーション", "da-DK" to "Organic Maps: Offline Kort", "fa" to "Organic Maps・نقشه آفلاین و GPS", + "en-IN" to "Organic Maps・Offline Map & GPS", + "hy-AM" to "Organic Maps・Offline Map & GPS", "ur" to "Organic Maps・Offline Map & GPS", + "mai" to "Organic Maps・ऑफलाइन नक्शा आ GPS", "ko-KR" to "Organic Maps・GPS 지도 길찾기 앱 & 地图", "id" to "Organic Maps: pemetaan offline", + "ky-KG" to "Organic Maps・Офлайн карта жана GPS", "sr" to "Organic Maps・Mape i navigacija", "el-GR" to "Organic Maps: Χάρτες & GPS", "eu-ES" to "Organic Maps・Offline Map & GPS", "hu-HU" to "Organic Maps offline navigáció", "lo-LA" to "Organic Maps・ແຜນທີ່ອອບໄລນ໌", "no-NO" to "Organic Maps・kart & navigasjon", + "rm" to "Organic Maps: Carta Offline & GPS", + "sw" to "Organic Maps・Ramani Offline na GPS", + "te-IN" to "Organic Maps・ఆఫ్‌లైన్ మ్యాప్", + "uz" to "Organic Maps: Oflayn xarita va GPS", "sv-SE" to "Organic Maps: kartor & GPS", "et" to "Organic Maps: gps offline", "pl-PL" to "Organic Map・mapy i GPS offline", "kn-IN" to "Organic Maps・ಆಫ್‌ಲೈನ್ ಮ್ಯಾಪ್", + "fil" to "Organic Maps・Offline na Mapa at GPS", "pt-BR" to "Organic Maps - Mapas offline", "ar" to "Organic Maps・خرائط بدون إنترنت", "ka-GE" to "Organic Map: ნავიგაცია, რუკები", "sk" to "Organic Map・Offline Mapy & GPS", + "pa" to "Organic Maps: ਆਫਲਾਈਨ ਨਕਸ਼ੇ", "gu" to "Organic Maps・ઓફલાઇન નકશો", + "is-IS" to "Organic Maps・Ótengd kort og GPS", "az-AZ" to "Organic Maps – Xəritə və GPS", + "es-US" to "Organic Maps: mapas sin conexión y GPS", "fi-FI" to "Organic Maps: offline kartat", ) .getBestLocale(localeList) ?: "Unknown App", - installedVersionName = "2026.02.18-4-FDroid", - update = getPreviewVersion(versionName = "2026.02.18-5-FDroid", size = 70355961), + installedVersionName = "2026.05.27-10-FDroid", + update = + getPreviewVersion( + versionName = "2026.05.27-11-FDroid", + size = 71778828, + ), whatsNew = "foo bar", iconModel = "https://f-droid.org/repo/app.organicmaps/en-US/icon_dE7f4P95-uKZwu7cI89Q0xSi_-gvU4DD-XnLoDG9RLg=.png", @@ -84,34 +189,37 @@ fun getUpdates(localeList: LocaleListCompat) = repoId = 1L, packageName = "at.bitfire.davdroid", name = mapOf("ca" to "DAVx⁵", "en-US" to "DAVx⁵").getBestLocale(localeList) ?: "Unknown App", - installedVersionName = "4.5.8-ose", - update = getPreviewVersion(versionName = "4.5.9-ose", size = 15974669), + installedVersionName = "4.5.12-ose", + update = + getPreviewVersion( + versionName = "4.5.13-ose", + size = 16018266, + ), whatsNew = null, iconModel = "https://f-droid.org/repo/at.bitfire.davdroid/en-US/icon_NexNou7vmaD45rbdc8kjLj0Rv7FW128Mde9OQpHFXPE=.png", ), - AppUpdateItem( - repoId = 1L, - packageName = "ch.protonvpn.android", - name = - mapOf("en-US" to "ProtonVPN - Secure and Free VPN").getBestLocale(localeList) - ?: "Unknown App", - installedVersionName = "5.16.30.9", - update = getPreviewVersion(versionName = "5.16.31.0", size = 54161941), - whatsNew = "foo bar", - iconModel = - "https://f-droid.org/repo/ch.protonvpn.android/en-US/icon_xAphlcwMgx7oE7sxB15sxUFIO8geUokWkG01K1fubas=.png", - ), ) fun getInstalledApps(localeList: LocaleListCompat) = listOf( + InstalledAppItem( + packageName = "ch.protonvpn.android", + name = + mapOf("en-US" to "ProtonVPN - Secure and Free VPN").getBestLocale(localeList) + ?: "Unknown App", + installedVersionName = "5.18.75.0", + installedVersionCode = 1, + lastUpdated = 1780506857489L, + iconModel = + "https://f-droid.org/repo/ch.protonvpn.android/en-US/icon_xAphlcwMgx7oE7sxB15sxUFIO8geUokWkG01K1fubas=.png", + ), InstalledAppItem( packageName = "com.aurora.store", name = mapOf("en-US" to "Aurora Store").getBestLocale(localeList) ?: "Unknown App", - installedVersionName = "4.8.1", + installedVersionName = "4.8.3", installedVersionCode = 1, - lastUpdated = 1771544205000L, + lastUpdated = 1779007734975L, iconModel = "https://f-droid.org/repo/com.aurora.store/en-US/icon_tbAhwq51NNd0liZcTg0cQNNvazxrWlj7bPCe_1TkCV8=.png", ), @@ -119,18 +227,18 @@ fun getInstalledApps(localeList: LocaleListCompat) = packageName = "com.duckduckgo.mobile.android", name = mapOf("en-US" to "DuckDuckGo Privacy Browser").getBestLocale(localeList) ?: "Unknown App", - installedVersionName = "5.268.1", + installedVersionName = "5.281.1", installedVersionCode = 1, - lastUpdated = 1772699310000L, + lastUpdated = 1780614376764L, iconModel = "https://f-droid.org/repo/com.duckduckgo.mobile.android/en-US/icon_QyKhnj_C0Pek3xtJAfPFTvywRXDutsVh7r-9t-doP9E=.png", ), InstalledAppItem( packageName = "com.foobnix.pro.pdf.reader", name = mapOf("en-US" to "Librera Reader").getBestLocale(localeList) ?: "Unknown App", - installedVersionName = "9.3.63-fdroid", + installedVersionName = "9.3.75-fdroid", installedVersionCode = 1, - lastUpdated = 1772574994000L, + lastUpdated = 1777245514905L, iconModel = "https://f-droid.org/repo/com.foobnix.pro.pdf.reader/en-US/icon_y15Jxhzp6YrmjLC-wtc27B6XLTcArf7yK-2WlpNaoe0=.png", ), @@ -141,6 +249,7 @@ fun getInstalledApps(localeList: LocaleListCompat) = "ar" to "K-9 Mail", "be" to "Пошта K-9", "bg" to "K-9 Поща", + "br" to "Postel K-9", "ca" to "K-9 Mail", "co" to "K-9 Mail", "cs-CZ" to "K-9 Mail", @@ -158,6 +267,7 @@ fun getInstalledApps(localeList: LocaleListCompat) = "fy" to "K-9 Mail", "ga" to "K-9 Mail", "gd" to "Post K-9", + "gl-ES" to "K-9 Mail", "he" to "K-9 דוא\"ל", "hi-IN" to "K-9 Mail", "hr" to "K-9 Mail", @@ -191,36 +301,82 @@ fun getInstalledApps(localeList: LocaleListCompat) = "zh-TW" to "K-9 Mail", ) .getBestLocale(localeList) ?: "Unknown App", - installedVersionName = "16.1", + installedVersionName = "19.2", installedVersionCode = 1, - lastUpdated = 1770745842000L, + lastUpdated = 1780699361309L, iconModel = "https://f-droid.org/repo/com.fsck.k9/en-US/icon_-2bZW0ZnkKqPVher2SxQK8hXGGSjgaBHoa8x6vW0v8w=.png", ), InstalledAppItem( packageName = "com.github.andreyasadchy.xtra", name = mapOf("en-US" to "Xtra").getBestLocale(localeList) ?: "Unknown App", - installedVersionName = "2.54.3", + installedVersionName = "2.56.2", installedVersionCode = 1, - lastUpdated = 1772397992000L, + lastUpdated = 1780506857489L, iconModel = "https://f-droid.org/repo/com.github.andreyasadchy.xtra/en-US/icon_yfnxF0cNrXwFX2a93BUclISVaIQzoRmbOuxtGDAwz28=.png", ), + InstalledAppItem( + packageName = "com.github.catfriend1.syncthingfork", + name = + mapOf( + "en-US" to "Syncthing-Fork", + "vi" to "Syncthing-Fork", + "he" to "Syncthing-Fork", + "pt-PT" to "Syncthing-Fork", + "zh-CN" to "Syncthing-Fork", + "ru-RU" to "Syncthing-Fork", + "es-419" to "Syncthing-Fork", + "fr-FR" to "Syncthing-Fork", + "es-ES" to "Syncthing-Fork", + "be" to "Syncthing-Fork", + "tr-TR" to "Syncthing-Fork", + "ro" to "Syncthing-Fork", + "ca" to "Syncthing-Fork", + "it-IT" to "Syncthing-Fork", + "uk" to "Syncthing-Fork", + "zh-TW" to "Syncthing-Fork", + "bg" to "Syncthing-Fork", + "cs-CZ" to "Syncthing-Fork", + "nl-NL" to "Syncthing-Fork", + "de-DE" to "Syncthing-Fork", + "ja-JP" to "Syncthing-Fork", + "da-DK" to "Syncthing-Fork", + "ko-KR" to "Syncthing-Fork", + "id" to "Syncthing-Fork", + "sr" to "Syncthing-Fork", + "hu-HU" to "Syncthing-Fork", + "sv-SE" to "Syncthing-Fork", + "et" to "Syncthing-Fork", + "pl-PL" to "Syncthing-Fork", + "pt-BR" to "Syncthing-Fork", + "ar" to "Syncthing-Fork", + "sk" to "Syncthing-Fork", + "es-US" to "Syncthing-Fork", + "fi-FI" to "Syncthing-Fork", + ) + .getBestLocale(localeList) ?: "Unknown App", + installedVersionName = "2.1.0.0", + installedVersionCode = 1, + lastUpdated = 1778740722978L, + iconModel = + "https://f-droid.org/repo/com.github.catfriend1.syncthingfork/en-US/icon_egWOwTWZpQ_1CxmdrwP5wRta5EVmCCuzQWxjI5JTs0w=.png", + ), InstalledAppItem( packageName = "com.github.libretube", name = mapOf("en-US" to "LibreTube").getBestLocale(localeList) ?: "Unknown App", - installedVersionName = "0.30.0", + installedVersionName = "31.4", installedVersionCode = 1, - lastUpdated = 1769702789000L, + lastUpdated = 1780094298321L, iconModel = "https://f-droid.org/repo/com.github.libretube/en-US/icon_p6_cfoYk-2IlerJpH4rKIQmkI76zXtS3R9-RZp-3Ggk=.png", ), InstalledAppItem( packageName = "com.inspiredandroid.linuxcommandbibliotheca", name = mapOf("en-US" to "Linux Command Library").getBestLocale(localeList) ?: "Unknown App", - installedVersionName = "3.5.13", + installedVersionName = "4.0.6", installedVersionCode = 1, - lastUpdated = 1772463524000L, + lastUpdated = 1780012218733L, iconModel = "https://f-droid.org/repo/com.inspiredandroid.linuxcommandbibliotheca/en-US/icon_DrA_e_52nvGa_kTMSapBw4MCqKpccl8WZqrG5enB7rI=.png", ), @@ -257,48 +413,4 @@ fun getInstalledApps(localeList: LocaleListCompat) = iconModel = "https://f-droid.org/repo/com.junkfood.seal/en-US/icon_j8mCLA_OX-sJn7TRAdvoaUMW1f6djRv6RMzAnNdaG4I=.png", ), - InstalledAppItem( - packageName = "com.kunzisoft.keepass.libre", - name = - mapOf( - "ar" to "KeePassDX Passkey Vault", - "cs-CZ" to "Trezor pro klíče KeePassDX", - "de-DE" to "KeePassDX Passkey-Tresor", - "en-US" to "KeePassDX Passkey Vault", - "es-ES" to "KeePassDX Passkey Vault", - "et" to "KeePassDX salasõnahoidla", - "fr-FR" to "KeePassDX - Passkey local", - "hr" to "KeePassDX Passkey Vault", - "hu-HU" to "KeePassDX jelszótároló", - "id" to "KeePassDX Passkey Vault", - "it-IT" to "Cassaforte passkey KeePassDX", - "ja-JP" to "KeePassDX パスワード管理ツール", - "lt" to "KeePassDX slaptažodžių seifas", - "lv" to "KeePassDX: paroļu pārvaldnieks", - "mk-MK" to "KeePassDX Passkey Vault", - "nl-NL" to "KeePassDX Passkey-kluis", - "pl-PL" to "KeePassDX – Bezpieczny sejf", - "ru-RU" to "KeePassDX - менеджер паролей", - "sq" to "Kasafortë Kyçklm. KeePassDX", - "th" to "ตู้นิรภัยพาสคีย์คียพาสดีเอ็กซ์", - "tr-TR" to "KeePassDX Passkey Vault", - "zh-CN" to "KeePassDX 密码库", - "zh-TW" to "KeePassDX 密碼(金鑰/單字)保險庫", - ) - .getBestLocale(localeList) ?: "Unknown App", - installedVersionName = "4.3.2", - installedVersionCode = 1, - lastUpdated = 1768680637000L, - iconModel = - "https://f-droid.org/repo/com.kunzisoft.keepass.libre/en-US/icon_eLwXEQD9l2URrUS3t8esDXnsKGBaH02E-ddEYhV_i7Q=.png", - ), - InstalledAppItem( - packageName = "com.looker.droidify", - name = mapOf("en-US" to "Droid-ify").getBestLocale(localeList) ?: "Unknown App", - installedVersionName = "0.7.0", - installedVersionCode = 1, - lastUpdated = 1771667689000L, - iconModel = - "https://f-droid.org/repo/com.looker.droidify/en-US/icon_lApsnfhrMqGkCaW-IdnYwx86CUjdTutncPvXPJythaM=.png", - ), ) diff --git a/fastlane b/fastlane new file mode 160000 index 000000000..55dc705cf --- /dev/null +++ b/fastlane @@ -0,0 +1 @@ +Subproject commit 55dc705cf107cd758777c578ea18df65d71d5e5d diff --git a/src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 2ed186bf5..000000000 --- a/src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f2913d39b6abcccc680b6e7222ee54e352f8045027e6b94ba3ca748caf7aac46 -size 109126 diff --git a/src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 85cf76dfd..000000000 --- a/src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:02e5843b1d64cd37f88dda07351a7c0b73eb963117eb3831336cb844d700033a -size 87015 diff --git a/src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 6c71aaff4..000000000 --- a/src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2efb23e2904db105ca379fa34ab9fd269d89da9fb5ccf0308bd8b3205a782101 -size 68273 diff --git a/src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 280ebc818..000000000 --- a/src/basic/fastlane/metadata/android/ar/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dfcb41128b9073adc03404d9377595fde2319a96d8700f09459540b2d2a31e65 -size 183860 diff --git a/src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 072a33a05..000000000 --- a/src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0ebc819226abd72e308e85629b2648fb8988f0b04d69ceaed1a0b29b9e7e1cd4 -size 114041 diff --git a/src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/2_Search.png deleted file mode 100644 index e3551cff0..000000000 --- a/src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5fc72cacc8d109a13aaf57dd4fe1c771fdc47c5af1e40f0b1067f10991aae3d7 -size 82989 diff --git a/src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 800797903..000000000 --- a/src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:23d61581f306f61dee4dc2b0be0d55ee4b139383b30388f6027ef8257ba9fbdc -size 74477 diff --git a/src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/4_Details.png deleted file mode 100644 index afbe05de5..000000000 --- a/src/basic/fastlane/metadata/android/ast/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d9e4a1070e68c6573a10374214d5e1856fd18598cf2497afcafd672669ff1e57 -size 183894 diff --git a/src/basic/fastlane/metadata/android/be/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/be/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 3d021d5a3..000000000 --- a/src/basic/fastlane/metadata/android/be/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e7763731dee15da6f7eacaa8eec42a224a973ccc47c686a6ca1686672197bf63 -size 113540 diff --git a/src/basic/fastlane/metadata/android/be/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/be/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 1b96981a1..000000000 --- a/src/basic/fastlane/metadata/android/be/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2a8cc7a9659cf4402bded62c0b0a49617f895790b9a67249c22a329290613c6f -size 84207 diff --git a/src/basic/fastlane/metadata/android/be/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/be/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 5d680709e..000000000 --- a/src/basic/fastlane/metadata/android/be/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c1580b1371098f9988eec12c417d89cd6a4e40d6cbd4320923552d0d675b98f1 -size 73194 diff --git a/src/basic/fastlane/metadata/android/be/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/be/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 2a84d5e87..000000000 --- a/src/basic/fastlane/metadata/android/be/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3c1f807665c2498250e68b50e67f243ded5440b8f164a12f602e7cfdd25df2e6 -size 184778 diff --git a/src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 3a24d332e..000000000 --- a/src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:73306761f019d03bc3bd0cf774c8bd1b0f0200efc5f64e825ee39140cd29fe92 -size 114235 diff --git a/src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 6c1c3f059..000000000 --- a/src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a48274f1b8d53c73d70f5e1aa0aeb7decc39ad1c6d239f0a396aab7867459ff8 -size 85570 diff --git a/src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index ede2032a1..000000000 --- a/src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e62bc29ccc5df088efb0d00cbdc9d5dac29b03ae90d1eb2d2f96443cc5747f29 -size 75460 diff --git a/src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/4_Details.png deleted file mode 100644 index d512e6ecc..000000000 --- a/src/basic/fastlane/metadata/android/bg/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:09d8c66e394d3dbd709a8267f7fc3c731514ca585c94b1749e6ee2313f9689e2 -size 186268 diff --git a/src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 5d79ce0d8..000000000 --- a/src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2702347828af531d4dfa410b941e9636af607fcd8ed4b6b32b8b8aea037dc108 -size 116040 diff --git a/src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 0d9e01b57..000000000 --- a/src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0631347a6cddade40c5d51391235c326e7a0eb06a45e74942ae131b3b349767c -size 83749 diff --git a/src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 28898aa92..000000000 --- a/src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c8e46ba9c90bd97553665f3b434113cea164a138b1951de13e4e84e18dce7ab3 -size 78853 diff --git a/src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/4_Details.png deleted file mode 100644 index d36febaaa..000000000 --- a/src/basic/fastlane/metadata/android/bn/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:195fdef84ebbb83e548d93eb1359221cc4bf4c0d644f4ebb97efb0b377e89d7b -size 185169 diff --git a/src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 9ac8017a6..000000000 --- a/src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d56e8ee8c9d2dca0d2462ce460499deead92fc874fa5cf9c66a958453bfc1be2 -size 116144 diff --git a/src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/2_Search.png deleted file mode 100644 index d323de673..000000000 --- a/src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a2cbff9775930cd78afe463db22724987166b647179c23ac4da1970038ed91be -size 85464 diff --git a/src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 61d25fc15..000000000 --- a/src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1f92ed9cceed8101adf4fc839e58ca7b2e5ea2c77a6c8e693389d4a1d8ce3e55 -size 77192 diff --git a/src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 42f5e86a1..000000000 --- a/src/basic/fastlane/metadata/android/ca/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:92259d235549e2223fffa2436e226f28e0235538113d3597d51754f727e8dffe -size 185172 diff --git a/src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 580ac91f1..000000000 --- a/src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8ce842c21001cbc9f78138436826ad8f31764f61db9c33765e6441112e431cda -size 115408 diff --git a/src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 2c243501f..000000000 --- a/src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:080b8907e2ef87723a0cc0be978e0959c6965f7c8aca705a6ec7fb1069a967d6 -size 90581 diff --git a/src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 8820afc2e..000000000 --- a/src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1a6d5f3b4885159f6c6b87685d25b2c393d5ee8b51fad7c2f04c0fb27157f006 -size 76068 diff --git a/src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 8153e5216..000000000 --- a/src/basic/fastlane/metadata/android/cs/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7589a5c82ef78819eefc4ddae3df892e532fb4daea6b742ec39aced1d33279d4 -size 188131 diff --git a/src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index e2a82c468..000000000 --- a/src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:80d4789b2554fa335b0cfcce133d14de5d3d6674ca2100efb19f031be7bcc218 -size 114416 diff --git a/src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 461f303f7..000000000 --- a/src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bc201db5f36d52f3eca7b97bb1260fa7c57cefd219c9b579e7db037deeea97b0 -size 84624 diff --git a/src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 5d4ff8c57..000000000 --- a/src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d28a47c0e1dc3189733765e3795d571fc0610e486d9ff3ca1905d7c2c1075332 -size 75259 diff --git a/src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 351f86328..000000000 --- a/src/basic/fastlane/metadata/android/cy/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fb6f0e0c901ecb0131055b8981b1f136acf4c7887a038ef46798a9aa05483094 -size 184508 diff --git a/src/basic/fastlane/metadata/android/da/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/da/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 7a27f6002..000000000 --- a/src/basic/fastlane/metadata/android/da/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:54c80ed9364b4c8cc83e5fa453ad4de296e6d69b2ef1b5b53a51ab0d21915d49 -size 110892 diff --git a/src/basic/fastlane/metadata/android/da/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/da/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 14793a801..000000000 --- a/src/basic/fastlane/metadata/android/da/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:78c2d29ad3b839df0b10368c39f54e79506c6738ec8160feeb608705195bbc20 -size 81433 diff --git a/src/basic/fastlane/metadata/android/da/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/da/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 150d64774..000000000 --- a/src/basic/fastlane/metadata/android/da/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1444a1cbee51f10c16f1e8aeca40d8c8e794c1da93ebe6f19ea23e4fb7b1f275 -size 74106 diff --git a/src/basic/fastlane/metadata/android/da/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/da/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 1b649c30e..000000000 --- a/src/basic/fastlane/metadata/android/da/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:568d94bba7065139647fa504d4cba80b49aa294c2b68c3f632c28a703accc70e -size 186184 diff --git a/src/basic/fastlane/metadata/android/de/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/de/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index b510bd1d8..000000000 --- a/src/basic/fastlane/metadata/android/de/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c82fc1bfda92b5f5b71fc8b28df99bfecb9f55298ad9debc9208ba9eae05f803 -size 116527 diff --git a/src/basic/fastlane/metadata/android/de/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/de/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 2760d2556..000000000 --- a/src/basic/fastlane/metadata/android/de/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5029f7ea6888b2146c4c9de0df3796542ccc79f48b6fdf42eb1fdf3cd98ccf1c -size 81861 diff --git a/src/basic/fastlane/metadata/android/de/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/de/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 187c22d62..000000000 --- a/src/basic/fastlane/metadata/android/de/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a8ca87a0fb1a5bdaa4c012566bdd18d238143c61c7776746a1d5fceb5c078414 -size 76512 diff --git a/src/basic/fastlane/metadata/android/de/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/de/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 3f91c4edc..000000000 --- a/src/basic/fastlane/metadata/android/de/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:828b84453ccdc26206a6f3baf1d3fe0f63c0495fb80c6b37bcec80db1f1be9f2 -size 183156 diff --git a/src/basic/fastlane/metadata/android/el/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/el/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index f16913c40..000000000 --- a/src/basic/fastlane/metadata/android/el/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:407e77801118827fcb85c1f3fdf4a888f58fa29b392039f00f0f00249c8e6cc4 -size 122745 diff --git a/src/basic/fastlane/metadata/android/el/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/el/images/phoneScreenshots/2_Search.png deleted file mode 100644 index a1479cb90..000000000 --- a/src/basic/fastlane/metadata/android/el/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:17f738b4d84e69722a8aa5a339002b8e9d18313437dff1c68b3d394aadd62b74 -size 86634 diff --git a/src/basic/fastlane/metadata/android/el/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/el/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 5389267cb..000000000 --- a/src/basic/fastlane/metadata/android/el/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:811f09be6c59a1d9f0da2974268d6d864b01cd88d15d2f50c38cdcecf5fa2ee9 -size 81714 diff --git a/src/basic/fastlane/metadata/android/el/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/el/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 38647bff3..000000000 --- a/src/basic/fastlane/metadata/android/el/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:07f91a1ebeac6d400ac50579194353a969367a66791bc02e57e885a1467862c2 -size 187155 diff --git a/src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 36f88bf8d..000000000 --- a/src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4dc99f87d8f18447dfa4187eed68249abc77bb51e8b4622bd3d127a6a5713a24 -size 113488 diff --git a/src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/2_Search.png deleted file mode 100644 index da992b5a7..000000000 --- a/src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6b562bc52a68c4fa7e16d17434a52589498ecb7641be11b317e89a476e2a05bb -size 84352 diff --git a/src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 0c6bf0bbf..000000000 --- a/src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c7e897a6a8247b05bd583ed67473a5b6120b851d2675ebcccc3ec8cba8eb41ba -size 71227 diff --git a/src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/4_Details.png deleted file mode 100644 index a7eaa36da..000000000 --- a/src/basic/fastlane/metadata/android/en-GB/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f579affdbbe6c0f74af5762b50f51e56b466d9579f50d9dad570247ccaee8857 -size 184993 diff --git a/src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 36f88bf8d..000000000 --- a/src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4dc99f87d8f18447dfa4187eed68249abc77bb51e8b4622bd3d127a6a5713a24 -size 113488 diff --git a/src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 10934e4b6..000000000 --- a/src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8f40e6f8d5c9c5c462da830cac88a2fc9714c169e6360d3cba641bbc5a954dba -size 84594 diff --git a/src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 5803f5482..000000000 --- a/src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8ebf168c1218196321d0be7ccb0230fd4b33fa61541c992ca053828691764b51 -size 73253 diff --git a/src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 4a91541a5..000000000 --- a/src/basic/fastlane/metadata/android/en-US/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f75f74d8447ed5371a8abafb3a99537ce52576e3d96b9e0c34d6debf5f241448 -size 183546 diff --git a/src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 25fca8bf1..000000000 --- a/src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:80a3d819b8fed57b60a84603e6a95b404cbdd2e5ef1174100816659a3c5c5af6 -size 116759 diff --git a/src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/2_Search.png deleted file mode 100644 index c9c614e51..000000000 --- a/src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:460a87b686e1e19ebb6a268471b2b0bd727ba403137fdd0a76fe2eefb35a1821 -size 83898 diff --git a/src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 713a4f875..000000000 --- a/src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a3ce25fa0ea2797c679e833bee0059769833de4f7dd264246ba3466adda3f2a3 -size 72956 diff --git a/src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/4_Details.png deleted file mode 100644 index f5ec3636d..000000000 --- a/src/basic/fastlane/metadata/android/eo/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:36471f025ad557d4cd53db8bf450934a29645acd3921317939fd57bdbcf2a55f -size 187098 diff --git a/src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index debcd5c16..000000000 --- a/src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8c0c1e7ec53bdde88b9b945eeb2d443f8e560a5b37a1b6679e913f0bcbd721b3 -size 115688 diff --git a/src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 4c4244924..000000000 --- a/src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:52dc64c4bf6f3b0535b5b43e6c00e4e80a90d2dcdceb48ec5a23a2a6d3748045 -size 84858 diff --git a/src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index f55f9f5cc..000000000 --- a/src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:becb43a1c6f58f38efc680544978cd5b45b5bb57d37cc3ef3850fa8b272fd7df -size 76861 diff --git a/src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 34d0f4ac7..000000000 --- a/src/basic/fastlane/metadata/android/es-AR/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:139344dae56a349e897708849f6d3e1829eed487b964d9cac732ca8ed1a6d38c -size 185786 diff --git a/src/basic/fastlane/metadata/android/es/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/es/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 177bb55c0..000000000 --- a/src/basic/fastlane/metadata/android/es/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fb16b3a038a995502c35bacac9f155311d8ed4cb62af8e0d4828e028699215ee -size 119096 diff --git a/src/basic/fastlane/metadata/android/es/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/es/images/phoneScreenshots/2_Search.png deleted file mode 100644 index d35468832..000000000 --- a/src/basic/fastlane/metadata/android/es/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:803318a741a995957ceb1fb90223ab3d303e2a59f8d06b86b11479c4555a3abd -size 85447 diff --git a/src/basic/fastlane/metadata/android/es/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/es/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index e263381c1..000000000 --- a/src/basic/fastlane/metadata/android/es/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8bd8e4f7d86716788dd3c7d45aef5551ae7d6aa5009d0a4fc517827a04bb7cfc -size 78393 diff --git a/src/basic/fastlane/metadata/android/es/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/es/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 8b7adfea8..000000000 --- a/src/basic/fastlane/metadata/android/es/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:41f5a13d39c9b3dd7664adebe1015baf25ca22d97c79788fc1f7e7998dc0b42e -size 185487 diff --git a/src/basic/fastlane/metadata/android/et/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/et/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index d43ba7d06..000000000 --- a/src/basic/fastlane/metadata/android/et/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d8497d36b204663a30b2ea9d3839b482c24ff1bc980e43804130acbc5a3e3ae2 -size 110910 diff --git a/src/basic/fastlane/metadata/android/et/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/et/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 48cdcb7dc..000000000 --- a/src/basic/fastlane/metadata/android/et/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1048d43c9df7d0ef34278a912b5fce7bb9aa872c790b8c8546e12be733237994 -size 85164 diff --git a/src/basic/fastlane/metadata/android/et/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/et/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 54490c7d6..000000000 --- a/src/basic/fastlane/metadata/android/et/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b0a6dae027e6371f723d3a2eb7a299fc21cadf4901f3cbc90050e549163b55a -size 76459 diff --git a/src/basic/fastlane/metadata/android/et/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/et/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 096954681..000000000 --- a/src/basic/fastlane/metadata/android/et/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f9592be7124c62b158a137815eb72a7aaac6f9770b8ab1e497d547fbbac70033 -size 184325 diff --git a/src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 3da8940c9..000000000 --- a/src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:89c408ab8acb99589e4c670ed1cdecd110801670afc48272d77b2e72d6b3c29b -size 117046 diff --git a/src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 9055c929a..000000000 --- a/src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:73f8118fcb4d93faea8d3950c5012dd854c6fe6193c1fc251e156392e91697d4 -size 84472 diff --git a/src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index b169eaf36..000000000 --- a/src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:37ac2227c268e4052f5277db4a848e93f3468e23e501a0e92829961be8cd1f50 -size 72691 diff --git a/src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 0ca3cac4e..000000000 --- a/src/basic/fastlane/metadata/android/eu/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:226802e8eac8314de62f690e6e8fe62aafbd183ff6d65f633e5a727fb621592d -size 187403 diff --git a/src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index fadf164ab..000000000 --- a/src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9e8f681ffdcb5946363e1f85f120cd505a264366956d857ead466c1228ef1acf -size 108408 diff --git a/src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 961d8dbdf..000000000 --- a/src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cbaa3c90f7b9c349f2c459892206ada4d789400bebac72a9b5ff61a7fe20050e -size 88452 diff --git a/src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index d55d906fe..000000000 --- a/src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1df54d70d89ea37d26abb57db50a0e9c490304b227fad3eb65f1364070f12bfa -size 69936 diff --git a/src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 84db5769b..000000000 --- a/src/basic/fastlane/metadata/android/fa/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:db025fe24815855502a3d1dc27fb40eea896258b8ea5a18d46ceb563314ce212 -size 185249 diff --git a/src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index ca8e4cca0..000000000 --- a/src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a9826ce70ceb037c528327e8b6e7d4211132bb47d517f37484bceb0495460419 -size 110845 diff --git a/src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 693fc8fe0..000000000 --- a/src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2868a05b347335ac5e48310b7394fee53dee3e734f29a93df1985960457b5abb -size 82430 diff --git a/src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 8274b0cad..000000000 --- a/src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d644020e00698bb9f4a866cf316b010f18b2498c5ca1f5175a9452ffe3c0bf74 -size 75348 diff --git a/src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 5af6492a8..000000000 --- a/src/basic/fastlane/metadata/android/fi/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:057f5510efc55d34729aa0dcf3f943a42aa420e493e0bc2d4bc2ab968ae3d4e1 -size 185476 diff --git a/src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 12650d0fe..000000000 --- a/src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:43994e24041061ecacd26c5f64084f67f14cb21f2d5be9a95443bbfe4c6d1891 -size 113697 diff --git a/src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 04fd6346c..000000000 --- a/src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e6331ac55bc67a51fe7045fc884308ec8c9ec367757fb79e82bfeec3c50c9391 -size 84584 diff --git a/src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index c4cbf8741..000000000 --- a/src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0ea87a9bf1195ef18f2a5614b7ce511bcb32934e56836e3887c1ada5ccafeaba -size 72778 diff --git a/src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 4f6b708d5..000000000 --- a/src/basic/fastlane/metadata/android/fil/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ab0ceb3970b85cb67c7c170d14c3cf86875734a96501cb29950e5bb0ab9031e7 -size 185426 diff --git a/src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 2f8e6416c..000000000 --- a/src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:001509baf864ba1418b5290cb92eaddf18a91e31b1e4f8218832898e2c9efe76 -size 116972 diff --git a/src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 260d45627..000000000 --- a/src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:68851e461b58e597acfb6372b4beae672c8251697ca12c58596f6782fd7b58a3 -size 83554 diff --git a/src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index ec27900d1..000000000 --- a/src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7c0f6b04bfbf21716a6e059e7d4013794fb48fc2c44c7892131605c0be2e9c5c -size 77602 diff --git a/src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 9f38d21a8..000000000 --- a/src/basic/fastlane/metadata/android/fr/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d17db10b02b0e06db936bf5fe2c5108f70f916572556d04a30a9d4d8f67bca3c -size 184403 diff --git a/src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 4e579adc9..000000000 --- a/src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fc9f1075aa42cc8d82903f09ca0d87e4c271c389e116393b4dc46bf37000ba58 -size 116162 diff --git a/src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/2_Search.png deleted file mode 100644 index b95a9f2e9..000000000 --- a/src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9aed0b1bf1a6ce857a676ce9b762e164468a2366b4eb0f52c8774c4d3ddab3dd -size 83542 diff --git a/src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 6fc9009a1..000000000 --- a/src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aae60af5eb183e9be07d6cdcd7570a31615bccf0180ddb60360b2d05cfff2099 -size 74929 diff --git a/src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 822ec5e42..000000000 --- a/src/basic/fastlane/metadata/android/ga/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f406902083dd67af228a625120851f5f7aa49f461596fc566c40558b2b94051e -size 184842 diff --git a/src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index ff68e5c70..000000000 --- a/src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fcc2fc7c5193f74036ed89b53066736a623f1df20ab5b3e4e33e707eefb2ce5f -size 113345 diff --git a/src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 91920cf38..000000000 --- a/src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b628a806d0db836fc26a6761a0d0345b977d69e36e4e3bb64a361518c6687a7c -size 82785 diff --git a/src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 4fb4b8963..000000000 --- a/src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c7133f9dfc32aa4ad0f7059b2b82672c1e2e6b8756314b17fcca2aaf0debbf3c -size 72040 diff --git a/src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 5bbc866f3..000000000 --- a/src/basic/fastlane/metadata/android/gd/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9e91002504038cc0c920c2448656a8bbe813c684d1c1cdaea97dd450a41ed848 -size 185547 diff --git a/src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 6c8447361..000000000 --- a/src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d468a1951efb01ed2e894fb5a6493e336a9be7691c5dc6d0fd9dca634f00a913 -size 111336 diff --git a/src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 98c9ce436..000000000 --- a/src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:999d9832334f46778a6dd6be2a6a3d40e942f7660b222d9f8c5b3fde98719819 -size 85697 diff --git a/src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 21eea172c..000000000 --- a/src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fe7e04a942c09777125a208b8b05901b105c4f7aca7abfa73847f5c9441187fd -size 75135 diff --git a/src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 38610cd27..000000000 --- a/src/basic/fastlane/metadata/android/gl/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:460df1bda88e65ee6526fa2668d41e951548f48eba010a0f2da7a95edcb433bd -size 183485 diff --git a/src/basic/fastlane/metadata/android/he/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/he/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 59796d1bf..000000000 --- a/src/basic/fastlane/metadata/android/he/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ad58f3f2a5300c8e047bada865291532addb0c8c5bfca5a31b1291aceac22c98 -size 105560 diff --git a/src/basic/fastlane/metadata/android/he/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/he/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 93f0286b7..000000000 --- a/src/basic/fastlane/metadata/android/he/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2fac8bc6706c01c19ab56778e6deceb5b1416dd04a7faa75943ee3523eae0773 -size 84513 diff --git a/src/basic/fastlane/metadata/android/he/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/he/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 692f18ef4..000000000 --- a/src/basic/fastlane/metadata/android/he/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b173c3a7970d19150c1a33178d77ef2ecd9819c567309d687a9d3aed0d6c29e5 -size 70205 diff --git a/src/basic/fastlane/metadata/android/he/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/he/images/phoneScreenshots/4_Details.png deleted file mode 100644 index bfd277e13..000000000 --- a/src/basic/fastlane/metadata/android/he/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bd2ad58291b1c11de2e1a30725f36f5bdc1427e15de88c9f94a8eefadc9be947 -size 175690 diff --git a/src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index ed62a6c1d..000000000 --- a/src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b0ec3498857ce1facec4814a29cd2bd4bef80bafdb15e1a0c852a9ba25e9edac -size 113081 diff --git a/src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/2_Search.png deleted file mode 100644 index bcdf688fa..000000000 --- a/src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7651f1475c1a5699cad2106f11d6d1993b4d34fa6e176a1e2e2fedf5741091da -size 80956 diff --git a/src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index bf35ac9b5..000000000 --- a/src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:24f46c0073cae27f7fbb269baf7473c565b8f082911edcec90f1f8e700a179b7 -size 73801 diff --git a/src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/4_Details.png deleted file mode 100644 index df3a210d9..000000000 --- a/src/basic/fastlane/metadata/android/hi-Latn/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0fb0c1c3091c48596c532e88b0568d7e3fd5446c9cc2f413e9e3c9662148f87f -size 186476 diff --git a/src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 423c3f8e0..000000000 --- a/src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6ab08c7e33734142e5543b52349c1e49fbc77e27fdcaca41431c6ebb898f07e9 -size 113675 diff --git a/src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 6f6581c9b..000000000 --- a/src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:91ad949373ca0eaa8f045f1c9a5124af6ea351fbd770cb11620d85b50d711431 -size 82747 diff --git a/src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index a34fd9682..000000000 --- a/src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d4ecabd105d152de69417d55d1e5189da2577c2aeff814ed8583d53534a5c6bd -size 74134 diff --git a/src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/4_Details.png deleted file mode 100644 index ae3228eec..000000000 --- a/src/basic/fastlane/metadata/android/hi/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:52099cf330e2ab03c81c4be695271776c0d0b25d1d91e4cee9ee08c4f4fbfe2b -size 184006 diff --git a/src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index b6df338e3..000000000 --- a/src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:eaf265051ce1011b04f27cbca1d3aeb5aa4176e2073f97b651aff5f1a4a9891b -size 115507 diff --git a/src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 69044251e..000000000 --- a/src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bd325ecbe77bb4e0caf726af2ed0ca627fc228d385e53728253eb2bae6882c58 -size 81478 diff --git a/src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 7f922289b..000000000 --- a/src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:041aca2192f9db5d894ca85a3e6ce5f135ebafe66a72db7cad078623dfed50a2 -size 75354 diff --git a/src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 72e959fda..000000000 --- a/src/basic/fastlane/metadata/android/hr/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fbb7b948e976085ddc4f146b07fc86ac25e3abb68cb362571c85ec2f46313210 -size 186031 diff --git a/src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 637769c8c..000000000 --- a/src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a3098281e1a1a4af6a58ccb56b63f46224beab646423d084a6c24f5dbc6be806 -size 113739 diff --git a/src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/2_Search.png deleted file mode 100644 index c74a58dab..000000000 --- a/src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b915f240f7b9a1c9ff9c7dfe524096a98dd997ae4d0a25bc418ad977a645900e -size 84353 diff --git a/src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 0d714fa9a..000000000 --- a/src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6e148d3a868143e2ce4894238d4b557b4874825c623f78219a5127db015bbd82 -size 76872 diff --git a/src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 2fc2021d6..000000000 --- a/src/basic/fastlane/metadata/android/hu/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9ce078bc6f2f886b51f7a7172bed73a2eedb41e3a5e77eb372aaae8c668b0eaf -size 187627 diff --git a/src/basic/fastlane/metadata/android/id/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/id/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index e49b14bae..000000000 --- a/src/basic/fastlane/metadata/android/id/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cc212245e73aca6816c38c3be8b7fb0dea2595260a932777d4a9d306241cf65d -size 113829 diff --git a/src/basic/fastlane/metadata/android/id/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/id/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 5d859e3cb..000000000 --- a/src/basic/fastlane/metadata/android/id/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ffedb72c5a7fb85d8cd94987a7bcc25b46ad9aee7b5c6da500a6311533f52457 -size 82177 diff --git a/src/basic/fastlane/metadata/android/id/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/id/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 63abafeb0..000000000 --- a/src/basic/fastlane/metadata/android/id/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f2d2c75329a8c08b9ee5bbc9ca65001ff592136df3562367e200181824c9963f -size 74881 diff --git a/src/basic/fastlane/metadata/android/id/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/id/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 6680aff08..000000000 --- a/src/basic/fastlane/metadata/android/id/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:330cecb80f6b83c927cbaad72dee893dc0e2ce2707c90014d104a897c2ba02b1 -size 185500 diff --git a/src/basic/fastlane/metadata/android/is/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/is/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index c6b14c00f..000000000 --- a/src/basic/fastlane/metadata/android/is/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3ac52653517a621581526a1a15075b87b7151ead7a2ff20f474d1a2ec8f722ab -size 113305 diff --git a/src/basic/fastlane/metadata/android/is/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/is/images/phoneScreenshots/2_Search.png deleted file mode 100644 index d6a2f5753..000000000 --- a/src/basic/fastlane/metadata/android/is/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:abdf111a290a5883aee749195ec9bc83a7409dd0325738309f789a07e2836b18 -size 82026 diff --git a/src/basic/fastlane/metadata/android/is/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/is/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 209175ff2..000000000 --- a/src/basic/fastlane/metadata/android/is/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2f934ec73bcda9b3276e867593c60847e6b7cf7d40699954586b3996e31bfe99 -size 72538 diff --git a/src/basic/fastlane/metadata/android/is/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/is/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 1a367ed01..000000000 --- a/src/basic/fastlane/metadata/android/is/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b94add891b6730c11ab3b50a96e8aa51519dfd10464ceeb63195e2a811a8bd65 -size 188437 diff --git a/src/basic/fastlane/metadata/android/it/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/it/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 5c02aba0a..000000000 --- a/src/basic/fastlane/metadata/android/it/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ba60e25af4c83d27fdb165dc60e3c6696419a9890af2184f88730cb63b08f8ff -size 111166 diff --git a/src/basic/fastlane/metadata/android/it/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/it/images/phoneScreenshots/2_Search.png deleted file mode 100644 index a3bae4bd1..000000000 --- a/src/basic/fastlane/metadata/android/it/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:15c8ca3c2fe4d774bd0d6281c8cf117e391954bd09259069b0f044d243120a42 -size 80985 diff --git a/src/basic/fastlane/metadata/android/it/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/it/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 2eba62e19..000000000 --- a/src/basic/fastlane/metadata/android/it/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ea126b47368ec0558e3b0ed5601590503f729fa55a27018bf1685b3cd2f649ca -size 74870 diff --git a/src/basic/fastlane/metadata/android/it/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/it/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 67c7c4940..000000000 --- a/src/basic/fastlane/metadata/android/it/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:30f4cd8358014e9e412c23af1b6f27f5aa43ca94cdbcef436ccedd76fd7f67e3 -size 183174 diff --git a/src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 4c1e1a29a..000000000 --- a/src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1926871c22629b98e4f243b29b30387b5827bdba71933b84b11d6d34f29eca27 -size 117456 diff --git a/src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 45f100479..000000000 --- a/src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:10d51cfd258792af65ec3ca77cfd738cc8fabb6cd707edcac00756309ff7e1fd -size 87101 diff --git a/src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index f9693dede..000000000 --- a/src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:02f09df76a6a22559cded96a8891b73fa83f1f41385005bdc2e94b9a1a10779f -size 75602 diff --git a/src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 5b1be9a41..000000000 --- a/src/basic/fastlane/metadata/android/ja/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:195180fc27cc3bccd6d23981d91ac358bb1deeb184380f01a0e2d0a2fc5d17c9 -size 199164 diff --git a/src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index d6f6b7df4..000000000 --- a/src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:02609ce2be7d8691fca96c66f55226e7f6254e4355934b91e8c6c9f35af3d68d -size 121381 diff --git a/src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 460bffe4d..000000000 --- a/src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:df5f6dae30281392e0cdc10af4e474e3421dc0219c03b03cbd821990f9abcdf9 -size 86273 diff --git a/src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index ee2cc8ac4..000000000 --- a/src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c6c84f7e30ea9dec640b138f6e1b782093b6a02110f59e44bf00f163903ac18a -size 81092 diff --git a/src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 1b6cc854a..000000000 --- a/src/basic/fastlane/metadata/android/kn/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:273a9283ab019f12110b0701a041216c9d95c9bfd9516a1c4197e6cfa72c0971 -size 188509 diff --git a/src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 4faffc9b7..000000000 --- a/src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:acbf9a71f4dd62a54ea2113de13577030601b114e0cdcf38127d19fe84411934 -size 104965 diff --git a/src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/2_Search.png deleted file mode 100644 index c4bdffe64..000000000 --- a/src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bcabd89fb1970dbb7b9f355c469b811b077e252bf90a6c5d24e17d8f2a6e2b6d -size 76720 diff --git a/src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 78d283a2b..000000000 --- a/src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:525d464726341279dcf1a54803b21bb8087ee9e5c6ca056ac6e975030f0cd2b2 -size 70573 diff --git a/src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/4_Details.png deleted file mode 100644 index b0a60ea54..000000000 --- a/src/basic/fastlane/metadata/android/ko/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0c36739936f2ad77e23b2a2fe1965701a8e9134368326eb16000038dfd9c059b -size 182110 diff --git a/src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 65675e38d..000000000 --- a/src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9d7f98008d468d58d62e1a2f41a71d63a003603f3b0726859c6422175aeb5f34 -size 115300 diff --git a/src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 15188794a..000000000 --- a/src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cfce8d706587f1275dd9c6703f9f1388161ea0f1f93cc35d2ea6f8a26e37b1b4 -size 85581 diff --git a/src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index caddda8e1..000000000 --- a/src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:56d2bd3878a322294cf2ebd93dfb6a23e957f0432eb61897405a85a2014c29b0 -size 79305 diff --git a/src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 0e242bbe8..000000000 --- a/src/basic/fastlane/metadata/android/lt/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:82ed1100fb521626cda21fbc58fe312a02cb68d521010ca23a0bc5b939b4de7d -size 186654 diff --git a/src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index b5cba3410..000000000 --- a/src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a2105c18bfe9bfe07aa290cda8f36c040996c338818e30012a87fde39f5e3067 -size 114124 diff --git a/src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/2_Search.png deleted file mode 100644 index be737933b..000000000 --- a/src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bceab957f823b5e3aa332e42fb964f0f67a8253a273ac5b94063ef3e0b3dfd4f -size 83601 diff --git a/src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 72eed1489..000000000 --- a/src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bf771e0abeabb05fc96118bc5923a57099d68b14e656f19da19fda138aa2fdd7 -size 73349 diff --git a/src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 4e0593269..000000000 --- a/src/basic/fastlane/metadata/android/lv/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b793d1cd559ad4bd86a5379b6650b077a8be431badc48e0eda034bbe9e477ae7 -size 184472 diff --git a/src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 1e5577a28..000000000 --- a/src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1b5d4d0aafa1b1fedb33d6a20ecc306e5ab0846e65c8366cb2ef1f9527450a12 -size 119276 diff --git a/src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/2_Search.png deleted file mode 100644 index ad94c5fd7..000000000 --- a/src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cacc87dda1de3412cd82d0ba7d0166eb0976a78f9f8752f681b2f7ede07733e0 -size 86673 diff --git a/src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index bbf231246..000000000 --- a/src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:051e571fda744d027c314f91558e944e021dbb1979aada7b2a7383937ccb1abb -size 81447 diff --git a/src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 35760b73d..000000000 --- a/src/basic/fastlane/metadata/android/ml/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aa145c7b2b0f5e7236b562511e4bc8f187ce69f1d44f96a7af541a59d7434e72 -size 185847 diff --git a/src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index b5ef278f9..000000000 --- a/src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a9606207b45806af3cc6f50f39b45615299c970bd0e6a4217caeabe75a759a02 -size 112922 diff --git a/src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/2_Search.png deleted file mode 100644 index ce6e6658d..000000000 --- a/src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:963ecf6343f1979072a1224fb42212fb2600e6dc8d15443f58dd8e1b835798a7 -size 82667 diff --git a/src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 8282f19c1..000000000 --- a/src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cfc39d2d042effafc64f9d3f7020bea08b637d4fea7f7479c713cffb888ae9b3 -size 75549 diff --git a/src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 0c9bfa657..000000000 --- a/src/basic/fastlane/metadata/android/nb/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c9ad51880405c6b7aca4d91889f05a7b3b72799bd5d1479d00744ca25922d857 -size 185856 diff --git a/src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index d90a14fd9..000000000 --- a/src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d4a959306c98df7de41151fb0c9ea65e61c79cc8f6ef17fdd63063db3805d1af -size 115103 diff --git a/src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 8973ec631..000000000 --- a/src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1ab666fe7a3d175c2bfcc9fe32bc0384734cd80624f273d2105ec1ca16247156 -size 84139 diff --git a/src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index fabe361e3..000000000 --- a/src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e7572170eb31f88304897ed21bbd6118dc0b5b2c75d851b433800e628627d94 -size 74127 diff --git a/src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 1262e7d0b..000000000 --- a/src/basic/fastlane/metadata/android/nl/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6f4fe18b1aae5694d94fe1e8dbbb3c3f7641bf37fda0c3f0208b67be4517e9a8 -size 186171 diff --git a/src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 03bc4b2df..000000000 --- a/src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bc45f151a5408bbe55c02d4234649ddb76c109ea0dfe2ace47ffddd5c273fbac -size 114589 diff --git a/src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 46d9164e7..000000000 --- a/src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5ea335aa4a660c313ad48bd3055a29a4eccb22c1cce5cf52ea5e35841c301e02 -size 81631 diff --git a/src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 41a0882e0..000000000 --- a/src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3def3576eabef516a7e4b9fc308619d6fd8f35560cf00780d5b415d0f3b48d86 -size 74077 diff --git a/src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 5069ad02d..000000000 --- a/src/basic/fastlane/metadata/android/nn/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5a0e7dbcb011173923cb933b8881ebd9f0619aded295b9f5d50cd7f74e062421 -size 182066 diff --git a/src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 18823af37..000000000 --- a/src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:04975f2267859d17bccc0414be955c36264dccfa6f33056bdea15568f400e8d6 -size 112825 diff --git a/src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 8309aee03..000000000 --- a/src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6022c9b552fe960e0d961f346e46a48a8695d186282d7398a27f37a20c564800 -size 82100 diff --git a/src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index e8a936f1b..000000000 --- a/src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e948d8f28f1837eee5d9efcf54a4765c99b8daff65bfd5fb3f0cc6ae7fdc55d7 -size 73764 diff --git a/src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/4_Details.png deleted file mode 100644 index d42811927..000000000 --- a/src/basic/fastlane/metadata/android/pa/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:73757527b8ffc3761021614c1fac8c931e418b86648b7c20ca037526d096072f -size 186069 diff --git a/src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 8c9b84977..000000000 --- a/src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:44f74587f84336277b5f3030fb736e943d5ba33cf48805d110bdf861f0b3d909 -size 115816 diff --git a/src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 987afc781..000000000 --- a/src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5c149f7a583a22abbd5587ce80532ea4d62e0c194cf594205ae824b5ab3c16fb -size 82151 diff --git a/src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index fe1372fd4..000000000 --- a/src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:acb9b3419edb21b0976c23c9e8c9ab95537599292adbc33869a99f9f4512ae3f -size 77053 diff --git a/src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 53cf547b4..000000000 --- a/src/basic/fastlane/metadata/android/pl/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b2d7f120634f36d5e19bafa63120390b75ff07c9fd58aab736b97883827ff2dc -size 188183 diff --git a/src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 0863bb8bc..000000000 --- a/src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3cec861c6aac0b07149e88308b77ccdd069ec15d5b31f5d0711460620ca8c977 -size 115557 diff --git a/src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 1ac5e36bf..000000000 --- a/src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3ca181a34c7ce96b33712ebf264e3fa131064575fe71eda5156fcc4e205d9b51 -size 81002 diff --git a/src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index d14e512b5..000000000 --- a/src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c402d4235031cd19934182fe96daa82f5879b445582400a706022f941d9fe6be -size 76146 diff --git a/src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 2da28d5b0..000000000 --- a/src/basic/fastlane/metadata/android/pt-BR/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e6f7257572e7f5c70c6fa094517990a206f87b4bcaee513c076024e8c84756d -size 188634 diff --git a/src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index c6e9c152f..000000000 --- a/src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c0414426e6c107b09d70e4d9be587217d8f83bc821d54eedbef6507f5d908246 -size 114602 diff --git a/src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 1515c2a76..000000000 --- a/src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:283fc587ab3466021514d22ae9fac110e610f71b37cc1a47ac8057dbabc0a8b9 -size 81596 diff --git a/src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 1c62a6725..000000000 --- a/src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e08d25f4c0e1c96606a63250483193d4358627b6ac4f33f319d61b6a73b17ffa -size 75452 diff --git a/src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/4_Details.png deleted file mode 100644 index c2fc888e6..000000000 --- a/src/basic/fastlane/metadata/android/pt-PT/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:841afe20d083244f9e36d927ad293da9f01ee34f7fa19b2f98de02c40050bd33 -size 187981 diff --git a/src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 554f141a4..000000000 --- a/src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:46ce92331b26c349cc30d9eb602bf67b54d694a8e0510f372ae87bd71301fbda -size 114701 diff --git a/src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 7291f595d..000000000 --- a/src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:053b624d04d65ad3055eb89567f2159dce49d05d459f6684f5299c98e4d8e1fc -size 82005 diff --git a/src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 39e81af27..000000000 --- a/src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:adb25e6bded3f4b56c0d835091dc15a039b1d9a956c3db0562f9e9f3970a1fbc -size 77648 diff --git a/src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 792ad1f7a..000000000 --- a/src/basic/fastlane/metadata/android/pt/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ec2c55e31d06f0befe7d067325143251644deade6af410cb81552e1d160eacf2 -size 186249 diff --git a/src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 4286a3db2..000000000 --- a/src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f4a7ad7cd99b704ccb2139254734d959a912fed960b596da90d15e164a54d112 -size 113647 diff --git a/src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 75ecca661..000000000 --- a/src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:48eef2b958110c26121b77a5d7c3bba60c4efb31ade2ca3a38574b95f01cdad4 -size 81384 diff --git a/src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index efb74682f..000000000 --- a/src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2c2d5ba4da173ad76ec1d72db9d8f9840f38b4104600d1bba324baefef311684 -size 75491 diff --git a/src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/4_Details.png deleted file mode 100644 index d63656a3b..000000000 --- a/src/basic/fastlane/metadata/android/ro/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1cdb8b394d09d442f919f10a136f7615904b7698d3239946b6a071b3e35cd34d -size 186909 diff --git a/src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 406bfb2b2..000000000 --- a/src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:06eb112fd145ab7b302b7641d2162acbe83fe2db5b6526e444ca98bc08f50de9 -size 114112 diff --git a/src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/2_Search.png deleted file mode 100644 index a43c124eb..000000000 --- a/src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:507caa2ae99fe0bc93b980c4998ed70d64c71e20639c58a04094a41e7ebe878b -size 84896 diff --git a/src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index ecf8998cd..000000000 --- a/src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f663e039254f2ab7d1ca4b8ac1a324f2bdc72c13efda80b551504e337833010d -size 77213 diff --git a/src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 84601b8a7..000000000 --- a/src/basic/fastlane/metadata/android/ru/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:18b024f7aa6279740be18e1a24129cc6a77b044593ab66bb72ebeb9202869079 -size 186890 diff --git a/src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index efd671299..000000000 --- a/src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c861b238b2de81000b0bab6a6f8bab66d83ee207d2c34598ced15a3515fb4780 -size 114364 diff --git a/src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/2_Search.png deleted file mode 100644 index a1f33a006..000000000 --- a/src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c0bbcfc49e757e9160b2027f836af9afdb39d619e464a112714e024003b6b041 -size 84631 diff --git a/src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 39ce7eb46..000000000 --- a/src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4bee920bc1e7fa1e882e938893fb8cb048912c9497b1ef2e9018cb611505ca4e -size 73107 diff --git a/src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/4_Details.png deleted file mode 100644 index b8ae5b28a..000000000 --- a/src/basic/fastlane/metadata/android/sc/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0d0bb62d768407682393f39d413a33120bb58ffdb28b467804d53741cb77f171 -size 185023 diff --git a/src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index abe49a0a3..000000000 --- a/src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b9e8e0da6af52940478ef18ff2f12b4a14e26522eed095dab02cedd79781c77 -size 115929 diff --git a/src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 95fb7e674..000000000 --- a/src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c976b1b2f1788a9ec10826ef4aa53ff575e6ed458422027f4d1489f05fd3d5cc -size 84715 diff --git a/src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 2df79c3bb..000000000 --- a/src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:aef6b10585aef00dda883a695274b5aeaa51a10d5717e5fc8008cc2f39cc2366 -size 74917 diff --git a/src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 2b1216882..000000000 --- a/src/basic/fastlane/metadata/android/sk/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9343a9ddb873746194130c36d3a1182b0742e80fbecdb73700413824ed220fe8 -size 187041 diff --git a/src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 823737737..000000000 --- a/src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6dce0f86a8a17c49e36cd531c4db7689dfa361de3ca10f124652155e4b5da8f6 -size 116545 diff --git a/src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 05ab84604..000000000 --- a/src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bdc98b17223d7ebd703c278938908a44a4ad7705abf28b4d0e5adecfd547a569 -size 83602 diff --git a/src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 4bac6b9de..000000000 --- a/src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:944867547d292fe434d958c3701b3aaf38045a7be44454b5e3cf386237d8429c -size 78711 diff --git a/src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/4_Details.png deleted file mode 100644 index af4b46a06..000000000 --- a/src/basic/fastlane/metadata/android/sl/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2e9d88a243d4ceb6c2ed29075ea3a8cceafd505c6b8882a5061c6bda6a1b7f0c -size 191291 diff --git a/src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 3bcda7138..000000000 --- a/src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0eb210f99585177852b2de312d06d2f90447b2cd95c1cbc7bdb95d1fed86dbf6 -size 113494 diff --git a/src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/2_Search.png deleted file mode 100644 index bb67b9be1..000000000 --- a/src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7775f16c4c044fbc0e760bd03ae1e60eede92ac8edd2a8b912cbe1413cfbe6d9 -size 83103 diff --git a/src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 4fa43c15b..000000000 --- a/src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:19e010c04b9fdc67cf86d2859cf0b72e3a331572454952ca14a5e41488a70355 -size 76244 diff --git a/src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/4_Details.png deleted file mode 100644 index e2672a1de..000000000 --- a/src/basic/fastlane/metadata/android/sq/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9db0d5230f701c772e3d3b1d2a97bb528b41c9cbbd9c74d135762477f6defb92 -size 184716 diff --git a/src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index c5a83bf98..000000000 --- a/src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8e01e96343b3ff4b3de7c89362aac4b197a91032d7ed81ed667502dcd11d5f58 -size 113713 diff --git a/src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 7f748fdd3..000000000 --- a/src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:acabcf5fa410b31a39c9f475ece7cc49cc13df6622ef97315055bf2d3d1c9d1c -size 80775 diff --git a/src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 1a4e57ace..000000000 --- a/src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:20a5c87b38f28aec9888800c05a27540c4eb166e305d90ae1f09b632e1d86dd9 -size 73643 diff --git a/src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 749cb3cb4..000000000 --- a/src/basic/fastlane/metadata/android/sr/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8bd22d6381d6b5d5eb5df1b1b112052b485a3f20f00d97667a3a853f737bde9f -size 186956 diff --git a/src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index a16042272..000000000 --- a/src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0a1803da23bce81b2d6cb23c3b20b806c3e346cdce3d91f3a5d83810ed0a50c8 -size 114108 diff --git a/src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/2_Search.png deleted file mode 100644 index fc049283b..000000000 --- a/src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fa470b94e84393abd20d31324b22fa85c52bf1f3eec9ac8bd57cab722ad72473 -size 80382 diff --git a/src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 8ed6dfe09..000000000 --- a/src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8a4b6cacb5ef19524b5dea79f5ffacc25b0e02010277e2ba5c3cc7d6e347ea54 -size 73992 diff --git a/src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 061d807f8..000000000 --- a/src/basic/fastlane/metadata/android/sv/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f98dbab2c6bdb223331f13faa6d5a79b22903a8035de0fec5e303649ce4ed2aa -size 186111 diff --git a/src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 811f5f4e9..000000000 --- a/src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5cc525f99aafd00615b1bc11f82298ec436b31acb40d930919b25fe64a734b97 -size 116397 diff --git a/src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 129829f15..000000000 --- a/src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:72c633c5d05353808581cd9618ab917cc9c5ad5c920f5aa157604644de8326cf -size 83483 diff --git a/src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index fbec93dea..000000000 --- a/src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b54c4f7c5cfd63b4d1f8e642c0e4a5bcf17b6f3b5c5789eada8c0caa3f4215dd -size 73877 diff --git a/src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/4_Details.png deleted file mode 100644 index d7798b13a..000000000 --- a/src/basic/fastlane/metadata/android/sw/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c7a17a2e407c0d864985a797b018fa23a9cc171720d5d5044f8dc3d58907bc6e -size 186898 diff --git a/src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index c97243f2b..000000000 --- a/src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ac41351196287677bbea02740a3be810aae285086a77e73b4f0f9a8e68c3b1b6 -size 118374 diff --git a/src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 00527beda..000000000 --- a/src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a10b9e783409d995e3e8839ac7b41c76f254708f13b42fd3443cd5cec16c1849 -size 88595 diff --git a/src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index f16d80c90..000000000 --- a/src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c66cd5294c990f17c5c830867db4016dd42b9e56c3bd0d5061dec1d9b5e630b8 -size 75899 diff --git a/src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 4fc60193b..000000000 --- a/src/basic/fastlane/metadata/android/ta/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:840779b48356232b517c8372b7f6a813e58e5abb4ab29830d9a8456920a0947f -size 192799 diff --git a/src/basic/fastlane/metadata/android/th/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/th/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 0c299225d..000000000 --- a/src/basic/fastlane/metadata/android/th/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9367e8a66f8b66c3a82a704e5e2ec974605b8c41e5077cb4ce02524d9e065a3d -size 113640 diff --git a/src/basic/fastlane/metadata/android/th/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/th/images/phoneScreenshots/2_Search.png deleted file mode 100644 index a15693112..000000000 --- a/src/basic/fastlane/metadata/android/th/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1edf3cad081fac1cda4b5278d638c7b90a1a14b2d15045c82e1660cecbd31111 -size 82887 diff --git a/src/basic/fastlane/metadata/android/th/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/th/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index b6f9df076..000000000 --- a/src/basic/fastlane/metadata/android/th/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8ca03b0f6b5c25c1a2acea5d31443b297f5482985d7e4f77ddb026bc5b8448fd -size 76960 diff --git a/src/basic/fastlane/metadata/android/th/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/th/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 593b52559..000000000 --- a/src/basic/fastlane/metadata/android/th/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:71728da5bd1f1f831c267c15b8f0ecef6649dcf9081e97255e3a03bf01e2ba34 -size 183428 diff --git a/src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index ce11b2852..000000000 --- a/src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:73c5ac550e06a71c6b46188b815b264f4e20e82fd0e45cf76c775aa73ad18af6 -size 115144 diff --git a/src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 22f09142a..000000000 --- a/src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d6abe92d38adf1d476bba8b100d7c585d28946b0289eb6e9fc6a130ea3259398 -size 81545 diff --git a/src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 84844bd06..000000000 --- a/src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0666c5aa8438b4554878bfd54f84d85b655b19ef9a6ac23873d3fca8ca98de55 -size 76220 diff --git a/src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 20fbe5573..000000000 --- a/src/basic/fastlane/metadata/android/tr/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:875854ef2d8c9328e53c7a9272768b476deac820a7f3200ddd61de478ee53e94 -size 185372 diff --git a/src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 2dde9c7e5..000000000 --- a/src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:23dbdb2034cb4b811e4dc4a8c34f30d2071cecb0f6bd34bdf3f726e21960ce98 -size 110675 diff --git a/src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/2_Search.png deleted file mode 100644 index e02a39e8d..000000000 --- a/src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5a14ebe1678973ae101ab758f7d1198ba8198ce7deec7dfaa12f0cfbc7031532 -size 83032 diff --git a/src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index c9a56c288..000000000 --- a/src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5faaf310dd9f8f76092bf88fee6210f73207ccffb1293cb305edd24e58e38481 -size 75747 diff --git a/src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 672f77b5e..000000000 --- a/src/basic/fastlane/metadata/android/uk/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e2652c283f4a3b0aaae95cb63b700e24f78e42fcba53df525b0faae404b654d8 -size 185251 diff --git a/src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 61d097de7..000000000 --- a/src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5b50e7127d83fec96f8eb828a2647c6de33c07ca74457b80a1fb92e99e8afe1e -size 113834 diff --git a/src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 0ff716a51..000000000 --- a/src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3bd32a878e6d863e2d498031ee0ddf0a1d42be39406818b570d14255be47d0df -size 83432 diff --git a/src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 71d362b0e..000000000 --- a/src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5c5fd94beb5591232cce1e8ee1ffdb55841a31ab65e24904e3e7f21eff1f4b78 -size 74108 diff --git a/src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/4_Details.png deleted file mode 100644 index c4a472162..000000000 --- a/src/basic/fastlane/metadata/android/vi/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:609b41f70b73933c898dc97a79ba430a18f2cad85a2e6df9e0aad7b8e1d0ff03 -size 184909 diff --git a/src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 3022ec876..000000000 --- a/src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bea79de2ca3bd9008adbe34f1027050fcc75392d6385a08f971d105395b674a0 -size 113467 diff --git a/src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 3042ce44b..000000000 --- a/src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a5276af43726cf125c68f9b64f4693a4a396cd77574f30eed94f421e11f5d66e -size 83521 diff --git a/src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index a513d5375..000000000 --- a/src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fc118ef018317cdcb8e087cc8c1cd8a93a4ae2cd8d9b05eae73747ddb46c0710 -size 72970 diff --git a/src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 9035da98e..000000000 --- a/src/basic/fastlane/metadata/android/yue/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c97f979f8de5ac8657984463aefebd8832be1a2e4c5c795d7dcc8c22751da848 -size 184831 diff --git a/src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 0a97c58ad..000000000 --- a/src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1bef5e4e0fbbe959a114a9632b126149815a03bd1fb9e2ec2efc2f2dc353ebc5 -size 115976 diff --git a/src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 859e2b8a1..000000000 --- a/src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:337825b2f11ed6a0e2c62693f80ba12621ffb2ba7450bd18fc8e356b86727b25 -size 91352 diff --git a/src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 223ab1e81..000000000 --- a/src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bc02eb74fe5c4b08b3dee29b02c80ad61d0a92cb454107a7655364036ae1f9cf -size 74337 diff --git a/src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/4_Details.png deleted file mode 100644 index f1c78e77a..000000000 --- a/src/basic/fastlane/metadata/android/zh-CN/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7b01d898df39df2ea5838dfdd0689cf2aaedb9d85431846e9ab2d232a8a18f1d -size 193774 diff --git a/src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 2f0ce1330..000000000 --- a/src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fc98aab1db61a5bb3990df91131a06bf9376f77fd74cbad62cf1626d851a54ff -size 119621 diff --git a/src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/2_Search.png deleted file mode 100644 index b8870f69e..000000000 --- a/src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e64b0d2bb8ae2aa476f211f114f226fd22a35fe19603e18354fa5c866ec1c685 -size 90989 diff --git a/src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index 3ec54e7b3..000000000 --- a/src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:641bc448afc1d2d8ee433be09016f706ede45d13879f08f9b30fdaafa78eb24c -size 80403 diff --git a/src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/4_Details.png deleted file mode 100644 index 2df42a831..000000000 --- a/src/basic/fastlane/metadata/android/zh-HK/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4769298e8d27debe7163287a8eb32838a8fb475fcddacf101c7680e36f7b16b9 -size 197125 diff --git a/src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/1_Discover.png b/src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/1_Discover.png deleted file mode 100644 index 40e850e21..000000000 --- a/src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/1_Discover.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:315716395e7e4d67d0e1fd1f812a8bbc45e13d40185b7eaef0da17bea6a0e6e9 -size 118115 diff --git a/src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/2_Search.png b/src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/2_Search.png deleted file mode 100644 index 4521a7c34..000000000 --- a/src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/2_Search.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3c7bab98bbf0eaf4640a1ba9b1bc620a87fc95e8bfd78fcbd2e8bc4a6d1fad8b -size 91714 diff --git a/src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/3_My_Apps.png b/src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/3_My_Apps.png deleted file mode 100644 index e0823934b..000000000 --- a/src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/3_My_Apps.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a63ae000e0ed5824330f423e71db1b263c50cbb5be7b0f9e40ce9f3ce329e33 -size 77052 diff --git a/src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/4_Details.png b/src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/4_Details.png deleted file mode 100644 index c031a81aa..000000000 --- a/src/basic/fastlane/metadata/android/zh-TW/images/phoneScreenshots/4_Details.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dd1a45955d0f621617fef02cb133688535ad5e7437f076e546e9f539e54eafea -size 195434 diff --git a/tools/take-screenshots.py b/tools/take-screenshots.py index 1b988ab38..749530c93 100755 --- a/tools/take-screenshots.py +++ b/tools/take-screenshots.py @@ -21,7 +21,6 @@ try: cwd=script_dir.parent, check=True) print("Downloading screenshots...") - screenshots_dir = script_dir.parent / 'screenshots' subprocess.run( ["adb", "pull", "/sdcard/Android/data/org.fdroid.basic.debug/files/screenshots", script_dir.parent], cwd=script_dir.parent, check=True) @@ -31,14 +30,16 @@ try: for screenshot in screenshots: subprocess.run(["pngquant", "--force", "--ext", ".png", "--skip-if-larger", "--speed", "1", screenshot]) - target_dir = script_dir.parent / 'src' - old_screenshots = [str(f) for f in target_dir.glob('basic/fastlane/metadata/android/*/images/phoneScreenshots/*')] + target_dir = script_dir.parent + old_screenshots = [str(f) for f in target_dir.glob('fastlane/metadata/android/*/images/phoneScreenshots/*')] for s in old_screenshots: print(f"Removing old screenshot {s}") Path(s).unlink() print("Copying new screenshots to target directory...") - shutil.copytree(screenshots_dir, target_dir, dirs_exist_ok=True) + source_dir = screenshots_dir / 'basic' + shutil.copytree(source_dir, target_dir, dirs_exist_ok=True) + shutil.rmtree(screenshots_dir, ignore_errors=True) subprocess.run(["git", "add", target_dir], cwd=script_dir.parent) subprocess.run(["git", "status"], cwd=script_dir.parent) From 0a177440cb5270ba424b14b96db4329a13d60595 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Tue, 9 Jun 2026 17:51:29 -0300 Subject: [PATCH 2/8] Limit top bar title to one line --- app/src/main/kotlin/org/fdroid/ui/About.kt | 2 +- app/src/main/kotlin/org/fdroid/ui/apps/MyApps.kt | 2 +- app/src/main/kotlin/org/fdroid/ui/discover/Discover.kt | 2 +- app/src/main/kotlin/org/fdroid/ui/history/History.kt | 2 +- app/src/main/kotlin/org/fdroid/ui/repositories/add/AddRepo.kt | 3 ++- app/src/main/kotlin/org/fdroid/ui/settings/Settings.kt | 2 +- 6 files changed, 7 insertions(+), 6 deletions(-) diff --git a/app/src/main/kotlin/org/fdroid/ui/About.kt b/app/src/main/kotlin/org/fdroid/ui/About.kt index 76b215100..e3bf6c78e 100644 --- a/app/src/main/kotlin/org/fdroid/ui/About.kt +++ b/app/src/main/kotlin/org/fdroid/ui/About.kt @@ -67,7 +67,7 @@ fun About(version: String = VERSION_NAME, onBackClicked: (() -> Unit)?) { ) } }, - title = { Text(stringResource(R.string.about_title_full)) }, + title = { Text(stringResource(R.string.about_title_full), maxLines = 1) }, scrollBehavior = scrollBehavior, ) }, diff --git a/app/src/main/kotlin/org/fdroid/ui/apps/MyApps.kt b/app/src/main/kotlin/org/fdroid/ui/apps/MyApps.kt index edd354359..559164e1f 100644 --- a/app/src/main/kotlin/org/fdroid/ui/apps/MyApps.kt +++ b/app/src/main/kotlin/org/fdroid/ui/apps/MyApps.kt @@ -93,7 +93,7 @@ fun MyApps( } } else TopAppBar( - title = { Text(stringResource(R.string.menu_apps_my)) }, + title = { Text(stringResource(R.string.menu_apps_my), maxLines = 1) }, actions = { TopAppBarButton( imageVector = Icons.AutoMirrored.Default.ManageSearch, diff --git a/app/src/main/kotlin/org/fdroid/ui/discover/Discover.kt b/app/src/main/kotlin/org/fdroid/ui/discover/Discover.kt index c6544d0f5..5581079f4 100644 --- a/app/src/main/kotlin/org/fdroid/ui/discover/Discover.kt +++ b/app/src/main/kotlin/org/fdroid/ui/discover/Discover.kt @@ -48,7 +48,7 @@ fun Discover( Scaffold( topBar = { TopAppBar( - title = { Text(stringResource(R.string.app_name)) }, + title = { Text(stringResource(R.string.app_name), maxLines = 1) }, actions = { topBarMenuItems.forEach { dest -> BadgedBox( diff --git a/app/src/main/kotlin/org/fdroid/ui/history/History.kt b/app/src/main/kotlin/org/fdroid/ui/history/History.kt index e9b0ffc91..3bbd5c7f7 100644 --- a/app/src/main/kotlin/org/fdroid/ui/history/History.kt +++ b/app/src/main/kotlin/org/fdroid/ui/history/History.kt @@ -42,7 +42,7 @@ fun History( topBar = { TopAppBar( navigationIcon = { if (onBackClicked != null) BackButton(onClick = onBackClicked) }, - title = { Text(stringResource(R.string.install_history)) }, + title = { Text(stringResource(R.string.install_history), maxLines = 1) }, actions = { if (!items.isNullOrEmpty()) TopAppBarButton( diff --git a/app/src/main/kotlin/org/fdroid/ui/repositories/add/AddRepo.kt b/app/src/main/kotlin/org/fdroid/ui/repositories/add/AddRepo.kt index 3dc4b1914..970c8a9f0 100644 --- a/app/src/main/kotlin/org/fdroid/ui/repositories/add/AddRepo.kt +++ b/app/src/main/kotlin/org/fdroid/ui/repositories/add/AddRepo.kt @@ -66,7 +66,8 @@ fun AddRepo( } } else { stringResource(R.string.repo_add_new_title) - } + }, + maxLines = 1, ) }, ) diff --git a/app/src/main/kotlin/org/fdroid/ui/settings/Settings.kt b/app/src/main/kotlin/org/fdroid/ui/settings/Settings.kt index 20ec99e3b..80cdb2c07 100644 --- a/app/src/main/kotlin/org/fdroid/ui/settings/Settings.kt +++ b/app/src/main/kotlin/org/fdroid/ui/settings/Settings.kt @@ -94,7 +94,7 @@ fun Settings(model: SettingsModel, onSaveLogcat: (Uri?) -> Unit, onBackClicked: topBar = { TopAppBar( navigationIcon = { BackButton(onClick = onBackClicked) }, - title = { Text(stringResource(R.string.menu_settings)) }, + title = { Text(stringResource(R.string.menu_settings), maxLines = 1) }, ) } ) { paddingValues -> From ff381e7c37d0d300abe9ba199f03096d1859d270 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 10 Jun 2026 11:52:36 -0300 Subject: [PATCH 3/8] Only show self-update notification when the app was in foreground before update --- app/src/main/AndroidManifest.xml | 2 +- app/src/main/kotlin/org/fdroid/App.kt | 4 ++ .../SelfUpdateReceiver.kt} | 37 +++++++++++++++---- .../org/fdroid/updates/UpdateInstaller.kt | 25 +++++++++---- .../org/fdroid/updates/UpdatesManager.kt | 3 +- .../org/fdroid/updates/UpdateInstallerTest.kt | 10 +++++ 6 files changed, 63 insertions(+), 18 deletions(-) rename app/src/main/kotlin/org/fdroid/{install/AppUpdateReceiver.kt => updates/SelfUpdateReceiver.kt} (52%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f898a8c63..31ea9fb26 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -163,7 +163,7 @@ diff --git a/app/src/main/kotlin/org/fdroid/App.kt b/app/src/main/kotlin/org/fdroid/App.kt index 9a88da17a..b0bac13d0 100644 --- a/app/src/main/kotlin/org/fdroid/App.kt +++ b/app/src/main/kotlin/org/fdroid/App.kt @@ -38,6 +38,7 @@ import org.fdroid.ui.crash.CrashActivity import org.fdroid.ui.crash.NoRetryPolicy import org.fdroid.ui.utils.applyNewTheme import org.fdroid.updates.AppUpdateWorker +import org.fdroid.updates.SelfUpdateReceiver @HiltAndroidApp class App : Application(), Configuration.Provider, SingletonImageLoader.Factory { @@ -100,6 +101,9 @@ class App : Application(), Configuration.Provider, SingletonImageLoader.Factory // bail out here if we are the ACRA process to not initialize anything in crash process if (isAcraProces()) return + // don't show self-update notification unless we enable it first + SelfUpdateReceiver.disable(this) + RepoUpdateWorker.scheduleOrCancel(applicationContext, settingsManager.repoUpdates) AppUpdateWorker.scheduleOrCancel(applicationContext, settingsManager.autoUpdateApps) } diff --git a/app/src/main/kotlin/org/fdroid/install/AppUpdateReceiver.kt b/app/src/main/kotlin/org/fdroid/updates/SelfUpdateReceiver.kt similarity index 52% rename from app/src/main/kotlin/org/fdroid/install/AppUpdateReceiver.kt rename to app/src/main/kotlin/org/fdroid/updates/SelfUpdateReceiver.kt index 75bd1d37a..c6f82b099 100644 --- a/app/src/main/kotlin/org/fdroid/install/AppUpdateReceiver.kt +++ b/app/src/main/kotlin/org/fdroid/updates/SelfUpdateReceiver.kt @@ -1,32 +1,53 @@ -package org.fdroid.install +package org.fdroid.updates import android.content.BroadcastReceiver +import android.content.ComponentName import android.content.Context import android.content.Intent -import android.content.Intent.ACTION_MY_PACKAGE_REPLACED -import android.content.Intent.FLAG_ACTIVITY_NEW_TASK -import android.os.Build.VERSION.SDK_INT +import android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_DISABLED +import android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED +import android.content.pm.PackageManager.DONT_KILL_APP +import android.os.Build import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject import mu.KotlinLogging import org.fdroid.NotificationManager @AndroidEntryPoint -class AppUpdateReceiver : BroadcastReceiver() { +class SelfUpdateReceiver : BroadcastReceiver() { private val log = KotlinLogging.logger {} @Inject lateinit var notificationManager: NotificationManager + companion object { + fun enable(context: Context) { + setEnabledState(context, COMPONENT_ENABLED_STATE_ENABLED) + } + + fun disable(context: Context) { + setEnabledState(context, COMPONENT_ENABLED_STATE_DISABLED) + } + + private fun setEnabledState(context: Context, state: Int) { + val component = ComponentName(context, SelfUpdateReceiver::class.java) + context.packageManager.setComponentEnabledSetting( + component, + state, + DONT_KILL_APP, + ) + } + } + override fun onReceive(context: Context, intent: Intent) { - if (intent.action != ACTION_MY_PACKAGE_REPLACED) { + if (intent.action != Intent.ACTION_MY_PACKAGE_REPLACED) { log.warn { "Unknown action: ${intent.action}" } return } log.info { "Intent received, we just updated ourselves!" } val intent = context.packageManager.getLaunchIntentForPackage(context.packageName)?.apply { - addFlags(FLAG_ACTIVITY_NEW_TASK) + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) } if (intent == null) { log.error { "Could not get launch intent for ourselves" } @@ -39,6 +60,6 @@ class AppUpdateReceiver : BroadcastReceiver() { } // show notification on Android 10+, because we aren't allowed to start activity from background // see: https://developer.android.com/guide/components/activities/background-starts - if (SDK_INT >= 29) notificationManager.showSelfUpdateNotification() + if (Build.VERSION.SDK_INT >= 29) notificationManager.showSelfUpdateNotification() } } diff --git a/app/src/main/kotlin/org/fdroid/updates/UpdateInstaller.kt b/app/src/main/kotlin/org/fdroid/updates/UpdateInstaller.kt index fa9b2d5af..ce1170c46 100644 --- a/app/src/main/kotlin/org/fdroid/updates/UpdateInstaller.kt +++ b/app/src/main/kotlin/org/fdroid/updates/UpdateInstaller.kt @@ -20,6 +20,7 @@ import org.fdroid.database.FDroidDatabase import org.fdroid.index.RepoManager import org.fdroid.install.AppInstallManager import org.fdroid.ui.apps.AppUpdateItem +import org.fdroid.ui.utils.isAppInForeground import org.fdroid.utils.IoDispatcher /** @@ -67,7 +68,15 @@ constructor( // Update all non-self apps first, then our own package at the end. updateAppsInParallel(otherApps, canRequestPreApproval) - ownApp?.let { update -> updateApp(update, canRequestPreApproval) } + // If available, we update ourselves last + ownApp?.let { update -> + if (context.isAppInForeground()) { + // enable the receiver only if the app is currently in the foreground, + // so the user can easily re-launch it. It will get disabled again in the app's onCreate + SelfUpdateReceiver.enable(context) + } + updateApp(update, canRequestPreApproval) + } } private suspend fun updateAppsInParallel( @@ -114,13 +123,13 @@ constructor( private suspend fun updateApp(update: AppUpdateItem, canAskPreApprovalNow: Boolean) { val app = db.getAppDao().getApp(update.repoId, update.packageName) appInstallManager.install( - packageName = update.packageName, - appMetadata = app?.metadata, - version = update.update as AppVersion, - currentVersionName = update.installedVersionName, - repo = repoManager.getRepository(update.repoId), - iconModel = update.iconModel, - canAskPreApprovalNow = canAskPreApprovalNow, + packageName = update.packageName, + appMetadata = app?.metadata, + version = update.update as AppVersion, + currentVersionName = update.installedVersionName, + repo = repoManager.getRepository(update.repoId), + iconModel = update.iconModel, + canAskPreApprovalNow = canAskPreApprovalNow, ) } } diff --git a/app/src/main/kotlin/org/fdroid/updates/UpdatesManager.kt b/app/src/main/kotlin/org/fdroid/updates/UpdatesManager.kt index ab4f782bc..df8bb5528 100644 --- a/app/src/main/kotlin/org/fdroid/updates/UpdatesManager.kt +++ b/app/src/main/kotlin/org/fdroid/updates/UpdatesManager.kt @@ -7,6 +7,7 @@ import dagger.hilt.android.qualifiers.ApplicationContext import io.ktor.client.engine.ProxyConfig import javax.inject.Inject import javax.inject.Singleton +import kotlin.time.Duration.Companion.milliseconds import kotlin.time.measureTimedValue import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.delay @@ -76,7 +77,7 @@ constructor( init { coroutineScope.launch { // delay initial check for updates a bit, so we don't hammer the DB during start-up - delay(1500) + delay(1500.milliseconds) // Auto-refresh updates when installed apps change. installedAppsCache.installedApps.collect { loadUpdates(it) } } diff --git a/app/src/test/java/org/fdroid/updates/UpdateInstallerTest.kt b/app/src/test/java/org/fdroid/updates/UpdateInstallerTest.kt index 31a3c78a5..6f217db8f 100644 --- a/app/src/test/java/org/fdroid/updates/UpdateInstallerTest.kt +++ b/app/src/test/java/org/fdroid/updates/UpdateInstallerTest.kt @@ -1,12 +1,14 @@ package org.fdroid.updates import android.content.Context +import android.content.pm.PackageManager.COMPONENT_ENABLED_STATE_ENABLED import io.mockk.coEvery import io.mockk.coVerify import io.mockk.coVerifyOrder import io.mockk.every import io.mockk.just import io.mockk.mockk +import io.mockk.mockkStatic import io.mockk.runs import io.mockk.verify import kotlinx.coroutines.CoroutineScope @@ -25,6 +27,7 @@ import org.fdroid.download.PackageName import org.fdroid.index.RepoManager import org.fdroid.install.AppInstallManager import org.fdroid.ui.apps.AppUpdateItem +import org.fdroid.ui.utils.isAppInForeground import org.junit.Before import org.junit.Test @@ -47,6 +50,7 @@ internal class UpdateInstallerTest { @Before fun setUp() { + mockkStatic("org.fdroid.ui.utils.UiUtilsKt") every { context.packageName } returns OWN_PACKAGE_NAME every { db.getAppDao() } returns appDao } @@ -166,6 +170,7 @@ internal class UpdateInstallerTest { ), makeAppUpdateItem(packageName = otherPkg), ) + every { context.isAppInForeground() } returns true createUpdateInstaller().updateAll(updates, canAskPreApprovalNow = false) advanceUntilIdle() @@ -178,6 +183,11 @@ internal class UpdateInstallerTest { currentVersionName = "2.0", lastUpdated = 9999L, ) + context.packageManager.setComponentEnabledSetting( + any(), + COMPONENT_ENABLED_STATE_ENABLED, + any(), + ) } coVerifyOrder { From 4a0bee4f1d8b09991ede048705c56cc56c2286f1 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 10 Jun 2026 14:51:32 -0300 Subject: [PATCH 4/8] Add new categories --- .../kotlin/org/fdroid/ui/categories/CategoryItem.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/app/src/main/kotlin/org/fdroid/ui/categories/CategoryItem.kt b/app/src/main/kotlin/org/fdroid/ui/categories/CategoryItem.kt index f76acfcce..81999968b 100644 --- a/app/src/main/kotlin/org/fdroid/ui/categories/CategoryItem.kt +++ b/app/src/main/kotlin/org/fdroid/ui/categories/CategoryItem.kt @@ -4,6 +4,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons.AutoMirrored import androidx.compose.material.icons.automirrored.filled.MenuBook import androidx.compose.material.icons.automirrored.filled.Message +import androidx.compose.material.icons.automirrored.filled.QueueMusic import androidx.compose.material.icons.filled.AccessTime import androidx.compose.material.icons.filled.AccountBalanceWallet import androidx.compose.material.icons.filled.Airplay @@ -17,6 +18,7 @@ import androidx.compose.material.icons.filled.BrowserUpdated import androidx.compose.material.icons.filled.Brush import androidx.compose.material.icons.filled.Calculate import androidx.compose.material.icons.filled.CalendarMonth +import androidx.compose.material.icons.filled.CameraAlt import androidx.compose.material.icons.filled.Casino import androidx.compose.material.icons.filled.Castle import androidx.compose.material.icons.filled.Category @@ -39,6 +41,7 @@ import androidx.compose.material.icons.filled.EditNote import androidx.compose.material.icons.filled.EnhancedEncryption import androidx.compose.material.icons.filled.Extension import androidx.compose.material.icons.filled.Fastfood +import androidx.compose.material.icons.filled.FiberSmartRecord import androidx.compose.material.icons.filled.FileCopy import androidx.compose.material.icons.filled.FitnessCenter import androidx.compose.material.icons.filled.FlashlightOn @@ -80,6 +83,7 @@ import androidx.compose.material.icons.filled.SignalCellularAlt import androidx.compose.material.icons.filled.Sos import androidx.compose.material.icons.filled.SportsMartialArts import androidx.compose.material.icons.filled.SportsSoccer +import androidx.compose.material.icons.filled.StackedLineChart import androidx.compose.material.icons.filled.Storefront import androidx.compose.material.icons.filled.Style import androidx.compose.material.icons.filled.TaskAlt @@ -111,6 +115,7 @@ data class CategoryItem(val id: String, val name: String, val description: Strin "Browser" -> Icons.Default.OpenInBrowser "Calculator" -> Icons.Default.Calculate "Calendar & Agenda" -> Icons.Default.CalendarMonth + "Camera" -> Icons.Default.CameraAlt "Card Game" -> Icons.Default.Style "Casual Game" -> Icons.Default.Gamepad "Clock" -> Icons.Default.AccessTime @@ -146,6 +151,8 @@ data class CategoryItem(val id: String, val name: String, val description: Strin "Launcher" -> Icons.Default.Home "Local Media Player" -> Icons.Default.LocalPlay "Location Tracker & Sharer" -> Icons.Default.MyLocation + "Lyrics" -> AutoMirrored.Default.QueueMusic + "Market & Price" -> Icons.Default.StackedLineChart "Meditation" -> Icons.Default.SelfImprovement "Messaging" -> AutoMirrored.Default.Message "Money" -> Icons.Default.Money @@ -167,6 +174,7 @@ data class CategoryItem(val id: String, val name: String, val description: Strin "Radio" -> Icons.Default.Radio "Reading" -> AutoMirrored.Default.MenuBook "Recipe Manager" -> Icons.Default.RestaurantMenu + "Recorder" -> Icons.Default.FiberSmartRecord "Religion" -> Icons.Default.Church "Role-Playing Game" -> Icons.Default.Diversity3 "Remote Access" -> Icons.Default.BrowserUpdated @@ -215,6 +223,7 @@ data class CategoryItem(val id: String, val name: String, val description: Strin "Browser" -> CategoryGroups.network "Calculator" -> CategoryGroups.tools "Calendar & Agenda" -> CategoryGroups.productivity + "Camera" -> CategoryGroups.device "Card Game" -> CategoryGroups.games "Casual Game" -> CategoryGroups.games "Clock" -> CategoryGroups.productivity @@ -250,6 +259,8 @@ data class CategoryItem(val id: String, val name: String, val description: Strin "Launcher" -> CategoryGroups.device "Local Media Player" -> CategoryGroups.media "Location Tracker & Sharer" -> CategoryGroups.tools + "Lyrics" -> CategoryGroups.interests + "Market & Price" -> CategoryGroups.interests "Meditation" -> CategoryGroups.interests "Messaging" -> CategoryGroups.communication "Money" -> CategoryGroups.wallets @@ -271,6 +282,7 @@ data class CategoryItem(val id: String, val name: String, val description: Strin "Radio" -> CategoryGroups.media "Reading" -> CategoryGroups.media "Recipe Manager" -> CategoryGroups.interests + "Recorder" -> CategoryGroups.tools "Religion" -> CategoryGroups.interests "Role-Playing Game" -> CategoryGroups.games "Remote Access" -> CategoryGroups.network From 9994dab577100bb78c21a6faa49687e79d798bdf Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Wed, 10 Jun 2026 16:14:53 -0300 Subject: [PATCH 5/8] Remove legacy code and move over some tests --- app/build.gradle.kts | 5 +- .../java/org/fdroid/HiltTestRunner.kt | 12 + .../repo/RepoManagerAddAllIntegrationTest.kt | 170 ++ .../java/org/fdroid/ui/LocalizationTest.kt | 231 +++ app/src/main/AndroidManifest.xml | 2 + .../main/res/xml/backup_extraction_rules.xml | 0 .../src/main/res/xml/backup_rules.xml | 0 config/checkstyle/checkstyle.gradle | 13 - config/checkstyle/checkstyle.xml | 150 -- config/checkstyle/suppressions.xml | 7 - config/errorprone.gradle | 24 - config/nightly-repo/repo.xml | 16 - config/pmd/pmd.gradle | 26 - config/pmd/rules-main.xml | 11 - config/pmd/rules-test.xml | 15 - config/pmd/rules.xml | 51 - gradle/libs.versions.toml | 1 + gradle/verification-metadata.xml | 15 + legacy/build.gradle | 267 --- legacy/lint.xml | 88 - legacy/proguard-rules.pro | 59 - legacy/src/androidTest/AndroidManifest.xml | 23 - .../org.fdroid.extendedpermissionstest.apk | Bin 1243361 -> 0 bytes .../assets/org.fdroid.permissions.minmax.apk | Bin 8694 -> 0 bytes .../assets/org.fdroid.permissions.minmax.zip | Bin 141627 -> 0 bytes .../assets/org.fdroid.permissions.sdk14.apk | Bin 8929 -> 0 bytes .../assets/org.fdroid.permissions.sdk14.zip | Bin 118781 -> 0 bytes legacy/src/androidTest/assets/simpleIndex.jar | 0 .../fdroid/database/PrimaryConstructorTest.kt | 31 - .../java/org/fdroid/fdroid/AssetUtils.java | 43 - .../org/fdroid/fdroid/LocalizationTest.java | 224 -- .../fdroid/MainActivityEspressoTest.java | 278 --- .../java/org/fdroid/fdroid/Netstat.java | 373 ---- .../org/fdroid/fdroid/SystemAnimations.java | 62 - .../java/org/fdroid/fdroid/UiWatchers.java | 135 -- .../fdroid/fdroid/compat/FileCompatTest.java | 115 - .../fdroid/installer/ApkVerifierTest.java | 449 ---- .../org/fdroid/fdroid/net/DnsCacheTest.kt | 93 - .../fdroid/fdroid/net/HttpDownloaderTest.java | 189 -- .../fdroid/fdroid/work/AppUpdateWorkerTest.kt | 183 -- .../fdroid/work/CleanCacheWorkerTest.java | 113 - .../fdroid/work/FDroidMetricsWorkerTest.java | 74 - .../fdroid/work/WorkManagerTestRule.java | 31 - .../repo/RepoManagerAddAllIntegrationTest.kt | 169 -- legacy/src/androidTest/proguard-rules.pro | 35 - .../fdroid/MainActivityEspressoTestFull.java | 303 --- .../fdroid/nearby/BonjourManagerTest.java | 128 -- .../org/fdroid/fdroid/nearby/CopyUtils.kt | 12 - .../fdroid/nearby/LocalHTTPDManagerTest.java | 195 -- .../nearby/PublicSourceDirProviderTest.java | 98 - .../fdroid/updater/SwapRepoEmulatorTest.java | 153 -- .../fdroid/fdroid/nearby/BluetoothClient.java | 34 - .../fdroid/nearby/LocalRepoManager.java | 5 - .../fdroid/nearby/SDCardScannerService.java | 30 - .../org/fdroid/fdroid/nearby/SwapService.java | 30 - .../fdroid/nearby/SwapWorkflowActivity.java | 34 - .../nearby/TreeUriScannerIntentService.java | 33 - .../fdroid/nearby/WifiStateChangeService.java | 40 - .../fdroid/fdroid/panic/HidingManager.java | 36 - .../fdroid/views/main/LatestLayoutPolicy.java | 42 - .../fdroid/views/main/MainViewController.java | 104 - .../fdroid/views/main/NearbyViewBinder.java | 11 - .../ic_launcher_foreground.xml | 59 - .../basic/res/drawable-hdpi/ic_launcher.png | Bin 2841 -> 0 bytes .../basic/res/drawable-ldpi/ic_launcher.png | Bin 1182 -> 0 bytes .../basic/res/drawable-mdpi/ic_launcher.png | Bin 1704 -> 0 bytes .../basic/res/drawable-xhdpi/ic_launcher.png | Bin 4327 -> 0 bytes .../basic/res/drawable-xxhdpi/ic_launcher.png | Bin 7529 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher.png | Bin 10211 -> 0 bytes .../res/drawable/ic_launcher_monochrome.xml | 12 - legacy/src/basic/res/values/attrs.xml | 4 - legacy/src/basic/res/values/strings.xml | 6 - legacy/src/debug/AndroidManifest.xml | 8 - legacy/src/full/AndroidManifest.xml | 192 -- .../cc/mvdan/accesspoint/WifiApControl.java | 417 ---- .../javax/jmdns/impl/FDroidServiceInfo.java | 122 -- .../kellinwood/logging/AbstractLogger.java | 94 - .../logging/ConsoleLoggerFactory.java | 24 - .../kellinwood/logging/LoggerFactory.java | 22 - .../kellinwood/logging/LoggerInterface.java | 49 - .../kellinwood/logging/LoggerManager.java | 41 - .../kellinwood/logging/NullLoggerFactory.java | 69 - .../java/kellinwood/logging/StreamLogger.java | 35 - .../security/zipsigner/AutoKeyException.java | 14 - .../zipsigner/DefaultResourceAdapter.java | 34 - .../security/zipsigner/HexDumpEncoder.java | 72 - .../kellinwood/security/zipsigner/KeySet.java | 95 - .../security/zipsigner/ProgressEvent.java | 51 - .../security/zipsigner/ProgressHelper.java | 80 - .../security/zipsigner/ProgressListener.java | 26 - .../security/zipsigner/ResourceAdapter.java | 20 - .../security/zipsigner/ZipSigner.java | 780 ------- .../optional/SignatureBlockGenerator.java | 60 - .../java/kellinwood/zipio/CentralEnd.java | 104 - .../full/java/kellinwood/zipio/ZioEntry.java | 639 ------ .../kellinwood/zipio/ZioEntryInputStream.java | 141 -- .../zipio/ZioEntryOutputStream.java | 85 - .../full/java/kellinwood/zipio/ZipInput.java | 234 --- .../kellinwood/zipio/ZipListingHelper.java | 52 - .../full/java/kellinwood/zipio/ZipOutput.java | 144 -- .../fdroid/fdroid/nearby/BluetoothClient.java | 35 - .../fdroid/nearby/BluetoothManager.java | 187 -- .../fdroid/fdroid/nearby/BluetoothServer.java | 350 ---- .../fdroid/fdroid/nearby/BonjourManager.java | 322 --- .../org/fdroid/fdroid/nearby/LocalHTTPD.java | 504 ----- .../fdroid/nearby/LocalHTTPDManager.java | 127 -- .../fdroid/nearby/LocalRepoKeyStore.java | 377 ---- .../fdroid/nearby/LocalRepoManager.java | 301 --- .../fdroid/nearby/LocalRepoService.java | 130 -- .../fdroid/fdroid/nearby/NewRepoConfig.java | 234 --- .../fdroid/nearby/SDCardScannerService.java | 158 -- .../fdroid/fdroid/nearby/SelectAppsView.java | 222 -- .../fdroid/fdroid/nearby/StartSwapView.java | 255 --- .../org/fdroid/fdroid/nearby/SwapService.java | 647 ------ .../fdroid/fdroid/nearby/SwapSuccessView.java | 380 ---- .../org/fdroid/fdroid/nearby/SwapView.java | 86 - .../fdroid/nearby/SwapWorkflowActivity.java | 1457 ------------- .../nearby/TreeUriScannerIntentService.java | 194 -- .../nearby/UsbDeviceAttachedReceiver.java | 68 - .../nearby/UsbDeviceDetachedReceiver.java | 60 - .../nearby/UsbDeviceMediaMountedReceiver.java | 24 - .../nearby/WifiStateChangeReceiver.java | 21 - .../fdroid/nearby/WifiStateChangeService.java | 387 ---- .../fdroid/nearby/peers/BluetoothPeer.java | 120 -- .../fdroid/nearby/peers/BonjourPeer.java | 101 - .../org/fdroid/fdroid/nearby/peers/Peer.java | 29 - .../fdroid/fdroid/nearby/peers/WifiPeer.java | 109 - .../fdroid/panic/CalculatorActivity.java | 160 -- .../fdroid/panic/DestructivePreference.java | 34 - .../panic/DestructiveSwitchPreference.java | 42 - .../org/fdroid/fdroid/panic/ExitActivity.java | 32 - .../fdroid/fdroid/panic/HidingManager.java | 104 - .../panic/PanicPreferencesActivity.java | 28 - .../panic/PanicPreferencesFragment.java | 288 --- .../fdroid/panic/PanicResponderActivity.java | 145 -- .../panic/SelectInstalledAppListAdapter.java | 32 - .../SelectInstalledAppListItemController.java | 40 - .../panic/SelectInstalledAppsActivity.java | 132 -- .../fdroid/views/main/LatestLayoutPolicy.java | 96 - .../fdroid/views/main/MainViewController.java | 94 - .../fdroid/views/main/NearbyViewBinder.java | 248 --- legacy/src/full/res/drawable-hdpi/circle.png | Bin 213 -> 0 bytes .../full/res/drawable-hdpi/ic_fdroid_grey.png | Bin 246 -> 0 bytes .../res/drawable-hdpi/swap_start_header.png | Bin 12481 -> 0 bytes legacy/src/full/res/drawable-ldpi/circle.png | Bin 94 -> 0 bytes .../full/res/drawable-ldpi/ic_fdroid_grey.png | Bin 107 -> 0 bytes .../res/drawable-ldpi/swap_start_header.png | Bin 2790 -> 0 bytes legacy/src/full/res/drawable-mdpi/circle.png | Bin 112 -> 0 bytes .../full/res/drawable-mdpi/ic_fdroid_grey.png | Bin 139 -> 0 bytes .../res/drawable-mdpi/swap_start_header.png | Bin 5106 -> 0 bytes legacy/src/full/res/drawable-xhdpi/circle.png | Bin 304 -> 0 bytes .../res/drawable-xhdpi/ic_fdroid_grey.png | Bin 252 -> 0 bytes .../res/drawable-xhdpi/swap_start_header.png | Bin 17404 -> 0 bytes .../src/full/res/drawable-xxhdpi/circle.png | Bin 808 -> 0 bytes .../res/drawable-xxhdpi/ic_fdroid_grey.png | Bin 655 -> 0 bytes .../res/drawable-xxhdpi/swap_start_header.png | Bin 51061 -> 0 bytes .../src/full/res/drawable-xxxhdpi/circle.png | Bin 1446 -> 0 bytes .../res/drawable-xxxhdpi/ic_fdroid_grey.png | Bin 1014 -> 0 bytes .../drawable-xxxhdpi/swap_start_header.png | Bin 84307 -> 0 bytes legacy/src/full/res/drawable/check.xml | 11 - .../res/drawable/ic_add_circle_outline.xml | 10 - legacy/src/full/res/drawable/ic_apps.xml | 10 - legacy/src/full/res/drawable/ic_bluetooth.xml | 10 - .../res/drawable/ic_bluetooth_searching.xml | 10 - legacy/src/full/res/drawable/ic_nearby.xml | 33 - legacy/src/full/res/drawable/ic_qr_code.xml | 40 - legacy/src/full/res/drawable/ic_wifi.xml | 10 - legacy/src/full/res/drawable/ic_wifi_off.xml | 10 - .../full/res/drawable/ic_wifi_tethering.xml | 10 - .../src/full/res/drawable/nearby_splash.xml | 12 - .../res/layout-sw480dp/start_swap_header.xml | 33 - .../full/res/layout/activity_calculator.xml | 299 --- .../res/layout/activity_panic_settings.xml | 29 - .../src/full/res/layout/dialog_app_hiding.xml | 60 - .../src/full/res/layout/main_tab_nearby.xml | 150 -- .../layout/select_local_apps_list_item.xml | 70 - .../src/full/res/layout/start_swap_header.xml | 6 - legacy/src/full/res/layout/swap_activity.xml | 27 - .../full/res/layout/swap_app_list_item.xml | 97 - .../full/res/layout/swap_confirm_receive.xml | 76 - .../src/full/res/layout/swap_connecting.xml | 44 - legacy/src/full/res/layout/swap_join_wifi.xml | 59 - .../full/res/layout/swap_peer_list_item.xml | 45 - .../src/full/res/layout/swap_select_apps.xml | 17 - .../src/full/res/layout/swap_send_fdroid.xml | 57 - .../src/full/res/layout/swap_start_swap.xml | 268 --- legacy/src/full/res/layout/swap_success.xml | 18 - legacy/src/full/res/layout/swap_wifi_qr.xml | 65 - .../full/res/menu/main_activity_screens.xml | 41 - legacy/src/full/res/menu/swap_next.xml | 12 - legacy/src/full/res/menu/swap_next_search.xml | 15 - legacy/src/full/res/menu/swap_search.xml | 16 - .../mipmap-hdpi/ic_calculator_launcher.png | Bin 3428 -> 0 bytes .../mipmap-mdpi/ic_calculator_launcher.png | Bin 2129 -> 0 bytes .../mipmap-xhdpi/ic_calculator_launcher.png | Bin 4892 -> 0 bytes .../mipmap-xxhdpi/ic_calculator_launcher.png | Bin 8441 -> 0 bytes .../mipmap-xxxhdpi/ic_calculator_launcher.png | Bin 12535 -> 0 bytes legacy/src/full/res/values-night/colors.xml | 4 - legacy/src/full/res/values/attrs.xml | 11 - legacy/src/full/res/values/colors.xml | 13 - legacy/src/full/res/values/strings.xml | 6 - legacy/src/full/res/values/styles.xml | 123 -- legacy/src/full/res/xml/device_filter.xml | 25 - legacy/src/full/res/xml/preferences_panic.xml | 43 - legacy/src/main/AndroidManifest.xml | 546 ----- .../privileged/IPrivilegedCallback.aidl | 26 - .../fdroid/privileged/IPrivilegedService.aidl | 68 - legacy/src/main/assets/index.template.html | 138 -- legacy/src/main/assets/logback.xml | 14 - legacy/src/main/assets/swap-icon.png | Bin 2710 -> 0 bytes legacy/src/main/assets/swap-icon.svg | 40 - legacy/src/main/assets/swap-tick-done.png | Bin 621 -> 0 bytes legacy/src/main/assets/swap-tick-not-done.png | Bin 588 -> 0 bytes .../com/google/zxing/encode/Contents.java | 113 - .../google/zxing/encode/QRCodeEncoder.java | 261 --- .../org/fdroid/fdroid/AppUpdateManager.kt | 133 -- .../fdroid/fdroid/AppUpdateStatusManager.java | 691 ------ .../fdroid/fdroid/CompatibilityChecker.java | 103 - .../org/fdroid/fdroid/DeleteCacheService.java | 44 - .../java/org/fdroid/fdroid/FDroidApp.java | 609 ------ .../main/java/org/fdroid/fdroid/Hasher.java | 99 - .../org/fdroid/fdroid/IPreferencesIpfs.java | 23 - .../java/org/fdroid/fdroid/Languages.java | 203 -- .../fdroid/NotificationBroadcastReceiver.java | 40 - .../org/fdroid/fdroid/NotificationHelper.java | 567 ----- .../org/fdroid/fdroid/NotificationManager.kt | 84 - .../java/org/fdroid/fdroid/Preferences.java | 940 --------- .../org/fdroid/fdroid/RepoUpdateManager.kt | 219 -- .../main/java/org/fdroid/fdroid/Utils.java | 977 --------- .../src/main/java/org/fdroid/fdroid/Utils.kt | 132 -- .../org/fdroid/fdroid/compat/FileCompat.java | 77 - .../fdroid/fdroid/compat/LocaleCompat.java | 18 - .../fdroid/compat/PackageManagerCompat.java | 44 - .../org/fdroid/fdroid/compose/ComposeUtils.kt | 129 -- .../fdroid/compose/FDroidExpandableRow.kt | 97 - .../fdroid/fdroid/compose/FDroidSwitchRow.kt | 66 - .../main/java/org/fdroid/fdroid/data/Apk.java | 568 ----- .../main/java/org/fdroid/fdroid/data/App.java | 816 -------- .../fdroid/data/ContentProviderMigrator.java | 147 -- .../java/org/fdroid/fdroid/data/DBHelper.java | 278 --- .../fdroid/fdroid/data/ObbUrlActivity.java | 60 - .../org/fdroid/fdroid/data/SanitizedFile.java | 69 - .../org/fdroid/fdroid/installer/ApkCache.java | 179 -- .../fdroid/installer/ApkFileProvider.java | 108 - .../fdroid/fdroid/installer/ApkVerifier.java | 158 -- .../fdroid/installer/DefaultInstaller.java | 100 - .../installer/DefaultInstallerActivity.java | 205 -- .../fdroid/installer/ErrorDialogActivity.java | 70 - .../fdroid/installer/FileInstaller.java | 92 - .../installer/FileInstallerActivity.java | 193 -- .../installer/InstallHistoryService.java | 133 -- .../installer/InstallManagerService.java | 396 ---- .../fdroid/fdroid/installer/Installer.java | 355 ---- .../fdroid/installer/InstallerFactory.java | 68 - .../fdroid/installer/InstallerService.java | 168 -- .../fdroid/installer/ObfInstallerService.java | 134 -- .../fdroid/installer/PrivilegedInstaller.java | 409 ---- .../installer/SessionInstallManager.java | 336 --- .../fdroid/installer/SessionInstaller.java | 42 - .../fdroid/nearby/BluetoothConnection.java | 57 - .../fdroid/nearby/BluetoothConstants.java | 17 - .../nearby/PublicSourceDirProvider.java | 126 -- .../nearby/httpish/ContentLengthHeader.java | 13 - .../fdroid/nearby/httpish/ETagHeader.java | 13 - .../fdroid/nearby/httpish/FileDetails.java | 23 - .../fdroid/fdroid/nearby/httpish/Header.java | 25 - .../fdroid/fdroid/nearby/httpish/Request.java | 204 -- .../fdroid/nearby/httpish/Response.java | 166 -- .../fdroid/net/BluetoothDownloader.java | 114 - .../net/ConnectivityMonitorService.java | 133 -- .../java/org/fdroid/fdroid/net/DnsCache.java | 71 - .../org/fdroid/fdroid/net/DnsWithCache.java | 80 - .../fdroid/fdroid/net/DownloaderFactory.java | 112 - .../fdroid/fdroid/net/DownloaderService.java | 367 ---- .../fdroid/fdroid/net/FDroidGlideModule.java | 49 - .../net/FDroidMirrorParameterManager.java | 112 - .../fdroid/net/LocalFileDownloader.java | 94 - .../fdroid/fdroid/net/TreeUriDownloader.java | 114 - .../fdroid/privileged/views/AppDiff.java | 69 - .../views/AppSecurityPermissions.java | 518 ----- .../views/CaffeinatedScrollView.java | 76 - .../views/InstallConfirmActivity.java | 213 -- .../fdroid/privileged/views/TabsAdapter.java | 155 -- .../views/UninstallDialogActivity.java | 107 - .../qr/CameraCharacteristicsChecker.java | 17 - .../CameraCharacteristicsMinApiLevel21.java | 108 - .../receiver/DeviceStorageReceiver.java | 29 - .../fdroid/receiver/RepoUpdateReceiver.kt | 25 - .../fdroid/receiver/StartupReceiver.java | 43 - .../receiver/UnarchivePackageReceiver.kt | 31 - .../java/org/fdroid/fdroid/ui/theme/Color.kt | 78 - .../java/org/fdroid/fdroid/ui/theme/Theme.kt | 110 - .../fdroid/views/AppDetailsActivity.java | 846 -------- .../views/AppDetailsRecyclerViewAdapter.java | 1534 -------------- .../fdroid/fdroid/views/CallToActionBanner.kt | 154 -- .../fdroid/views/InstallHistoryActivity.java | 192 -- .../fdroid/views/IpfsGatewayAddActivity.kt | 187 -- .../views/IpfsGatewaySettingsActivity.kt | 257 --- .../fdroid/views/LiveSeekBarPreference.java | 105 - .../fdroid/views/PreferencesFragment.java | 714 ------- .../fdroid/views/ScreenShotsActivity.java | 178 -- .../views/ScreenShotsRecyclerViewAdapter.java | 88 - .../fdroid/views/SeekBarForegroundThumb.java | 69 - .../org/fdroid/fdroid/views/StatusBanner.java | 199 -- .../appdetails/AntiFeaturesListingView.java | 199 -- .../views/appdetails/AppDetailsViewModel.kt | 184 -- .../fdroid/views/appdetails/RepoChooser.kt | 228 -- .../fdroid/views/apps/AppListActivity.java | 356 ---- .../fdroid/views/apps/AppListAdapter.java | 83 - .../views/apps/AppListItemController.java | 605 ------ .../fdroid/views/apps/AppListItemState.java | 140 -- .../fdroid/views/apps/FeatureImage.java | 272 --- .../fdroid/fdroid/views/apps/FilterSpan.java | 161 -- .../fdroid/views/apps/FilterTextWatcher.java | 179 -- .../apps/StandardAppListItemController.java | 61 - .../views/categories/AppCardController.java | 111 - .../views/categories/AppPreviewAdapter.java | 84 - .../views/categories/CategoryAdapter.java | 64 - .../views/categories/CategoryController.java | 193 -- .../fdroid/views/categories/CategoryItem.java | 14 - .../installed/InstalledAppListAdapter.java | 70 - .../InstalledAppListItemController.java | 58 - .../installed/InstalledAppsActivity.java | 144 -- .../views/main/CategoriesViewBinder.java | 160 -- .../fdroid/views/main/LatestAdapter.java | 102 - .../fdroid/views/main/LatestViewBinder.java | 210 -- .../fdroid/views/main/MainActivity.java | 430 ---- .../fdroid/views/main/MainViewAdapter.java | 141 -- .../fdroid/views/main/SettingsView.java | 83 - .../fdroid/views/repos/AddRepoActivity.kt | 146 -- .../fdroid/views/repos/AddRepoErrorScreen.kt | 120 -- .../fdroid/views/repos/AddRepoIntroScreen.kt | 259 --- .../views/repos/ManageReposActivity.java | 267 --- .../fdroid/views/repos/RepoAdapter.java | 146 -- .../fdroid/views/repos/RepoDetailsActivity.kt | 214 -- .../fdroid/views/repos/RepoDetailsScreen.kt | 478 ----- .../views/repos/RepoDetailsViewModel.kt | 156 -- .../fdroid/views/repos/RepoIconComposable.kt | 35 - .../fdroid/views/repos/RepoPreviewScreen.kt | 343 --- .../fdroid/views/repos/RepoProgressScreen.kt | 46 - .../fdroid/views/updates/UpdatesAdapter.java | 331 --- .../updates/UpdatesItemTouchCallback.java | 69 - .../views/updates/UpdatesViewBinder.java | 113 - .../fdroid/views/updates/items/AppStatus.java | 60 - .../items/AppStatusListItemController.java | 90 - .../views/updates/items/AppUpdateData.java | 18 - .../views/updates/items/KnownVulnApp.java | 65 - .../items/KnownVulnAppListItemController.java | 126 -- .../views/updates/items/UpdateableApp.java | 63 - .../UpdateableAppListItemController.java | 81 - .../updates/items/UpdateableAppsHeader.java | 136 -- .../org/fdroid/fdroid/work/AppUpdateWorker.kt | 147 -- .../fdroid/fdroid/work/CleanCacheWorker.java | 245 --- .../fdroid/work/FDroidMetricsWorker.java | 426 ---- .../fdroid/fdroid/work/RepoUpdateWorker.kt | 157 -- .../org/fdroid/fdroid/work/UnarchiveWorker.kt | 97 - .../apache/commons/codec/BinaryDecoder.java | 37 - .../apache/commons/codec/BinaryEncoder.java | 37 - .../apache/commons/codec/CharEncoding.java | 119 -- .../org/apache/commons/codec/Decoder.java | 46 - .../commons/codec/DecoderException.java | 84 - .../org/apache/commons/codec/Encoder.java | 43 - .../commons/codec/EncoderException.java | 87 - .../codec/binary/CharSequenceUtils.java | 82 - .../org/apache/commons/codec/binary/Hex.java | 567 ----- .../commons/codec/binary/StringUtils.java | 419 ---- .../commons/codec/digest/DigestUtils.java | 1743 ---------------- .../codec/digest/MessageDigestAlgorithms.java | 174 -- .../res/drawable-anydpi-v26/ic_launcher.xml | 6 - .../ic_launcher_background.xml | 32 - .../ic_launcher_foreground.xml | 82 - .../res/drawable-anydpi/ic_file_install.xml | 15 - .../src/main/res/drawable-hdpi/ic_coins_s.png | Bin 631 -> 0 bytes .../res/drawable-hdpi/ic_file_install.png | Bin 310 -> 0 bytes .../main/res/drawable-hdpi/ic_launcher.png | Bin 3831 -> 0 bytes .../res/drawable-hdpi/ic_repo_app_default.png | Bin 1035 -> 0 bytes .../drawable-hdpi/tab_unselected_holo.9.png | Bin 153 -> 0 bytes .../main/res/drawable-ldpi/ic_launcher.png | Bin 1760 -> 0 bytes .../res/drawable-ldpi/ic_repo_app_default.png | Bin 544 -> 0 bytes .../src/main/res/drawable-mdpi/ic_coins_s.png | Bin 389 -> 0 bytes .../res/drawable-mdpi/ic_file_install.png | Bin 240 -> 0 bytes .../main/res/drawable-mdpi/ic_launcher.png | Bin 2217 -> 0 bytes .../res/drawable-mdpi/ic_repo_app_default.png | Bin 673 -> 0 bytes .../drawable-mdpi/tab_unselected_holo.9.png | Bin 157 -> 0 bytes .../main/res/drawable-xhdpi/ic_coins_s.png | Bin 867 -> 0 bytes .../res/drawable-xhdpi/ic_file_install.png | Bin 346 -> 0 bytes .../main/res/drawable-xhdpi/ic_launcher.png | Bin 4787 -> 0 bytes .../drawable-xhdpi/ic_repo_app_default.png | Bin 1320 -> 0 bytes .../drawable-xhdpi/tab_unselected_holo.9.png | Bin 166 -> 0 bytes .../res/drawable-xxhdpi/ic_file_install.png | Bin 449 -> 0 bytes .../main/res/drawable-xxhdpi/ic_launcher.png | Bin 7995 -> 0 bytes .../drawable-xxhdpi/ic_repo_app_default.png | Bin 2028 -> 0 bytes .../drawable-xxhdpi/tab_unselected_holo.9.png | Bin 1054 -> 0 bytes .../res/drawable-xxxhdpi/ic_file_install.png | Bin 556 -> 0 bytes .../main/res/drawable-xxxhdpi/ic_launcher.png | Bin 10858 -> 0 bytes .../drawable-xxxhdpi/ic_repo_app_default.png | Bin 2609 -> 0 bytes .../app_version_item_status_incompatible.xml | 8 - .../app_version_item_status_installed.xml | 8 - .../drawable/app_version_item_status_new.xml | 9 - .../app_version_item_status_suggested.xml | 8 - .../main/res/drawable/background_circle.xml | 5 - ...egory_preview_app_card_background_dark.xml | 10 - ...gory_preview_app_card_background_light.xml | 10 - .../res/drawable/donation_option_bitcoin.xml | 33 - .../drawable/donation_option_liberapay.xml | 76 - .../res/drawable/donation_option_litecoin.xml | 96 - .../donation_option_opencollective.xml | 62 - legacy/src/main/res/drawable/ic_add.xml | 10 - .../main/res/drawable/ic_antifeature_ads.xml | 15 - .../ic_antifeature_disabledalgorithm.xml | 21 - .../res/drawable/ic_antifeature_knownvuln.xml | 15 - .../drawable/ic_antifeature_nonfreeadd.xml | 19 - .../drawable/ic_antifeature_nonfreeassets.xml | 19 - .../drawable/ic_antifeature_nonfreedep.xml | 22 - .../drawable/ic_antifeature_nonfreenet.xml | 37 - .../drawable/ic_antifeature_nosourcesince.xml | 16 - .../main/res/drawable/ic_antifeature_nsfw.xml | 9 - .../drawable/ic_antifeature_tetherednet.xml | 74 - .../res/drawable/ic_antifeature_tracking.xml | 22 - .../src/main/res/drawable/ic_arrow_back.xml | 11 - .../ic_arrow_back_with_background.xml | 12 - .../main/res/drawable/ic_arrow_forward.xml | 10 - legacy/src/main/res/drawable/ic_author.xml | 12 - legacy/src/main/res/drawable/ic_cancel.xml | 10 - .../src/main/res/drawable/ic_categories.xml | 12 - legacy/src/main/res/drawable/ic_changelog.xml | 10 - legacy/src/main/res/drawable/ic_clear.xml | 10 - legacy/src/main/res/drawable/ic_close.xml | 10 - legacy/src/main/res/drawable/ic_delete.xml | 10 - legacy/src/main/res/drawable/ic_donate.xml | 10 - legacy/src/main/res/drawable/ic_download.xml | 38 - .../res/drawable/ic_download_progress.xml | 102 - .../res/drawable/ic_download_progress_0.xml | 29 - .../res/drawable/ic_download_progress_105.xml | 38 - .../res/drawable/ic_download_progress_120.xml | 38 - .../res/drawable/ic_download_progress_135.xml | 38 - .../res/drawable/ic_download_progress_15.xml | 38 - .../res/drawable/ic_download_progress_150.xml | 38 - .../res/drawable/ic_download_progress_165.xml | 38 - .../res/drawable/ic_download_progress_180.xml | 38 - .../res/drawable/ic_download_progress_195.xml | 38 - .../res/drawable/ic_download_progress_210.xml | 38 - .../res/drawable/ic_download_progress_225.xml | 38 - .../res/drawable/ic_download_progress_240.xml | 38 - .../res/drawable/ic_download_progress_255.xml | 38 - .../res/drawable/ic_download_progress_270.xml | 38 - .../res/drawable/ic_download_progress_285.xml | 38 - .../res/drawable/ic_download_progress_30.xml | 38 - .../res/drawable/ic_download_progress_300.xml | 38 - .../res/drawable/ic_download_progress_315.xml | 38 - .../res/drawable/ic_download_progress_330.xml | 38 - .../res/drawable/ic_download_progress_345.xml | 38 - .../res/drawable/ic_download_progress_360.xml | 38 - .../res/drawable/ic_download_progress_45.xml | 38 - .../res/drawable/ic_download_progress_60.xml | 38 - .../res/drawable/ic_download_progress_75.xml | 38 - .../res/drawable/ic_download_progress_90.xml | 38 - legacy/src/main/res/drawable/ic_email.xml | 10 - legacy/src/main/res/drawable/ic_error.xml | 10 - .../src/main/res/drawable/ic_expand_less.xml | 10 - .../src/main/res/drawable/ic_expand_more.xml | 12 - .../main/res/drawable/ic_file_download.xml | 10 - legacy/src/main/res/drawable/ic_info.xml | 10 - .../res/drawable/ic_known_vuln_overlay.xml | 42 - .../src/main/res/drawable/ic_last_updated.xml | 15 - legacy/src/main/res/drawable/ic_latest.xml | 17 - .../res/drawable/ic_launcher_monochrome.xml | 15 - legacy/src/main/res/drawable/ic_license.xml | 19 - legacy/src/main/res/drawable/ic_link.xml | 10 - legacy/src/main/res/drawable/ic_lock.xml | 10 - legacy/src/main/res/drawable/ic_more.xml | 10 - .../res/drawable/ic_more_with_background.xml | 12 - .../src/main/res/drawable/ic_notification.xml | 16 - .../res/drawable/ic_notification_download.xml | 29 - .../main/res/drawable/ic_perm_device_info.xml | 22 - legacy/src/main/res/drawable/ic_refresh.xml | 10 - legacy/src/main/res/drawable/ic_repo.xml | 10 - legacy/src/main/res/drawable/ic_search.xml | 10 - legacy/src/main/res/drawable/ic_settings.xml | 10 - legacy/src/main/res/drawable/ic_share.xml | 10 - .../res/drawable/ic_share_with_background.xml | 13 - legacy/src/main/res/drawable/ic_sort.xml | 11 - .../src/main/res/drawable/ic_source_code.xml | 10 - .../src/main/res/drawable/ic_translation.xml | 10 - legacy/src/main/res/drawable/ic_updates.xml | 12 - legacy/src/main/res/drawable/ic_versions.xml | 15 - legacy/src/main/res/drawable/ic_video.xml | 10 - legacy/src/main/res/drawable/ic_warning.xml | 10 - legacy/src/main/res/drawable/ic_website.xml | 10 - .../src/main/res/drawable/no_updates_bg.xml | 12 - .../res/drawable/screenshot_placeholder.xml | 9 - .../main/res/drawable/seekbar_background.xml | 10 - .../src/main/res/drawable/seekbar_thumb.xml | 11 - .../main/res/drawable/seekbar_tickmark.xml | 11 - .../src/main/res/drawable/swap_qr_example.png | Bin 2854 -> 0 bytes legacy/src/main/res/layout/about.xml | 61 - .../src/main/res/layout/activity_app_list.xml | 117 -- .../res/layout/activity_install_history.xml | 39 - legacy/src/main/res/layout/activity_main.xml | 25 - .../main/res/layout/activity_screenshots.xml | 11 - .../res/layout/activity_screenshots_page.xml | 20 - .../main/res/layout/app_card_horizontal.xml | 67 - legacy/src/main/res/layout/app_card_large.xml | 70 - .../main/res/layout/app_card_list_item.xml | 71 - .../src/main/res/layout/app_card_normal.xml | 62 - legacy/src/main/res/layout/app_details2.xml | 54 - .../main/res/layout/app_details2_donate.xml | 32 - .../main/res/layout/app_details2_header.xml | 303 --- .../res/layout/app_details2_link_item.xml | 11 - .../main/res/layout/app_details2_links.xml | 45 - .../main/res/layout/app_details2_loading.xml | 17 - .../res/layout/app_details2_more_apps.xml | 40 - .../layout/app_details2_screenshot_item.xml | 15 - .../res/layout/app_details2_screenshots.xml | 17 - .../res/layout/app_details2_version_item.xml | 185 -- legacy/src/main/res/layout/app_list_item.xml | 85 - .../main/res/layout/app_permission_item.xml | 56 - .../res/layout/app_permission_item_money.xml | 81 - .../src/main/res/layout/app_perms_summary.xml | 43 - legacy/src/main/res/layout/app_status_new.xml | 6 - .../main/res/layout/app_status_suggested.xml | 6 - legacy/src/main/res/layout/category_item.xml | 76 - legacy/src/main/res/layout/donate_bitcoin.xml | 12 - legacy/src/main/res/layout/donate_generic.xml | 13 - .../src/main/res/layout/donate_liberapay.xml | 11 - .../src/main/res/layout/donate_litecoin.xml | 12 - .../main/res/layout/donate_opencollective.xml | 11 - legacy/src/main/res/layout/fab_search.xml | 12 - .../main/res/layout/install_app_details.xml | 65 - .../src/main/res/layout/install_confirm.xml | 154 -- legacy/src/main/res/layout/install_start.xml | 36 - .../res/layout/installed_app_list_item.xml | 83 - .../main/res/layout/installed_apps_layout.xml | 67 - .../res/layout/known_vuln_app_list_item.xml | 78 - .../layout/listitem_antifeaturelisting.xml | 48 - legacy/src/main/res/layout/login.xml | 69 - .../main/res/layout/main_tab_categories.xml | 64 - .../src/main/res/layout/main_tab_latest.xml | 60 - .../src/main/res/layout/main_tab_settings.xml | 6 - .../src/main/res/layout/main_tab_updates.xml | 81 - .../src/main/res/layout/permissions_list.xml | 36 - .../main/res/layout/preference_edit_text.xml | 60 - .../main/res/layout/preference_seekbar.xml | 54 - .../src/main/res/layout/preference_switch.xml | 11 - legacy/src/main/res/layout/repo_item.xml | 94 - .../main/res/layout/repo_list_activity.xml | 46 - .../res/layout/updateable_app_list_item.xml | 49 - .../res/layout/updateable_app_status_item.xml | 108 - legacy/src/main/res/layout/updates_header.xml | 63 - legacy/src/main/res/menu/details2.xml | 31 - legacy/src/main/res/menu/install_history.xml | 18 - legacy/src/main/res/menu/installed_apps.xml | 10 - .../main/res/menu/main_activity_screens.xml | 34 - legacy/src/main/res/menu/repo_list.xml | 12 - legacy/src/main/res/values-af | 1 - legacy/src/main/res/values-ar | 1 - legacy/src/main/res/values-ast | 1 - legacy/src/main/res/values-az | 1 - legacy/src/main/res/values-b+hi+Latn | 1 - legacy/src/main/res/values-be | 1 - legacy/src/main/res/values-ber | 1 - legacy/src/main/res/values-bg | 1 - legacy/src/main/res/values-bn | 1 - legacy/src/main/res/values-bn-rBD | 1 - legacy/src/main/res/values-bo | 1 - legacy/src/main/res/values-br | 1 - legacy/src/main/res/values-ca | 1 - legacy/src/main/res/values-ckb | 1 - legacy/src/main/res/values-cs | 1 - legacy/src/main/res/values-cy | 1 - legacy/src/main/res/values-da | 1 - legacy/src/main/res/values-de | 1 - legacy/src/main/res/values-el | 1 - legacy/src/main/res/values-en-rGB | 1 - legacy/src/main/res/values-eo | 1 - legacy/src/main/res/values-es | 1 - legacy/src/main/res/values-es-rAR | 1 - legacy/src/main/res/values-es-rMX | 1 - legacy/src/main/res/values-et | 1 - legacy/src/main/res/values-eu | 1 - legacy/src/main/res/values-fa | 1 - legacy/src/main/res/values-fi | 1 - legacy/src/main/res/values-fil | 1 - legacy/src/main/res/values-fr | 1 - legacy/src/main/res/values-fy | 1 - legacy/src/main/res/values-ga | 1 - legacy/src/main/res/values-gd | 1 - legacy/src/main/res/values-gl | 1 - legacy/src/main/res/values-gu | 1 - legacy/src/main/res/values-he | 1 - legacy/src/main/res/values-hi | 1 - legacy/src/main/res/values-hr | 1 - legacy/src/main/res/values-hu | 1 - legacy/src/main/res/values-hy | 1 - legacy/src/main/res/values-id | 1 - legacy/src/main/res/values-in | 1 - legacy/src/main/res/values-is | 1 - legacy/src/main/res/values-it | 1 - legacy/src/main/res/values-iw | 1 - legacy/src/main/res/values-ja | 1 - legacy/src/main/res/values-ka | 1 - legacy/src/main/res/values-kab | 1 - legacy/src/main/res/values-kk | 1 - legacy/src/main/res/values-kmr | 1 - legacy/src/main/res/values-kn | 1 - legacy/src/main/res/values-ko | 1 - legacy/src/main/res/values-lb | 1 - legacy/src/main/res/values-lt | 1 - legacy/src/main/res/values-lv | 1 - legacy/src/main/res/values-mk | 1 - legacy/src/main/res/values-ml | 1 - legacy/src/main/res/values-mn | 1 - legacy/src/main/res/values-mr | 1 - legacy/src/main/res/values-my | 1 - legacy/src/main/res/values-nah | 1 - legacy/src/main/res/values-nb | 1 - legacy/src/main/res/values-ne | 1 - legacy/src/main/res/values-night/colors.xml | 56 - legacy/src/main/res/values-night/themes.xml | 94 - legacy/src/main/res/values-nl | 1 - legacy/src/main/res/values-nl-rBE | 1 - legacy/src/main/res/values-nn | 1 - legacy/src/main/res/values-oc | 1 - legacy/src/main/res/values-or | 1 - legacy/src/main/res/values-pa | 1 - legacy/src/main/res/values-pa-rPK | 1 - legacy/src/main/res/values-pl | 1 - legacy/src/main/res/values-ps | 1 - legacy/src/main/res/values-pt | 1 - legacy/src/main/res/values-pt-rBR | 1 - legacy/src/main/res/values-pt-rPT | 1 - legacy/src/main/res/values-ro | 1 - legacy/src/main/res/values-ru | 1 - legacy/src/main/res/values-sc | 1 - legacy/src/main/res/values-si | 1 - legacy/src/main/res/values-sk | 1 - legacy/src/main/res/values-sl | 1 - legacy/src/main/res/values-sn | 1 - legacy/src/main/res/values-so | 1 - legacy/src/main/res/values-sq | 1 - legacy/src/main/res/values-sr | 1 - legacy/src/main/res/values-sv | 1 - legacy/src/main/res/values-sw | 1 - .../res/values-sw360dp/values-preference.xml | 9 - legacy/src/main/res/values-sw720dp/dimens.xml | 7 - legacy/src/main/res/values-ta | 1 - legacy/src/main/res/values-te | 1 - legacy/src/main/res/values-th | 1 - legacy/src/main/res/values-tok | 1 - legacy/src/main/res/values-tr | 1 - legacy/src/main/res/values-tt | 1 - legacy/src/main/res/values-tzm | 1 - legacy/src/main/res/values-ug | 1 - legacy/src/main/res/values-uk | 1 - legacy/src/main/res/values-ur | 1 - legacy/src/main/res/values-uz | 1 - legacy/src/main/res/values-vi | 1 - legacy/src/main/res/values-yue | 1 - legacy/src/main/res/values-zh-rCN | 1 - legacy/src/main/res/values-zh-rHK | 1 - legacy/src/main/res/values-zh-rTW | 1 - legacy/src/main/res/values/array.xml | 82 - legacy/src/main/res/values/attrs.xml | 21 - legacy/src/main/res/values/colors.xml | 89 - legacy/src/main/res/values/default_repos.xml | 97 - legacy/src/main/res/values/dimens.xml | 36 - legacy/src/main/res/values/donottranslate.xml | 59 - legacy/src/main/res/values/ids.xml | 13 - legacy/src/main/res/values/shape.xml | 61 - legacy/src/main/res/values/strings.xml | 1 - legacy/src/main/res/values/styles.xml | 169 -- legacy/src/main/res/values/styles_detail.xml | 54 - legacy/src/main/res/values/theme_overlays.xml | 19 - legacy/src/main/res/values/themes.xml | 134 -- legacy/src/main/res/xml/apk_file_provider.xml | 6 - .../main/res/xml/installer_file_provider.xml | 9 - legacy/src/main/res/xml/locales_config.xml | 68 - .../main/res/xml/network_security_config.xml | 40 - legacy/src/main/res/xml/preferences.xml | 260 --- legacy/src/main/res/xml/searchable.xml | 4 - legacy/src/main/scripts/update-binary | 45 - legacy/src/test/assets/urzip.apk | Bin 9969 -> 0 bytes .../org/fdroid/fdroid/AppUpdateManagerTest.kt | 290 --- .../org/fdroid/fdroid/PreferencesTest.java | 174 -- .../fdroid/fdroid/RepoUpdateManagerTest.kt | 212 -- .../java/org/fdroid/fdroid/RepoUrlsTest.java | 145 -- .../java/org/fdroid/fdroid/TestFDroidApp.java | 14 - .../java/org/fdroid/fdroid/TestUtils.java | 82 - .../java/org/fdroid/fdroid/UtilsTest.java | 222 -- .../java/org/fdroid/fdroid/data/ApkTest.java | 93 - .../org/fdroid/fdroid/data/DBHelperTest.java | 338 --- .../fdroid/fdroid/data/SanitizedFileTest.java | 57 - .../fdroid/data/SuggestedVersionTest.java | 141 -- .../fdroid/fdroid/installer/ApkCacheTest.java | 64 - .../fdroid/installer/FileInstallerTest.java | 46 - .../installer/InstallerFactoryTest.java | 58 - .../fdroid/views/AppDetailsAdapterTest.java | 152 -- .../fdroid/views/CallToActionBannerTest.kt | 23 - .../fdroid/views/main/MainActivityTest.java | 24 - .../fdroid/work/CleanCacheWorkerTest.java | 95 - .../fdroid/work/FDroidMetricsWorkerTest.java | 100 - .../resources/Norway_bouvet_europe_2.obf.zip | Bin 12098 -> 0 bytes .../src/test/resources/additional_repos.xml | 34 - .../test/resources/all_fields_index-v1.json | 149 -- legacy/src/test/resources/install_history_all | 1848 ----------------- .../org.fdroid.fdroid.privileged.ota_2110.zip | Bin 34428 -> 0 bytes .../test/resources/ugly_additional_repos.xml | 31 - .../security/zipsigner/ZipSignerTest.java | 89 - .../fdroid/nearby/LocalHTTPDManagerTest.java | 72 - .../fdroid/fdroid/nearby/LocalHTTPDTest.java | 445 ---- .../fdroid/nearby/LocalRepoKeyStoreTest.java | 67 - .../nearby/WifiStateChangeServiceTest.java | 20 - legacy/src/testFull/resources/icon.png | Bin 1080 -> 0 bytes legacy/src/testFull/resources/index.html | 5 - legacy/src/testFull/resources/test.html | 8 - legacy/src/testFull/resources/urzip.apk | Bin 9969 -> 0 bytes legacy/tools/download-material-icon.sh | 72 - legacy/tools/svg-to-drawables.sh | 78 - legacy/tools/test-search-intents.sh | 46 - settings.gradle | 2 - tools/validate-fdroid-metrics.json.py | 27 - 721 files changed, 435 insertions(+), 62859 deletions(-) create mode 100644 app/src/androidTest/java/org/fdroid/HiltTestRunner.kt create mode 100644 app/src/androidTest/java/org/fdroid/repo/RepoManagerAddAllIntegrationTest.kt create mode 100644 app/src/androidTest/java/org/fdroid/ui/LocalizationTest.kt rename {legacy => app}/src/main/res/xml/backup_extraction_rules.xml (100%) rename {legacy => app}/src/main/res/xml/backup_rules.xml (100%) delete mode 100644 config/checkstyle/checkstyle.gradle delete mode 100644 config/checkstyle/checkstyle.xml delete mode 100644 config/checkstyle/suppressions.xml delete mode 100644 config/errorprone.gradle delete mode 100644 config/nightly-repo/repo.xml delete mode 100644 config/pmd/pmd.gradle delete mode 100644 config/pmd/rules-main.xml delete mode 100644 config/pmd/rules-test.xml delete mode 100644 config/pmd/rules.xml delete mode 100644 legacy/build.gradle delete mode 100644 legacy/lint.xml delete mode 100644 legacy/proguard-rules.pro delete mode 100644 legacy/src/androidTest/AndroidManifest.xml delete mode 100644 legacy/src/androidTest/assets/org.fdroid.extendedpermissionstest.apk delete mode 100644 legacy/src/androidTest/assets/org.fdroid.permissions.minmax.apk delete mode 100644 legacy/src/androidTest/assets/org.fdroid.permissions.minmax.zip delete mode 100644 legacy/src/androidTest/assets/org.fdroid.permissions.sdk14.apk delete mode 100644 legacy/src/androidTest/assets/org.fdroid.permissions.sdk14.zip delete mode 100644 legacy/src/androidTest/assets/simpleIndex.jar delete mode 100644 legacy/src/androidTest/java/org/fdroid/database/PrimaryConstructorTest.kt delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/AssetUtils.java delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/LocalizationTest.java delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/MainActivityEspressoTest.java delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/Netstat.java delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/SystemAnimations.java delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/UiWatchers.java delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/compat/FileCompatTest.java delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/installer/ApkVerifierTest.java delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/net/DnsCacheTest.kt delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/net/HttpDownloaderTest.java delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/work/AppUpdateWorkerTest.kt delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/work/CleanCacheWorkerTest.java delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/work/FDroidMetricsWorkerTest.java delete mode 100644 legacy/src/androidTest/java/org/fdroid/fdroid/work/WorkManagerTestRule.java delete mode 100644 legacy/src/androidTest/java/org/fdroid/repo/RepoManagerAddAllIntegrationTest.kt delete mode 100644 legacy/src/androidTest/proguard-rules.pro delete mode 100644 legacy/src/androidTestFull/java/org/fdroid/fdroid/MainActivityEspressoTestFull.java delete mode 100644 legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/BonjourManagerTest.java delete mode 100644 legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/CopyUtils.kt delete mode 100644 legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/LocalHTTPDManagerTest.java delete mode 100644 legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/PublicSourceDirProviderTest.java delete mode 100644 legacy/src/androidTestFull/java/org/fdroid/fdroid/updater/SwapRepoEmulatorTest.java delete mode 100644 legacy/src/basic/java/org/fdroid/fdroid/nearby/BluetoothClient.java delete mode 100644 legacy/src/basic/java/org/fdroid/fdroid/nearby/LocalRepoManager.java delete mode 100644 legacy/src/basic/java/org/fdroid/fdroid/nearby/SDCardScannerService.java delete mode 100644 legacy/src/basic/java/org/fdroid/fdroid/nearby/SwapService.java delete mode 100644 legacy/src/basic/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java delete mode 100644 legacy/src/basic/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java delete mode 100644 legacy/src/basic/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java delete mode 100644 legacy/src/basic/java/org/fdroid/fdroid/panic/HidingManager.java delete mode 100644 legacy/src/basic/java/org/fdroid/fdroid/views/main/LatestLayoutPolicy.java delete mode 100644 legacy/src/basic/java/org/fdroid/fdroid/views/main/MainViewController.java delete mode 100644 legacy/src/basic/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java delete mode 100644 legacy/src/basic/res/drawable-anydpi-v26/ic_launcher_foreground.xml delete mode 100644 legacy/src/basic/res/drawable-hdpi/ic_launcher.png delete mode 100644 legacy/src/basic/res/drawable-ldpi/ic_launcher.png delete mode 100644 legacy/src/basic/res/drawable-mdpi/ic_launcher.png delete mode 100644 legacy/src/basic/res/drawable-xhdpi/ic_launcher.png delete mode 100644 legacy/src/basic/res/drawable-xxhdpi/ic_launcher.png delete mode 100644 legacy/src/basic/res/drawable-xxxhdpi/ic_launcher.png delete mode 100644 legacy/src/basic/res/drawable/ic_launcher_monochrome.xml delete mode 100644 legacy/src/basic/res/values/attrs.xml delete mode 100644 legacy/src/basic/res/values/strings.xml delete mode 100644 legacy/src/debug/AndroidManifest.xml delete mode 100644 legacy/src/full/AndroidManifest.xml delete mode 100644 legacy/src/full/java/cc/mvdan/accesspoint/WifiApControl.java delete mode 100644 legacy/src/full/java/javax/jmdns/impl/FDroidServiceInfo.java delete mode 100644 legacy/src/full/java/kellinwood/logging/AbstractLogger.java delete mode 100644 legacy/src/full/java/kellinwood/logging/ConsoleLoggerFactory.java delete mode 100644 legacy/src/full/java/kellinwood/logging/LoggerFactory.java delete mode 100644 legacy/src/full/java/kellinwood/logging/LoggerInterface.java delete mode 100644 legacy/src/full/java/kellinwood/logging/LoggerManager.java delete mode 100644 legacy/src/full/java/kellinwood/logging/NullLoggerFactory.java delete mode 100644 legacy/src/full/java/kellinwood/logging/StreamLogger.java delete mode 100644 legacy/src/full/java/kellinwood/security/zipsigner/AutoKeyException.java delete mode 100644 legacy/src/full/java/kellinwood/security/zipsigner/DefaultResourceAdapter.java delete mode 100644 legacy/src/full/java/kellinwood/security/zipsigner/HexDumpEncoder.java delete mode 100644 legacy/src/full/java/kellinwood/security/zipsigner/KeySet.java delete mode 100644 legacy/src/full/java/kellinwood/security/zipsigner/ProgressEvent.java delete mode 100644 legacy/src/full/java/kellinwood/security/zipsigner/ProgressHelper.java delete mode 100644 legacy/src/full/java/kellinwood/security/zipsigner/ProgressListener.java delete mode 100644 legacy/src/full/java/kellinwood/security/zipsigner/ResourceAdapter.java delete mode 100644 legacy/src/full/java/kellinwood/security/zipsigner/ZipSigner.java delete mode 100644 legacy/src/full/java/kellinwood/security/zipsigner/optional/SignatureBlockGenerator.java delete mode 100644 legacy/src/full/java/kellinwood/zipio/CentralEnd.java delete mode 100644 legacy/src/full/java/kellinwood/zipio/ZioEntry.java delete mode 100644 legacy/src/full/java/kellinwood/zipio/ZioEntryInputStream.java delete mode 100644 legacy/src/full/java/kellinwood/zipio/ZioEntryOutputStream.java delete mode 100644 legacy/src/full/java/kellinwood/zipio/ZipInput.java delete mode 100644 legacy/src/full/java/kellinwood/zipio/ZipListingHelper.java delete mode 100644 legacy/src/full/java/kellinwood/zipio/ZipOutput.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/BluetoothClient.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/BluetoothManager.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/BluetoothServer.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/BonjourManager.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPD.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPDManager.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/LocalRepoKeyStore.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/LocalRepoManager.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/LocalRepoService.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/NewRepoConfig.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/SDCardScannerService.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/SelectAppsView.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/StartSwapView.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/SwapService.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/SwapSuccessView.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/SwapView.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceAttachedReceiver.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceDetachedReceiver.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceMediaMountedReceiver.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeReceiver.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/peers/BluetoothPeer.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/peers/BonjourPeer.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/peers/Peer.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/nearby/peers/WifiPeer.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/panic/CalculatorActivity.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/panic/DestructivePreference.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/panic/DestructiveSwitchPreference.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/panic/ExitActivity.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/panic/HidingManager.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesActivity.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesFragment.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/panic/PanicResponderActivity.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListAdapter.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListItemController.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppsActivity.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/views/main/LatestLayoutPolicy.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/views/main/MainViewController.java delete mode 100644 legacy/src/full/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java delete mode 100644 legacy/src/full/res/drawable-hdpi/circle.png delete mode 100644 legacy/src/full/res/drawable-hdpi/ic_fdroid_grey.png delete mode 100644 legacy/src/full/res/drawable-hdpi/swap_start_header.png delete mode 100644 legacy/src/full/res/drawable-ldpi/circle.png delete mode 100644 legacy/src/full/res/drawable-ldpi/ic_fdroid_grey.png delete mode 100644 legacy/src/full/res/drawable-ldpi/swap_start_header.png delete mode 100644 legacy/src/full/res/drawable-mdpi/circle.png delete mode 100644 legacy/src/full/res/drawable-mdpi/ic_fdroid_grey.png delete mode 100644 legacy/src/full/res/drawable-mdpi/swap_start_header.png delete mode 100644 legacy/src/full/res/drawable-xhdpi/circle.png delete mode 100644 legacy/src/full/res/drawable-xhdpi/ic_fdroid_grey.png delete mode 100644 legacy/src/full/res/drawable-xhdpi/swap_start_header.png delete mode 100644 legacy/src/full/res/drawable-xxhdpi/circle.png delete mode 100644 legacy/src/full/res/drawable-xxhdpi/ic_fdroid_grey.png delete mode 100644 legacy/src/full/res/drawable-xxhdpi/swap_start_header.png delete mode 100644 legacy/src/full/res/drawable-xxxhdpi/circle.png delete mode 100644 legacy/src/full/res/drawable-xxxhdpi/ic_fdroid_grey.png delete mode 100644 legacy/src/full/res/drawable-xxxhdpi/swap_start_header.png delete mode 100644 legacy/src/full/res/drawable/check.xml delete mode 100644 legacy/src/full/res/drawable/ic_add_circle_outline.xml delete mode 100644 legacy/src/full/res/drawable/ic_apps.xml delete mode 100644 legacy/src/full/res/drawable/ic_bluetooth.xml delete mode 100644 legacy/src/full/res/drawable/ic_bluetooth_searching.xml delete mode 100644 legacy/src/full/res/drawable/ic_nearby.xml delete mode 100644 legacy/src/full/res/drawable/ic_qr_code.xml delete mode 100644 legacy/src/full/res/drawable/ic_wifi.xml delete mode 100644 legacy/src/full/res/drawable/ic_wifi_off.xml delete mode 100644 legacy/src/full/res/drawable/ic_wifi_tethering.xml delete mode 100644 legacy/src/full/res/drawable/nearby_splash.xml delete mode 100644 legacy/src/full/res/layout-sw480dp/start_swap_header.xml delete mode 100644 legacy/src/full/res/layout/activity_calculator.xml delete mode 100644 legacy/src/full/res/layout/activity_panic_settings.xml delete mode 100644 legacy/src/full/res/layout/dialog_app_hiding.xml delete mode 100644 legacy/src/full/res/layout/main_tab_nearby.xml delete mode 100644 legacy/src/full/res/layout/select_local_apps_list_item.xml delete mode 100644 legacy/src/full/res/layout/start_swap_header.xml delete mode 100644 legacy/src/full/res/layout/swap_activity.xml delete mode 100644 legacy/src/full/res/layout/swap_app_list_item.xml delete mode 100644 legacy/src/full/res/layout/swap_confirm_receive.xml delete mode 100644 legacy/src/full/res/layout/swap_connecting.xml delete mode 100644 legacy/src/full/res/layout/swap_join_wifi.xml delete mode 100644 legacy/src/full/res/layout/swap_peer_list_item.xml delete mode 100644 legacy/src/full/res/layout/swap_select_apps.xml delete mode 100644 legacy/src/full/res/layout/swap_send_fdroid.xml delete mode 100644 legacy/src/full/res/layout/swap_start_swap.xml delete mode 100644 legacy/src/full/res/layout/swap_success.xml delete mode 100644 legacy/src/full/res/layout/swap_wifi_qr.xml delete mode 100644 legacy/src/full/res/menu/main_activity_screens.xml delete mode 100644 legacy/src/full/res/menu/swap_next.xml delete mode 100644 legacy/src/full/res/menu/swap_next_search.xml delete mode 100644 legacy/src/full/res/menu/swap_search.xml delete mode 100644 legacy/src/full/res/mipmap-hdpi/ic_calculator_launcher.png delete mode 100644 legacy/src/full/res/mipmap-mdpi/ic_calculator_launcher.png delete mode 100644 legacy/src/full/res/mipmap-xhdpi/ic_calculator_launcher.png delete mode 100644 legacy/src/full/res/mipmap-xxhdpi/ic_calculator_launcher.png delete mode 100644 legacy/src/full/res/mipmap-xxxhdpi/ic_calculator_launcher.png delete mode 100644 legacy/src/full/res/values-night/colors.xml delete mode 100644 legacy/src/full/res/values/attrs.xml delete mode 100644 legacy/src/full/res/values/colors.xml delete mode 100644 legacy/src/full/res/values/strings.xml delete mode 100644 legacy/src/full/res/values/styles.xml delete mode 100644 legacy/src/full/res/xml/device_filter.xml delete mode 100644 legacy/src/full/res/xml/preferences_panic.xml delete mode 100644 legacy/src/main/AndroidManifest.xml delete mode 100644 legacy/src/main/aidl/org/fdroid/fdroid/privileged/IPrivilegedCallback.aidl delete mode 100644 legacy/src/main/aidl/org/fdroid/fdroid/privileged/IPrivilegedService.aidl delete mode 100644 legacy/src/main/assets/index.template.html delete mode 100644 legacy/src/main/assets/logback.xml delete mode 100644 legacy/src/main/assets/swap-icon.png delete mode 100644 legacy/src/main/assets/swap-icon.svg delete mode 100644 legacy/src/main/assets/swap-tick-done.png delete mode 100644 legacy/src/main/assets/swap-tick-not-done.png delete mode 100755 legacy/src/main/java/com/google/zxing/encode/Contents.java delete mode 100755 legacy/src/main/java/com/google/zxing/encode/QRCodeEncoder.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/AppUpdateManager.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/AppUpdateStatusManager.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/CompatibilityChecker.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/DeleteCacheService.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/FDroidApp.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/Hasher.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/IPreferencesIpfs.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/Languages.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/NotificationBroadcastReceiver.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/NotificationHelper.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/NotificationManager.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/Preferences.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/RepoUpdateManager.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/Utils.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/Utils.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/compat/FileCompat.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/compat/LocaleCompat.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/compat/PackageManagerCompat.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/compose/ComposeUtils.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/compose/FDroidExpandableRow.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/compose/FDroidSwitchRow.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/data/Apk.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/data/App.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/data/ContentProviderMigrator.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/data/DBHelper.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/data/ObbUrlActivity.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/data/SanitizedFile.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/ApkCache.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/ApkFileProvider.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/ApkVerifier.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/DefaultInstaller.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/DefaultInstallerActivity.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/ErrorDialogActivity.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/FileInstaller.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/FileInstallerActivity.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/InstallHistoryService.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/InstallManagerService.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/Installer.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/InstallerFactory.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/InstallerService.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/ObfInstallerService.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/PrivilegedInstaller.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/SessionInstallManager.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/installer/SessionInstaller.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/nearby/BluetoothConnection.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/nearby/BluetoothConstants.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/nearby/PublicSourceDirProvider.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/nearby/httpish/ContentLengthHeader.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/nearby/httpish/ETagHeader.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/nearby/httpish/FileDetails.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/nearby/httpish/Header.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/nearby/httpish/Request.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/nearby/httpish/Response.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/net/BluetoothDownloader.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/net/ConnectivityMonitorService.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/net/DnsCache.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/net/DnsWithCache.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/net/DownloaderFactory.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/net/DownloaderService.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/net/FDroidGlideModule.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/net/FDroidMirrorParameterManager.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/net/LocalFileDownloader.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/net/TreeUriDownloader.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/privileged/views/AppDiff.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/privileged/views/AppSecurityPermissions.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/privileged/views/CaffeinatedScrollView.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/privileged/views/InstallConfirmActivity.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/privileged/views/TabsAdapter.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/privileged/views/UninstallDialogActivity.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/qr/CameraCharacteristicsChecker.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/qr/CameraCharacteristicsMinApiLevel21.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/receiver/DeviceStorageReceiver.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/receiver/RepoUpdateReceiver.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/receiver/StartupReceiver.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/receiver/UnarchivePackageReceiver.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/ui/theme/Color.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/ui/theme/Theme.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/AppDetailsActivity.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/AppDetailsRecyclerViewAdapter.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/CallToActionBanner.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/InstallHistoryActivity.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/IpfsGatewayAddActivity.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/IpfsGatewaySettingsActivity.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/LiveSeekBarPreference.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/PreferencesFragment.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/ScreenShotsActivity.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/ScreenShotsRecyclerViewAdapter.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/SeekBarForegroundThumb.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/StatusBanner.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/appdetails/AntiFeaturesListingView.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/appdetails/AppDetailsViewModel.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/appdetails/RepoChooser.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/apps/AppListActivity.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/apps/AppListAdapter.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/apps/AppListItemController.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/apps/AppListItemState.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/apps/FeatureImage.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/apps/FilterSpan.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/apps/FilterTextWatcher.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/apps/StandardAppListItemController.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/categories/AppCardController.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/categories/AppPreviewAdapter.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/categories/CategoryAdapter.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/categories/CategoryController.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/categories/CategoryItem.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/installed/InstalledAppListAdapter.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/installed/InstalledAppListItemController.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/installed/InstalledAppsActivity.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/main/CategoriesViewBinder.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/main/LatestAdapter.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/main/LatestViewBinder.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/main/MainActivity.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/main/MainViewAdapter.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/main/SettingsView.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/repos/AddRepoActivity.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/repos/AddRepoErrorScreen.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/repos/AddRepoIntroScreen.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/repos/ManageReposActivity.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/repos/RepoAdapter.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/repos/RepoDetailsActivity.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/repos/RepoDetailsScreen.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/repos/RepoDetailsViewModel.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/repos/RepoIconComposable.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/repos/RepoPreviewScreen.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/repos/RepoProgressScreen.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/updates/UpdatesAdapter.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/updates/UpdatesItemTouchCallback.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/updates/UpdatesViewBinder.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/updates/items/AppStatus.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/updates/items/AppStatusListItemController.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/updates/items/AppUpdateData.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/updates/items/KnownVulnApp.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/updates/items/KnownVulnAppListItemController.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableApp.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppListItemController.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/views/updates/items/UpdateableAppsHeader.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/work/AppUpdateWorker.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/work/CleanCacheWorker.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/work/FDroidMetricsWorker.java delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/work/RepoUpdateWorker.kt delete mode 100644 legacy/src/main/java/org/fdroid/fdroid/work/UnarchiveWorker.kt delete mode 100644 legacy/src/main/java/vendored/org/apache/commons/codec/BinaryDecoder.java delete mode 100644 legacy/src/main/java/vendored/org/apache/commons/codec/BinaryEncoder.java delete mode 100644 legacy/src/main/java/vendored/org/apache/commons/codec/CharEncoding.java delete mode 100644 legacy/src/main/java/vendored/org/apache/commons/codec/Decoder.java delete mode 100644 legacy/src/main/java/vendored/org/apache/commons/codec/DecoderException.java delete mode 100644 legacy/src/main/java/vendored/org/apache/commons/codec/Encoder.java delete mode 100644 legacy/src/main/java/vendored/org/apache/commons/codec/EncoderException.java delete mode 100644 legacy/src/main/java/vendored/org/apache/commons/codec/binary/CharSequenceUtils.java delete mode 100644 legacy/src/main/java/vendored/org/apache/commons/codec/binary/Hex.java delete mode 100644 legacy/src/main/java/vendored/org/apache/commons/codec/binary/StringUtils.java delete mode 100644 legacy/src/main/java/vendored/org/apache/commons/codec/digest/DigestUtils.java delete mode 100644 legacy/src/main/java/vendored/org/apache/commons/codec/digest/MessageDigestAlgorithms.java delete mode 100644 legacy/src/main/res/drawable-anydpi-v26/ic_launcher.xml delete mode 100644 legacy/src/main/res/drawable-anydpi-v26/ic_launcher_background.xml delete mode 100644 legacy/src/main/res/drawable-anydpi-v26/ic_launcher_foreground.xml delete mode 100644 legacy/src/main/res/drawable-anydpi/ic_file_install.xml delete mode 100644 legacy/src/main/res/drawable-hdpi/ic_coins_s.png delete mode 100644 legacy/src/main/res/drawable-hdpi/ic_file_install.png delete mode 100644 legacy/src/main/res/drawable-hdpi/ic_launcher.png delete mode 100644 legacy/src/main/res/drawable-hdpi/ic_repo_app_default.png delete mode 100644 legacy/src/main/res/drawable-hdpi/tab_unselected_holo.9.png delete mode 100644 legacy/src/main/res/drawable-ldpi/ic_launcher.png delete mode 100644 legacy/src/main/res/drawable-ldpi/ic_repo_app_default.png delete mode 100644 legacy/src/main/res/drawable-mdpi/ic_coins_s.png delete mode 100644 legacy/src/main/res/drawable-mdpi/ic_file_install.png delete mode 100644 legacy/src/main/res/drawable-mdpi/ic_launcher.png delete mode 100644 legacy/src/main/res/drawable-mdpi/ic_repo_app_default.png delete mode 100644 legacy/src/main/res/drawable-mdpi/tab_unselected_holo.9.png delete mode 100644 legacy/src/main/res/drawable-xhdpi/ic_coins_s.png delete mode 100644 legacy/src/main/res/drawable-xhdpi/ic_file_install.png delete mode 100644 legacy/src/main/res/drawable-xhdpi/ic_launcher.png delete mode 100644 legacy/src/main/res/drawable-xhdpi/ic_repo_app_default.png delete mode 100644 legacy/src/main/res/drawable-xhdpi/tab_unselected_holo.9.png delete mode 100644 legacy/src/main/res/drawable-xxhdpi/ic_file_install.png delete mode 100644 legacy/src/main/res/drawable-xxhdpi/ic_launcher.png delete mode 100644 legacy/src/main/res/drawable-xxhdpi/ic_repo_app_default.png delete mode 100644 legacy/src/main/res/drawable-xxhdpi/tab_unselected_holo.9.png delete mode 100644 legacy/src/main/res/drawable-xxxhdpi/ic_file_install.png delete mode 100644 legacy/src/main/res/drawable-xxxhdpi/ic_launcher.png delete mode 100644 legacy/src/main/res/drawable-xxxhdpi/ic_repo_app_default.png delete mode 100644 legacy/src/main/res/drawable/app_version_item_status_incompatible.xml delete mode 100644 legacy/src/main/res/drawable/app_version_item_status_installed.xml delete mode 100644 legacy/src/main/res/drawable/app_version_item_status_new.xml delete mode 100644 legacy/src/main/res/drawable/app_version_item_status_suggested.xml delete mode 100644 legacy/src/main/res/drawable/background_circle.xml delete mode 100644 legacy/src/main/res/drawable/category_preview_app_card_background_dark.xml delete mode 100644 legacy/src/main/res/drawable/category_preview_app_card_background_light.xml delete mode 100644 legacy/src/main/res/drawable/donation_option_bitcoin.xml delete mode 100644 legacy/src/main/res/drawable/donation_option_liberapay.xml delete mode 100644 legacy/src/main/res/drawable/donation_option_litecoin.xml delete mode 100644 legacy/src/main/res/drawable/donation_option_opencollective.xml delete mode 100644 legacy/src/main/res/drawable/ic_add.xml delete mode 100644 legacy/src/main/res/drawable/ic_antifeature_ads.xml delete mode 100644 legacy/src/main/res/drawable/ic_antifeature_disabledalgorithm.xml delete mode 100644 legacy/src/main/res/drawable/ic_antifeature_knownvuln.xml delete mode 100644 legacy/src/main/res/drawable/ic_antifeature_nonfreeadd.xml delete mode 100644 legacy/src/main/res/drawable/ic_antifeature_nonfreeassets.xml delete mode 100644 legacy/src/main/res/drawable/ic_antifeature_nonfreedep.xml delete mode 100644 legacy/src/main/res/drawable/ic_antifeature_nonfreenet.xml delete mode 100644 legacy/src/main/res/drawable/ic_antifeature_nosourcesince.xml delete mode 100644 legacy/src/main/res/drawable/ic_antifeature_nsfw.xml delete mode 100644 legacy/src/main/res/drawable/ic_antifeature_tetherednet.xml delete mode 100644 legacy/src/main/res/drawable/ic_antifeature_tracking.xml delete mode 100644 legacy/src/main/res/drawable/ic_arrow_back.xml delete mode 100644 legacy/src/main/res/drawable/ic_arrow_back_with_background.xml delete mode 100644 legacy/src/main/res/drawable/ic_arrow_forward.xml delete mode 100644 legacy/src/main/res/drawable/ic_author.xml delete mode 100644 legacy/src/main/res/drawable/ic_cancel.xml delete mode 100644 legacy/src/main/res/drawable/ic_categories.xml delete mode 100644 legacy/src/main/res/drawable/ic_changelog.xml delete mode 100644 legacy/src/main/res/drawable/ic_clear.xml delete mode 100644 legacy/src/main/res/drawable/ic_close.xml delete mode 100644 legacy/src/main/res/drawable/ic_delete.xml delete mode 100644 legacy/src/main/res/drawable/ic_donate.xml delete mode 100644 legacy/src/main/res/drawable/ic_download.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_0.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_105.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_120.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_135.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_15.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_150.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_165.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_180.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_195.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_210.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_225.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_240.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_255.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_270.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_285.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_30.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_300.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_315.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_330.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_345.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_360.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_45.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_60.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_75.xml delete mode 100644 legacy/src/main/res/drawable/ic_download_progress_90.xml delete mode 100644 legacy/src/main/res/drawable/ic_email.xml delete mode 100644 legacy/src/main/res/drawable/ic_error.xml delete mode 100644 legacy/src/main/res/drawable/ic_expand_less.xml delete mode 100644 legacy/src/main/res/drawable/ic_expand_more.xml delete mode 100644 legacy/src/main/res/drawable/ic_file_download.xml delete mode 100644 legacy/src/main/res/drawable/ic_info.xml delete mode 100644 legacy/src/main/res/drawable/ic_known_vuln_overlay.xml delete mode 100644 legacy/src/main/res/drawable/ic_last_updated.xml delete mode 100644 legacy/src/main/res/drawable/ic_latest.xml delete mode 100644 legacy/src/main/res/drawable/ic_launcher_monochrome.xml delete mode 100644 legacy/src/main/res/drawable/ic_license.xml delete mode 100644 legacy/src/main/res/drawable/ic_link.xml delete mode 100644 legacy/src/main/res/drawable/ic_lock.xml delete mode 100644 legacy/src/main/res/drawable/ic_more.xml delete mode 100644 legacy/src/main/res/drawable/ic_more_with_background.xml delete mode 100644 legacy/src/main/res/drawable/ic_notification.xml delete mode 100644 legacy/src/main/res/drawable/ic_notification_download.xml delete mode 100644 legacy/src/main/res/drawable/ic_perm_device_info.xml delete mode 100644 legacy/src/main/res/drawable/ic_refresh.xml delete mode 100644 legacy/src/main/res/drawable/ic_repo.xml delete mode 100644 legacy/src/main/res/drawable/ic_search.xml delete mode 100644 legacy/src/main/res/drawable/ic_settings.xml delete mode 100644 legacy/src/main/res/drawable/ic_share.xml delete mode 100644 legacy/src/main/res/drawable/ic_share_with_background.xml delete mode 100644 legacy/src/main/res/drawable/ic_sort.xml delete mode 100644 legacy/src/main/res/drawable/ic_source_code.xml delete mode 100644 legacy/src/main/res/drawable/ic_translation.xml delete mode 100644 legacy/src/main/res/drawable/ic_updates.xml delete mode 100644 legacy/src/main/res/drawable/ic_versions.xml delete mode 100644 legacy/src/main/res/drawable/ic_video.xml delete mode 100644 legacy/src/main/res/drawable/ic_warning.xml delete mode 100644 legacy/src/main/res/drawable/ic_website.xml delete mode 100644 legacy/src/main/res/drawable/no_updates_bg.xml delete mode 100644 legacy/src/main/res/drawable/screenshot_placeholder.xml delete mode 100644 legacy/src/main/res/drawable/seekbar_background.xml delete mode 100644 legacy/src/main/res/drawable/seekbar_thumb.xml delete mode 100644 legacy/src/main/res/drawable/seekbar_tickmark.xml delete mode 100644 legacy/src/main/res/drawable/swap_qr_example.png delete mode 100644 legacy/src/main/res/layout/about.xml delete mode 100644 legacy/src/main/res/layout/activity_app_list.xml delete mode 100644 legacy/src/main/res/layout/activity_install_history.xml delete mode 100644 legacy/src/main/res/layout/activity_main.xml delete mode 100644 legacy/src/main/res/layout/activity_screenshots.xml delete mode 100644 legacy/src/main/res/layout/activity_screenshots_page.xml delete mode 100644 legacy/src/main/res/layout/app_card_horizontal.xml delete mode 100644 legacy/src/main/res/layout/app_card_large.xml delete mode 100644 legacy/src/main/res/layout/app_card_list_item.xml delete mode 100644 legacy/src/main/res/layout/app_card_normal.xml delete mode 100644 legacy/src/main/res/layout/app_details2.xml delete mode 100644 legacy/src/main/res/layout/app_details2_donate.xml delete mode 100644 legacy/src/main/res/layout/app_details2_header.xml delete mode 100644 legacy/src/main/res/layout/app_details2_link_item.xml delete mode 100644 legacy/src/main/res/layout/app_details2_links.xml delete mode 100644 legacy/src/main/res/layout/app_details2_loading.xml delete mode 100644 legacy/src/main/res/layout/app_details2_more_apps.xml delete mode 100644 legacy/src/main/res/layout/app_details2_screenshot_item.xml delete mode 100644 legacy/src/main/res/layout/app_details2_screenshots.xml delete mode 100644 legacy/src/main/res/layout/app_details2_version_item.xml delete mode 100644 legacy/src/main/res/layout/app_list_item.xml delete mode 100644 legacy/src/main/res/layout/app_permission_item.xml delete mode 100644 legacy/src/main/res/layout/app_permission_item_money.xml delete mode 100644 legacy/src/main/res/layout/app_perms_summary.xml delete mode 100644 legacy/src/main/res/layout/app_status_new.xml delete mode 100644 legacy/src/main/res/layout/app_status_suggested.xml delete mode 100644 legacy/src/main/res/layout/category_item.xml delete mode 100644 legacy/src/main/res/layout/donate_bitcoin.xml delete mode 100644 legacy/src/main/res/layout/donate_generic.xml delete mode 100644 legacy/src/main/res/layout/donate_liberapay.xml delete mode 100644 legacy/src/main/res/layout/donate_litecoin.xml delete mode 100644 legacy/src/main/res/layout/donate_opencollective.xml delete mode 100644 legacy/src/main/res/layout/fab_search.xml delete mode 100644 legacy/src/main/res/layout/install_app_details.xml delete mode 100644 legacy/src/main/res/layout/install_confirm.xml delete mode 100644 legacy/src/main/res/layout/install_start.xml delete mode 100644 legacy/src/main/res/layout/installed_app_list_item.xml delete mode 100644 legacy/src/main/res/layout/installed_apps_layout.xml delete mode 100644 legacy/src/main/res/layout/known_vuln_app_list_item.xml delete mode 100644 legacy/src/main/res/layout/listitem_antifeaturelisting.xml delete mode 100644 legacy/src/main/res/layout/login.xml delete mode 100644 legacy/src/main/res/layout/main_tab_categories.xml delete mode 100644 legacy/src/main/res/layout/main_tab_latest.xml delete mode 100644 legacy/src/main/res/layout/main_tab_settings.xml delete mode 100644 legacy/src/main/res/layout/main_tab_updates.xml delete mode 100644 legacy/src/main/res/layout/permissions_list.xml delete mode 100644 legacy/src/main/res/layout/preference_edit_text.xml delete mode 100644 legacy/src/main/res/layout/preference_seekbar.xml delete mode 100644 legacy/src/main/res/layout/preference_switch.xml delete mode 100644 legacy/src/main/res/layout/repo_item.xml delete mode 100644 legacy/src/main/res/layout/repo_list_activity.xml delete mode 100644 legacy/src/main/res/layout/updateable_app_list_item.xml delete mode 100644 legacy/src/main/res/layout/updateable_app_status_item.xml delete mode 100644 legacy/src/main/res/layout/updates_header.xml delete mode 100644 legacy/src/main/res/menu/details2.xml delete mode 100644 legacy/src/main/res/menu/install_history.xml delete mode 100644 legacy/src/main/res/menu/installed_apps.xml delete mode 100644 legacy/src/main/res/menu/main_activity_screens.xml delete mode 100644 legacy/src/main/res/menu/repo_list.xml delete mode 120000 legacy/src/main/res/values-af delete mode 120000 legacy/src/main/res/values-ar delete mode 120000 legacy/src/main/res/values-ast delete mode 120000 legacy/src/main/res/values-az delete mode 120000 legacy/src/main/res/values-b+hi+Latn delete mode 120000 legacy/src/main/res/values-be delete mode 120000 legacy/src/main/res/values-ber delete mode 120000 legacy/src/main/res/values-bg delete mode 120000 legacy/src/main/res/values-bn delete mode 120000 legacy/src/main/res/values-bn-rBD delete mode 120000 legacy/src/main/res/values-bo delete mode 120000 legacy/src/main/res/values-br delete mode 120000 legacy/src/main/res/values-ca delete mode 120000 legacy/src/main/res/values-ckb delete mode 120000 legacy/src/main/res/values-cs delete mode 120000 legacy/src/main/res/values-cy delete mode 120000 legacy/src/main/res/values-da delete mode 120000 legacy/src/main/res/values-de delete mode 120000 legacy/src/main/res/values-el delete mode 120000 legacy/src/main/res/values-en-rGB delete mode 120000 legacy/src/main/res/values-eo delete mode 120000 legacy/src/main/res/values-es delete mode 120000 legacy/src/main/res/values-es-rAR delete mode 120000 legacy/src/main/res/values-es-rMX delete mode 120000 legacy/src/main/res/values-et delete mode 120000 legacy/src/main/res/values-eu delete mode 120000 legacy/src/main/res/values-fa delete mode 120000 legacy/src/main/res/values-fi delete mode 120000 legacy/src/main/res/values-fil delete mode 120000 legacy/src/main/res/values-fr delete mode 120000 legacy/src/main/res/values-fy delete mode 120000 legacy/src/main/res/values-ga delete mode 120000 legacy/src/main/res/values-gd delete mode 120000 legacy/src/main/res/values-gl delete mode 120000 legacy/src/main/res/values-gu delete mode 120000 legacy/src/main/res/values-he delete mode 120000 legacy/src/main/res/values-hi delete mode 120000 legacy/src/main/res/values-hr delete mode 120000 legacy/src/main/res/values-hu delete mode 120000 legacy/src/main/res/values-hy delete mode 120000 legacy/src/main/res/values-id delete mode 120000 legacy/src/main/res/values-in delete mode 120000 legacy/src/main/res/values-is delete mode 120000 legacy/src/main/res/values-it delete mode 120000 legacy/src/main/res/values-iw delete mode 120000 legacy/src/main/res/values-ja delete mode 120000 legacy/src/main/res/values-ka delete mode 120000 legacy/src/main/res/values-kab delete mode 120000 legacy/src/main/res/values-kk delete mode 120000 legacy/src/main/res/values-kmr delete mode 120000 legacy/src/main/res/values-kn delete mode 120000 legacy/src/main/res/values-ko delete mode 120000 legacy/src/main/res/values-lb delete mode 120000 legacy/src/main/res/values-lt delete mode 120000 legacy/src/main/res/values-lv delete mode 120000 legacy/src/main/res/values-mk delete mode 120000 legacy/src/main/res/values-ml delete mode 120000 legacy/src/main/res/values-mn delete mode 120000 legacy/src/main/res/values-mr delete mode 120000 legacy/src/main/res/values-my delete mode 120000 legacy/src/main/res/values-nah delete mode 120000 legacy/src/main/res/values-nb delete mode 120000 legacy/src/main/res/values-ne delete mode 100644 legacy/src/main/res/values-night/colors.xml delete mode 100644 legacy/src/main/res/values-night/themes.xml delete mode 120000 legacy/src/main/res/values-nl delete mode 120000 legacy/src/main/res/values-nl-rBE delete mode 120000 legacy/src/main/res/values-nn delete mode 120000 legacy/src/main/res/values-oc delete mode 120000 legacy/src/main/res/values-or delete mode 120000 legacy/src/main/res/values-pa delete mode 120000 legacy/src/main/res/values-pa-rPK delete mode 120000 legacy/src/main/res/values-pl delete mode 120000 legacy/src/main/res/values-ps delete mode 120000 legacy/src/main/res/values-pt delete mode 120000 legacy/src/main/res/values-pt-rBR delete mode 120000 legacy/src/main/res/values-pt-rPT delete mode 120000 legacy/src/main/res/values-ro delete mode 120000 legacy/src/main/res/values-ru delete mode 120000 legacy/src/main/res/values-sc delete mode 120000 legacy/src/main/res/values-si delete mode 120000 legacy/src/main/res/values-sk delete mode 120000 legacy/src/main/res/values-sl delete mode 120000 legacy/src/main/res/values-sn delete mode 120000 legacy/src/main/res/values-so delete mode 120000 legacy/src/main/res/values-sq delete mode 120000 legacy/src/main/res/values-sr delete mode 120000 legacy/src/main/res/values-sv delete mode 120000 legacy/src/main/res/values-sw delete mode 100644 legacy/src/main/res/values-sw360dp/values-preference.xml delete mode 100644 legacy/src/main/res/values-sw720dp/dimens.xml delete mode 120000 legacy/src/main/res/values-ta delete mode 120000 legacy/src/main/res/values-te delete mode 120000 legacy/src/main/res/values-th delete mode 120000 legacy/src/main/res/values-tok delete mode 120000 legacy/src/main/res/values-tr delete mode 120000 legacy/src/main/res/values-tt delete mode 120000 legacy/src/main/res/values-tzm delete mode 120000 legacy/src/main/res/values-ug delete mode 120000 legacy/src/main/res/values-uk delete mode 120000 legacy/src/main/res/values-ur delete mode 120000 legacy/src/main/res/values-uz delete mode 120000 legacy/src/main/res/values-vi delete mode 120000 legacy/src/main/res/values-yue delete mode 120000 legacy/src/main/res/values-zh-rCN delete mode 120000 legacy/src/main/res/values-zh-rHK delete mode 120000 legacy/src/main/res/values-zh-rTW delete mode 100644 legacy/src/main/res/values/array.xml delete mode 100644 legacy/src/main/res/values/attrs.xml delete mode 100644 legacy/src/main/res/values/colors.xml delete mode 100644 legacy/src/main/res/values/default_repos.xml delete mode 100644 legacy/src/main/res/values/dimens.xml delete mode 100644 legacy/src/main/res/values/donottranslate.xml delete mode 100644 legacy/src/main/res/values/ids.xml delete mode 100644 legacy/src/main/res/values/shape.xml delete mode 120000 legacy/src/main/res/values/strings.xml delete mode 100644 legacy/src/main/res/values/styles.xml delete mode 100644 legacy/src/main/res/values/styles_detail.xml delete mode 100644 legacy/src/main/res/values/theme_overlays.xml delete mode 100644 legacy/src/main/res/values/themes.xml delete mode 100644 legacy/src/main/res/xml/apk_file_provider.xml delete mode 100644 legacy/src/main/res/xml/installer_file_provider.xml delete mode 100644 legacy/src/main/res/xml/locales_config.xml delete mode 100644 legacy/src/main/res/xml/network_security_config.xml delete mode 100644 legacy/src/main/res/xml/preferences.xml delete mode 100644 legacy/src/main/res/xml/searchable.xml delete mode 100755 legacy/src/main/scripts/update-binary delete mode 100644 legacy/src/test/assets/urzip.apk delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/AppUpdateManagerTest.kt delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/PreferencesTest.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/RepoUpdateManagerTest.kt delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/RepoUrlsTest.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/TestFDroidApp.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/TestUtils.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/UtilsTest.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/data/ApkTest.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/data/DBHelperTest.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/data/SanitizedFileTest.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/data/SuggestedVersionTest.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/installer/ApkCacheTest.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/installer/FileInstallerTest.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/installer/InstallerFactoryTest.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/views/AppDetailsAdapterTest.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/views/CallToActionBannerTest.kt delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/views/main/MainActivityTest.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/work/CleanCacheWorkerTest.java delete mode 100644 legacy/src/test/java/org/fdroid/fdroid/work/FDroidMetricsWorkerTest.java delete mode 100644 legacy/src/test/resources/Norway_bouvet_europe_2.obf.zip delete mode 100644 legacy/src/test/resources/additional_repos.xml delete mode 100644 legacy/src/test/resources/all_fields_index-v1.json delete mode 100644 legacy/src/test/resources/install_history_all delete mode 100644 legacy/src/test/resources/org.fdroid.fdroid.privileged.ota_2110.zip delete mode 100644 legacy/src/test/resources/ugly_additional_repos.xml delete mode 100644 legacy/src/testFull/java/kellinwood/security/zipsigner/ZipSignerTest.java delete mode 100644 legacy/src/testFull/java/org/fdroid/fdroid/nearby/LocalHTTPDManagerTest.java delete mode 100644 legacy/src/testFull/java/org/fdroid/fdroid/nearby/LocalHTTPDTest.java delete mode 100644 legacy/src/testFull/java/org/fdroid/fdroid/nearby/LocalRepoKeyStoreTest.java delete mode 100644 legacy/src/testFull/java/org/fdroid/fdroid/nearby/WifiStateChangeServiceTest.java delete mode 100644 legacy/src/testFull/resources/icon.png delete mode 100644 legacy/src/testFull/resources/index.html delete mode 100644 legacy/src/testFull/resources/test.html delete mode 100644 legacy/src/testFull/resources/urzip.apk delete mode 100755 legacy/tools/download-material-icon.sh delete mode 100755 legacy/tools/svg-to-drawables.sh delete mode 100755 legacy/tools/test-search-intents.sh delete mode 100755 tools/validate-fdroid-metrics.json.py diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 39adaf66f..cb4be776f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -22,7 +22,7 @@ android { versionCode = 2000010 versionName = "2.0-alpha10" - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + testInstrumentationRunner = "org.fdroid.HiltTestRunner" } // filter out incomplete translations from stable releases (which end in 50+) @@ -177,6 +177,9 @@ dependencies { androidTestImplementation(libs.androidx.test.uiautomator) androidTestImplementation(libs.coil.test) androidTestImplementation(libs.coil.network.okhttp) + androidTestImplementation(libs.turbine) + androidTestImplementation(libs.hilt.android.testing) + kspAndroidTest(libs.hilt.android.compiler) screenshotTestImplementation(libs.screenshot.validation.api) } diff --git a/app/src/androidTest/java/org/fdroid/HiltTestRunner.kt b/app/src/androidTest/java/org/fdroid/HiltTestRunner.kt new file mode 100644 index 000000000..753c9085f --- /dev/null +++ b/app/src/androidTest/java/org/fdroid/HiltTestRunner.kt @@ -0,0 +1,12 @@ +package org.fdroid + +import android.app.Application +import android.content.Context +import androidx.test.runner.AndroidJUnitRunner +import dagger.hilt.android.testing.HiltTestApplication + +class HiltTestRunner : AndroidJUnitRunner() { + override fun newApplication(cl: ClassLoader?, name: String?, context: Context?): Application { + return super.newApplication(cl, HiltTestApplication::class.java.name, context) + } +} diff --git a/app/src/androidTest/java/org/fdroid/repo/RepoManagerAddAllIntegrationTest.kt b/app/src/androidTest/java/org/fdroid/repo/RepoManagerAddAllIntegrationTest.kt new file mode 100644 index 000000000..f77f40df3 --- /dev/null +++ b/app/src/androidTest/java/org/fdroid/repo/RepoManagerAddAllIntegrationTest.kt @@ -0,0 +1,170 @@ +package org.fdroid.repo + +import androidx.test.ext.junit.runners.AndroidJUnit4 +import app.cash.turbine.TurbineTestContext +import app.cash.turbine.test +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest +import javax.inject.Inject +import kotlin.test.assertIs +import kotlin.time.Duration.Companion.seconds +import kotlinx.coroutines.runBlocking +import org.fdroid.index.RepoManager +import org.junit.Assume.assumeTrue +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.rules.TemporaryFolder +import org.junit.runner.RunWith +import org.slf4j.LoggerFactory + +@HiltAndroidTest +@RunWith(AndroidJUnit4::class) +internal class RepoManagerAddAllIntegrationTest { + + @get:Rule var hiltRule = HiltAndroidRule(this) + + @get:Rule var folder: TemporaryFolder = TemporaryFolder() + + private val repos = + listOf( + "https://raw.githubusercontent.com/2br-2b/Fdroid-repo/master/fdroid/repo", + "https://anonymousmessenger.ly/fdroid/repo", + "https://fdroid.beocode.eu/fdroid/repo", + "https://mobileapp.bitwarden.com/fdroid/repo", + "https://briarproject.org/fdroid/repo", + "https://fdroid.bromite.org/fdroid/repo", + "https://fdroid.gitlab.io/ccc/fdroid/repo", + "https://www.collaboraoffice.com/downloads/fdroid/repo", + "https://bubu1.eu/cctg/fdroid/repo", + "https://static.cryptomator.org/android/fdroid/repo", + "https://lucaapp.gitlab.io/fdroid-repository/fdroid/repo", + "https://divestos.org/apks/official/fdroid/repo", + "https://divestos.org/apks/unofficial/fdroid/repo", + "https://raw.githubusercontent.com/efreak/auto-daily-fdroid/main/fdroid/repo", + "https://bubu1.eu/fdroidclassic/fdroid/repo", + "https://f5a.typed.icu/fdroid/repo", + "https://fdroid.fedilab.app/repo", + "https://raw.githubusercontent.com/Tobi823/ffupdaterrepo/master/fdroid/repo", + "https://rfc2822.gitlab.io/fdroid-firefox/fdroid/repo", + "https://raw.githubusercontent.com/Five-Prayers/fdroid-repo-stable/main/fdroid/repo", + "https://codeberg.org/florian-obernberger/fdroid-repo/raw/branch/main/repo", + "https://fdroid.frostnerd.com/fdroid/repo", + "https://pili.qi0.de/fdroid/repo", + "https://gitjournal.io/fdroid/repo", + "https://guardianproject.info/fdroid/repo", + "https://s3.amazonaws.com/guardianproject/fdroid/repo", + "https://guardianproject.info/fdroid/repo", + "https://f-droid.i2p.io/repo", + "https://iitc.app/fdroid/repo", + "https://jhass.github.io/insporation/fdroid/repo", + "https://raw.githubusercontent.com/iodeOS/fdroid/master/fdroid/repo", + "https://apt.izzysoft.de/fdroid/repo", + "https://android.izzysoft.de/repo", + "https://jak-linux.org/fdroid/repo", + "https://julianfairfax.gitlab.io/fdroid-repo/fdroid/repo", + "https://kaffeemitkoffein.de/fdroid/repo", + "https://store.nethunter.com/repo", + "https://cdn.kde.org/android/stable-releases/fdroid/repo", + "https://repo.kuschku.de/fdroid/repo", + "https://fdroid.libretro.com/repo", + "https://fdroid.ltheinrich.de/fdroid/repo", + "https://ltt.rs/fdroid/repo", + "https://pili.qi0.de/fdroid/repo", + "https://fdroid.metatransapps.com/fdroid/repo", + "https://microg.org/fdroid/repo", + "https://fdroid.mm20.de/repo", + "https://repo.mobilsicher.de/fdroid/repo", + "https://molly.im/fdroid/repo", + "https://molly.im/fdroid/foss/fdroid/repo", + "https://f-droid.monerujo.io/fdroid/repo", + "https://releases.nailyk.fr/repo", + "https://nanolx.org/fdroid/repo", + "https://www.nanolx.org/fdroid/repo", + "https://repo.netsyms.com/fdroid/repo", + "https://archive.newpipe.net/fdroid/repo", + "https://repo.nononsenseapps.com/fdroid/repo", + "https://fdroid.novy.software/repo", + "https://raw.githubusercontent.com/nucleus-ffm/Nucleus-F-Droid-Repo/master/fdroid/repo", + "https://obfusk.ch/fdroid/repo", + "https://ouchadam.github.io/fdroid-repository/repo", + "https://fdroid.partidopirata.com.ar/fdroid/repo", + "https://thecapslock.gitlab.io/fdroid-patched-apps/fdroid/repo", + "https://fdroid.i2pd.xyz/fdroid/repo", + "https://fdroid.rami.io/fdroid/repo", + "https://thedoc.eu.org/fdroid/repo", + "https://repo.samourai.io/fdroid/repo", + "https://fdroid.a3.pm/seabear/repo", + "https://raw.githubusercontent.com/jackbonadies/seekerandroid/fdroid/fdroid/repo", + "https://fdroid.getsession.org/fdroid/repo", + "https://raw.githubusercontent.com/simlar/simlar-fdroid-repo/master/fdroid/repo", + "https://s2.spiritcroc.de/fdroid/repo", + "https://haagch.frickel.club/files/fdroid/repo", + "https://submarine.strangled.net/fdroid/repo", + "https://service.tagesschau.de/app/repo", + "https://fdroid-repo.calyxinstitute.org/fdroid/repo", + "https://releases.threema.ch/fdroid/repo", + "https://raw.githubusercontent.com/chrisgch/tca/master/fdroid/repo", + "https://fdroid.twinhelix.com/fdroid/repo", + "https://secfirst.org/fdroid/repo", + "https://fdroid.videlibri.de/repo", + "https://guardianproject-wind.s3.amazonaws.com/fdroid/repo", + "https://raw.githubusercontent.com/xarantolus/fdroid/main/fdroid/repo", + "https://zimbelstern.eu/fdroid/repo", + ) + + private val log = LoggerFactory.getLogger(this::class.java.simpleName) + + @Inject lateinit var repoManager: RepoManager + + @Before + fun optIn() { + // Careful! This will add lots of repos to your live DB + assumeTrue(false) // don't run integration tests with real repos all the time + + // inject repo manager before running test + hiltRule.inject() + } + + @Test + fun addAllTheThings() = runBlocking { + repos.forEach { addRepo(it) } + } + + private suspend fun addRepo(url: String) { + log.info("Fetching $url") + repoManager.fetchRepositoryPreview(url = url, proxy = null) + repoManager.addRepoState.test(timeout = 15.seconds) { + val fetchState = awaitFinalFetchState() + if (fetchState is Fetching && fetchState.fetchResult != null) { + repoManager.addFetchedRepository() + val item = awaitItem() + if (item is Adding) { + // await final state + assertIs(awaitItem()) + } else { + // was already final state + assertIs(item) + } + log.info(" Added") + } else if (fetchState is AddRepoError) { + log.error(" $fetchState $url") + } + repoManager.abortAddingRepository() + assertIs(awaitItem()) + cancelAndIgnoreRemainingEvents() + } + log.info("End $url") + } + + private suspend fun TurbineTestContext.awaitFinalFetchState(): AddRepoState { + var item = awaitItem() + log.info(" $item") + while (item is None || (item is Fetching && !item.done)) { + item = awaitItem() + log.info(" $item") + } + log.info(" final: $item") + return item + } +} diff --git a/app/src/androidTest/java/org/fdroid/ui/LocalizationTest.kt b/app/src/androidTest/java/org/fdroid/ui/LocalizationTest.kt new file mode 100644 index 000000000..dd2e78de4 --- /dev/null +++ b/app/src/androidTest/java/org/fdroid/ui/LocalizationTest.kt @@ -0,0 +1,231 @@ +package org.fdroid.ui + +import android.content.res.Resources +import android.text.TextUtils +import android.util.DisplayMetrics +import android.util.Log +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.platform.app.InstrumentationRegistry +import java.util.IllegalFormatException +import java.util.Locale +import java.util.regex.Pattern +import org.fdroid.R +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith + +/** + * Runs through all the translated strings and tests them with the same format values that the + * source strings expect. This is to ensure that the formats in the translations are correct in + * number and in type (e.g. `s` or `s`). It reads the source formats and then builds `formats` to + * represent the position and type of the formats. Then it runs through all the translations with + * formats of the correct number and type. + */ +@Suppress("DEPRECATION") +@RunWith(AndroidJUnit4::class) +class LocalizationTest { + private val androidFormat: Pattern = Pattern.compile("(%[a-z0-9]\\$?[a-z]?)") + private val locales: Array = Locale.getAvailableLocales() + private val localeNames = HashSet(locales.size) + + private val context = InstrumentationRegistry.getInstrumentation().targetContext + private var assets = context.assets + private var config = + context.resources.configuration.apply { + locale = Locale.ENGLISH + } + private var resources = Resources(assets, DisplayMetrics(), config) + + @Before + fun setUp() { + for (locale in LOCALES_TO_TEST) { + localeNames.add(locale.toString()) + } + for (locale in locales) { + localeNames.add(locale.toString()) + } + } + + @Test + @Throws(IllegalAccessException::class) + fun testLoadAllPlural() { + val fields = R.plurals::class.java.declaredFields + + val haveFormats = HashMap() + for (field in fields) { + // Log.i(TAG, field.getName()); + val resId = field.getInt(Int::class.javaPrimitiveType) + val string = resources.getQuantityText(resId, 4) + // Log.i(TAG, field.getName() + ": '" + string + "'"); + val matcher = androidFormat.matcher(string) + var matches = 0 + val formats = CharArray(5) + while (matcher.find()) { + val match = matcher.group(0) + val formatType = match!!.get(match.length - 1) + when (match.length) { + 2 -> { + formats[matches] = formatType + matches++ + } + 4 -> formats[match.substring(1, 2).toInt() - 1] = formatType + 5 -> formats[match.substring(1, 3).toInt() - 1] = formatType + else -> throw IllegalStateException(field.getName() + " has bad format: " + match) + } + } + haveFormats[field.getName()] = String(formats).trim { it <= ' ' } + } + + for (locale in locales) { + config.locale = locale + // Resources() requires DisplayMetrics, but they are only needed for drawables + resources = Resources(assets, DisplayMetrics(), config) + for (field in fields) { + var formats: String? = null + try { + val resId = field.getInt(Int::class.javaPrimitiveType) + for (quantity in 0..566) { + resources.getQuantityString(resId, quantity) + } + + formats = haveFormats[field.getName()] + when (formats) { + "d" -> resources.getQuantityString(resId, 1, 1) + "s" -> resources.getQuantityString(resId, 1, "ONE") + "ds" -> resources.getQuantityString(resId, 2, 1, "TWO") + else -> + check(TextUtils.isEmpty(formats)) { "Pattern not included in tests: " + formats } + } + } catch (e: IllegalFormatException) { + Log.i(TAG, locale.toString() + " " + field.getName()) + throw IllegalArgumentException( + ("Bad '" + formats + "' format in " + locale + " " + field.getName() + ": " + e.message) + ) + } catch (e: Resources.NotFoundException) { + Log.i(TAG, locale.toString() + " " + field.getName()) + throw IllegalArgumentException( + ("Bad '" + formats + "' format in " + locale + " " + field.getName() + ": " + e.message) + ) + } + } + } + } + + @Test + @Throws(IllegalAccessException::class) + fun testLoadAllStrings() { + val fields = R.string::class.java.declaredFields + + val haveFormats = HashMap() + for (field in fields) { + val string = resources.getString(field.getInt(Int::class.javaPrimitiveType)) + val matcher = androidFormat.matcher(string) + var matches = 0 + val formats = CharArray(5) + while (matcher.find()) { + val match = matcher.group(0) + val formatType = match!!.get(match.length - 1) + when (match.length) { + 2 -> { + formats[matches] = formatType + matches++ + } + 4 -> formats[match.substring(1, 2).toInt() - 1] = formatType + 5 -> formats[match.substring(1, 3).toInt() - 1] = formatType + else -> throw IllegalStateException(field.getName() + " has bad format: " + match) + } + } + haveFormats[field.getName()] = String(formats).trim { it <= ' ' } + } + + for (locale in locales) { + config!!.locale = locale + // Resources() requires DisplayMetrics, but they are only needed for drawables + resources = Resources(assets, DisplayMetrics(), config) + for (field in fields) { + val resId = field.getInt(Int::class.javaPrimitiveType) + resources.getString(resId) + + val formats = haveFormats.get(field.getName()) + try { + when (formats) { + "d" -> resources.getString(resId, 1) + "dd" -> resources.getString(resId, 1, 2) + "ds" -> resources.getString(resId, 1, "TWO") + "dds" -> resources.getString(resId, 1, 2, "THREE") + "sds" -> resources.getString(resId, "ONE", 2, "THREE") + "s" -> resources.getString(resId, "ONE") + "ss" -> resources.getString(resId, "ONE", "TWO") + "sss" -> resources.getString(resId, "ONE", "TWO", "THREE") + "ssss" -> resources.getString(resId, "ONE", "TWO", "THREE", "FOUR") + "ssd" -> resources.getString(resId, "ONE", "TWO", 3) + "sssd" -> resources.getString(resId, "ONE", "TWO", "THREE", 4) + else -> + check(TextUtils.isEmpty(formats)) { "Pattern not included in tests: " + formats } + } + } catch (e: Exception) { + Log.i(TAG, locale.toString() + " " + field.getName()) + throw IllegalArgumentException( + ("Bad format in '" + locale + "' '" + field.getName() + "': " + e.message) + ) + } + } + } + } + + companion object { + const val TAG: String = "LocalizationTest" + + val LOCALES_TO_TEST: Array = + arrayOf( + Locale.ENGLISH, + Locale.FRENCH, + Locale.GERMAN, + Locale.ITALIAN, + Locale.JAPANESE, + Locale.KOREAN, + Locale.SIMPLIFIED_CHINESE, + Locale.TRADITIONAL_CHINESE, + Locale("zh", "HK"), + Locale("bo"), + Locale("af"), + Locale("ar"), + Locale("be"), + Locale("bg"), + Locale("ca"), + Locale("cs"), + Locale("da"), + Locale("el"), + Locale("es"), + Locale("eo"), + Locale("et"), + Locale("eu"), + Locale("fa"), + Locale("fi"), + Locale("he"), + Locale("hi"), + Locale("hu"), + Locale("hy"), + Locale("id"), + Locale("is"), + Locale("it"), + Locale("ml"), + Locale("my"), + Locale("nb"), + Locale("nl"), + Locale("pl"), + Locale("pt"), + Locale("ro"), + Locale("ru"), + Locale("sc"), + Locale("sk"), + Locale("sn"), + Locale("sr"), + Locale("sv"), + Locale("th"), + Locale("tr"), + Locale("uk"), + Locale("vi"), + ) + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 31ea9fb26..6d6127967 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -35,7 +35,9 @@ android:name="org.fdroid.App" android:allowBackup="true" android:banner="@mipmap/ic_banner" + android:dataExtractionRules="@xml/backup_extraction_rules" android:enableOnBackInvokedCallback="true" + android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:localeConfig="@xml/locales_config" diff --git a/legacy/src/main/res/xml/backup_extraction_rules.xml b/app/src/main/res/xml/backup_extraction_rules.xml similarity index 100% rename from legacy/src/main/res/xml/backup_extraction_rules.xml rename to app/src/main/res/xml/backup_extraction_rules.xml diff --git a/legacy/src/main/res/xml/backup_rules.xml b/app/src/main/res/xml/backup_rules.xml similarity index 100% rename from legacy/src/main/res/xml/backup_rules.xml rename to app/src/main/res/xml/backup_rules.xml diff --git a/config/checkstyle/checkstyle.gradle b/config/checkstyle/checkstyle.gradle deleted file mode 100644 index 22e93b2e2..000000000 --- a/config/checkstyle/checkstyle.gradle +++ /dev/null @@ -1,13 +0,0 @@ -apply plugin: 'checkstyle' - -checkstyle { - toolVersion = '10.12.0' -} - -task checkstyle(type: Checkstyle) { - configFile file("${project.rootDir}/config/checkstyle/checkstyle.xml") - source 'src/main/java', 'src/test/java', 'src/androidTest/java' - include '**/*.java' - - classpath = files() -} diff --git a/config/checkstyle/checkstyle.xml b/config/checkstyle/checkstyle.xml deleted file mode 100644 index 2cac3af52..000000000 --- a/config/checkstyle/checkstyle.xml +++ /dev/null @@ -1,150 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/config/checkstyle/suppressions.xml b/config/checkstyle/suppressions.xml deleted file mode 100644 index c52362723..000000000 --- a/config/checkstyle/suppressions.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/config/errorprone.gradle b/config/errorprone.gradle deleted file mode 100644 index b2e44c20c..000000000 --- a/config/errorprone.gradle +++ /dev/null @@ -1,24 +0,0 @@ -import net.ltgt.gradle.errorprone.CheckSeverity - -dependencies { - errorprone("com.google.errorprone:error_prone_core:2.24.1") -} - -tasks.withType(JavaCompile).configureEach { - options.errorprone { - disableWarningsInGeneratedCode = true - excludedPaths = '.*/cc/mvdan/accesspoint/.*' - check("CatchFail", CheckSeverity.OFF) - check("ClassCanBeStatic", CheckSeverity.OFF) - check("DateFormatConstant", CheckSeverity.OFF) - check("DefaultCharset", CheckSeverity.OFF) - check("FormatString", CheckSeverity.OFF) - check("JavaLangClash", CheckSeverity.OFF) - check("MissingCasesInEnumSwitch", CheckSeverity.OFF) - check("MissingOverride", CheckSeverity.OFF) - check("NonAtomicVolatileUpdate", CheckSeverity.OFF) - check("OperatorPrecedence", CheckSeverity.OFF) - check("StringSplitter", CheckSeverity.OFF) - check("UnsynchronizedOverridesSynchronized", CheckSeverity.OFF) - } -} diff --git a/config/nightly-repo/repo.xml b/config/nightly-repo/repo.xml deleted file mode 100644 index 71db2bf5a..000000000 --- a/config/nightly-repo/repo.xml +++ /dev/null @@ -1,16 +0,0 @@ - - This repo is nightly builds of F-Droid, it should only be used for testing! - - 13 - - 1 - - ignore - - - 308201e53082014ea0030201020204503d3768300d06092a864886f70d01010505003037310b30090603550406130255533110300e060355040a1307416e64726f6964311630140603550403130d416e64726f6964204465627567301e170d3132303832383231323630305a170d3432303832313231323630305a3037310b30090603550406130255533110300e060355040a1307416e64726f6964311630140603550403130d416e64726f696420446562756730819f300d06092a864886f70d010101050003818d0030818902818100b5ba553eacbc4de5b45af812d9695140dafbc0a8a9c13ac9a7e24b2665371ce5072e5dfef60f705d58fdb2d0e2190264e42d83a6fd80cfd54690e9e3c3735fa8dce684ee99ac879b1b11e1c8a9cbb9dc6b23064b025f9db7dc87d48ee4bc038affd80d854c0ed5d88d93d6e8127e62344727e23886b97f5d10e2265c9c9b5bd10203010001300d06092a864886f70d0101050500038181006dae218bdbff79801b1935448c663319843a7b2eb5f5c8837f010e58da25ba4d23bc6650b53c93f9c42b379299f4659b4cc3c505aa1a7c08c8a1a58fffe78d29df2cf69b27c34a0ab5f44cf7e323e34f8252d9f6e4d67171ce38bab64623910811dae6b12203385b32d962dbd51e8a6b0dcab3fa4d1f4020cee69a5f3c6ddf69 - - - - - diff --git a/config/pmd/pmd.gradle b/config/pmd/pmd.gradle deleted file mode 100644 index b25d4dd24..000000000 --- a/config/pmd/pmd.gradle +++ /dev/null @@ -1,26 +0,0 @@ -apply plugin: 'pmd' - -pmd { - toolVersion = '7.17.0' - consoleOutput = true -} - -task pmdMain(type: Pmd) { - dependsOn 'assembleDebug' - ruleSetFiles = files("${project.rootDir}/config/pmd/rules.xml", "${project.rootDir}/config/pmd/rules-main.xml") - ruleSets = [] // otherwise defaults clash with the list in rules.xml - source 'src/main/java' - include '**/*.java' - exclude '**/vendored/**/*.java' -} - -task pmdTest(type: Pmd) { - dependsOn 'assembleDebug' - ruleSetFiles = files("${project.rootDir}/config/pmd/rules.xml", "${project.rootDir}/config/pmd/rules-test.xml") - ruleSets = [] // otherwise defaults clash with the list in rules.xml - source 'src/test/java', 'src/androidTest/java' - include '**/*.java' - exclude '**/vendored/**/*.java' -} - -task pmd(dependsOn: [pmdMain, pmdTest]) {} diff --git a/config/pmd/rules-main.xml b/config/pmd/rules-main.xml deleted file mode 100644 index 5a66d5b8b..000000000 --- a/config/pmd/rules-main.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - Rules for the project code aka "main". - - - - - diff --git a/config/pmd/rules-test.xml b/config/pmd/rules-test.xml deleted file mode 100644 index 3ae045bec..000000000 --- a/config/pmd/rules-test.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - Rules for the test harness code aka "androidTest" and "test". - - - - - - - - - diff --git a/config/pmd/rules.xml b/config/pmd/rules.xml deleted file mode 100644 index 8cbe65608..000000000 --- a/config/pmd/rules.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - Rules for the whole project - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3988669a9..b530ec483 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -128,6 +128,7 @@ androidx-compose-material3 = { module = "androidx.compose.material3:material3", androidx-compose-material3-adaptive-navigation = { group = "androidx.compose.material3.adaptive", name = "adaptive-navigation", version.ref = "material3AdaptiveNav" } androidx-compose-material3-adaptive-navigation3 = { group = "androidx.compose.material3.adaptive", name = "adaptive-navigation3", version.ref = "material3AdaptiveNav3" } androidx-hilt-navigation-compose = { module = "androidx.hilt:hilt-navigation-compose", version.ref = "hiltNavigationCompose" } +hilt-android-testing = { module = "com.google.dagger:hilt-android-testing", version.ref = "hilt" } androidx-hilt-compiler = { module = "androidx.hilt:hilt-compiler", version.ref = "androidxHiltCompiler" } androidx-ui = { group = "androidx.compose.ui", name = "ui" } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 9367bbcfe..0ba685cc8 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -1848,6 +1848,11 @@ + + + + + @@ -3873,6 +3878,11 @@ + + + + + @@ -4328,6 +4338,11 @@ + + + + + diff --git a/legacy/build.gradle b/legacy/build.gradle deleted file mode 100644 index 8dfb58968..000000000 --- a/legacy/build.gradle +++ /dev/null @@ -1,267 +0,0 @@ -import com.android.build.api.variant.ResValue -import org.jetbrains.kotlin.gradle.dsl.JvmTarget - -plugins { - id 'com.android.application' - id 'org.jetbrains.kotlin.plugin.compose' -} - -// add -Pstrict.release to the gradle command line to enable -if (project.hasProperty('strict.release')) { - println "Running strict release" -} else { - apply from: '../config/checkstyle/checkstyle.gradle' - apply from: '../config/pmd/pmd.gradle' -} - -// yes, this actually needs both quotes https://stackoverflow.com/a/41391841 -def privilegedExtensionApplicationId = '"org.fdroid.fdroid.privileged"' - -android { - namespace "org.fdroid.fdroid" - buildToolsVersion "35.0.0" - - compileSdk libs.versions.compileSdk.get().toInteger() - - defaultConfig { - versionCode 1023051 - versionName "1.23.1" - applicationId "org.fdroid" - - testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' - minSdkVersion 24 - targetSdkVersion 31 - /* - The Android Testing Support Library collects analytics to continuously improve the testing - experience. More specifically, it uploads a hash of the package name of the application - under test for each invocation. If you do not wish to upload this data, you can opt-out by - passing the following argument to the test runner: disableAnalytics "true". - */ - testInstrumentationRunnerArguments disableAnalytics: 'true' - vectorDrawables.useSupportLibrary = true - } - - ext { - APP_NAME = "@string/app_name" - APP_NAME_DEBUG = "@string/app_name_debug" - } - - buildTypes { - // use proguard on debug too since we have unknowingly broken - // release builds before. - configureEach { - manifestPlaceholders = [applicationLabel: APP_NAME] - minifyEnabled true - shrinkResources true - buildConfigField "String", "PRIVILEGED_EXTENSION_PACKAGE_NAME", privilegedExtensionApplicationId - buildConfigField "String", "ACRA_REPORT_EMAIL", '"reports@f-droid.org"' - // String needs both quotes - buildConfigField "String", "ACRA_REPORT_FILE_NAME", '"ACRA-report.stacktrace.json"' - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' - testProguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'src/androidTest/proguard-rules.pro' - } - debug { - getIsDefault().set(true) - minifyEnabled false - shrinkResources false - manifestPlaceholders = [applicationLabel: APP_NAME_DEBUG] - applicationIdSuffix ".debug" - versionNameSuffix "-debug" - // testProguardFiles gets partially ignored for instrumentation tests - proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro', 'src/androidTest/proguard-rules.pro' - println 'buildTypes.debug defaultConfig.versionCode ' + defaultConfig.versionCode - } - } - - flavorDimensions "base" - productFlavors { - full { - getIsDefault().set(true) - dimension "base" - applicationIdSuffix ".fdroid" - } - basic { - dimension "base" - targetSdkVersion 36 - applicationIdSuffix ".basic" - } - } - - androidComponents { - onVariants(selector().all()) { variant -> - variant.resValues.put( - variant.makeResValueKey("string", "applicationId"), - new ResValue(variant.applicationId.get(), null) - ) - } - } - - compileOptions { - compileOptions.encoding = "UTF-8" - sourceCompatibility JavaVersion.VERSION_17 - targetCompatibility JavaVersion.VERSION_17 - } - - kotlin { - compilerOptions { - jvmTarget = JvmTarget.JVM_17 - } - } - - aaptOptions { - cruncherEnabled = false - } - - buildFeatures { - buildConfig true - resValues = true - compose true - aidl true - } - - testOptions { - unitTests { - includeAndroidResources = true - // prevent tests from dying on android.util.Log calls - returnDefaultValues = true - all { - // All the usual Gradle options. - testLogging { - events "skipped", "failed", "standardOut", "standardError" - showStandardStreams = true - } - systemProperty 'robolectric.dependency.repo.url', 'https://repo1.maven.org/maven2' - } - } - } - - sourceSets { - test { - java.srcDirs += "$projectDir/src/testShared/java" - } - - androidTest { - java.srcDirs += "$projectDir/src/testShared/java" - } - } - - lintOptions { - checkReleaseBuilds false - abortOnError true - - htmlReport true - xmlReport false - textReport false - - lintConfig file("lint.xml") - } - - /* Do not include files that are not verified by the JAR signature */ - packagingOptions { - // this can be removed once JAR/APKv1 signatures are no longer supported - exclude 'META-INF/**/*.properties' - exclude 'META-INF/*.version' - exclude 'META-INF/COPYRIGHT' - exclude 'META-INF/INDEX.LIST' - exclude 'META-INF/LICENSE' - exclude 'META-INF/LICENSE.txt' - exclude 'META-INF/LICENSE.md' - exclude 'META-INF/LICENSE-notice.md' - exclude 'META-INF/NOTICE' - exclude 'META-INF/NOTICE.txt' - exclude 'META-INF/gradle/**' - exclude '.readme' - } -} - -dependencies { - implementation project(":libs:download") - implementation project(":libs:index") - implementation project(":libs:database") - implementation libs.androidx.appcompat - implementation libs.androidx.preference.ktx - implementation libs.androidx.gridlayout - implementation libs.androidx.recyclerview - implementation libs.androidx.vectordrawable - implementation libs.androidx.constraintlayout - implementation libs.androidx.swiperefreshlayout - implementation libs.androidx.lifecycle.livedata.ktx - implementation libs.androidx.documentfile - implementation libs.androidx.localbroadcastmanager - implementation libs.androidx.work.runtime - implementation libs.guava // somehow needed for work-runtime to function - - implementation libs.material - - //noinspection UseTomlInstead - implementation('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false } - implementation libs.zxing.core - implementation libs.guardianproject.netcipher - implementation libs.commons.io - implementation libs.commons.net - implementation libs.acra.mail - implementation libs.acra.dialog - implementation libs.adapterdelegates4 - implementation libs.slf4j.api - implementation libs.logback.android - implementation libs.microutils.kotlin.logging - - implementation libs.rxjava - implementation libs.rxandroid - - implementation libs.glide - implementation libs.glide.compose - annotationProcessor libs.glide.compiler - - implementation libs.okhttp - implementation libs.bcprov.jdk15to18 - fullImplementation libs.guardianproject.panic - fullImplementation libs.bcpkix.jdk15to18 - fullImplementation libs.jmdns - fullImplementation libs.nanohttpd - - implementation platform(libs.androidx.compose.bom) - implementation libs.androidx.compose.material3 - implementation libs.androidx.compose.material.icons.extended - implementation libs.androidx.lifecycle.viewmodel.compose - implementation libs.androidx.compose.ui.tooling.preview - implementation libs.androidx.activity.compose - implementation libs.accompanist.drawablepainter - debugImplementation libs.androidx.compose.ui.tooling - - testImplementation libs.androidx.test.core - testImplementation libs.junit - testImplementation libs.robolectric - testImplementation libs.mockk - testImplementation libs.mockito.core - testImplementation libs.turbine - testImplementation libs.hamcrest - testImplementation libs.slf4j.simple - - androidTestImplementation libs.androidx.test.core - androidTestImplementation libs.androidx.core.testing - androidTestImplementation libs.androidx.test.runner - androidTestImplementation libs.androidx.test.rules - androidTestImplementation libs.androidx.test.ext.junit - androidTestImplementation libs.androidx.test.ext.junit.ktx - androidTestImplementation libs.androidx.test.monitor - androidTestImplementation libs.androidx.espresso.core - androidTestImplementation libs.androidx.test.uiautomator - androidTestImplementation libs.androidx.work.testing - androidTestImplementation libs.kotlin.test - androidTestImplementation libs.kotlin.reflect - androidTestImplementation libs.mockk.android - androidTestImplementation libs.turbine -} - -// org.fdroid.fdroid.updater.UpdateServiceTest needs app-full-debug.apk -android.productFlavors.all { flavor -> - if (flavor.name == "full") { - project.afterEvaluate { project -> - def dep = tasks.getByName("assembleFullDebug") - project.tasks.withType(Test) { task -> - task.dependsOn dep - } - } - } -} diff --git a/legacy/lint.xml b/legacy/lint.xml deleted file mode 100644 index f4b6952d4..000000000 --- a/legacy/lint.xml +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/proguard-rules.pro b/legacy/proguard-rules.pro deleted file mode 100644 index 0b41eb204..000000000 --- a/legacy/proguard-rules.pro +++ /dev/null @@ -1,59 +0,0 @@ --dontobfuscate --dontoptimize --keepattributes SourceFile,LineNumberTable,Exceptions --keep class org.fdroid.fdroid.** {*;} --keep class kotlin.LazyKt --dontwarn android.test.** - --dontwarn javax.naming.** --dontnote org.apache.http.** --dontnote android.net.http.** --dontnote **ILicensingService - -# Needed for espresso https://stackoverflow.com/a/21706087 --dontwarn org.xmlpull.v1.** - -# StrongHttpsClient and its support classes are totally unused, so the -# ch.boye.httpclientandroidlib.** classes are also unneeded --dontwarn info.guardianproject.netcipher.client.** - -# These libraries are known to break if minification is enabled on them. They -# use reflection to instantiate classes, for example. If the keep flags are -# removed, proguard will strip classes which are required, which may result in -# crashes. --keep class kellinwood.security.zipsigner.** {*;} --keep class org.bouncycastle.** {*;} - -# This keeps class members used for SystemInstaller IPC. -# Reference: https://gitlab.com/fdroid/fdroidclient/issues/79 --keepclassmembers class * implements android.os.IInterface { - public *; -} - --keepattributes *Annotation*,EnclosingMethod,Signature --keepnames class com.fasterxml.jackson.** { *; } --dontwarn com.fasterxml.jackson.databind.ext.** --keep class org.codehaus.** { *; } --keepclassmembers public final enum org.codehaus.jackson.annotate.JsonAutoDetect$Visibility { -public static final org.codehaus.jackson.annotate.JsonAutoDetect$Visibility *; } --keep public class org.fdroid.** { - *; -} - --dontwarn org.bouncycastle.jsse.** --dontwarn org.conscrypt.** --dontwarn org.openjsse.** - -# This is necessary so that RemoteWorkManager can be initialized (also marked with @Keep) --keep class androidx.work.multiprocess.RemoteWorkManagerClient { - public (...); -} - --keep class org.acra.config.MailSenderConfiguration { - public (...); -} - -# Logging --keep class ch.qos.logback.classic.android.LogcatAppender --keepclassmembers class ch.qos.logback.** { *; } --keepclassmembers class org.slf4j.impl.** { *; } diff --git a/legacy/src/androidTest/AndroidManifest.xml b/legacy/src/androidTest/AndroidManifest.xml deleted file mode 100644 index 8f67de234..000000000 --- a/legacy/src/androidTest/AndroidManifest.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/legacy/src/androidTest/assets/org.fdroid.extendedpermissionstest.apk b/legacy/src/androidTest/assets/org.fdroid.extendedpermissionstest.apk deleted file mode 100644 index 9e2377dc2e4b197ced8f49e1309c78a77aad2fda..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1243361 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

n(_iVAKV8c4^>PAWV+R1ZWdY!9 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

  • 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⁢>)ak1)mB*=nzG$=tRxjMv-D|i@&85<- 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

    NnRh&W2epw78Thw{QU+<#+Q`Bnw7p_Z1$R9e&-Y z{p)J+!gO-GT7Jyg78fq-MXJcsqW#<>TE{rvj4-?t3M}$9(M~`$%Uiw>8XpaaJ}B?) zX!7(|s%!OPpXyQZnu;>SQ>Pjmn-~6+Muo6z)J;_MJoA4l*|d1q>cNq${sBLcY0Ye{ zZWDmy6$bQZSwnN;JoY@jN216Ao92-SM>bewN`8>PUW_Joca8aF``Fx5eRTDlqnOa8 z`MXI8v}RNV?B}WNO|pZtnwxs-_(L}3{sDq*;Y#BuO16~Kl)K$L7dcgsp?qtaJ~ZLMxFn*m8AFNais*@}Fq2p?lk zaYUt^9VH%~nMOw~)pnPm5428}v{zeVKC%Es4doc_UP;PTcB9MEZdCWIz;`Mx|Ja zYRrlcBNc_6)9&sZEuz@S;GS7n=U&1yr1Pc$&k-$uYym|T(#gR&cf~xOU!L&2Txm02 zo@lkkcQ(WrRF+ag&zNMpUjY~K+QtWIgB*5D?mF#S ze%(t|smD(X7o{CsTvaO{Y(sA5kbE2X?@_6s$Ej>zb#hbfsHUz7Hkh1Y@f3toGV0nY zWU>-ylXsDoXZiTO0mgzM(E9;ZIwzBjdFa$lq1JPiJ9rL=2fPuepGOd4u6QHxD!zLu z1QiUETgIDGgNy#YVXo47yMVl7Er@tEON3+9*iLQ!9$G3-;YRt?yGx6lMV#xCQKxT> zV&5a8yRzmK3P7_hkknnB(k^6k(rq%SX+c=KHCf~fJEdo8*2Go=z^H|wUTJJFC%;eV zAM9-Pm*9cB3Yf5V=owG+9N+y{nqnMJlD5*x8$aLkzVZui1BHGthzxs* zKK#8J;C;H8$AO>~=~ATOFGgd~V?#hHFzLqj1`&}b(Ct7?>`v~o_c{iRVZ2)P;I{|E zKAUbUwDKgt+lDd>I7ABCRa{GHY!5lW?$`MO;G}_2PbAnUAc3?7usaPC8^S zqT2hq5ilQ_H0;akeCj)gO)xerkfsX&yN7)K8XQL`w?oxq?Ca+-{J3u9uX$h*!^27A z)5cH^vXCu1PE}0yzHu}Oi&7c$aasualNf(c2N9xaO8bg%Ifha(cyP8Avv8|@<=#wA zeTb6x2<26XvOyounBUQ8>bClkwm1{(ioA8=9jXM8KJD?A159=Htvp%ab`pjjn345u z5+axz-=++-aWPkzi#{o4QJ*kOI)((4QT_T_M$%xhB#kg*BC4`u}&Ap*(#?SfbczhVmc5HaJyXt%$^sUKtq+0yZM{!IkRM{Hf=k9Ght{_m4LPT z-OF{4xDu`+SsB-Mkoz^D42Q@-C0{r7{Z#-<2SXsmZ{?nD%||ZChmP@+yqUv*b`}5O z>ZFqfBL%;ahn34t3Jveq2au-0lrDz!XxyjMQqQjYR6~5c;jX1da3_O z%m0ct*Uc4vD{M>uT5Nh*R}>FlO99u;)9By*V4lg2OO30?m{31a=~LB|aq7%24{s|^ z_4jJ=*W%@NbIT;>`Hab{_P(FTTx==)Ee595X3x0rXy^srtOrAD=31$j!r6PN}Xuy9`h|ZV4Hz{K-j|G zssXyHR*cPbGym&!AcEqrgV}^38EOHA=5E5MJ&IZ9Y#Nb76Wn#E8Xmou*9^b>xSDh5j=|iSOr|77eE@U*Me*8JnhUY+ zq>jbx14TSldP8GpRPqiCvEX`b=gqL$wdh~vZ{_cuOvZy#{KLXc1jNJ(8OGc01mDaD zA4b7FQD_S*7q)~p0eXarf$dlWGPRExtPh}WP)}FAW^hpw`gwZ)TaNhZD{;+3NfKUl z4**OSEpfYOjviOWy!a4NM~s z{#kPI&mLbN-)q%ZOZv%YxUH0LN*b#Om*j&)HQZ~fBXkl^19u3{D}&GOA29g*-!Jni z@AE88MTipfaT|P&nX}*4_;;*sunWXZ)Xaz#rB#Y1(1sZ-jOLI*H(mo*OnEc?SW(f$jcr!(w82HE`T_6e8nbUUyPVDs&)ld%8t>|4Boo6`$p-i; zKau;Nm`rdZKY_OKWEQts8^VRs(-Wz{XdokJkq^e0)6C|nZG;Ypw^B~W1Dh%CrX?P% z+0{+^)xwZjPMRVqz_5$%C%rsDIX_k|fM8sHHUhP~YCsSqSZ|lJuq*$NZOm zN2H0@CvD})Ox80dB%<{CpemKMK-UU}A)kctzSEPkZsHJ~08x>u10kCH8kfS&e8Hoz zm)Beew`zb!!vvN_4O!34zi`tCj71~tMSUk949)>Ftm#MFG}0Y2jDHOVgr;`^xHtH5-w;o5gLTKZ@F#l2O+*tfcI1Q zMG*^lC%QwBy_j8bP4+w)IcXJ9~12sFvMJJy5fyFvrHl2Ei!OiHykg&W5 z$byNOOKQe&NV7pX$CO&|T0hI(A!Dkys&ebXaYB;1O~Uk@O>Fwkf-x#;hl}Xsi~3@Q z#P46}RGGM>%41L7^8Y*jAF+a%?ZTru5Y9oZ;;IKVV8$!C{uH_c{O0;g1;R%|8q?=+p6o*Eoi~$9U@I=&Lz>S#Rb{Ug9{B3-pag#))A)g3i$}bW1@~R>XR{(dc=*%n!@nNBe)s;TSC1dQe*E)~ z2U>L&F2i0uK7RAOh8@3t`0DincJ%TkvD?7r#j;!Vt!NR6w{axi|dcWbl!B5kROPv=BOl>`helE~{GD zbsWRZ3k$V&#HB0Un|vv5d3REcSDx_f@?T9(r6Q-9)Ec%kx9~r@^g#+MaDrDu}nQgbVXY{}UrMkiWI9zF7@4>tj~)92mGa6dg;77SLbH-%Z_ zbAS8&N!@dMeKMMVk_TF88A17>Y0PW5drd}=!uBSkPnDE5W~%db9rxJgmXzz;>&iXe zJPaNGP(LX3qrUD!?1(il&-=+iODgk+Yl^R{%XPQu^Oz*-Dq8H5>i{=E)0Rit?$e`l zv~7~qk&Mp(U^GmYg_9;ALZ0fJ*C$LWdxp;RNi!AkR?KLDja$%{Gd0TZ8iV*mOlP4y zvN_;7l#jMR)GYaMk)UPYNf>@$nht}gMRKN{hyY1^WYo!njG`J(M=~_qG8UH)w*3t< z6yi}QPOuFUnj&(N_#gu}|4cNgTIDoJsfZ$6ce!r`6-Hjt(b!ecLZj1vpa%+X&H zI0C_gP$v)&VSC9Q3-|DxyDAb9DA_bVRXx{R)7>jcVaY=-5yo~_T8Ghn6+B&7&IkG( zPe`n>m4%u`lMe_=_SGa8zBrJ}6m(89E2PGxK!<}NkC5+An3PicXMxp<$+O#l8u-{}48%0Fo&`bu%SFkd-XQgljVX+NTRa(Q`z zwfTGaZmoP%DUvrZ#l-#oBs$i!B6?pLDB&rqLJl zX|LiM7L(Sik>)+=X`%1k%Cg^ph4>)aE?2OPoQ+1;i6P;k>KpmmC$4;%uZxBJiWLu$9vgmUCRmYpMI>P(IYl{CH&HwdKxvs;}7)UPbz~iN>GV)!(BtIV^+T z^^`n!>)D73D;JgE_n|9&YQ zMotN_Z#D|wrI!oBEOVu=zsc0Rqe#rLM}hd(0;<-a#Y#s@JkVB8*%yWRn5^t6Ky}|R zxsTnMHYJvG8?mKCL|ZS;XxFr|TAZDU0I^o+9P_pQ>gL37pw@}9NS9R_<1TlLYM_TL zy)c8a>U#_t{UHC`OK!bn;q`7c6N%y^SZ^x~fR z!i5U#HT4Rf77DqlaqG6B`kh-u*$sv& zD*~Y=Ef}J1D4?^E*KJL(Y{FNk_LlY>8{v)hi+WhHc0h^&MzW9|S4Iw_!F&yd`G>0> ze-r7P7sZ^nu&^D)B>7ml#6K+Y1#6TsR>4FZI<*fKNyDGXN3YhUN+6+a*9iaQTE=s1 z^1|TCqAnZKQg|olA@cHpyEXNSYLGR&*$SXa)>c6E z9YqgUJ8d_`jxWpUXyR>9&78VdR5Kd*2(pN)%hImlpXX^9Hoh1g2W~rcFciV&9P&Ku zx4!%CJ64oMNl2<1roNW}i)J+r+0DZXv3MJFG29J&MU@&3vuF$9T1h~$c+U`hss?G& zVTZg&68%F!FQ*J!5jCZQQokL306d0gY^U6h2ifq!zkX&tlWd;oJZ30~;};Vw?gTJ> zkWN6=A`C2ttsSQ-gA{I}vN)c%E|$xu&Ww94{91f?bfUoM-tu;WRL}i1;jg@pmHRRE zgMN{yMU0)%_4TkNf(|?^zjVa1v~WzUz7yDV-o(9NDBhW6Hx;7pqocH^IOrCY z*n}b%a-LcDQFq<<(0f>(W4p`m*TDyepd?JTgA2*LOojWSt3!SjI#1(FrOd+#BkuC7 zj9Vy}S54WZ0=l1x`z13+x59F`V%8uIvVAhBmyDzSnqpcYZbuPujeUek7{JqFzo*jM$;4&b-~mzRE6qM^`1?x@J99ogN<8Xu>keXJd>mOoO>_niZLf`pD8B{|Mxd2hVZixxAZ$`KRLG6m5F&5t@+$Ih$5QrB2AB;dki6cH-mD zgVVXC1Kb1}te@Cvw<=H=_!CUJ-K`>oh}Cb+S5Od~swKLJ(n}h)s(7$}O($_*`l}lPuXBvIWt09f76IO>U~(LIS3+hnrThQ#HNmFWB5{ zE*jf(YgRUU*O=F|fcy3puA{PJdhaBXEXGHZd@42E4zLEFcX1+`ghHcPFl28MBPbcx zVu|qoUgZyl*^qsUpM`WV8J`i#>mb7ymxt)Hewn219HU}=$a=aTFSZxkHdck5b#MrP zEi#l$yzs5ozV!r&YC{?>w5t_Y5}86Q!UTaP#V-Ue&jiqqknVo~VnCh0u_lHv7l5*h zkvVxcE2%V~T{47N9Io6$@OIrrUosQkkEH}^549VMF*8ajrG|S8aC*{q3>P1}cAMbb z7AhU(G_C2#3pHvQMjYwBlv~>*{jlxALpmpt_-0X$^Niufpj0^Dt)n_^bpxz?Kk(kw zzfF*9*BCra?WpV(;l)GYEzg?7e?)!5wycdSDWp*rP%DOpOxD>kRAeG?(^t67UyH4X z<}>qBjC)3!4v1w8Y=|E8Y6M;K;&^Xi3eoi$AQ1YpGz8$`BzKQq%BeO>shBPEPk^ZF=34JXO>+=7@(=vD zYmeYc&Q74E_yOR^?s|C!}F%>)$gcA79JS==D-l34}zo%8Uze7!_C z4%lXZDO~Rwu{0=9*9svJdW$X?(C!&nUlDhTNz&`s=_=dSYie<;#}!k*$JP=yCek}YY)UED~XTOE-(k8vyx!8${fSR4eaQXfBi;OSx;M{otw%>ikN)MHhU z+X-SjVhabm@()j+c&z$ycO3QLTZw%0`+C_z?@SI^NO0$O2$ftcl2`ugEK{M3ge}Q? z&ia=j2fnAx)CLI%1_GTIrW_kzJsisvcx2O~=380$N(P73VtSenWpy(}(zqg|s*q3p zy0jIWvBWLLHvln{ddDe^gxq!Z=yDFe2cAWi#*IMwIr35v_e9z;YOF`S8hi?q(`F5L zGSm|_K1&herL#IQ!v?RDWYEzkE-j)x#DpZ$?TuoJuWL%v3GQ~OV|2`Y8Sqml7bKaeRwjIDg zU|P_4mTeXW-ouRqKDhEb;(HXvS|q8!n`vJ=@Qi>X>tb$X;D?@gQdjf*Y7j(+m6Jf~ z_I+suG{MyZ&$DtvRiT%2dt{R8LexfDNzYs&?RXh;Wi+BA<{HRy%-?5&6OpI+tJ&TD|2hxiCE$$)QzZZq6I$q3atWrt3U7LW0oHgcaoqp`wNhV6e!Y6G@YVi zZMa@&;u*zb2AWopWRlq^%mqOvO`{%V=Qh0B`rPmoY!tzBVLy;T@vL@NeH4`1NNV-c zjR2$ z!|^9kJ#S5Y!xdwr+D2C~`$DIh?xx;v5v=-)CO2wE#P!goT_(bSAT<@!B&;`z6Q+thH)C?-p>!tLHkq7 zK}1vh#GiOOE%3l;{S@S38;Xcr@UKq&zn-SI!Wq$(*J^8e+NN^sc}7#fF`7@?QrdFH zOk?anE3l|%%Al|BDXD2CQxEC{Cm`KwR%&yWqerr^7!4+Dg3{bzxnaAqSx2-Zl_RwT z+#r28(K?hPY)%-drT`>0qLl?~?GOs#<+dxVjoxch^*_+s%??J~P6ijVJ;|-h@)L52 zfSNPFn0ztFD~tb{^8u7w+D((JP&~x@Qxf_~#vrV3CTN~ZZ65jYO~Tdb2~=x0rl%+P zhqo|1`&kwPoY-$pN23q&c=DeMWsN0B)?=wP$*KIj0a}y7f~u?xkcX@R)WREpM6h(s zE9+BBwA7haa(}E%HF4DX)MTqWQ`dMeI!AS;sWyCNcUn`9t26yh9i{?#FF{kQwYK59 zn(sO1`#YNf;JOjFy&IqJKI;B#gF5y$x^s9-;R+ZP_evTnI zz2D6Cqx#0G?>4=t4LKabVhkRs9?I)8Mg0KyhM%|3vYnh; z)v{ze$6u*#lK8H0JD}+F{#q=z%+I4U`Tpn!26dYkE-LB$aT9%ZCqPu|dc78vtNy?X zRWe`Nz{y4BD{>tk-=5KofIutth*|!p2)r)f&k^}@<^B|rq0712MMDI{&~bS7LJj`b zP>ijh=^67^d^OGF+s{y-S=l!A_v#-pvWFJE!!OO3Z%jYPs!IOR*YqX=cS$8{8%o`2 zbvvmwO*WJIV2+`|oWSy7Z08?C5-?ALhNUTNO7^K`o8uK? z8oKVZnuTtCs!8Zj`)c{8`)bJSyu*|hvk9e3FVJQ(DHGV(vkw^%%>v1X`myY>-4Y!5yd4loMKi zj+gHAfd-b3S&fos#(E4?y}gbS=7Xr;;688+W%Ya`(zib0TY&h|m@??kDTTn<$TAQJ zrISTm=QU&rx!@mUTja7Bu%_2 z;78u{WAM(r4^G8?I4BgCbEXv?SR^7m-bYI5>!9dlX@uu!18X7HrkZmRW|AHWZ0g%U zEvJ6UhpewMW(&RRK(Zfyn84#JdrKNDcq)&7XR4{W-wy|~5AS2BHQ{6yUs^WSNS$6- zJ!fwL*2DkcI9&#ZY9moQ_uDTYqZg_jl$8vmS-a97f8!v%)GCe|@dtr@`12^6BMiw7 z85hh$1Wck&vJuBY&~#--S3-xt3dEEfJ#w5R5W{t3r!q<`I)TvR3Erz^$CUdqIi@Qq zH9_R2p~+T^oZ=}nos!WZEB^r=AWlmqOr4y|AcJ+LmHeDNvgJic#Mm{!qtLad9!3nZbORh*N#4oVe_3A0 zGt2)NlFKsA0YqRrtUqKZ(sy_Rn#r{(QX!3Tp}B?QRg#^p3DVZjgjEA9mBjYmOog^n z-k<`gZ`}q^wgxC&b9bQo#PV7XX-yODG46I~l|a1?+4uRYN3TzzBIYXma&C%AT<~Sk z&d7U7Sv_rU5u@hk?s8l!id)!L|1Ip;*kZqW<%aI%FhpJ;V_oSy_SN*$%8kE&{~7-=T35uKZ#JbuYl)pj>$(`EHEvGGEcCd zExpAswuqWh?I8gh_IM-dTj*(O_jeDKkqA2TiXppY9ok9K9)3HA=Ff z@XVK5Xm$ij%8M?IWYC%B-(zlCIR_a@*Z$57wNex_)&6d_vN8MV@+3QzMqZyGBoB$_ z8uw^jMl!blDl*v?EB#qaW2*zy+DtQ^we(k|06ChTM*N{c_RSfMs%F|(y80VNx&101 z;=HbGR|}5w0lvanNQv8;B^hy7sXhSqDHxN138TciFcdr2W||-OtC_6kXX@_!crrXX ztg6boBxgt*Nd2l7U1BXq zQsb)J0eQ_*bZMe*oJYv;d`VQ4lJH5UUQ6ISDNX64?%h2Z@G!bKxVV2s|xMWACIg4qIa|;Oz2ccV%oZT3Dymx2}GdHdQpitWst@3cAxc7U||kI!JZdDqnP-gg*t|s960j) zx?r2(oEXqPAQk6<7z@eE!!_74&$CjQY znWb@(<(1~Q(x27SOiK?@GtGS?&^e@)qM={M3Wm0DpN(=$A3UW*3Vy0vY}=%373vV2 zdK5GHnwXcmHA~V^ZzYU=Uu6Z;yaZQxxFlP(aqlx;gBSidLdV9h`e>@t!;c5(mq3O3 z)6AB{zY!>_Jxi9(=%Lpp#wqR2C8mgwK1$#59i^)xkd-H3&lR)GJx;k z+k}ykLtdBrc_%)Yb}tX$e|9$81`dsDx( zC3aRuGf+iZp1hZGm^`)>u(UF^sO~ywn|yZA3ur!UNGrWQM-^B1^wZYTx<7RE`0^vF zE*YWxj+etPpmz2BP^MPrp&(RhX^w*5S4$Ivu5|doAuqY^(Rh)HR5UD(C5iF;c~Xo{ z5AKBgA4|&5)JgeMHorK~(J2TK2fmZ|VCBCpJ5w%sY8@6%JxJ?2`SbiBj$8C9vd@K~ zwgUNZ?!CgyXF4fYdiT+ttVlnc`*TxA;jUxrGYi9FhuSP{7hy_f=}*vshdr|m<&pPD zDI2cj92j0{XbYIDVa&U2MC#*dhA=HFQXyIG+qU>q6?J&6E4iJFxpP9BAth){!amb=3BIM7k~U z31F{4I#WqWwr8qP*BA4E5x-6O(Yc~a`pE3%N-NW5$KlxX!p}eSa!6wxEH(NLxEU=z zFd`-_##A?kYv=(>sb`pGN=uj@!-Z+a%i$y~FT-uL2ZTu4=;n%#&gPnE8?8ym6Kfi) zif6CFtI=5*>PYJfJKJwmO&wl_6KU?VoiMUsRMFi*tUbe8Zo|NtQnXoZI(0bI%Yvqs zdltO?@kTX=l@S)3VY9-*EJY73^ot`Ar4-YU_q@Q|Q!wUKfFBPuC(XgPSVh!}V86Az z0auFuyihzF{mXz8HT+>`^x~0Qu)ZzW7oK+ z*=U9xR2477$=Wi(DJbACYug5XQL`^K?zQ#4dx57Ze(hd;D-CVTFNUsCv)?euZ0Z3V zWR0c?OG|0kLYC|Z!oUxrt)v;Zbd?J$9Xm^xAL}#Ii*}4KUB#NVFs{m2V=74-X_EA= z0`Jj+HR?ov;`6cQmi@cS|xrr}d(x@WmD^AzPxryfDeW%OHlekW7>UBurBzG@lV`2%5c#*l?_ zaSQ1Q$|Bqf_2M#@Rw!TS8h>=HBUr8;ZMt2XK=@#eRvvN%dJA$~Rc zBqx5Ful!Di1)Fu%jRczBR>S3)z8&s+UVeT3oNA)1TSIM9&`{l#o z5F6=ZhIth6(`K+O4R=rZW?GD?GTkr3-n6e|LjB61UA7DClvVFNJ@W1{^vP&WADA_> zzwXPgdJeoU^sDNW7BAYb;_Kw}+w*X;C7Y3%?v;GW-C%Ax+z|x6awP_hxCJ znYk)~a6BpB*F5ABzAse))93wC6X0Aj=VCAAP@mltIL^)|D!OfzA@biVF07DivNUgT z^>Ietaz|qD=baL&fceM`o1P6$MBMnJS2r~`@E7*dEvD~(>8Mf~<4eWtJKH7q@T)g( zm%0a{FX~pxReEL1N_eGasgWO!=Q6uEeKk3iXZ~g6TT<4(tZE&59!gty|@`jnQ_a?IrqxL^7+ZEvL-$DP#aQOjpbwNw;%L9t?GN|U?*3d z9(6oPS#K#GgajVRL4oyydgXJ^DWZq%)qvz`*`#vIg!O~EKsit8QM*;Xa;-|u5;pdd z7aD_n(Nw%s9;w%(=HK2fk5X?6+uSdav<%r0bQ5>G3_gY!JZ5|qyBKm{L0kPcHp`cn z3%$7x#fR~+fUo9ud3=56KK_l)eFsNe+gXo)yR&YVFbJx2x9u|7&<+`aOKOm-kKHYG z@^g)E-*|3H(%wXnPuW<-7R$^T5S3k;<=~7fpQAI-u=3TkQcAyuH_v`KKu`YRI~q7R7bI7U0@yVY8$eEMr+|xG-tc0oJnRyvkpVX6j|P4Zgl& zVTF^5Enl0gmUQ}N{e}x|%=!(hkJ2P&c~{C4xdOL$clh&*2*&d2ewL|?6KR8}W{fBK zR)$ahiYTYZJ3}DcwMm8ChRUfWpVDg8(m<$+5yO`COMEAnlP8UN4~)x5f^zcJT{@}{#?1}h%s z;b|&Qx}&s@g2ukYjQ!}`k5pUgNUMoLTY>i{18fpD0~fCH{=~8n8hZ+({r4wxyn01O z!)*RuEz$j)^MXg%-DJsk&UpLbZj68*ip$w4?ds$+Hb57-?^WyUcm4?PdS2J6$p+t! zbYksZGE50t5Wo7)8_N7#;Nvz@dhj1h4{7oxQ^J4xt)p}`yKvZYbHYFU=3#odbv>>m zVc&%k>L^r>MjwLB%37&WSmfbG6Y5WSo@$CWN{>N*qm;>2@bSahIllFgnh4-@#<$qi z--Dv`43(C-sZuzW5#S?(s#bBP)jDMgu6XXZ)niIVHmM(UOAi{D zL3Uzc^@r<99?^$<3~QT>5bL7vRM=YEc0?XBMyOOU(@)GuHd|!XNwzfOa(t#S2ey7T zX0L8*Q@k`qIO^OiF(Wkb-(sTNL`Xg~tk-_WHiTVj@5krY+&?u0v z3)`~X1-BUM12sa=(lqU5%t^Fv0i@B3HInqH4`r&IP24;2f_aSDKlMwGxa5Oh%Mco3 z1%|20jKQi!?y2rdw~Sc4Q`1TqZ_Vh}#RrjC?x)=1i8mM|QvL-Uc zGoGR2EZJw|s-#x%jPc0M?JEss$finGZMp&}<7JvIWG^j9Y&j|?yqQJ|z^~JSB>ain zHf@ITu)*~60`%hnM$Q-mBLo~gu(h{`ll(sqvh#^%%cRtQ= z7`EiWj>kU@WY*d>+O&0^9Ji-%@#!bsjzQlyz&$#@cBJMfVoP$rvMlpNM25ylt&YBN z_!Twxi|2(qac7?U14OU@+H@*@g1Zi#jAW(@4upJUY6aBrj%-aeT1A7U=w^xr(M_Ov z_HdjHO0D5^s-Ak>reXQ){8FcVzI`M_Vis53UJlq(tgCg~rsJ3z&Ta?xVsPeLJFHCA zdWEN5&I`*L&@=YACtc-rTuCOM7`8(Lb&HX{Txj$(x9XA7cII#s+3YjSdKJZ7-tNb*(%um==^#)s& z0>$taHD)++cbb&M+iR|Ey?vO^>yh|w1&BM`x{Bp)PCPg?dKJ>xoB~nT&)2Kg?}TjV z-Ax$zxZT1%h0AD9+9S*;v>HrFk3;{hBv9`LSQS&9!1JMQ2X-_(vLI#}AI2(YavyI; z9my*-P)ECkcv?=wbSHH^FZq#h8{@gG970pJ9VORvP6a@xVMC`Z3~RVT>pE*TI$t{< zcSYF3aqD8CoVzAo{>Lwun~Ahm07U&HjB<5L2jFSYHF=6He<}DpzXY`f9BM@ zvJpDUO|AR4jOAF^HwL-=)U#J`BRpDIG zOL%@y=>c#xNqAp~Ij<^11+cSi1JyQxj~Miy42Gkmk0%Lqx2wGN^u0Q0nF+TdPC*xK zm|(I7e{_Y!p8befPN{|>$bEJvkVsKJ(~(nZIoIX<+*Y+Q0mNPat1mqsjLm_UYKGPg zpf+PC@TLRRITU!%J&3>`>c>al4Yrj|;(pd7N~u$RB~PBbeN=RP*43x%!%R>&GGwS|1UY zB<@BC)z|*uSGZj*#0|XYPPK?V%FAxWvNwoUbY9d-xc%|Ecs<_aUio%*9f!qqI7a+57>;@o8pfT63t=0DotP3w}K+DAaaQta-Rr*r$ep0ezd9b`V zEEBepVxJQ3CRhybXBE7i6na#@M9+|B3lBHhsTHVQYCl2Ez2A@_Q?oE$+T8^506fXg zN|MS4EywgpGhNnt%e5TGjG;_64}xcW;mU~^MH^fmn9H2?==7BRip)<5{aVNQ$N9+! zOMe;YHM145DR-!h;$#*$9>uFz1(hDkN0IYwnN3OJZxmJqTV9+5ZQzAN0;8Rj3+HuH z^l+k;WYn*oQ?4Q9<&c!s%rJ!ed^)~_3pquIz(tXLKZO~3$>jHYEXd}|A7;}^lV|y! z5Y#`xwbx9lubo={{2Ql)58<0|V7ftD#;4m%4zN5d4MG~1O-SFrZ$TIu9tFEDV2y6_9Dn^alJG+u|$;*D%!s0QqPFQbu!?c)I%nVN%l zp7}xtqI=X1V1%|6{C0(P2U^(B52j}A0DF3idK_%)H=T-ovgeS0WdS(8%n|+~0_i~d z^j9?p5J}6&_QNxMk-tYV4VGR|>WxvR%k)cjo2D(&WimWys|)r#n?5%Mo^UUUN#&qT zh0_2@I|}KC65{Wp?V#l@gtOC{**kLZy zfL*8Wd>BQ;5zhy5@6YjwFxj^pdGqR!UjZ2=AGG)}DHcxS6XYHj%&t319J22b!8l35 zc~;pt(HjLFv#zgi5liB=gs0fB5*>idB5-JX1ZFc-O%A;i3y!1Rj$Vh(zD}v(SWv1G z<7nR?M@`il$+!CNKU!>R)m zJ4}gS2MG97rr$Cb%UvUU&Tl)@-_o-aS3fT!z zko=W3AvT^8)4MR9{rTYZN+a>}c6?%F_R|N^0O?(lW!P-mF&>Si;tGNf-7z#-6bCo! zzLgyZ6M$X?@kY%w>X|Ci1NWkc0oqzt5cWxu4a=@2m>=87u<3kUW&dRX`i(Vq+fUHg ztmMw^JqnSI-dbooX(6Rwkn`0W1PJ3J zf``NGIc-(|+C~I?^+OI5$T}GWmM|i5;5UR{SI-!WT{;YhA6b%Y|xHT1X0B*%CimNNByM=t8n;ZI?6)bSS#dqPiDOD88k|OCm2Euw+RV z<60eUcB|DfL{_fVF%6I$gFLV(&8@2!3Bz;kEmty;)?U~(_UX-!vbns}sV5VSx+=kLI)k)`G88yK^NbOWLR-1d#f@N9L}p`E89I#<}u zz>}M2881_b%1B-n)?1Md+h=WJ=jIjBG0yx~cPngI!E6~!od9BYk7jnLr)RBnyqA`d zBE-tyR4`3D(NM_j?u4`i0PAE-u6gOf|9P~==nmvNeo(*h&GnN*+VlVFJ%d@j|Gn@_L%IM9&go%|e zHbnc`Nx4vyrlF;6*c;8Ym7c+gHZd9MMwCajl(%51%D_x6SxxI9W`A`jVd|zw|8#v> zvWL%|zb_tES?BnX;a#QRD|cqTm4Gw@l;v-*L9LXS(9luXL#Z~DMHto1K!&%|2@q8& zk=00s%Bpgey`>To6(XW~Hn*Lk9&5`vO<lp$YeCy-oh;-;?_q7~jD%IJPaAv1Zh1bH*rQr>sydKF#6wY z23B_sq_efkB**OkoiNFw1&Scr32TNt#@AA_h=WNuN>~54mtTR=)J=&rIg=V3*n&7r?7fJo!8l*Tg@%POGDfW7SXG4>+k9^Ueie*#6sOWDxnjkT zvkKL&=&)XKU-6j*e7-_xlNW9-#{&D(zi~b$0j_@7w-*iwyNn0*qJ=MLzkY-VJ>yI8 zmEm^61ZnWr67X>1D*@VCs8RT#dK{nX82;c3g&Ju``qe)T4~okAD{{OJ|=J8Qg z*8})n-kZrfGXZ2zh=^@%GXb?lWhU&A>Y&JGW$^pu3nY;VArmqaG81-M8F1HXP_d$7 z5Lx@HQft*Jidt(G71!GOJLlZ{X5Iv_{yx7yfA>J<-E;1JcYAj^=iGDe z^%Av1v5sV2gvw1+t}C4uF`cbBt17BcJX4rBaB578pr8v5sbiQPZ_w&5Xu>zOG2e>i8bf-XVl`jxTk>!)3Tkn)bS%50+kK4+}3lScDo`Q zd?;#ubf{xg8x;Hw>MZv6aR}4h7YCL&R0>n%V48o>r!Hw%8y;rw%Fm!f)71x|8q?Rl zW}Vs=ZGa+V4bRl=KH#M*HQ5SdUv5EL;m|BxzABN@EPg6TfiCaUVo9yOQ@GN@sUoGd z-LG@By>?SOAE?~!n|t#_Pw=Bt*!wE?qF6G2rLI`flf-BZa3MV|PVdvhD`$%Dx+2@r z!Ba8RIx=OF#(|z!jP>tH%yO7zE+5^y2IokJu-ZSYFLf7JLOl%659xDSc5Zd{=j7{& zD|23l(aH65g~$`2d*wW`;>OT}X;3@)_b62T_b@KK@sLA?b_JmNZI31AFK|xDP=gGS z97()imeQjoa13Bn!Y3g98fKm4WYvB(FS^i8lufd0+W@mn% z^3BtIyYD^s5PlAIY%MAUvQB54eOZ>0J!)}KmZT&p;El%N?ot|la^Z8wDI*D+d6{;& zDyu}3RCxwyEW29v^ZK?{$bL-OO`#VgsWOai#k!$0$IKNw6r5|E=%+8NZ$C>_0Al*O z8NbHKrp)PwZUV)DV~mpIDgSixMpj) z4bV*?3AV38JwzXvkv|mL)Kb)UjH||fB)RE04A;6vo*J{abI4`(oY1(EuxX0TuSuk2 z>#d)nDCO2%*I_TEjz=sj=H<|wJy4ED+;4s`HRS~IXpT8)?gpn)H+EJ&I!iS^jglaD}tXg=<|& zz(rEap48kNlgR8qhZQh0=H6{IvzazdDXt)=bm*bf%aNexz(At*@F#Kk5X&($QQxXL z`K;muXo(3BxH(QtB#niK*D_<%SLZDjIj(VP2}xf?j!`=HsE$2OnTw{j@8yx4JHwC^ zn@5*uc*zZnc&T>it;v3k=E-^L3Mr?>X1DPWd6DyB5OcbHpDcck>!f`r?mP>c?2zWf zs0v@^V7aMA`&gwyN!ruEW(a&BdFeS2j- zPg8yH3zh94nn23+cy;95CTvD&>*$88d(hhpti7r+Y=VYGI_>JZK@BOSuMafE8Jtwqa+MTF$GWukQ?G!&7* zb(wrkM~T9-I{*pO+Ej8oRZqxSS*0zZvs`FP&MwPNpvnL~cMk;yMVZxHlo2v#f%30T zEo!28a=Hdqo`;S~Gy{vhAf6mGPg$T1J&bqEW!QG~cZJF6=Z;7m#xAdg^H) z^YON(x^Z=Ndefu+Jf)gWO_16NqT}mlswED>vb)>|E1V=`vUkzzA4<+0sC-Eq;>cA~ znop*ahsu=SDb4en+Un}{dWj}2s0ZfGIh=HWLp}JQa-BDQ29-{2T90#TX}Rk#etJ){ z@@s3J(yR@LopNUFp@-%0X*~}@pEg%2u96A=)EYd ztkR3(c4@rI6z*19m1>fbtJM2h;RPEnZAemd$6!~{^>I?*(#CUz%H3RlT+VsCDo@_! zp5&>vPWQ?>b0^VIQm(TP5OXwE)DLoK?j=9bNgFe%Z7$xVo^X_Rl$;u6iAd9xH=#6m zs*022#=qR-$D7s z&v32~RWHZ0r-neC1EB>^-EB?Kinw~E1&_>CcinpvwAhZT3r();a|oe1%|lMqjN!0_ z<2x?GLz$c6Es!8;Nb8j~X96z_Nw}1xkeCY_pU%heo{hwzRjOs0jw$P_$^9-8o)ZB1 z$q^tb_bbGF;x2GKAwe19^YPFsd@jUGR}=9jJbPxoc1@=77+reuIrX>^BSt_OaaT*< zgw}wm8~n0|svLoI8uRnc5BDat=C?4BRr}frQg3>)iV=EdN0{FExH?3-S3Z#%aB+@R zN0x;Ubwy&L1rkwrKha~{JiK;ExyRQx(I|>;oF(b$9Q8s7=^4BUt(GX&4t?LVl|bDz z{8Dwnua@P(MemiO3r`rfMCSw+g(;>D5(Y*TO9u~?E#+2<@c_B!s5KQjVGn#;=`KO=wGxY4u|`{A zylBNDx6aphRf0=TXGm02uoqlfP18Dm&Ro3S!-K9^v!dW;ZHNpHdrQm%2R6o}W)|t@ zac@Ga=nKJtk}++n02x;=d;4>4eU+iQ;=x0YaqvCq=@>@m5N!gKPr$p@=m@@CNPRJ7 zshg07R_{hnCbb^!v>1?2cVB^0q`dS|q*-^){8|T~A=ane=;R#mp$eM4WJpCfN!Mfc$WcU8%PG#ek98wB zaVR87->x-DjkP3u(}wCx3UiM3Csdn8l@a2$T-EWQd<{%7IhA$8M166#Q`ZTdjJ{$> z=LAphEOlHCYpqebvb(P58fk^{*4hgCTxd(4{R))_`%lmRPOAE*=^C5nsy%gTQNNs< z_WovH9G35)S775kqCX-RYG#YukUzKXr0cQAA{3GIS#GK=AKa2E4^78Lt;A$quS%;* zuDB|prsHMb%B45$>JLauUn-CK-W^pX`f^O=Mvg~ylV8kTSl`grD8bg)@EH*`7( z4MRFp$@&_4$GNVrj_M~#hubOFbmE23HD@l)OmpU{1sC;pLWLsjHBs8on4F$CI?rjM zJuh?U>hwADwcLM{D?qdBhyP9IU3N1d3cs476gZLo) zJ=_pdK%USS@y&RP)7b-v)6=Br*%hR+?h)QGX5| zN~=~qixRo5HigQK+$Va+<|oyYj?+2ZLMYH%YEwzQ_oA5a+<*s&YIEq3T`tv#vpPx$ zN+D|TG>g(|X&{kXDpi^){kGbhq!FdR)rhmYMOP{SKbpO6B#~^xGo|&~s=oObM&kl< zPosma(M3~fW!5=Ii|uvlke#e%<_G^Rgw{xn_kwb^1&-jDy@}1L=-HHF-!>LYshzz-b`1$FlsR)D0L*pj zQrCI)^qzauzYEK%@B1B!iriS4+XIAwR$PB`krFB;#YkYelltH??aH#(8YhXT)WH;Q z+&6J(3#GEeLFP$$BqiNKJ<-N^tfz*CSPBVbzl6!Cv*;UW$=Tf!8&S9`aQEFC4R@ciL zh2(p>vQtE-V_uDJXO;FKQOU1K*(Nqv6Hbmb#}W%@$=@YcI==d7Jd_1o=YbR_awjWi zV|F&rVSNxmn`D68HzN+6SQ|`fNw%jTJ4pLaJJijpj_344tv3vFJik*=_Bo;SnBcrM zN2!5#xN-MPvHsnbz2iw;sLSm21!Zvs<0hn2(6K?lQE##<}v>6kBg z@f=bvLt5udSNd^ZaxQRoxx1o!A>QLcNQk=`^WKbCSRThbNhLrPtEXZMeaU>wy%L2x z2O}wr+OBphEqBhHa9+_%!8#Zz$aLgct%ZI~shvt4L~Rl&)M(v87RWlC?NK_S8G7TF z6Brx2_R5+P>NHg2_bOzT<48E!qpJ(y3&7~o2Y)N)&uz{-mA??FYAcnMoChsJCg-Oh zF(sL6(bp3TQ8;llbAr+8 z#puh>3-=!H+4*W zl19Rt)MlaNH>Fus*%@>JGPP}g4%gblq{A)tPHJ;doRJ+nnBt_%MwG%*$L{60rnxSH zRy1YMK%XxG!%PEw?**trN-n5Zi%Esx(u=MhaK>5_5SnaCz4SN*TMjwM@T(x{^o1hF zl?^e2E_y8`cU|@d0fjmy3qC|+4QU6*v~YQq9uqM)&dKZ++D@_K$%0BP{8z@Co6^`* zoP$-+3JYGuZB{UcqA`{_Zr6h^4I81K$Li;Cn0PFaJ7@?~bBtkqbdPXt3e70c>j#8u zHbJuvr!-90q5$o&Yof!~DBLLx&f(%%AT+5hriY%IiwMz*vSgm2tqP}`P=FA97!x&+ zVojkbqfjAe6QG=~Adb~hGS6sNC9IlO8M&vsFZv3&NNOTd6t_WdfubNoK`wpD2)Uc* z#;^~Nxi7H@+D(nJFS=1Tr};d+wFtvBIj3-W(G9Hu21Dh@H=ehWWImkKr=k@mvu7Jw zBr_J`uile`&K#fX#%3l+=b78wT!g;bU4U+NGI-LlOfJYuoE~)1N2R81s}ZNzE$|d3 z)g`^u^3nP8xe2W-Rj6jz6oRLvsWqMimJ4l~>vTZpy11P5q~1}%9VX93LcK!3g)4=C zI|P2U5*O}dF>5+qpoBB(%{eixR102<)D2+04<)ksddO?O9>SW688e`=h?c2NCR7pC zX`$p)_2tXCiEmN(oTQTvnOuYoe^CqcwIy?LG>b#&;x19d3mB<9O0`2@MqZGN>#NI4 z9hVB{#k(+2-Cl?evSlP1ng1Y-?)}8l#P#xSZ^xxJ?khVPc%^m;D%!z!Qd4}Mb1kF3 zfe484Q<`z+FHXjPUZ2u-XC6S3i<*!~re1VZr#GoB(0e802c4pYG&+aM6?-w#+Hu=G zN`A>WSwO&(6o`;CS}}sGf<@5j!W%Q;L#j8R0_*0cr)$Zv*uijgfH#0+!386T?i^Z~ zRZpBZmHAGR_KjB41BYMaWajGqukJ&bs?{AtamA`Zt`^Npz=Q_EBRJ!9bBQCnCgbt( zv2(B<$od|-a!)gSH5saAR;qoS8$YusdP-cafjVnZod+%K)VNnbG&;Q#Tx!)DU5cfJ z>^W;6NTk7+h?;rw;<^s@Po(Ju+d$SyCam+QzFWwC3EFtP#Sspn##)+iCkRvjD zD5i%VWlEEITNsp|&S4=TYCW5r&O}i}n8U`j(&-jB!lMffT}bOqKFx`_^OF=Sx#$ps zq_ZJ{82FML8c*nubQDOP8)>E3Q4ZHH#Ps0PTVuFpoLwF&O1fnBWd0tC(xlt66uxFp zLsM4(T(I;fdu+Jqm2~g6pyPL`ru2S`BG=+TkxTtwl5}sg@VPNO0Wj&_bK&-#)x$TM z=NkoIRfHB|?DQtdq_aN*CYJ10jqI%~$wTkn=t;(DtF@kN+rY2qehn*0%iC_vx37nC zyEI>aU4$rnCuDiy?KWy{ZS~`tbO#fD6Pk6b+uMLellrqao}jB7dRu2Pmnx?Ic}d zA=>6MPg{(J$HKPkeiPY-Y-wAJcK?^QHP4ITHFauHzZgmgVcMW|&tg;Cn(I?7v`X#uVKn<+(Y0xRqw5%9hqRYD$4zKZf;gqw}s{ z>_RI5XA)>@j?IV6kTGp9K(I$?%RicZZJkL*{c%G=vE%5zpZ> zwAuj53Gyin0~70UG77XcL-At`F*-Yd^yo0?t6R_74&IAXgfzS*8+Q!l+}Rd8@L*c* zV6B7wa#srVKG-wC2Dpeyn~~kc;_||^uj%zUul_kNG@r_yissI7HdjM)G}p<7G>zwu zH_U~}rc&vmHKRp=BW&c3zsiNk##HX6VXM$RctTT*R0uh5nkL+F9du)|FGr)xk)b{0 zmK^}e>4!XR&2*+VJll2C!smq6bPMn%dj40m7G$j3nmb}G_^mt0@)cJd$ep#&E+O<6 z_48=AL;+#Q)2UbRP~}SKbQncTHoM+7Z8BTj<~r}#??Tjp_HE9T?rH2@Q+Fjyl#OlM zw#|;wv2EM7oen#;ZQs~V2RF8DXTJFt^Ds|!o@=eMPSrjes%<=_=V#+}pz&QAbQs~8 zk|$7h*p&)XoWlP&{7)A5kY5Osh?NL2%F7ai*X4GaQaypODTs%vtpl!(zg>3ZMj{A8 zV7$k3b*ugpr14VdyR)z+moyu=-92ib(MbzSs9Gv?$1aWCNmJ-=)P3-)b>)uw1FWL& zojm|8NA|s95kS&T1w+IR>GxmO5)(w@m97g10uv^`M@(l5T~WaF?fRMnY4^4dYkFKy zNUaAsr2e=~mZ*ukmFEc=%)XV(GC^}Amo*2a=(lajd)lctQYe79Q+LA`65@8kRxz9$ zW$s?s{LRzno2J_3;{)l+Tc70dB=W#JC(!#JTF2~!xG!TOzKUoxkPI-|MOU%si$saHAr zR23mOJ1L-OqGDrF3)w!6taA0w5?xcG!bjQaAvH*h2#I>v z)*y{ilDwo^N_T9Q&VA>uNzr!R9^z^uWFyu5)+bO)FYre4cuL z26NFTVlnx|R(o7A4$ykNiG>-VB(j6X5Q61p<%`|c6j8oOL7Ex5 zyK$RL@ZKWM21k(yzxRXK{%2OwSqzrC@fWAR_EnaKw`2KI+{{wc4mOtzy?wRtp&rTrF7V@A4M+}fun?X&op0*2;= zQui%Eh85Wd#HCA0jWkZAJ!LVO3VZ(y zhtij0b){FJcgZfR!XqHX*s@i`KG1Ub4ys8A8FX4X@Hv9|k9&R)!`4zVgOn+kNIxbI z|G}csn9>_Jp!dhS`4iT()}Bsrk<2YOitA`uT+elq&U4&}S(RdF-1$p;K5P{;JX zocC^{$6T~#botx~e<9U4=^)}yvOfeHMJ0) zT+$RZTFOTSC6!x{80?679}!~l{h5=TJpx;~?83XRODH*wu*_yf>`g1MQYN-w$&~~! z7QcYrxP8a^{Bm*PF(YsoS2S_sJdavhhdClW<+7Y7ufoXYl{2zRNypZM$(HcyE+s*D z6BKn;L4uW?a1nk-LzKuwlu(xO+;i6?JM)gSVyR~f4Y(A&0w%7|p5xgmn52!`7dkZz zzWUT0ZF1W1%G^Y{VC$z?qxqs4!LVvEh-QT(b`1Oye^#F(e)0r<^Cv{9$&6W)+Z1%} zg;RG(X%5fK$S_Cn*6L^Cw`F!u8r>Zt2>(s)i<2_bPJ+as=kcxH^CgTfP9p9Nx=nvn z`$jU_P_6vX)7#Q3?@@O?DQdB_<;wbi_03VQi^BhCF#>;PCCaG^Lx| zTp2e1WeY|>=FJ|SIs2!y{#rKkYw4;kRe`1B*;c2!ndD<|D%~#uvcAh=?Mj`vttQNYQP8lPxs5!kgj+d=03>dq_u0-)Wu?VVV4z0AtRLd~MJM@*Rh*LH zy>#r}dQpW1xBYzZ^A@TTiHO36KR3W!CS~t)0&t#J6!VzK=eGr6Cb7mO+|pN~Rt{>i z(O$-a1~hF6zt)otkFor@IzyFe-U&1BPQ4ILf4?emB7FI(JY$WR+|M7FqLNZ`k1YI) z*mV2JIZ%jSrP+40_~}%z74fuLV*|C;4)uyFZT zOP*JLqVE8>K;ck8@~tP>XD&=2H7h-5T^(vjf+9PA_;Kj;g%OC%Jvxb`z_oKWlfy7|0R3u!GTRW7! zN4&TBv@qUHl&}Au5d~U`$;q1ez(ZHjR(u=Czx5TPa+Mr8?`1Xq%w)S4nQ+vJA2$_a z$#vh1tH-gDlPh!Nk0IscJj(T7T+N+~_ET;4iBeI0nrk7sw#Mn-ly{#0IU_T+so%qA zm}Fhb6#Ya8I1cSdP7vidm5#eL`BFm8qJEQ%5Z?Ws+M+=2Ymcus3|Pja!S2?MQq-{1 zidujM#{U9yKfnuMeA}XW4d%Ozz62pI^b7j@)8NVIXMTC|J0s!SrF0cL)!#7JCel2g zc}&OHdsy=o--{q{DzAUX;D^9AKDk$zz&1KRtRv}5D95;bxL1H8PfM9{77q9|3IXZ> zi-f4LzvHC{(6Sre792PyO^))pjvlFc5hq*LZ#;K6$;ikUF=>?af+7Q1##}tNX`?IY zEd}m>fe+XOh%>{WRFA?T`P3AQLAlf<6BiDW|0UilC%OHvYir=(uxbK?a0FiUNhHaJ z&SvtT5=TNr7j!7W%I{4-q{u{*dDI{IIOR#|w3L~uUfqbh$C%y=?iQUh;`yCE<%)&! zZYRQOr##&^d!{c!{l<*}jt!wr_Z!h{WWK%JPyva)^oW2y|I@kvc1F+f@1IN>&&gn7 z`BY`?`$HMDbxqQidTAvjeRcRk$;%OLu$#Ex27e^^pq;+_-$}lQyMYQ}J2A-AlL~K3 zni(=eG$gTg{HTN9Myq76Ukj$M9|vRD6BAA6(Gq`NE<*D~In<&D%GV`4`mar2TA?>E zpOrqKpA#>MH`JeDKFTkdu`poP2L=BTwAJrvHPlWSW`8fc)iX1Kb2CR;eTW$=qzFe0 z`q5X{8w^o0KTPFs!zVZ%MeU#%P)Th=Clu6p1%iG4#~uucn>cU)S1A^_L-iUy+y#LC zR%?wlOtn1hzZjjuAwJz9{|N8~^V>7<*oh+W(1h>#2-U=z+Pjwu)MqdiwbtiTAfgt` zh)=mNtN)P?+bL86hyqWJ&71h!2!v8=-u?c@amL`>T!lKGHTsGwN3N^i7IxlxB|Jag zKi(k_4qRjJ8$NY6*h)W7uKf-!z%b;1tq4SVBEJ59!+CB=+WGfW9xy}knxn@?BIRAb z$XX-p#_Ajl)A;TEb;bk}>OYEBKj$|D_@Jq;PpL(z#?#>54RWv2QVHlvpql>y0Jd}5t<8}5586AAl$l*ss)4lR-IvY=-`dQ^wx z8)c@CepNA|uF@zi8Ply}gb*WrF_o4LM%bo~TGJr$0>uTj^DI%i){5fy*8T*5S4(UT z*V4I0#r$)Xe_N4{d}_|VGR=H;o1RD<^u&7X30h9YWSQ^ctvOYf;P1>_GP{Fkt0~=R zvp6b(({&I$f)AclI1M$qoU%!>_~I0Po+v?lH-!e9fwb4z%SR2Tw<=sKBb3LLy?Y>Kz9-(gqD z`4!bfm1Ki-;N!UwNOHT@KVmyoAerMxJZlu+gIv5pP95LOJ1ZviEcVfV7pV0*U%`K% znE3Esu$!*{#KA!Vhk03Jc+}53+Bx#R^z?qlK81{Sq%+%2%0$u0LPCo>4I<6-S0*vQ z9jYlx%y9P&*J>Q*YMt&(<`P9b)8R|l9Fb)I= zgf5GpxMN_{TEf$WW=$o?$$I;TnkkT;_=bm=L%129+rb3C{2~v`$Njupy4hRvw^V5w zIt+GBefjEpUh?c;rqeIaX!*Ye_Ke#)QL5jl-oK&(0EIifkKKJRf&6El>|fiW004c< zb<_<`t2OT^9Q$GL!5mB^F!)!1D7xRN5u&dCF!SQ9C;VG0{xr<_@`>zw5(fwQID9xsiQ4Xq+yiJSb;1~&1$4}-DT{f-SL#dP(hc~edDo4~6{XR#5ghlg1@9QxYGn-uOuj;!CDH}eON{o%`5rm9bTqJb_hnwq5Hyw#A z|Eq=k@uTrZ=tv47H6#C~`=vB!jes^ZUYvT%o3)ow2V}$cECA2Zl1?Vib+8_`XdOGN zwwEt=EzQi%dX;b*6e*MWqnqiGw?>23$gN~j1ZxBiM~jWuy)3GBf89dYc4*~1+_ms2ZnCUK zxCHW(^U5uBFfsR}j~jtXZ$#Z@x)dwGP9mY%vDOnesd{mP#M{O0j68H+eix4xd^UPO zU8~7{O}DWcZMf+00j;qj=Iu$DmtwdxJvg{Shpz0nX?qJvB0r_C8N;FSCMU5L77}k9 z6I$#P(4hW^ZW*a9UTD$r>;;J#a4lZXJkmxZmDC%GkbA0!3m5wWtfciwmTGOWAo*`* z;G9k0ih%r(B~RG3O9?b(3A;fdXa@JAv_bD2rS(QONHr1ZUr07z2)g*bF0E(dTdTbl z+~weWLH=4+YxrFkd*4)NB*}M zs+A76v9a0BxWfEA(!r6Y@TGgi;i%3$46JM&Y6KR&sx9;x?F}ANWlN0|Y1{Q4BIhA2 zpTI|(sUwC+N35lU1hT0+?>+j-9ArN|czpSZ2t%82O{RTFKk?`YCMYKs_#pH7 zY`jfT8-rUf&zZk>N(-06L?r(v=a}hB4jH%@=P41(rC+mTOVsTg-QO76t~#|kRC`lp zaUAOTd7WU{+V^ZVjFR9BTCiuNW|eGska0O{d7VO>=NhuB9U*ogTLt@`k-n+H+omU> z^J32DDgTr{mH**A;O;XuRdLYiz|~!k!1HC0XX4KP#P6?B#QK5qlKDta1KjN$+UHMK zv3S%Fv(gQJLz@mmfev}7-TU7i89%$eP5g6|+=jX$F89AN%Pcfd6lS6l+vHBTY!2LW z$wmySYYQB-5AetdHzv+>>X_d$T$eAIbiZ}yO5|uFeeAtGfspU@YdS<>cB<5P- zl6_M?Pzco00oXKgZeVT-c;HtL+*;m&lb);5dRxC&tNY>0%k^ts<2}&t{$4YAJxzaY zx(5I0GEVQI`bz#eH(u+?;z=U5`R@Or|Ao)uEN3Upzc)YBR3~2z(hSV`!P=Gn zV1kh}E&~9!v(1_u0d1jq=+er|7LkL43kDpi6@dGuuq4--Yx^3ZjMJefwUqD2$)Vonh%4rBd~&A^uNk-ggX9bwrxMSNCb}XAng~3v9ldD;+v*=9Vxc%sL%r%vAC9I*W@oVmQ@PS>#{kc zzpXXVY;^VJ^60NSP~x%hu9LZe6Yvp83R2bY&AI{oFZ^8lg^eQPH}gYvBUkqyACu{> zl7q%097c(Irg#!!*GVY+Ym8!nY-A5L1Ew|Bx)-40-4VJwY6Pi^zz*alXtqc%h~(02 zg7Y9iqb1E$HBXy81ewWn%((x6gV?F4)pj~-G_d{^W(iqNoQrX=g4drL4<@o>(2TrhRL1nKTd@Ll?9An4UbIc!fPD02KGN8SoUl|_sS?E3tpX?0C&-fAB<#6K& zy`2)U&=$~%xxO$qpk3<)!Z z(7$CKmAs8?h#Xw)CWZ{?EW0B_y{rSGXcLFsSPK4wP-&yI_k!Xbry!ySLr(hDb>AQ@ zgcW>u6GFTmgY&N#Y@A`Y+|(N)jIiH`Vu%&bOgG6dOc8Nyx7H83vZ1`1hcKut(%gDq zF+a|g`tV0E39>g+)p}>kNUC@-v@|HAw+Un%^?M0~1d@n3)$w4W;s;G}C4f|N4P#Ul zMY%6o%vh982F2YH%ehV%DTo048&~^vrHFZ0ew+>h{VLPbYk>*k3}MGi1R+&b9)txt z1kfTF1)(lFcqz#wg!cl2MGjq+A6X$rG*NFDC$Fq6g+p;YckU4nWQ7|serBB(8km@8 z`&U4c2kXxl8WEn1mYXp|9UqUIdZNqu_vM}&G5?c^#g&3jco#4pff~9e@MmzK0d0+% zYdyNakL?DV$L>`oiR&prl+XUwSp})tRKQLDIKDN~=U+6iO-tny;E;QAacN5J}g>-fL&^8o3M<`W119gE7%oUpAL^k6q&eiwr z>e>uUp0@k?@&4LGmuP=)hnDFHBpFP6918tXy_dpQdcCK$zk}o=hFP@F@)z-&gZwXW zE;+!Fe3I+XhJ5c-!01;o>+9Gy+4}?KYj|h6r9V^r^mjh4$B%ox>nU$vQm zV3o~;F+IPFSFuEtSGfcQAU9WO>wRNi4|oD|6LG6X4Icas?VeNb{W_I`1VnHRR7>D} z0Qm&Tz&$4%p+H;=BY@#D9M27s5!57ktg;G!zWx@uQv>Qzmn9F(b7M2<#^0bi0-T_> zQf?@+zcE?T(A^vPwX{(WF>H1b&7q<(A-S>eG}niK{`8<|$CYSH9rg1>h>Epjc|?q} z(x4AckMR2`MbE$>6*w`@Fi%M~SEziBy|OBxGS^9Yu8~6yJp*&1K^b$2kk# z+>D#s+bl!A87-*On4jC*9kJ?*Ji<66iw(G_575dZGUl5+ zD5jM&%$S3b`_Z+hD3v?ljKSG0po*z)Fb|&W<9Hhz@8;aOuV9Rj?-4yjMBT0-vmSXIrx98 z4+wR?)GwW`lSCTdyyHIA<=r`p!rRBEapX@!LdcXUWpJfgRO`f36IJEZ_RM>7q|o@W z{Ipby$@P}`J(jgqx(T_C4ky~?!%jrHE{tvwlgE?Xx3HI^;1(nqv9mO_R@*aAv`HQ6 z@U@Q+!`LbCOFFW8W%{g^C>(QS`b*T|KJz&(ogP0VXCu`$gUI_fvA5n5Zlb}*E}$x$ zucWcQieHb*i_G>tdg$Ky5_Gd}srcu?-))x#EVu|M1zZfXRk@jmALT!PNFVr5L+fd{ zJKAhDsa)WVR-ecaDZVT!qAp5J6xisF;Qu=~y3z;dE#aHzFp1Hjpt8TR`(|v;ZYleB z^u-1V)msGT-gmletGP`pEjM@!W3XSi8&q;GF;u##H;EsA!TM`0u^uzM8X3xa- zVc#)wPjR>+lIn&0aw=@m^nVAP5h*#;*E+apa}CcdQ%;3=bsd<}%p_;5M#vdkJki5D zC+Ga7Sd#4HAIul2`ru=P)KEVOV=4#ZuWg{iBI%$7*JPFs6Eae z$K0ElsCIIbQ#%IxKhSSZa!bElp!Y#Hli4B1t@J;kED>UJJu5zEIe53AM>+9ikbx3Z z;Uq~Tf^XjzoS{N$SV%nfI+{i4t(}J;=KxF9w-pYtCjtx$vYQ^M>Lt})3)gDU-8#__*$}0Rt>L}2G5Q)<6axKfh?RT7(vls2 zIuZUT-;Gg>tMPxO$gmByc0uDe(bZT=m9G{5t5)u&;+jIi|6}`C%uTLGA*NiDrP}Gq z<~!o2v)D;+rP+66qjaI5g~;B&oP%rxypyL;(Lm?H<4nd>O{}q2Yq;r!S&UKLR9see zYbZ1$u@qAzyA=b#>1^t=lxbOJf%hMSr%2m8f7SnRhiCe{)sd{s>gl@(Y1u*}-}T^8 zV85zm64t`_X1HB0lyjg|RCyxtcBYMy%V4wZ^$fGcA?__~AO`+9AE_EdwxGov)%vS- z2+JH^+?Kb>>2SN!W4e+x>fggRU4o5rUm+AcRbBN0WaztqG6UjSlW1fE_o_!52>Png z#8-7i0E65SmV5nx+a*mlGKgsS79~XJDdPtalkSF9ueHFi_|HFzVp> zAY|@L>*QW1A7VlQgHJ1Jo(alLBA)BMQ^SU$1vY#%?+)J%8W7HHrNbnx-#5{m^ZpDI z<#1m|v-D;W@|kBDHFWN04D&x61@F^N0Wnb1c~5tnA?mC$r0-*4__*N^JI`CcAcA<$ zQi{$Y%08tEfAH{)@6pl&ynQ>%%k*mW(NUqqFNPbB8;Y)=03kL3DM6yXA|e2mGLb-^ zFl}47)(aXR^%EU@%D&!ax2SRRd3VtU8seb$9kO__F9$4wUVtc>VeH8EzYxG*vClym z0ZQDB?%c^gz1h;IRO#nbJ({?~<=s&uRIpXLafzmWDV0=AMw+mVz9RvLLgEuTZ5g_X zwc{Kjwlwp(rSoSL#;~9}w20-TkYAufs5&E_Y~ZF4t$yS2Vb1P+fi~gopO!_%bQMC! zPMP=(5o?Vc6oiTh6VZo6<^u@tPD{0_j5lTBb8kX?XuSb2LZ)lEdhAjgw1<43;V_2U zBUj^#qL&UM(mm5}r4>(llt!QajvVpZtBjjx`7jUvplA(sJs1w33jf2U;7eb(2D5@$ zUV381IGY7B+$*dtLVZlZI7UtjcRFO1$Z|`7f5#mrN-68CtHNc@QYsHj>99PyCsEWM za_MbDK3~ZP?YOZsJT^Pg{&xL7^#jKa{V*S7V@C@O*XHe@QBz_isQF{4 z10LFnVY_m>QJCGFZBzFGX=`NBb2QEE#8xf(?6;JOEXyus@|u5CT>o*{s%og6&?Fww zd((_@&-2`Fgn$$4>His#925OHIhIV6GsATEur;GJ?v`o~3alZ({&QKL-3`8Jxe>a? z84y4$**_~W5by4dImF6O;aB+Yb{A&PkvK0JN|omHhTx(WkCkO~1v|R+!PD3lVV{~| z_P8omP(xljs%b7(4T@|EstG#w)u5^!u>?5L8A(^f@i##}`*c==omLDHqKiI#0AZZk(^J zT4c%)8>?ErQ4?O|-Upmw$S74%e>guYWEg;P$6uyu2Kl*OdD>B}pbQuBG z>HJL@yWL;0XZzKiiSQ9}DayQ)UWVXBy9MJrM_-p4GYZjv-)A_?d?~Wi8vePDWM;G$ z@ypqHEWPyb%a3&@p^ilQ`7fA0>YY(%6itgT*Z$z=}Wa5BM-8BC;`YpeYCd zf-@=q{AB9g`bvwf5p-w7u7)~n^%gawUQtC82X!+qAOO$OlC7@#qqxdvhw)a9xz z($xK*RQC?d%k*FTYnh)9)$dGA#a3!LThE6D>UejmDJ{N{b;jxI8z~`3%(?U_{1#V2 zk57A052lkXoVy^l7#^}KVK7_^^0}oM?y5M#RQa$!xSXRhP-}U%M(<-$j2Btqj<5M) zF-SVykYMC2RHjzO@|bCYSfC zUeW^plhswaJYzF?aNpD|hvUx$fC130mDM4B*|qpv57n^-;ym1DepvBUn$IF|jHf(w zTBA+0wOA-CL)^;|E_ROzG=3IBJqi+!VlHG@b|^MwNUBGTYWsv2N37sxRB;}XlD4J! z8sfEbJ?>3TrRQSnVCxVMw!!?i_*fhmCm(oeC;WkT2{_tyRh)(PDy&Wi>;)3(j6I-5 zRFMwgohHb;OWoa=XN%IHUMeH8=eqCw@9SEmA1-!B_&#*8Rmvum+e@^7m6W6Oikx^? zl#RCL&S?QP3&uMT#w&_$;X@6Flk6{3&L}Q5vYu5Wa)202lKOvf-31_AmJQB*>2MfOQ>c>siGB^-pl4oX)ho(3bV6QXY=S^e90s=iisu_p1mb~)GNqdb zmcRdL#D3IjkLVVHixXopIaO?$z3&o|XdSbdQd3Ypcm7L+z_d75{nV@~ykI7g8mXn8 zr~SM6RUJpO+F06LGv4Q~B&0f*f_VzR#$E3BT0tX;J)+ccq2Fqe=p~h054X>On)!)q z{7A4j19s(n)Z;D523gb?Kj{|gW!$x~r%V7P)=}hqb+F@Uo<=h{+q1aP{G5kPz7=9a zYDi#640+Oqdm;$n#oVoFX2A^Zuc{T2bcjN$)agG$6$ZUfxrn#I?c&oZc0cjII9(dk zj5};%zsQKk6}E*@Ft3{J@`Cf0x@~f$^JHsxjd9?h(#{<2!7S%0am05elW7tqym=Z> ziUI?2a`!Mg{%~TIe!-AhUm8|9mJnW>PBu7be?K zhd@klYW4#6&p8ABhatIQ5+OMKWojKTHI0&O9$`k3cdmToCh6IEv#uY=s73XIATqxs;k9Q4!uk9Rhl`^`v#)hqmdBr<&;uo-1e zS*Xd0n`pzv#fkepdzxz{05<|pHMYkATWc1j(ox|5AVYMVJX!WPw;teo_!e_Y@+_Am zhZm*VuMm5T*p7z%N`lSIBxXt1hD{}`Mjd*<%jA$Ny9YGv90rLR-Ud_1sd0lEpThfR zYo$@Vi9=R{U~TgG#q${DM$<#qfuzIgc^JkoEwpi7VaNT)`2cS=&@eQC@>5SGWx)W6e^MRd`!Q%i+NlAUFrV4Q%8M#6JU^A9pJC@(6n6PJ?RMgJM27e@f- z*%tPWBxdC=Y&TDW8R#@6vIE*~&PlV=pC(wz(v#v>a6SJp`^bIezCZo(*RjHviB5_3 z`8>02LFlhNWmM}E0W^GL3x|BN0{BIC1e_oO&TcMEeoXwKUHpD=;GE0k5_o!_%~^XF zp8Y&Qehdghxd;DPHYaTM^kXO)fX#)qK+z99!TgY6?55);9^Qsw#fk@X{=V5-Fa#B8!*$eg~iEH2f@KA{yH^{n*3bP}!H8 z21w%M#tIC$@`N?2rDNL-uP4+re{aZR1D(O{FE(6T#t7FbdDp2TpFJlW!TLJnni5AH zP8xAhT;beR&WvohK2-3Dlb*OfBgiUk-i5&;>g3M3p*&eY z<%OS-W-lsD>H3Vzzg|ZEK(vzhik9Y>wDTk^Poh?ej!*!=eEZWmV5m|XxtI1ZJ~Bpx z^r2-eP^6SBx7LyuqlCP9#qo7^!@;gEOuF_$}& zpF%@7)*O>zq{)4Ot&%@%U*FLIHw!DB+;N*{mi(8OvZ9ftRHDRaDoJr?S)p`zkR)};?l?bV_W>VIlHfkt3`x^c%zWW zV_l9gcGJ@%T^}t9)|X`=FV?Lmq(`AXf(Z$mGS(p#IDyr8-7O5tPb^9Oo)bmxI&u7f z2n26z5n_fu2ZT1h`MI{}`+*Q#HJ@33-Rrkyj9ol070&b?o@D{aoec`LYjXeEedtRA z3w;n_ZjBpuD8(e_Aoc`f!7N|^2cP;)Z&TDvx-?m}xz1@}`k7~qK|iAqY9ARg^O<;#^_@h{(eQ|x8c+BA1 zla)9<>*a9S%n=5iI-BZhAKmkX&ctDg8b_pIXULjyO87R|0zp?uV|8P@aRG2wPeZfLuS=IGg&iT#rKzHa=DVcM;IEe;XX}tKj0*bCew=BnNC^GgLrIz6cyp zos#GbPF7y%yiGb)CJfJc8{7p_^J{NXc7+tlg+K>ZUUX9Zno!P4qGsM3wz>d3mw-1c z?}n(-X=LuM6+M_R1dRyx;AhhIi_U`0tA{YV_SWBxvO8W+F$(2l?fYlbETW3huIq2j zb5u6oO>O!426iAVip5XU7KV}ZnmLx4Kli$inBr#7qffQZ`X!tZOeMcz_;D(i>_vwZ zB8(K8aAEEdFY*>m2F3H$~KX`)R6J zb7`yh8R80-p1F{BteK)>E}j5!J9z-ul7v@Ni($#k4%n(Fe(7c_3U;<&J!AJ~ekUi* zy5h`baA5uXIQ*A*tEC!SVnR)9&0Irb>1H=tH}%YrbIcnMz4yZ!dai+(2#G6H$8jejoGdFiWZT(eji+~tk`cmO;{LKv?TUPnbT<@a0;FUMjeo$Xnfg%vc&F9t8)h7K{m zvLIC@5o?FfKbf-8ix=Q(mmz{Pc2K*927}+ea6KY2 z((+DoBvB=qP`O2$`AUnU>|#OksROp+Hhu>Ch5PvL6zEMSm~H<1oqAxGMpdoEsaajgKcvW#3YHk;KMQsb?#ZD|5a_?B*6$VQyxwRbd z;*V=#154W!9}&Ib1j6&k6f4Kt6|gLiH$-8gcpsO&{ES&o)yANpylkIzSbMz`#>t!b zhtx4faAcm=Y_wgp9~1zmyP1DGbFnBBjW zD2Htdz;6w?4+Jb=_1pKOTpBAjfxd((pG)ft@7YIHz~ae7evwP$fns{U>5fdRZ1WB3 z!aTW0xIH!@Jeom2C$KXCu}{WL@(23;^FnBcX0AaRaQhS2AN!$yDxF8lX7!FuBg*B@ zzDlV@7vv9w$gzXF|-}MG0PxIKw+TA>@P6Yq#Y=^K9u&W?O<77~( z#qUBTjf<>Ex6PfwbO%?*6tfr*mgT&_NqabKp$klNofig!joVTD+3L)4M1Zi>`eUe2 zJ^TXJ&bK3jWPcmZ|AYu{2-gGGI?g5Q>}}5^IdvBmy?;WrDsB-v-)_L5KShK-jR~ax z^=bXKp2jq3zj?Lu7u%;7uaxr{GhL)uVW^+#X_EBJj@uLP>0m&zPh&7EbF8GK*uYn61rVN2)t)aqUEU?7V|=1Y>fdw`61iNP%G`U8w7{X z%Fxyc+1woEbvO~<5GhA+^Ekd3=t79Ala?B(e2ze090WW3B{{K@9&gcMn%+VX+X&DY z;O=&>Vw|j+4}mxNbm9z5haOsh?EwfQfNiJ+>moE3$_3CT#1t1-jNtg&-CA;ma$Ota zwtRUd4B=2w_7X-*gldb?myT?dFo+%z-szSv5?LjgcHqNzCO0#RZ{tawo`IV-r-`%D z;76!;{i2x*=A9$uEx+h(ALacph}42k*x`Q)*YV#U&Y1e)F-+j-9mc-m4HkN`F@EW~{-Eaw#Dx;gYU*E&j zEPCbu-!y@@@I&1}Ayd`%nMTL|g`F2{s39XBBOB@dsD2&HC(gq>oS50X{X=?^QSe81 z61!Z>SldZ6Rvo-(THf}*86H+s@wn+;HsT9ywwK1juq)$G;S&iw{5-ASABt(9u|v6?9%%vqbu3gr#N`eER}sKZIJ-j%vfU z>afGnif*h!?&D%b~G|;0K9rC2AHfR>|0aXDdp-sc$)+cSRj zraOO&y#Ec_r7wE6e4JO(&*z@L*y_4izQ}r=S*+qbuy!Rc&fVxHm8)epcQFL22mYep z0{wE;*0A|(sejb}KFodhW-gDuW04L#{ILhz1-onSSu{XWA zrH?D9Z5bPEgGVP<&STX|;Fzo}VT(jhU-xxg0*s&g3%=eIdx5I$B6uS=D6&NSt^`W$ zv#2XS&-47`E!{_m>WKm7A&7+ zVyQ0Crp{g%8z29nA*3Hs8u~9}FY+RcUm)F92v&~ zU41^kdhAS)&N%ZTGz`eGqY* zChRAaT^ZZ7;s3JyZ(+ld0}RT+42#{Jb3gR^O>1tI6_~NLT}UkUh8VmtQ+{;6{k47kA+)4rJKg)TkV&gVU zuPMAHB;@i@1QUG7Kx%m+euzMLiOGFPmdOaysSxVo*0Ga=i3i1;*}&)`g=+TwMrqPEM9plRed%WJ8H97;cj^sd=r#HolJ$NAtTY_h%w)uO*IG z#&y1#1g?P!g?$a5d!hg{?W$rtFHJ7wSWeMEh+RvI(1#IgwFzW-9-|Q_%j+`{UjSFW zB%(KuDz!oq27F)p?~ipjK3PqU82kg{X8Uh)WY4w?1c_%k>m;byz=WSMFHW<@Z&_NM ziJvp2h+yvZC^Q#%|IqHvSCjpWezvBuTtq^}yheQPB%#S*QmQBTKsN?$>8%3KRX{qG zzc{Ddt?<7j_VLBfR`2!BypT#kcRly=y593A;O{ZXm~_@1Vj+)|~SYd{+ZU1)6X;;twM zaFJmy?O4;sHLIF~XFOUlsJ6~+n02m>^&0I~$o!J#`%sH7HB`0&o-g?ZCzfje%!SVc zG$wL`dC&ADC0QR{3JAj|Gj>j}#d|HFmqLq89VTw3p^8D(W|+8smY7TZc2rEXdr{J1 z@^9!nB^i3m``pS7dBGj$)OeF5ltCcEFmfOoY#S9>_hfHU5ICf!$9!*CQK=wLyBZ<+ zBX;6`Z=3G<=3Ve2f=BVQD+~#>q&*1%(f)*-Ou^qP-94o*8ZZtR$kQhTF9aovlKIXK z*Z+19Vws=ueHs1iA{R(DmM1B>-p@xWA-t15={NFh6IhGU!0z#6et};TZ|j0x8tHzh z*N++_I}Gox2n(#7&FbtCzxpQds){PKlSqdxvP;*RmU?}i7jlf|3ZOtxr2N$7+dOiS z*clG#bn!MfeT28h|)T30= z0?tg1XX;CM<3IT!ka*u0wbEIPzjkFnxXZ*0>D50#tno?@sQ>}F#uK?sbDRN~`FIV^ z1!N+_Bcxr1tYh=0S)p^AR!O z4+iK;``|bD~u*Zz%8kmU~<`;eGD< zu3=GvhX!ai^vT+pdb&`Bd)suPCCM)f(NGra?VOeQgS+H7lW9KWU^%)Bxw{Rbo493P zR}VW+l34q$ya4jL&%up`>LC{uv)={N*%#J<^ZYI3-ppTp3V?jflgL;}`aS#v%Ny)i z@IrxnUNUtdB$Wa_AF-HP_`j6bwQv1D^~Fk9sY%Qp?!~c>t%thU`@Ase{S3v2)>nA0 zh8Mx}>Wr`6EqmfqKSS%jAR5Yc$Ooz(FA?e4VFnJr&~>@ii0C|1P_h7HP_!Y64h)L4 zKIrfCn;;=UPUtA}&`=ogMWD*cYW)%7Fh<~MMfWv9G*}prz6XJ`e}UcEK{qeoJ1-KQ zz7`%99_PH477C;YIR!hu7)99gppGPrP>&Z6khUG=BGW>L|KLk(3{Xv53HpM9c|Nk1 zqz)>^iuz(;zpG|-SF&Pta6j7y$EL^Zb$W|WgP@D=Ob;%?CeOnh)F=gvHAG=|B#B>S zJN~Llg*{e7t-asyg_8jzdWtWlU&j>w2Tee-zr1Zm4jm3VuoFy)-NGWS=CHL`TJ|b; z`m5897?P9+%kZmM7JilFtKS2{kjtNo5|w2RJ3Y{gz-UO;Q6c?5tH(L1r1`AKgE`Ch z!Ha#cj}QLI2QQV+MIS8teu^pvk4*Cc6JnfKhci`otT*qZ?pWt_M>oJy*Z_Qi4d@CD z#bY@YhP8nWcGZ!C2uFb#r#ffD2M-T_X^8(pM={L<1kS0@2SaI2vBktJX++lQ4(uVlAc8uczB z+k|bxk}ZyIDWhViah;<^a$(DWE@n}z>3 z%i#HTlPK9j`PlDEptwgm7PC_l&)8S=|GfFgmL%&tH~4E>3(>b}M=*t|`% zcI-qd$xLmwyl#?~fD#X~rBY9TWy<8h3aP$Y9mtca`8xK5e!X5Q2{nAZ4yBI)%KYK_Rw~qd8+8yIDBFQ^ti8FaqqNS9g@qS=dG$pzfmDN|s)Qb~= zlCt)r2q1!o*`IM)w~i*n8`d1aM~c7svyqbfzE?%m5d{C^WdAwevli50VIiXUq#?XD zfw;;N0d*r>8skmY+9_eTgb16Y{Sh`vLu`^(2b+`tHd$o}>?h!F8s$O?SIWCa_W|5} ztQ1vG$o81l-%Osx=36PUBQhUgA6r1ER3%002MqS{xLWh!R(6j#Kds>)c6UhZ8iM^h zT)layReqee&SX3Nre#Zc)3{|Bffm+nT0FbZWbrEjX@73Wl${RtISD9!ZxS(d*&M%C z4*S?plEC}$zzE223ogI764ueyi#CApGW5qZy9tar?0%TBGj9ueOx}O48FnDJ^&0 zl2TB5Iy%XfOLK@SWM5<8>V|7!fMf)MScC^Qs8 z_YU$x!yvRO73u?_!^6E$e+d0N#S8rzLO3WYM3&>bL|Ig^`=?_+stTO%gJ=6-S08Na zgPnXZ#|JNzUlyr$s&73=2d57k>QfIYYcXpLHT!h1hSo}gy<(v4_jG5Sw%ohl6hO{V zuBe)4hIvj_jIH*gPEf?=`f18wKeyoIjGq}NMSTMw@0VEjhkqM*=Ta3fk@{0Rj% z43xD3D2}=A50}D-Hk6GZ0heYYt6>fbQ*|I6KS7`9tx9Jf>UJ%|4R-YfC{l$Mw6N`Q z2h9noc8a58zBS7pfv#DfqiyECq22+VMY(djm~GWXeM-IXA^pCUvcW@l@NAI3fG*bR z8&N&hY7Q3FkLW`Y$HxRY;{Np${keWb8?9<}ftt(h#ljKChop|`QUL)NIPfMn7-)yn zL4oJUg(HFsr9JT%baHbjcp5^tqGtfdXTCXvc0b*U(WBu4qza6>eT^6chfd_*+PtrGv7W9Qgi z#Mm3qOU%X_>F^J}7)tMbmMEX2u2dgK0 z#OgYUM65uKSq&K=hM02FwTi^-5{E74^3KsUqd$Ps-906(VJnUY^>&GyPik2RI%G`? zph}v@ReRur>?MqH+(gXIQv$&oIW-0Lk3S4Cd)h$g9~ot>TW<gnz@Musf8d6^dKZ0i&4Jhq7%q&12K5r@UOaZ1_7p zJkF9GBGzIyDI)zEP((UTzZ;1a0nTb$;R_S#G&9dTO6v)6&#SmnFYb3P7WY)7sGR>e z1UYxMl16q5{k}$3Qg-5AAo$h5{lrqe4Odp4S!!cW1_hO|wF*I#$z_X$P`4F!1u~sR zzGcMNIw5x#EGfg&ym&>7eaQuoD^;BbR7O0Xn<3PB(hBRA)_9(DpQX=}ss!{ao;cte z%yb)ea4;gNP9(hGEvj#WQIC0^z825m8Y6BG2A&Qj-fBgGz~1k@2-^i0G{PvCU+6zce49w=B3KlYzKc$E)2KG-{z%{3UVpzk}` z?c2o+{yxCT&OjnkNr(F2wLW-}59UGje^EDRx<~TaL}O2(Hzif0;*d(uN)>Uwz-+-x zElK=piMoz?23OWr*fGG=ez6ah!t zwhPq|2>PDV+-!0jUv`VhkpogDDPe0*NWdViWcI7FR-8^>e`<=R0uQFAFyoxCI64HX z)lXbJ2bl3HX>7TPTjGp4yhVl--(9vWqeAk9&a#YhVDsVOih=#Sv%{w>BQYRxss8V( z#2A!a$-x`EoDLRq#eiY#g>+H|2M+iR=V4210sgTlQrdqT{Pm~5ZI#&r0q}a%ZL&_w5Nb!+6sM36HdDb!6O93xD?^@!sBBkN|fhFG?qXK|6;}zJI_lNj< zB=-b+#+q=kWS_yd90>WEK^B`$D>v-XW({G%wAp7U8-vT z)-}~Zm1ajs*Oa{ksmZk>+ZOVCK~a)Jq12}0apl5LwJv_uD7;u$I(QqPD@$!xE%gZ< zTuaGMn0)DAby0268BQ{XEzv%0$O@EKaTNaCiNd9?Kt@K=Y2a>aT`vICM-#4GJO^!!qfp2rm(hsD(BIqx9dYE%pp@T1}RcmWcJxdyzm z1+&dE;v#d7nvQHfDi?i@OX-;8-wf5{f;L$sH_Z-9C82`9JL&ghWl#2mpZ?z-!9^0Z z8TJrp%!6C0%b0J5uCvhK!#iA)vQM}sWq7~hw6i2$;Gi*AECh*+CSkJ#e|b3FQz`l% zV{?_0${4CjRuceQ@Y~746MXxA(th#Sf*5cU#23U^4e%4wNU)0YxuX%FP1Oo67L1tF z8@jkKSM-h~frnbv{fZ*k*{n)#fPen4dag=}e!D7Q+r#?tmxhyhVXTd46$QGKpPz?+ zUGqd~E*c>Ex?3n0xbXL z>h^Y>W_7Gn+dH*@`8MlGs@YbrX0Xix+SmOJ2P=nfNw$v@@d`%0rUc==U^V9-4fi8( z3l)6*aNXcqPJ}KPwVsRjCe)4EQ#aH594KEf;vfeS7>w9jH^a+ygU_PPj$p*Ty6?Z> zN@Q7lGMtzm1J*k%w)ebE^7koNkgUDf4(!jxYG6)RcrTs(mDfzv>4*5>l^zJJ!xge- zqQW&QJW$k3Jl@R<<-^;${D^}$$TbuF3`G#~Ig#-YnmgJH-2fqdI-@g>fS6mS1Y`O_ z3?UvoJX^#aY*2y~L+nz`y6S{~hbU&4imOsaMvcK}9?gg$irOE3v6FXST`l>(AvIx= z*TiJ(Cakl6T06Qh z?@TAdg|_yU@uQ&_i*Hp8f72D#!Iw<00?_hGAkCGS^C)d151INi$Elzv3{PYR+OXX4 zIi-gULzSWKlCgm0hFR~{14S+kexir=ipQHbmF)K(do5N=g(uAv4_kdMut}>Zyo`Qt zrQb(P#U%&EM2j>3OEkom*G9hr?DlK#cc!!N5mTklC^{1Uy_0_zldxUZrO|)5jj5i= z@1mOCE9&?qN``fPNp<;!rE1C=R9n zVyspKSCd*&1Jt?qi5@8=nF5FT;7}jDHZapr>MAwz)x_7AKTuKZRf}KYM^FX_2kq{Gg_!lf)u6{w@z8hj1wlaZ$~ZNeiYHEMf)2T}G% z&F!h$I>`>-tZ+=PNUrLC7s!U zn!HIu@8?nuG|Q`=-IUWQ^vHK?>NEVNW`^{1|Ln@rqBg2I5whB%6Qr~TW7HuI9rdOc zyIol?)E0J?vZ>?Pl6^DuOUst9|EvkOxAX0SY{wCQ8-`ouKBygRJC3?Ujdy`D%68-K zl`dJk%XZlq+I(c^yJ%+1j_0{_5fm?FO_fE7b*a+_I^-`_?&Z)atu3We@Cf%KXL9^0 zXKT1pvJLQvmyqHx-n-oq=B+Ye27A^k%Jdn&%OYeRmWX^i*#Fsz75v`%q&4~-`O*5k zHL-%{0}VsbEPO#9|Fj(WB^^ZNKUiPTuU?jTG0Ra!{bU`fTU2L2saO=gz)JygmW74s zh+JK^4rGD* z1kZV*1Diu7ZH{vv&$&x;wA0l!N}!Z}pBCbaAtbF2*ij<*EeUA8f$>|&a`J~5zh#h$ zUm$o*0Rs2KzLD0;kDRZZfWRi6l3kihMsiBnOWgc<)QcmZbehKzcuq zOLo**mf^I8EN^jRR@ujWo^_9!mbxWwET6q3g1wcS7Z;mZRP>6t*li)zZ5DnNHU(C@ zj%J8GEQ4LQUUl6e>bjWfy1lCFnq~c;cimr=o$o86j_5EcFRuWWWSz^-^H0HN)k~q< z{){13mDZps%y86f2(#O2cu>l11E8{OfAmVI@{!W(W59|OT!V%SUheZ($0=dUgt2{4 z?VyJXpXwXRy;3r0M?!Kmu=QZU5-E01GnPoXXPV)_hMIJ7SK?tMdVh;oK);kunmO(V4QE!*vk6hq1?m&4!T)vzX-N^4{HcR733Uub#Kgrwp=4$RY>F&}W9DJDZZqW|V4 zv8#$z9tRaRtr#AY;Ic&B4qBEr8%L`W9oL`(9Kbn$C9_RzEbLYem-`luN^q03t?CTG(3HF)GM~$S9JeK$4eMx%%7_<|s)S<6 zc8oheM_T)%m+_2@sbb2o>}(lA;Rm2N+=S(EnwRHH53n_W3d>`*hS4%8>*l@e-~rwJ zR9L+OIjooW>Jkrl08bW|PJFchm899~U?^C#1G}#^8*{^I+&54+1L}6`f6CDaax|)+ zgHGCtPuV$LP*8s&jt}cV#oj-H0$u%vK>2{zp3Z-omlzGd8n-|EQYZDjZ{jekmh{>h zE|zIadp*sI(X?H*Y@j}!QD8QB4fdrUqQcz&_@5y^_F)L$dBb+t5XS9mS|`d_R~mGO ze@!<0FVxTT^s@)O?X5yF@;W9mqby5&Ic?G9WH7)65c!c((PoaA6j2IQ&N{TifGL~= zDziO2o=m`O<$T@{k}spD9e31?;GR-e1LPGg_M>lxJ5Z8tbX)c-;M!c*^FuPbfIVo4 z-==Q7jP_=6_O{9Q;}-uA?4Hq$#e%`6dmw%REU!y}ioZz`&aJ}inc(YEk&b6$Lu^}2 zif#o4Z2uU+?y{817o>#y@i;`S%RxXCo!%^k8VWB0jjcIUILr;M%ACP-De3)Id~f2B(5 z9B5w*p_(BmBODduB2}ska#X%OoZR3hoU7~&u%|67?9cAUe3+K~>1111Wb5QFs^T4$ zV>#vQR4I@t!7SQ;*^~$^S9X6ZV;@Oj8@3OtCH-l zs;vH07LcjMmv0Tbx=hjNb|`gHBu5nm=#Zn4$Q<<%md_VMZ+eOECHLupq@7xO3D2j( z0e{>Mh1>mc-xIxY`rUUe)BIyQJ*eJu0I%waHt440c7=bego2_`RFvnQi+j7aYWJxU zUqNH~ed{w>A$_JAzO!+{*6=u}5Bfjg%`&_N4W$xOSMZ4N2-0`{86X(HMAPHbvxZM=?6_TsKiMG?3D0DeCiD_5qIi=|mTr7E0F zo}_^UzTVx;lcK8Vt_&cA4_{;=TA9=@+jU(j9~pU9M(muFnGrNiolI8qF3oc!OxvZn z1(%}nFiXP3HRV|P>XI;-$y^+c^R}62!Xev~FlUa#3)Ynmn>U2klBdFp_=6)*|AE30 z$F6X1iO-X4S$ETolao~RT>`y>dP6!5+HOZP10RhsZ5WY}rd?s9xq-Jb667!$mcGjd zE3-M6#gJe3stF&+MT?PfR5U)tn|Kwxso;UCCD3Tcw|?Eylcgxp;bo;A>H(#@kqXZc zf%m8uW%w`SD7cOvOH`qap}?CYa)qYry^q;wRr~2tXckDdSlP{wmu3T}IvF@2O+ws1 z7r0W~G|tS9<;7qS_lz`Se=a~dhB}#B=8Dmf*^#Wew;3-+Z&FBqQkj!^4&?eN*fcuG zh_Q=dZ0e1P>yJr<{fDtw4r4*%a2eSQrH;RbKyPBL zYRRp!Sw%{3wYsAy%0`Wsr-8#hzcqCHf&i=zS(=gdxH?0~lXrIiw48)LVG{m46zyNU zJ`g=xi9694hP-=(X*+fgn%_nLOJd{h5ti$?J!oTcrZy?VI`ErEh9cg;#EZ$q3~P@t%%F?Kqg;fO@^9-G9-lk2w9X^BGv zH@!DRFa!x1q$Dw^lo?m!!< zhKss`Mw*ux#u3I8=GqqYJkNg}a$g4Q1<1sb$Gbo;{5ZWPjDCj;#6NRIdK9*9UD+!_ z93Mg}6-zQ2LMPJdikuK_qA-Kk71&Y&!ikl_6d8eqe>d{JjIL5_9`#m6vcm4FkPKAl zSy)J>S6iDV8Q`Znb?9CQ6n>yG0!8)CG59a}2qvo^Y{SkDG@t#GA0Of;tWX6c;{~uI zIX)ziE>88=2@UIIU4NZpm1&XNv}K}Bac%*7SZE_%m`!@khBw}XfKh2}u|nh}4h~9< z17>}a(>ELF%#BlhrfVtA><6q*Uafo8x`I`S3hD|NA=Pm*)p3NIOKP`4-`&jXG|E9b z5&UQp*53jl4h~B7P@O8{m42Y_po(7$WulD2aXbhm4rMbM7u53)#Xlu9#Bu-;8B`i_ zq(F7caGj9Y+QC6}O6|%w3`Z=uG4xy;k|?p)0TROFM;&RH$A{E}zsfZ%DsP>wt=*V5 z@07v5&bl5;G>msgs*>5lU`E$7f2Pa1l%G^9 zSSNF{;|BlfIxN7Bi;lU#^TxXX8n5X=QQ{xDWJxwXiYK7i@zT7ja%|KfT3G}VzJz6H*rUr2e>}>u>s90=1|D+Vb6K`sk7zyMGKAG{6Eib;{YS^$df>=r#oMUWuD| z2D}-Jjqvi?mDzT-(-x2J0tHqGIx4Q;v8jroxTIeO+pQ)Mh0uxZvTi2ezF!BzcBC=c z(11-8eAG*lo_#{3^A73apV3;;1l={9F!-!#Uxjb)3_Ywq<{CnOEmjrJ0bI=Xjlv2& zAF71{{!##Ys&l9cDgxML97GkUMuVL-Vc4p@@i^@8?$2((^!;_Z#H$ed_|(y#*D3jE zozS;+vfK$fgAdOqi-KAdCbSJx&DXXKF^EH;7yrNNMC13~!|!QLT$MM*?h?B4y0H6B z%0;!@Q!m**MUp6Vau4Fg$N%J`-Sw5huc6-wTy;9MmdX@f7-&8Ws~yWhmA+Heq2|=l zTkCw{Wwp+9=rv7>D2q&WV6iIbh0u0d8c7Gw>(qRsxLmjL(z8?Zjg?ZZRcg1A{jF~B zGWvoF0=vmlr9|Ayq@>kZ1zm!(iCq%-F6Zrs{iHjPa-Di{-7Eto zpeYRO9UWRA^$@GDKg3I=>L@BV_`r!^xf-^gJFI60|bRc2U7n7i^>omK^Y=Uwj37=RYM( zs)V0IJ^HiT3~H~cy<5(f)(hWTFZ_w*Ksbz4jIw@=EBr0bNsfJe0Xr&*!02>_>2;P$ z@9@kFLo6SOaXDxU$jj%T#F=72YC}8P7<_f#n(!yNhB!8%CcM^Gx?BB;mVSGFP53o< z^H%qo@cX$WdZV`&=i*v5R0*L7t<)o>wV_wruwKe~0L7D!y?pkDn)WY+{*8>4>pJY; zoNsmlakhJ@(*|v;es>+#%ZtrtbMYP#(VU8ceU6PTA>YcdtEv)ZqB$@JVoXG2MqDv= zlHSxaw#NewqsOvKWsjk?s+2|O_b0>}Vn7^5BqO0pC#+$Y+73cep zk`mKm1yIAM1|kwr<#bikRAfiQ$VeIa13&jA+}y)9GWlT-fXFHRhrRTE#qYfl><>zr ztV+4XE9L%FDfjn6X&@W~BhWTlCY+{6${}_)*whv&JC1hp;vzu8fyu~r3cVH4;U9^K zY^1_QW6eZ1@tDYdc)a}7Kyv_$FBa|^=0}9xMW=qIDgHvXMqCT^7I_yt@gnV9(ZM=R z28oj)za(CErIMoVU(2&H-FPxChUc<18l%#OLw9z6DfBjNHL+1~*G^QO-`ZQlPoVRJ z<3s#vt6{bKyqb~jG- zO0xZGPo}?O7(R;+XizoVWl1C0ojVNXFV?uysr-YT8BFCu*qcecH~U+(mnp|t61QhE z#@?zoE+h-mi9Ypm=slv7wmw0i@JS~K^A&%o5}$N}u>8M0LD-f$LBNuX2C3cffj>S$ zSboYAg!PJDQ?>mMCkPH2yQA69lTidD002 z`6^+Hg`Q6;7wm>tYOaH_{ihRzBV2E!Q&}HTCkSaebHo4o1Y!9fogj?I+A;4F4x6MW zhYI8Q0qjZ-4gyMHq$26~%3Cqr3s^FB!f;ZPT=pSnb(-)+V6gs|69&@>%;MAu15Dwc zPwJRXWS&jA3OwC-_@bFpAH3)#JoT@_OSP(epfszw+*uQhK--23+(P zjNpMj%311;q2{{mc0jHcV-j=%?ZhZHPO-%hiAjMFO7U~wyEEe1(u8?xyCtsZ77>?5 zOf!C-%=l!qh{-1RjWBCv=Fbzzzs&@U&Pqg*GqC zNTQ(x_&*DOT~Xf8Y?^O1bz!vsWc}P1J7?2q-90XFl!qsqRe%iV^fY63zRA`BohJae z$~+*fs|5LTODcOPWE;duvR{O#97Gzq`z5bL@gyaFdB4>03AO=2)CWzlg?{X7QdSPS zEuXS}i?CAFLlL0LK^2tb6Ol@tMM(M)w$D^L*?kj_@09*W(!p8;$4StQPm!{0Xu=*+$IGz$zq!Rq2UIuk(eZJSC zzo^c;C{@e+RKt3v;{L~P*p+^d^-r~Na4KaswQ;z>Z>H4asf9OCMN@i_9OcKfdC-OW z4wRH#m3<`6_xDvBcC{n_6mKz~pwKI%Nxg)W{3C!>f#o2LB37+{IPa2WWzw9$DZZJmI0sjTsBx)ZGM@HEdvl#5`~>lU6jLe>X+oOGXe!Utc_RBUfsc3OjHGT zabs4WMPuhrLDPv)Z~h56W!lKatUfzO(6FdBzoeh*xR^VF-aO6uTzsz8&#fwjwqKte zD3`RgTI-^_sB${e!_j7@y)rwhqS~lO{>fL*{pf09IR9o4(ZO#9y`p9xf2&A|KFaS# zY%8qo?it2!Mbq+JN)H(Jl|Hk{4mGSkyj`+&0oCnjjTW&>R79k>dTd_tHDW?Udxhqw zwbb^b*MK^n57yWhl2lmfJ)8EdsoCqg*_W^%N;o@|A7LSYlwBC}R_Q zIDbT4k^_@|RStUVz%X91(eq{f{ECZ5E?1M|V;_70!QZYUEkp!okp3HeI9KIsryi}; z;|%rqlP>TC;9bXj(~vf$cD7tM0K@>ttcySwqT#N` zgA$k1g5$9YRzb*Qql6{49MwslkZMUhq@Um6n>TR^&o(4N_l+h?HtOv*d`mH(>X_G3 zF>j|JB{uGTL9e-p_qM$UbgG+PB}?U{I%NA*$Wu!gdf{^}-vloACVn>{^6E7a|!4sreQ%pN%cLjbW&$i3$Sgd3jU0zH;ff)LW0`!l!ob2!Eeh)z#;VPme?%L_jZSU zMAI8!DWh1?kN-btvTLXs7%w~)4@|@N>n3w&1iCWr=DxMz+3>0^MKpQ zJ(gR79syB#`%q+0w{SK<+`v{J4d zk9;#7uySUYO{DNYQsK^uGS{-R#I2Lnq9RF>9x%hvt8gvr9*{c$6xLH2@vfdgtWWg> zMHiLsz-bgsB)@}xr8tpZngm^qnFouSX*5YoJV4Js9g29sT}^`S7FtY#ZK&sNA>el5 z7_I4NnrdpZsfqYzI$2wJIR)L3C0_6G240pw+Co6G)o6Y1w=9(-#x}Jw0P?3d+uus2 zB9QvGLVvcY37*atw6Y)~FnQD2_o>oWYKT>3Xy85%IMPA`Gh1q4xkn^dG}pk<<}@~J zSJ=zsSXr_U~9`LgV{O$oW zy^7B9fVruvdyRQD^~(GB5)XL7d$rpG7I?tFJm7dM4Sb%is(j4ruC?A5_IW+|eYyr# zd9Ob8azF0ndedv)K`+yZw2xCLN}c;&XN(s5s_Z{McW@ zI9pb9TZ+hYLD-uI%fmQpf-X894GT(0`sO;*?jj7m)7;DTNv8a?{GH*|`8W;n8+$3i z_AJc$GHJMPr@9@ZVh%S&c$>=m1HE{Q^w}4-^fMf8E&$1?g}Rs;e4Mc69nBG5Nbx@r zyn&SJXHY#KC3F0rh5d4V$UwM)xR5(C5uRU$@Qw^@%Y#EzXd}H*yvlu43-#ssEub}u zc|MFQa~~;L9L>UB+BSLlwCdifm)>m_Xwvt=z`|hQu3%twFz^h1NPTmCFn)6|P(%Ij z1&!s0ttG*8h?9Drdg4_w2Jm9Ad*2QQR#U2dl71o=?!rkrP)Iv zTJz48a&Ez2z_ zwmPYy$5YVTVb6s+E&H}GjxUc$?HN{Z4~u8(k5Er`(Sh^yvzvbAdHBWK;{3}4`swGT z`Z-uXFW1kQes@) zhjsMVm7~X1znL2hObo#P48W5E@SWUSi4L0vf(z+(gOv$_MIVe4md zBkpMbY#!b113WF*Y__I^-r)yNF;xF`&kuEV?O$ZwAp7lnnTfNcjS8tTO z(TsSb8Nk-3c>{P>U0m(3JP%bn>^vV+JKkJzfWgr?(qY}bh2UsmJpH9J^z#D!Jg44D z?V+FT31JRWJ2H(`9hU2%QHNbr7f06nOnVQbJ04T-?Yq^pqkd-l)hr?|un$J;$8AoD zWUB|?)&LKY^DJ#oav_HyK?+z>DtYzv$55B!<8hCr=b-_D0_37C0~!CitkV`=hjn^} z*JGWYYKMcyidj^JQxkM?lbEB|-dZ~AX~@=R}H zUE!hG{4!Wq`?}w_NAiaT!q?*ElvYfNzz~h~2J=6rvONOtXdI&uKmmeuk|xsoiN8nG zWJZ#QKB_cbb2RQE>h(|x)e(Zu(fxXQ3c0~rPk}8x((16bK4o>-<#n{FNj)^qXBU#o z9(w5MdlEc9cnC2Annuijh4xnQCg(2>KrL0FoR=P+k2>J3ol{1!$F7D!834OLsh`BVO5b zyqWXuQ$xAgu-Q|FBj~&!ri?=$YKiJ6W1?u|@za(<9d3zuRJ4vJQ3!fqm4m!3SwC&* zTTWQllJ>+;tHH7Ym1J# z)5HOm>#)N@wWFU{@ki-C!E_~ldrGt}Me2#4e!YQwt;dcYhewei+*?jJUD;^!3~p9P z>%?`2T`bc+9fiIl%soT!rf}n+Luu<|Xx}KqmJK$IHfsUHN!yYKYy`NlBrqn*+dV3W znGHlnE?s+ARtUW-_fO{A;&1&>s}mE2%m!}KGP5n|S|QtN5ZA@UQ^n;#4i|0DHuZ8q zp>b*K7-HI1$h8_Ic}Awb{pH4HlVF~iM&7Mq`HKX^9dLI#L ziKn{8VKBBs#mFu0&`;Csi+bv7*Alihoz77HyTos%lg+LFF7d)JzoR#CFiY}N7mfK+ zJUG;x<(T3e*mU6eM;@v%Z*4AWOK;1EARult-!g5~tHN`pcq#DDNDC5xrCuCxe|l9_ z)e@JCTLb5xiAn>qG0xL!*=XwoBPr8hw!$o3HWc-5mktHkx_77nbY*qlWhlLY9jI%Q ztdIhSqyk2>IxkN)fZ3caLtBR$G1;(kyb%{oj*=uo2>sS+p%Kq-8Bp)da3e$-d}eu9wElG9zEg_eYtw<5sdKGx<_n z*f}zE3(Q(bd!WcDjmfm%aJ4qxJ;5lJO|Yc$3?dh_+aTz6~~>LQBf z`^A{ZZdKzwQq0En5?YH(L`teM-!#&!)JF4QtpH}krdCS>hVq~^w@)zRu9z~1{JzY> zArGi>;lU#`?UBnrPIDbGCASyqp0h_X`8_>p*5RbF^I3H!Da;>`4Eur|HjK?fel3R; z_F+%56|%F(p)}NvD=mAwX$sr1`=E=Re8)j)65JdOL30NDMWb9+ z(*Rj1cM6P>n&v`lcVPAYa*8s5IXW-)9j zi%i$^1n)Hv5Da!nQcQ`O24YKQ%7@T>Ve}4qAe)rb=LjVFxGNc!eVxN5wxQcuWO5 zkABeL13m5rKBrYAM~cq|pyf^DvypeFyIlcEelgMnin^xw(~~Iab?_H_$o-ipja0kV9&3F5*NkbsB^C!&Iw!z`6j5tVpsK#`}^ z*N$xrG4fDeaiMARmKicc^hu_z9*GVFo*0snF9o_oGpIr~*f!F<5NMAgO^PT_iHIf< zjlHNLPAt!kwXe!4tv%N*ZEv3gX&cyAmgDIK%x_2c1rR)1cNg};Haqz+vEOT^Zam&- zLC++P#@{2SToy3rh<`XJCg++`G=fRZ-n012eMl&wItv|(Mw}erLey4ZU#SVSFNuzd z$C+PCwrL=Y5TY70b|99>$0cDJNf&ts;~NXMrJ3PaqNj?^%ZHT`V{f4TG}^scRCHsq zoK-hP!cpnM*zdiG-9aJSU!02DD5}9LBac<*RYt#VbXZ8^qO-l`)x4csYacawdMi zN;Uz!yhMfpFRzo0JWSk}Fmd^T$?myd*H!{%fGPfsY=|>FfyR3bv!TmAA%6P17Mw0_ zztHn+k)d6BEXltEkVO><#GOEOWmD0$wrm3>`HAe6DI=^a8_^{YE+#^z@eXI@vt>H6 zE?0wQ945nhC^9))+lW|-dMPdqq#)O~ZVYGBw!%ME!L&#g-jlvkijRs6=%z$Dko}6% zLUGO<_A4m_K1aU)9Ay!#q!zZSuhT3^FW~LMux5ATnk9BMDMN|@05)}axXmQJldy2^R27#}$my-&)8ZT<`X zHv0*Gv%W8du5AGw+(9;cghZdxl?sK4OSv{KGZ7O2mvw(WUNEl7#}RMx+CUhImWNwXO(QceV}}NgahV^A6c%LH$Aeg z0J^*&xpEKC7r+WRvM~}k@gbXJ=ZodjqgBa*6DNSHOTx4UbWq{uBxQ5N2(_{W;sRJv zhzqvLR)hn|@|Fk5%NE0Tr zPw;tSGMkY`r!BM7_(LP{h^pD)QHRoM50oXvS{@bqrbQ|SjouTN&1aMWI&Xb=GE(SU zPB#zA#!vM&S8bOqpBT3_%u5=XEwg2#uY2|9X;w?oC}L7X+KwK$^j-tr|7+-M-8|l` zshQz^0vu|SEq$P!nLtB;?pnZuguc!PG??}3P=lw*7DzR!MH`qG>9vqB&O3&SWvhkb zjoPGWoolw5L1+s*8JpgMM>5`oeVbY};Q;o8t|vAMrbXP!uxrJnEoO$eYkHLCdf04g zWr(bPW(F?xVnCG{yiIc}%W46Y+Ra-wwQVsG#!{sB%Ri8`d8>?C{B3TfLxIh$RyvjV zJMWk-8mly2GOF#Q2=gxKb*pH$63zMnIu7TD{O46-@ z_ZOHlUIKdyOWMWgg%8gSV#PeG`L|^7nr^q|>6@%a!)&F2LO~Hbc{Y385V)O#05AuJ zMEJprP|{+P+UGrZ5$yCrxwWEmR9q7|aH-t^DgsmHLGK9Qevv@FT_i=L+bvNn*@r!s zW%Rf0d~T326qqs=bJ!8pa5S7a>eDovEwK2TL-DwxV@8f^qx%FcKUtv@vK1D;X*lIL zHp+lh_n;J;rkV*@cCuzF>RNo> z3x3Tndjb7&#F$Ab9;fknR^vPIBuO;ZI|4j=X`e#|6SB(Q{8c*F0T4+3EO>&xRr?i zgAuE(IuWHX!RkePT|Z)G=;U%2og(gmQ^c)5McnpN#JzorxKB?J_tPoj=BAw-x9k*g zYfsTX8?95MYe>i^81=y^lGUD^Y=47#z5UTCKKb)0s`l+E(#>mda@?9z#NBm@xFr^U zY<%6Q*$wN}?Vg4wrP*+bs=auMxP7OH`|K2Pn@&-+*G~~w!PUjhJkIxBjJgiDdcf@- zphUP+cl!x-sjcBrYI!EuS@rJR3j&FH2H?H{xL*LiGyo3{z?TQ$SOC5{0ACk?+XUde z0G#Ch&1TarZ2{f*?`CqZ6&(YylLK&<06Z-Kmj>Xm0eE5n{$~I_UG?@^x@)`Y=LPyn zNV`kjibgPq(|HLlf`Aj2U5&3Kex{X;n77Y#GCDg&)Gx|9XU*U-|nrxw%2QlU=BG4or z(O&0O5+$9z)jLh25;t%_}_i*VRZGSFB}-g!}SRayPaQGFr4y^h4ZpGD{$ zQV`+%+v}7{1U>IcrRl5`#k3HdQVhz|FUbOWcdv{>m9>|8bXK}F7X*`@1)Glf^XK0M zf8w0m@&D%dKZYL`ZSg6Z-Hy(7p6@oBR7~CzN`}Q|r}?z)G)?Y4p^^QXe&;E7dXVtj zfYZICG**t^QSiaQMQ9lGRucPPOutL%_u*8oyQH7%E~!7TN?NPNuO7d%;Pry%2QI)O z)>5{0^!v0_Lh+;uM88|p-8i0eKQ?LN@PsJ3%O+KzY6wB zrdJ-BU!RptT_U7VV>#>Cnr0+! z9W#uN#~lgZ)H!L$p9Z0!dRK~XNr#)Ma{{PUP55Tmvas*k@FTcdlZH4k5|i37^b?M` z1Aaq(8Ces)Ln)H8$Fle?)V122rTkGof(r$*f89-Ir;nfL1YcR-EqFGuqFYUPkvi80 zHk>^{$DQ9a z2X|B7FC};}_1aeYeTPzRr}(?bn@KH|zJ=gLbxJ)>Z$6{6`|0;F5@`CK;H^~BA&Pm0 z>iIm`^1YML@_mF2o}u4YDdr8T-ItX9W=i=B#qXjtpV99}6mvJdT|{4hn0}w6_!;zj zOwACK57okF)vZXA^l8d=P`_T%l;#hsPE8;7Pz(MZ`DVSTIe#pQz)}x*w++9YdVXzl zK9{E5OU?Ow0zPla_Y&|<3;q=WKeys*3rNJ&h_T;W@yB%_!R~CuA1lNp+gtPJ2>7KP zf2bz{iz9q?Zv^JHBovll`&;v$6wsW%P4)V*xvt>qw)~#K2pn(ClS640wDDKLJ#F}G zid-Lv{Ja%OF(ufs7JS9!2yAT2mkmc?Q8T`I00Iw3_+d)3yCpwL&E3_Ej6WyXr_KDL zRcMh@$p5_hsQh%l7MzHa3lVhZf`tr_#|G*CQQnf__C4xtgBy52wec7-=?12 zOBeff$cH3|-aPM6!B8Iv9rP0Z+0WD82M77!&_E~q;8i|&tq+d$!MG2O@xci`_zxc} z_rV)|a0d6`*#WpR0Ox4;C6kF;Nkz}+fpJEQFP@IF!*0V@k43%U?RA59U~q1#qwmJx z{8aEh4DL+@t1SV*jY%o7|r}EG00AlPfR*aq{fyt9uXU4$@r; z{K@a*z{EMt2QN+$09)b^EcLXh``2mjxe(es!1r2TZv}LyA8{t6zr_!>P(u5uui8G? z8d4^QdI=--3p%aN>oe=WCIX14>WE&Sb=KE8fi>=fKE{I0QVMi@@FFO0c4{J=0pC>k zS`R_sYY_aK(scV@*9LKgft8R9!1Ds|!T`J|058!V68xCE1MqzTxH!X< zb@IW$61>6(uk^vTJ{Xuv#XdN~2S@v0K@h3;GJT|uvom2ew(Vm@44b_SJPqTVvZ6#i%NT# zewWa14gG!}A};k8iyym?7^4vXt~;@l20u>B-u)rXX}%fKY~(SMf7}Cs1t!1yG6Zh1 zc-19jsl()JDCPr`?-)Y4EdC_%dxtH)j)2cX{7z!zR+#)4C0-cfGsYqCgvECgN4M4D zdkA>N)I8pEhGy+{8a`{b+~Sqf=+Hy$!o33lcD4_8^}+Lf@IoJq`e30C_VU3?e9-m5 z0X}${5B|jmOMLJe9~|z3*ZW|Z503M}zxkl1->L8<4@8gWV(C~MJ?#q}Lf@rame1l4 zJU%$!;e6>>pD@qEpihYxV({Z0UT_fxaezJV<`BeTPB}wgI(E%vzN>Wz;*fie)**Oj zS-=@O)G?L#VGQDstKef8+?^uKPhxOSD)i(T_CisE|c0$Li>V5?s<-m45qZjLnwX7aD>iNeiZ8TV7+oHj5Z7Z9xW&+5dVm> zque__SRhY@2;NeN;0d93)dz*zRqvycSJSWZ`LLXRm(cIc^jk@1A+HnsJpFE0Z^=0m zc_z$_Nshacm}IyqiS6c@;oViccc1t=Hqut@ytodN+y4)k+yL1*(+AHzB`*=+Yx)FO zYacACyU$_mPr*S$U9$O3rLMmYio9!ZC@M1hLEptX^2|)hYet(fDPA3eBFD3P8vUhQ zKZ6_EQcZ!_QTTcxxltQv>@0kv@U_BSD%h2rw*jC|=T6fJ*;#>Pz$1}|x3-j|vzO$| zV3PJK$wm5Qg5?L^CQ#MBEEI7{r14T&sVn7+Wk!V*&x|tNVn>=aqwh_bg@k?JH$9Ew zxR^4jCooH8elbxPwQXhbq{D`*ujmNJVLef$B#N$`Mn+;CvZe9vWatgHwzr8|0C$Zr zlX>TuvRZ~7LV>L-4d7%vMXH48<2@`W3hnv1(s%#`1;xDHmYqzpeMEKk)9()Y zC0R$dz)E>`RrwFZZM?1dv=`n^f9(M;`gh4tt6#8&aaF@dOs*W5`bUM2;cL-uj<_L` zj4h2z@%DrR4GxS>#;!yS%mYOz8+5S9ypnCv2652N!;|9a>CwqI!GDv**^}~;Fc2d? zYm$^~<8U)6#Zx29Sc&VPtH_vGH$76hu(A^N=ITgti2v>X6jlHEAClB@GFCTKZIU(t zOZKrUWZHcW$_)cUU@Y$W@4}}iAMAxMWzAR^0k&m0{Gzc(1I1j?m7%d2Uxz%xEGG2!l2nSMxj6l= zkI;#wiB8u`AF#XfW*L${g0e^eh)n=oRXqTuDXxMUf~VD}*=Zx1MO1CGFF2ia#S3gy zDO*Hddgn=z9P}aGQODRyp#!;z1o|1Q7_?spo|QCVV|X&IfbWEuIp|%Tai&>XSOCu0GXwyQoJSoxuT~K&5qHJ3vl9ki$>lWuCt2io}vtB|yH= zjEc+pC^ff;xGGwlmzOs~WKCk(ekcC{s7GU{a=>#9I>3r0k%U>>hhujploc$84O9mk7U|%KDB4t7qCe6MgSa zKL;@CzLBP9$4w`6fU8%R?ni}qVKDGn>2Z-aNn9RDO8MjnK*OPmDe&81?i8a`rd3Wc zri?C@<|7k~W77I%vT-#^N{$BBbkzu>!ZO!OwyC#qC3ztQ7R|V4yitNet^D-?23obG zFRhUzF2EkAXCxL|SLVj9YRgus_&C{EC+lD&pciAWNV%x!nHl`q8DwSTbtx!_@Nvn% z1xzZgjV2OP(0>we%~SIdvGPQWtul=L(KjYPG!>6-T{kfe=tuQn3PdVPd_MMnp>Bl{L-w;8bFp_E)8-?wxh=aeU;cw@4Wkk;znK>OuG zQ;kG}Q>l8;bsPQe^}W=ytpu;2-$&{9A^QD=epdz#DZV$DI$t0Qkv4E> zY^KSVUxZ|;((q<4#C~J)2hg#wozI|cPmoX1_e}nQgTOn6j=@6>H0tB9g9h!o0JH8i z_{->;(q&JYd{b|-F!_?Hi_R^PeC-Hh_Z?_K!LZwyjE5}7HktgM@s#qg$=3s#LGjDG zO#aJcio6vf(VrT8XBP3kXfTx;G6@LCy|7IXL!u(5YPS zX&<1yS93f5HaLR6p?^;{^Q5(RvWfG*H)@Qn#9!kX{1uP&hPV8o-X@wT!|!P!lAF1; zc+8?PA2{o$tn7YYcjEJI9e+K-j9#cyB6!xL}xM`!0R~`Y8sC zz0F?JEy=xsfQlXEDBEwC72zEy4OA{M2R_ZdcMd zHJoo8t?Vz*b3GRuM;{=oPCF2MmTWye%*`i8KXTDyGx-+ye*g-@wnwY3qZKy?3nm-Z z3!TcGN97d1*jn>;<~R1y{u5C`0F zfrL$vB>^||hk)XW1l%`3L{UNBIaNJL^y+>8_j&KJbXV6@SJ!&#oT_ua2O$mcCy+km z)K&X45AuX*mD4MgdhPnrTSjddy%l$nQhnrEp7ftTy;u4^?zD9BJG(Yd%Ig|=-6*fy z6LBYC0{ZPV^F6TkHmjrBL4VU zUxfFQE#DX9t=4`2c$fkk?9}k`#QnG8Yj563_q4Co8B&n^N543g%J7qJZMmJ>7983Z zysj;n(-s`u7W|urUr@DGB`k)Rc$HPm^)6M4cJ=NdRFtZ?bK0x7#eF85!$BEo{n%8l z)V^lRcHYg@(>ILn8>1Y=>;mD7oN0eNQLDy7SZ*_+KbFG?jrgi_KkeLGoclx0=-I;A z;ai`U@MF(12)-nPn=punCJ}PC2Ek^DNOlrqk4e>um)e3c&JW+ZYr>IAO!6FN_k~1k z`yPYRHi0}UQ%jPyA7hmcT2HEkD_Nz>RE@5ZaRcNufJ-0fp~JVf9wfB}?`R8-Zwp=} z#X`te-p*GQ{D)IN)$&oNGU{otQ;D_%pT7SQb6sog)H@@c3dRqRR2|h*zEjN*rz@*Y zdYd_Ex%HeV8Rt|vzI7;BVZ|RS@(_l>E(_bk=>e7UVy6?-(_uFw&mdl&LB4P!<%*Wq zk&_ZX<^E*cX;PxWL&>f35IQjkl2~$F04fQxbI}SKxb&1IwiSPMavbj^Iga#VXOWj2x_-K- zRb2mtIs)t&>HyA|WIE#*TwUY}vM+0bY&RK^U(TAzWZ)1F7is0ioPKd9eZ*UAhns9z zLlnOeY5RI>)SunkCH?ca4(RN@vboo|0u4qEdCkR-O*wGWu70jSDc7DJzAq^n;pFSy zBEs@jK|s0D0C$*TO6)W*viU zJeq;Oek~#dFw7V_?76V0=i2{{5f&FeqiG>uH5?hAw<<)vInu00)E8wQ$Zief=vqV< zqPm!q()9>_Cbqr2XVyFu}e5MWwG~fmpM9i3IC9g z9b8YSx=R;#eOc~{N7tdbHt*lsUt0xF#ugO zE%JxiO#uWy%xJKR(KAc%I^(D`zl6waA6g*gq5x+VV~~8FD9zFnl|B16s_M`vO#b?^ zT)SiPD!m$zj}lSMFK|JYh0qoIlANR7r_`0JZJy`lJsfxAqjQ3`&@jevEMJaRYvgAk zjW-9%4bQz1E{@;2*lW-ZX+p#z=%QnAKo`A)up&KjfIYuvkss(vDd+1jG-{mSA!t9x zoEybFBOk=Pi?CNsgeyvbkDb0$vtjyNim(Ddmy5bc=wfLWEBjvO?4NmLuK1nNwp;ex zI)iuICShRGVD?x%^+&YQPM3DuXlH2fPESpvFsS{<#|WEtN`aat<7|Mbjl*yYyEO=1 zt&3#gcZ@STicUN9juAcWpE{a~rt0Z>r+&JoCzqmi^S&e))G%rDdCEIug%#tzUv3h> zh4758C*ZK~!t{klv=Qxq9;#`lPSWK?2a$m@@QE-C8rO0xSmLTMPWrmAC}Cq}#DOSu zpPmuYy;sPWGS1K}U-(Kxcfr6)I2Q`4tVum0#kTFeG~Gu78T)M9)}fs}WHXQNrJB6+ zPHDE<@1$oo&6?H1y)%Z0miu|qny_ejiYF|Q*cyq?p_Qp?QCP&vj3%3n85gGlEkFX2 za)BDS^`vesG)Yg$5ee{+fW~?*J+V)`A(5m&Gu86sjr~QaR2N(Nlih<2KlyAV?C@277-}xmoyk@@t}WiQZ;`y+5hB3;9B{H^2@XVX{_N zh)b;70QQeSi8{Q1+4=-pMwWu)t>&jL=jRpJnYIaZPuJ0^9M4$TH+^Apa+sVjhuDP4 z6VFjVSQDr?+HP;hWIjP5E~~?BB%f%cj+4W*jX?Xt!d^yc&U^pJ%u|EDUa5OCpcdj zL>qArtOYRjVJ$GZAC`(ioWWAzkQ!(Sfi2-s9F{&nXl!`g>OO87F6T~(?ql9Hup}qx zDYy{8toOqm+En+T{VmR)fJE9SlI~LhI^2D z3A_yRqQ}`V^AaG#REK*u$vLfTSWcV^1IfOagczd6N;98NCgDluvI>}t?9mFjk2yJz zonz*(XdbylZTAjt#f(TxQTsyurRFp+tx@KgTw$2F^)!tMSQLvMC|X^xyUZ1cghF`g zG(ihRLgahO)o&nkG@w2l=4&fJ4x6XEI2ftr+#M`z~c_my^KOd@J&oh3Upp`YTJ!G7413iLi#Tussbhjkt88Pl%)?bfs|MLDC5SiU& zS_4n`BCH)<-&Ho6SNJWKHm{*UckLCf23y{m8vfw6K5Eug(436cul#LZ{38twO$|+r z%vclu4T!a4n{*#*XPYD&XN0zM>#?^sF+Rh7@O?noXFkax8rem47brG z(`|RjjOQkB;8XUod0%W_~mLH_J%x-#r)8!~GCZj(*hdZJ*^>9>3rt*RhZKVUe7e=X~@m zKS-!5Z^!ttvnq5z-8!osp?0OiBkd<|S>&ezxTY?GNQM%m<-9*j6wYi*boT#AqW}D+ zL?-_2bNAmpza;s|SC|7RijI2YI~SJPsUy!bJ~zC5*q41#T*UCw8r&06zRl#esIob^ z-?<;7>||f*f#EQvCo$#z)|j=Fy&U?nmpmJi3mCGm zsm*YxXG>3+V2IKoKlyyGOh743-jLw?Q8Z1xmmV3=$2Te&0u1Ak}(IklfNZ`>e0HLol0bUr*3L zvSQ>zO{hA>+pehzmiG61qS*NXUbRp0Dn9E8nYzBe6a~@am%^Ht*Z_<{8Bg8;w-%nT z3YN=5JZTHuSafn6U#CP*BwsLoxPQZK*b7k2*9QNb6vHzC)i30XV9uBGjA(vwm^>-s zU}w{lwYClhV)7<}DDgeWBI`%SBBJQDn?W!sH|z@20D&1fXt6siDkLQ03fW?TI;h8M zLzckWpzV@3adH^m^q=I7y*Okk3dN`UF7-oS+gHMqE&t3kXPZfxt1!8hO=il@d#gV?9>v$qGcdbcYPj1yC%8?5wn&OamlCgkZi=Lm7 zqjq-c5XF?Nkq2NY96z9i$a{$#TL6;+6?v?$i00#8yN3}iAfR8Oj3@xshIt`gR6J*prs%B&=o@a$3P>&f1uII9E7Vy9h;T{A(JVrFeQ7BC^ z&!sE*{+sp^exj1_lcj|3mJ)t~lJJw1gwLde9|8%VwZUdnSwoz@}YO4I^TbCz5D=A9{DWZd zLfX;-coTT|D&cDh-_Wv`{a7=Ce6Gu-D{8{f12zfE7brbzxLFNudNK;aqR*~9iH^|x~XJ`Gg z3)QZ=9U{Au)W-SELDnT`l0DAjKZ7hc2r{bF%s~~LeThL5laI9tv{qVm{3tiwcFF5Y zQgW`73AV_XH)YIS2?~jRgZyP_0{d|&jtay`=6gNUypee295@46&1 zzA=+L@1pMwmZ4=XDJ7FRF8T$k-u$c(m&hkN{d|bD+)%mPnV|0XYf|7QGo1UA3G_W= zRA(okZihr3kQJbEgWJA7(0`apkCs&n(iu^U5f1AT4U=u^`;0OsXqT?xB#_r=z)4sus98$xkd=wb zx|~_X$?D-RQ=<^57((KKfRP02gLBUjM7nl-T61KjXK@MLLmJ}GFKF7aDQo)Ano6IO zrXXuI>Foed@pY*+96pzEYP`jFhz)e&wGl`^D59fVY|paovW9nLaX5bkoddj~UH zXiD|DSd857Ldw0P@aHRBfqGc_s`dkCk>c+{7PvUZVxDA^ODX(pacSh(lr7^|4bh-) z-t->n3MI1Y$xfG3##h=BXz>JAGZ0_$oQ}H&d8{~?&pPH^(3ko13?oL4>hw&JYs5Za z(uREr!Ym6N5g>ii)KoTk2084~b`-uoslNIZ=|JKemvWi+xl1`Pg~s}|XwOvKFHmYbet-XsMov6-3somI zspHUSp@#u7&7D+ELtG;b^B%HQ@MBY+ow5WZ8)L1pl9lIOKpy36X3;A}sDgwZL!d*n zTxbM#N5E+BQs@f2a`=_!lJ}+WlnXO~VY^GyHWfZqsGM-vz;X>)?5*YW3%Herjj+MC z!9vzIV1;t5P_7Al{nDDn$Q`c;0u6X(LorK!>;*_hUK8}4peqRM|F16GOE`sBdK$0V zW{`9m%I$x^|9|5D5a&M(g830Z7OsPXo`$%VCe(cEdjGOQjT!8 zJ8oT$RAp&cgw{&`jQcb?v&c2TyoA$xixvZ?#D0eS?CTAX5>H>z;;l8;nG1nzj1EW~ ze;{YahRpCQ0#uY5Cz_XrZ-jPuMuV7JTXGu6c_K(0`kQ|>F zyvU#5RAt)0&IMA(+d2zH6fj8>PkXj(F^Hy~T}60vZ-m?9Jb44$nt0;OqUGKanR0J3)?tdCSdz^buU_%); zPhVKE*lR2l>G}40U_HfCh49$SQ@$D^)&mEWV)0a*#<4v>rtbyOt8S#w*wBE(7Nv%D zUor4Y8A07!q6;#W(@nU#^<@=#;V`QRk{=n}+*=~BZz%oN6C}bNZTB0jEI~zWXj_9!bIIN#XNs02*F~-3Xw)hv>y%QB z#_UTaKBNf@I$e#@FxjQ?pRYJJY{oF9i}x;*)iB9Vj4mA_55qZD00MJ)`(|vi$hSKE zati+P2&^m8{p%T%Jf*QuhB_aCy3ZJmsy5#+S!01E{5~~c7Dw*{Z;tIq{V&#zt z`9&ESokr7}eG!|c`j}@sIUzO1_dC}(Jdv+$&G^#C?ysmF?n1Hm(OWkpTeUEIDgxv~ z`ASP%mpoEymZ0UwXI{D=_gnHqJvL%KmJ?HKMk^5U`#V?%u0?>$a!7H;D_MsKXRpF= zwmIKAm0n#DF|Uu9H$+5&gg!6NR~%n$Z3z9jpuegF@(^S944IE!kkASXXWt2U$hYwP zjNL!_9Un~3T*12HqLc`WQey4}kPFCYC7eD#q}fM%x}jCkqdQKXb?-ufoW0rFHgAB1 z#1(9=rzsiIGdM8+YzrMhwo8;ZJRK>Pndoh0yIibnp1pTMU%13ll(68prf*@|Eh6gvFP5FF^%PAbJolC1lera*3 zQ5imtSkbclIRYK8U7N6^Ot~`udC0F5&P+ItO%$T4vL z|N6>Y;3SZT2`gvqkJIEGgI2vJEG;p@9@VGadC%;m@ z$lsMGy$m@RR?z=m9+#7+a@D!BG&v5^n5b>`oP!5Jqr}!(okRs0?<#?=@%riTlC+(cd)6jt* z5V+Kav7&%`XP+ygtyx>FoaT7(xSYA?>0Ui0#(j_W+RH8VNj7;N$jM3oH|p#x_Dvlft*a83RQ~2JnXI14N0r((;P|C$Z-C8_3~klAyP|93Qvd?X)C$=^-&rvOy%jH z)$qgIUt7VOxHhLZ$DJl9q(+TYo;nklximlb+7-NM*WF-V!0;)5wU@pz!^x^(eaTm{77swOpMuO22T*U%k8@R%@laZiIDsL>&vvt2b*ZYAPz&F*2{d@{u~` zol#N4Qs+GqT>#hFFsGKV%z1VtYpR~Xy3(MR`a8_T|1;TfLO-V7$7y;;n&D&K?HJ8c z={a7Axkm;*Wy!RYmu7TgnY5R;<#Dn>N`Z+A!(&rlsT$Qo9z#bIPGzY=aFOozNZef@ zsg+mhWe|kV6R3*z&sHGHy>ZMI3H}@+YvuFb@iIn^)Jr77S_Bvjx_g*B?c$I$Ze9~2 z109=y=PBJT-3ne#XB6W78v3a$Szr1?AH4rf8I+(8$<|$Z^1tm7Fe79nor~k=1^AY< zgxner?4VTHMowb2Q|X(N#8Z|{zYqK>C*#sijI)W@=EW-9IA53!9?0>ATR;%-yH$ksji!lSO` zy61f1xe%6M$0?9U_p$De>6)&~Qw%rIO23{GGT7!RkC7Ga&`P(;>v!$!LRQNe@QVT` zl`~+uygtsAg%xRqu6$Ubp>o;#Hb~ctD1Bp?GAnwvE%-`X@H2{->Mn0Aawd#sBGPge zUYyUB=?GdGNHj*Y5CXC1*{jrhFK~MQ1QlG#6h98Z4UD!(&KSbEig-1VbAZiM(6D*P zL(i-DpuciEp-z;0(PwUzb4SrSa*on@#_dpP4kB$@$qjhxeIa)*tSS^;C$;@>yX*1c$cpN-rZoFPCKvmwntip` z3Oo(}Wde*}c2SUBH9~M*;CYTP2kZO-Qx{T4W+2zFm5POyos$c{L3B10d8P%lv1Fuu zg%J0!;s6=Xei?;dHc{HS9lh3VEgKSp0yOph+*8CV$Dwot<7mErmY{dY-~yjCb!8Pn z_68ZiHcXj}DAKB$zrPQWDtKsVKBP0%IYpG%CQjbFe0pNB#ASQ$a>>eH#$LO8*X0Pw zA0anVG?p>*$ykckKoFRqwi5DDK=U#mLa_WUGh1%{4umYvqrb}a$*46*e|1`Nk-A-~ zZl=10)U8O}mQt$R^)8ABqH=~#l-FTwe?M#_v=hSA)iQQ8#KI`|k{jbcPoqvKLLz*B zKXkH=(X*)nqoxOLl|G13l#Gzu>D|(RW-e7HDs_~7A4Et9vV$r7ZKAQKs;9db=4gE9 z*e$;24X0W;Aoi#ql+FyK{(C`485*KVLccj~!`8GdTbMF5fm3e!fUr z19PEC$Ia@fx^FyA0dLzHRXH@t90oe)9>=KMEVnhHevR7s zT7Ri zPiv%Mg=0?DpA>{s3}p&x>m(Ed5rhIitLoT=E>XNlSIK@_)>OpID{mr~6X^gRxhv=& zB_;dPC=tBD-_bl z>p^Hov8zh#RHpr~DoEdu=26xuV1(J<1JWWXB@ZooOq&Ke<`@=mz3le9W}2Nsex{DL zZr-88VU{)kBv});Ceg#2J(05~YoKq)%29%qqq{ixhK-tIXpw@3DdaU(-~#e@XdqOU zDKU(YNdu{kq4Pj6Xp6J=VT{#2#!0n@(mho;Sn*A4xn(fJaADX&>9a7zjq)zQ>B;U7 zghHHb9JQaY@I{tNHjt`2J)Um*_WYd@7RHWH{V7l<} zcKLW-3OOuVZTHDXLY?<}r8T{@aVB5I1G8X+t{yMV^X@|-w+^_}Uq>zWo+-D;ekrxS zt10`r{TfwZh{}G>d3;-@*&)@g$jd5e$Rckjh(#^FM~ik{2q6HF@&FiEJ! z`8ala5JWYp^8?)G?*8>Yn(1Tt0pQt610abd>u!s=gLZxqn(?q(^0K+>;UUla=vnD@ zzR4!%30F2xd~xV%h)Knm@;s54%@g)rvjBB;?fl54BB3t7pbO?DHRqGbBUpSEo>4{K z$8G16Fkjd`Q-W1hEPe7lLs@d(B^R;_^Q=R(Lu!}bdXH~?Xa|ZT=nsP>l{j`OI!`s|6C6)6R!xu(5*$@tgizA$F3 zkb-9`cECni2eni}Awwg-^!nO2tvgWBGrihjJg^V1*yc8KrLtj#bd*{oSjcgbpfoT; z_KvLVzmgy2gGr_dC-XB*MeNe(^h+_+9sAG@2#lo>QzsDBIbF6&e~cp5w4epJ?kNaFe8-(F z`0Om_nCecsoYg7O74EYXk0Zr#+g=R$)LCewF1>un!biwyN&1*~1cchA!XtVs+)B3e zR|%5>nyo3{0!Dv@{P96~eN;iq3dx?KZRAjKCD4MiGMn;Q`D8?7m3-SWb#KZc4f2II zM4XQUwuHk=F!b0><7^n;FssC|>brc@Cj{#l5N=N2DO~Jj6Jf>F-7)G#%qeP@>&@e85#ItE$UIM#6ntPzn~%vF(Iy6K>b(ZqYMKz&Q<0fiuKELICP6#AUSmSY@pnVl$5T(Z*TKNLyBnwp7;v+ zCG)K=pS!)8;FxfMwIjq2LRy zb(yV8k(~|eOJ)IiR^wRpw`F5Ovd5~w_T1gIH5rH{oGt9FyoBLW(|f6O!~VK-HVr~N z&W}|vC4fKzansoqf+1Y9+%^1EK(l_+8>bh4u<`@H0RyIBsXs>wgk_v;Di8oYK*GOh zietgQ9;T6x9s|Bb5&8=a--oxDdW+y&x$=A!)7w4ZN)9<6dDppbRWHGy++2XH?+XR! z8d7DzR0iD1z-a$Ze)#}Z13(UQ4du9KF=xkz>OirU_N``VK@?FibURWRB6X-}$8?<- zxNiZxU6c4fD0993-xKANY5#XAFwwj}`c{riRL1$bYV#hmPJYs2X)ub%#S1{r$Tph% zhq*g%ov2b%BtGk7l$4mNbTA3s&UX)*;1w0d_~g(%8|dbg%EZ zZb%qDyRyo7Qc7HVqj9Yl~ zV_e%;^q$*T34Bh<8pr2z+&M6CFyyoNWNa!SU+Mh8B2{O!{uew-e#Nu?=O^v%2NQG# zOi&=E`Bt%60266{b(z7kf-sfF1|m@H&BLbAW5;046QthI$#)P;5d;>*cd8fp2a*?c zzNznS*;CCdbuzmx0F*VOjQwlC4Wxm~d5uH>Ml@s$0_KK-MSkGC*B8JNN0weDY=e1$ z9~o#$B#iP<-yA{NKY%$k>`->d1im9<2HEON4Ul^%R|S^~`KG?rMzJw4zc@b(Y><h(980=;k|f3PY)eSj_G{3& z4lUiMNVtVCc0g~VoFnOJGOmX;312J-cTr{`q)2|lkfu49HhjGxz(u`4#yJYIxXmBa z$dAMK`qp&27k&idMM`1JAv`I`Yh60j*1dv5a`sN|X%xD7_PHXT zCvGZT;cxSHu0tEr4(@Odp_lN4Wn-q%(7%ghJ`}*)W|!YZ z>$$ctSQ0%-lSC4!#8bvR7_hK{PgWRd5w0y8Gr2s@Fo6tEdsTJl4p<%VtiW*%_JBJ2 zX}?fzgBeS)E9Xay`61`{$t34Hi+Y6Q$9u*bF0G5eD(l!R7sDbv`_}7>m~u?`D+*d;@ zR;z?OgcE#g-z|!9Kqe2U|6A2tJfR-Yl5;2wF+^84>xtBM2f74}exzW9ACF=ng~RfU zu(;S!*mEG)xAy(Ot+bg2a^7;euvXyTXk+*Z5E|~gY!R$I?0&eRN&UB%54N*Q3x#G` z*~MYx458MyILiWL0>4iv4}l9z{oCj_D( z)nqFj_#CEer~b_*2i3}C6zJ>{T%AZTzL^HHvIN>#5zar0>-UXWXl9Lqxm)T6t|1@sa0 z=xsC+bI(%vv8mFaSw55du~C}OlIQD~DEWv= z#NQg!nnpAa7EekjgygWvy*LYVxa*Bki~O}fl#;$xZzRS>t2g|HeHIG+&}{3c1mrS` z=lEXX>jUd8p3M6u=x*K9#5}0e1Ye$@b3M5UcwujFkiR!f?!nBxQW&9P+-AVh3&ZolYLQ?Lt=}1sq_quH!@!41gqdV<6kKitT}j2PEcHRz>nTTV7a$z7`ks zmef~MEHsxaG@To+j&><(Z?%dnX3~5;={I+Bt5oQq8U8S$Ln;=ZJX^ZdUvgupGYB*g z6S%r~FOclwcYNhsJaNqyUw#R9eKKhxVgfDb{T_Z>SKrnY`;PYS--hU4{LD8weh{Oy zDst2zbT!PK@xl0EjkLORRaCHlO-AP$AR6p|=DbqEXXzX_#X_v&O>)}vTZ}UhjlIe| zOKx1U>w~O&&>%-VZP3pbm#OoL+7O8;d`fm@kQD??lRV^=C`oKskmUu*BInnugY4oU znH|R?yT1*OOp-F$(LrVgdtQ72>o%e+&OI;?sf_{){&9M&H%#Ax6*Ft=@Z@<(68o}n z2X0ue;M!eNS~oHstSh^eyPh6?#y!&D33uHr=7-qrdC2;)lpt`oCv|uk$I}YV{`=^njN5vFvLJ2V0eHWiCp+i*9=UWBLq#*1z8sVCTq9pQLO3_ zgXu3n)&SgejbP>STc}q^EwrhS;9ADp_zfzVDxE_1Z`h0%wF zcJL;FFgpUlZm_ht>j{IGruuSO1t{&{;^4S*Kkb(O zQj|8F+DjyNN3F zCbtI?;py1NgL#)jqjpW&0pu z^kBIoF5m*X!yXygyN?Zh49A%WG54aOVOq@gDsg7 zU>7__X18yk!94XOwoDo>F=Y~ptClCqrb(7Nk$z~JdY%GJ10&#Sp0r9X#2#lqS61~7 zc3V&?OnO@Mq^>};p^8a}JjHYmR8C0PDt!@F%O__RcVngU5f^M2B3gak6UO|At2tke z6%6fdWY#>v_v$=Xa0@tq^f)dM*2j&@8Y>F0ZfnT5>}csTI8QHbmCRsU3yC zpYwhBB7ak~!s1=kcsL8k!=Ak+_uw!o<>!4h1%V5@EP+whgJ<0<*8&s_=;63 zD6lRf3z|^U{4UVz(Oi3984qBCl+q5VKuu_>7uvMrJy!|#*U6%z!EJ~2#CY~E zH(_5u8?FQz=!GFt(9AnQE0*z0Ai(zH&?ucmW^HUCtZdnH*y1VkV9@1S{M_e(taxZg zuQ+#LKJN~M_Iu+WG%eLCGkF?xj6u6(7;M60B8_?S^fXI9mu1mxFO1jj;#{f8m#ybA z_c-Cbu?J=iBrUrSRL3s@B3tC1d7E}hrJYi^`xPqP! z0toXV*3XuX1!CHo@uk|wj-<&Hk`=SQ}nYT$=TGWpUu2Mm@sE!dAp@TSvA!R z7xfU?7a;;8a;r)+G9YqkYMN>T-Hn$F7MOwc7w6kO)~>*gt!Kjn<84`&K3I6&7eT}8 zrAP*MY3&AUmlsFD$n>efx)KL#_x0@uYgai~Q{-ShTMgDUIaoW-l7ltpdx_xY{;oGr zp|fyc_TU+F{$ND*m4mO8cZ?4{i|4{Pp&fjPmpZ$FT{}bM=JNn7t!<;l3xm(nb7>&O zV7JYH`sac~ECPD2!87lH@4t=Xw38gCS;*PXlw+~e9CrIWz0=@a3{#ih2?vja!V_6A zeD<{;CS`g@{6KcPOp+^yNIEdWFhV-)7>olXRSl4CI6&l!)8**s_7{Z%)~!_U2s2ZS zjcjLZq;voCa%^~wT$a2B3ZDIh@W=E{mY!Aoot}vWD_a2{X5(l#uPPVzw;b(WJ)8N0 z(9zj?Cp`<8kjx&rqSGbtO%D_i(lRKfS9HU^{tkM2XkcP%Pj@tRPlU`<%m1~od`F7O zYaXd(Wrga=9*=adg~5|azfp9E6m}s?+XeX!bC|WWI;qJ;W6R;TWh!q%Ms9ca#;@Q8$g1s>75Q zDcyqSDq({x_0R*-;7`6_MZ;u~M%Sui@}0_YhdR#QmY|L+q=}4O5(l-~m+%LsDxp$N z-syX{$3XqG0|~#eTKQDL>VDb|MfZzjc|NNwZOOMP!ME)a97~o8MN^X~`kuIaq;a&g zfgDV9PMcc;(=nM@VV09Q5XuW1Jh7nyF-^C#TLTj+P~T##Zu5kreP??^Q1@q&>ADJZ zr=VjpSix40zt@8YJ`+$c=i zc|p4~`N?y~vFi~9skxUZw(`w#+bo|Cob$nq*NsK*sCYzt7a-!%@m;;uwDrw5d;--!Xta;gr}`%e)Pzm z`BeS#X}e#(z+Y-h$T5|oULon%d)rbh@?vFMfdj}R-Z*Xm?dU&RPiClBX0&^y)~l-G zRoxJgPBcV`bfF>WMJXVBo);p&sM7q>t~95y6ts6rtVEt<(bRO@ZQSIeS?ThiI9n(8 zWTRR+N<|jgM_aeP4z@}~FgCwdHfL*!8j4&4*vXop(PLn~VT@$SdC_RJihWKd8;zxo zF`t?;2+)>zb^BJqLp~1G9|6rrFwwNb< z&=*bFy~hSG_V$Qy_g8~I^A<1Qo^J+!>SgZ9G%Le0cn4fCCh&|`C46AVU2lS>!*&Q-HJDgNg)4YXWk= z9(l|(J&_qfX$0WWy`k%YK^WM%!P=d!fUlSH@0S^jnqT;6g^sH2!=LjzE2%*4UCo@Q+mp^^k=4o^z5XWMARtKQA z&bDzSP@0uq`Xj0dzADvAV7ehe!R<(dY#J$zvYzr%-0>}@DQR&7BXYN+>~mn)-5$i{ zTAm=ujC7k4h=d|Wl&p~=$CL7UpS(V({HVzA7jj$jGkFNVN{T3r(ql^w`Coa@C)=Ip z51hNya!|&yW)AsI=JJ`0TPSmBmf;6v_)eFy6dyN{rltVl*>wdl>g?Cvxa`Xv&=40- z_eZp{dBc?C3|vHbmY_RB5tbj6yAyJ60tpq{G$nAZI$Xj%iE`$9Q_zuRoG&hf{3b-g zQq*cgb?SsrYwdS21{SbeCX*kWG6m*CyFGK+Vs8_CcTVLrkcYf-qmcaz-m*-c8sVlv zvgHpruXtNv5y7v`EQBtL>2fdEG7V0#{bNej08t5Rwn70R=O{(9D4E5meJP>_8Rkf{ z96j!l&73|hozX1g^j*}aM#B%~uxEy*EJNUXYsOa_k)2)00Y=}JP()vGxoR5Ze;NI( zKL#Gwl=>xkohvXIa!@#$(Z_U(F8T~o3o`R<7}&_@%V=L8Av=Xs7>SSujed>3=ExR} z-X{|+SNgREc}1g(CPn1i<+cv|Nbu~G`oG%`9$`B%_xT=Ifp3vw< zi2?8tG{yjsv_Qx;dBVvti~Qxa1JCA(IM)Y;xCu6GL(D)_nsrkGC?1-?(kJEs zt!H}T#R!X<({;tax(b&m!vaB;T^C*EM3L_}Fmen-Rta%bdYV18R#WW<=})%Pt(5GZN7ZfTQ}nV*QmXM=e3KAMTZa z*vUWO)qN7Lo}cjQe{d2CtS9?a7jq_$64(xs$F@v?l{MwmB%q?MpZb8L?mIFbRZS&N z%~MY!GA9>mlP6JaRwcbVMwr?88a4b2`n>UvB7zg;{}4tdgYPZrQT`PaGK&K?_oPk!vV%w{cRIz zS_-Z_KK`xf=z40QQzV*P%m2CSk`xaMT$g;=)I%}va z58a^N9xzP9ekc@%{{<$wly%zFI>YG@CB4%YpZ6{ox_Lom10;~P~|J!WJD zS;p8aRR{XJ5HS@$ZiF_o@<1`jB=^d4*5L^>^CLcySsH1!SD2A}sUIJh*g4WnwlV%n z)t2$~lO>(Q4ECChMzI+tt1;t0h@Yxf84F`!;Vh|%kk6F@dC)8|tOCbiARMW?5(*;F z7chj$T&b#9T!MC5E61QW)|pP#EwYd~r(j1|JK=8DrH*i?z8@vmJEH3VbY2E)Pl&UJ zhXd=OKptyDJD(^m=cG2Y$e$l+>I>B6uA4=unDdq~qPPS#+T#Z|?7F}?$dN3#;cT4@ zBtI||7~`KKA4^AGW+T+~Jylor@BpO?<;veg>2rm0v0S6npxBHdFe~pk6NxzYDXDJcnArD=R z{@G@GwAHulsQAA3nM-l2y#13jfmY63;d+>pmxsLKHEMBQx0=*OfbPntE%FRG)whDY zrZi69U?32oS(V*L?pE;DGkM~%De;}(BV(uCd}{2cV=<3bKx~=g^9tm;!KLu*MzP5O z+me6DOX{ar(HD&5+45L63dOXuzY0EXnFR>V{iWIfIGO;dHust?jj$g?IF<0;3415d zRR07J}@a6OFAsqTGz%!EX&I~{a2B~w zn%2)vQkDkysjirpq$~}b$9rX((}~J(VGnu>QO`dq zCmzs)P+9bn8`jDU>IZvl*?dOX`7Y)GAb!Py_sl0V}5{+E2m(BrnY*Q+0(D zenQ2O*@>JWPl6kOhDq#1tvw7Lj+8_P3cSHl@pw3XLbtL_7Hw>mMf2D*Q-bXLaqRrb zgH7yMe#$Ixd_ zK}(eRAB#Z0JO0B%VbUxduug)GvCUA3+?B|myzHsr9}QLxZqZQ2aXNmF+%Ou?$(CyE zdGtD^6Y>zoA+HZS!bo!h`gEK~QzSC2bO(rux=C^2V=ZpZFE_rT0pQVItQJv=Yt3-u zbaSxhJE(yNK5vaJ~1;IJpJq8)4P$*8mSeasw zKtAeTPc@z9#_`d}SGwahkwImF`aN5PZdumiRjjT8&XYe?CCa#KBUE5EPk5nvqE%6l z&D}550JrIV5wD)jcuihk1FKfO{5!ug4j^hlzb8T?H1H&70(hV(yQ2~ku$Lh=2&8rN zn?klHw4v`7fY?+*p2toI7jyFM=%s#$8Hs>^*jIx)+sM6%82RaU&kE3K4_9V`$_N>+ zpUaqc<#mg^-X*U~71)Iw0b%)x#xCUX1iG!CT&bG+F7*TPecC12eHfbw&_otb*-%q$ z+yD%_Y@{S;9*eu5sS>3;c@@U^)>l^>F=#{>HKCS6Q2&Q+6?M@Yg)S0{^+aQ2jC&fY zq)vjsPuM`P@EnB$kNX7lp4Ji+G49$vOf*SP6*R>+(qYQ|5jG$YhhtWN2&}^h1=g&4 zb>9*_k$J`etL{N`Ky=E11TPdJM-rUvT|_Zzs9Fxxk<+O+!@aK@A9nd~PeXa~ zk3>fT?_eABZg=WK4HA3Am3S+poy&C7(wrb5N0tT!3LH;Zvs-^!4|4go5n@Zk6%M8Hdt3!T>OBhhI~V%0B(t(R+q6p zgpRj}DhTT^8HkD$4oNek3qfSDOMw19&e+20^_9p@4?;fc#~QRLy=#n!ZICqdw!j1> zujNXO!3c~`PVcLh#X898{VMb%r;RGqsPszrke^#iKZnzGH8NBm|8X(W^H>&nGr_Sn z%p$J5@;dpaws@FA9WvO=>Vw3 zr3jeiN{5I{;244Cs-{$`hROAKsgSk@?b4M#TIl?TNwf7rRg9S1YU8#JxU#xvei|X#+FXp>s#He zj`L~L=!+hfJfjt5{f>azXFFf#S7Jm2=3lbXh3YEJ?9Jnsl7C3s2L-KB*hOIn1swbZ zaxnsJ^j4ay=Rrd#`3@RlVei4Dhfoo6FFGD+u|q@F7PTU={44%gt~4*E(s;z(t)ZE% zq040=8=3^IE>^-k?E9OTwGeY_Jn=lL9g-5Xd>Teq_jbS!$b@*3>Udyo>nG-52mwc+ z&ay<$J2*k{1QImmpX#^k)orokMI+|imto>pOQl({iW%qtPsxWy#W4SteO{<|)x~k| zgtH|=;C+t6`q|3M{6mhzdgoE4ITd&MTbD(q`5cDQ_QkzDM(iv^6H=U7a~r4ja@(l^ z>lbWf?s;n)KW1r1So#r~k-`OXY6#l{|1x|w?Vi%ay;Fg14s7C{(>KYxZ#q6VbN4BH z27Y=6Ph4Lpb^!S+6hL*?VmM)4p=fMg+j7X}Y426Ts#9U})SoLc5Tj{+o2UFTy4onW zx&Per-4hF2RSZJxYjI7EzuR4JG;93vAPw(!sH^F54gAEYHrol3v<-PIj6Oto1< z@hF;sya(drhdl+N&&541O4TQzbx#l9=|PO_${>pd+pFuLr8cro8tQ)#{cPd@xH3p-}^iEIM3SEy@CB%XijUX?UgPh~p3MSk<6pflHVJsAR z3e|9teK8x!htfe-Ef9+DM$K}YwN^R&_@!iS8=}#=_)8JgX}48Y@wgI*YIKfTIopgb zudu$r%Dz2F6hUbvfElaEBcHh0-0YU8EOe}#lOzuW%ayOF6EnK}` z`uv^`*Gmv5CB9~2y5~Phi?B`E@wHQCvrw?a9@SN~ zv^%jCT!$whNBc5{6K3BcA`v!uGD{A&U-`-XUZoE9tw-H=xiwVXd!|6O6T=K)IfD!% z&~<#NT-KfoiFPv%Zg@@E8&hel?4`la6rjxvjJ`*` zQO(qS=NS90z1a#1X_5DtO&aqPh2`)VR_1%{$!pYnU*s31CS z;b^KG9bPnf9N+}os|@CpHxapYvAQ5a4oFV>OGmHoDICfroJd@du!Q=T)<@LBnA^t3uPwLcby3282_l*)ECaQV~gLN1H6iNZZrAsfDo%KvTpc^!`6Z~Va+p6OEE$_NOR-AU~fHfCgX{vtyg{;ef7M=#w z7izEnC139*>#d*Hq@UeZdTO+2f`t#O+u8rI z3i>e!BNdkXx_X1>PW??9bcTXIGy&;S@1!^{bWmm+nb2>Rtu(t1Mzb?{CXgLnT9#vVTl26l|QkK(o4 zM=;!|KLyK_?mOJ1Fa|$1X2lw5Y6{OeFbbCQRGtk2Ax#k3b!10^bt4p z6;FAL)9*&v-k60{?H;dDD2T}>4-gc+uB{pd3q&}Yr96Yw!zx<&iYKmcH!AF;O)!Nh-jCa?tK0sT|%U{|NL5oISxeeK9}QE^mUaA zq8e4XO~aUwNq*6sg3b^UY|k=HDf&cV6)iU_1i?%VSgIh`=Y(ULh=qDtC?}(6Qx(r+ zw@E5?@cZ;6HYlMh~TxG7j#utnKua#!2R*UsljCet}BR4!s#AN5>CNP!l9rN zE)hincz_^56j6i(1r(6e^#&A0K`ueO{a01LH<<)<_w)TroW832^;uojU0vlEYq?Ic z9o<&d_4Bsm`Di06mj-h+vbX8z9rV`xs zt@bh`N7&{3%WkCf=Cf|VA6*M{(u#>S-jEc}Oq}MmEY^rWImVNUVsTadg4kaZU*cv- zOJJD4RA+tj^YrV~3oqbj-x^v0)4G_MTpbz24xJ16tS+9^QO$WPZqAWk=fxb+Xb!5_Zq`HWXJbYCv0@uIt;dR= z_*n5$(j3uxj;Mi{g?x@U$>xZwOGVqUVlTujhnQ^;(`Kv)%n_R)w1t(5+2H;Fv0n&G zEfpQdiqn5970*Z>NQE!_BHEWi{4b()DSV++yqkpDhT#iK;R|?Ha+2|;sp9G_Kv%$5 zeu1y>t5P8crhN$IZKCiNb_l-2FH41QA^aDDcR;8^qT^Dw!534d+>S1swbi2*kEgQ_ zznP2LvGAJ29>^BaL*YTKNJ*kypmflJJI7H6_o5SC<+!gYky-G);l%8A+^J5EF^mfC zO}dG(Flix%yaQsV?NHv|;c>D3avgh`HhS2X$zmm)y5x|06hkOG zCf{B<`jHfI?gprYzY8pCtcAEXLk#i*J4IE_%$Jg?T)3{LO!D{g^k|tBAAqxUUCp|6 z>)5sw8n@fnRGQwu(C<0={fd4M((fVqeV8WsWAt05epBN5!D+t5rZnIuyCDYsK82qm zr?ssueBr10m-b2NpoBhTCh{Ky0n6>GphCC|(T{4?^9vhqLDNj}R~PJ89tpqxJ| zC*VXPv+}P%q{I%I*Z+%M<*fYQbZhb4Z-JmV3{Oz3&I?(jMmH`vx^8f|t57#CF3%A| zdx-N7NDPjIZBPN0Wy3@xY!!0#jP_BRfl0zu1Y=oY(i`7}EpYYtk;&mqSGg#=g+5Tp zdQ$n}w@5c^Na_8`qJmMWx1-oMhtd!UimU)CD5iLOU4@b%8BIS<)Bi!*q}U`LvvbCZ z$(GrZ<0(Lk6V=)%@F-XCkHo>xXM9PF6@Fzi@hcJo*dHk$Tli(1ia5ku_x!-B2N!kY%llL>^DL!*!y_> zh)1uaYdCN^I;eH?;p}V4u@Uy2E!k&MteofujtM@Wlv?wKjWU5+%wh)=JqX+TvA*NY zLJOZs9z&x+;Xe^QX#y5!on&71t2G)wB5#nrBIHjUN{25Th2%xk zfGG6a6_OqAy@j(cTyrWxVilP3nU#Lp~Xve$Wi8HLw*9Z9Iyxe*WW#Qpq9C%%5hS%9b5@qSw3s_rKml(o^4 z9?3)3lX|BVGfTb@XIe|+&@J>v*Mod3zWra4t=k37yXrh*8yuKSSe6hlFJ}u;M}y{Z zib`;c5}8Xy9%@axzu?>XO`^l`)a}QeoRZeFr>=!ObgWA&*v1CYG#GTz8iALd!TKFCMHkjhrD~* z<|45PR5Y-vyAt%Ly1iP!Sahf+E4yK;rnyC!0 z6!?AF_HHjQ?^-z7nga zBuF)uBxAo9KcV148dF^d>`KLGXsK3n|u(AWWI zrId>G`zM#WY|GwFfa*~7{k0X2n0G;yx{48gkunEr^>{J>vBz(#ovoodHjkrH&ML0) zMx|I?Pyo=WdL0~4|lI=*n>%e%`B;%&dc^mb_%Bm zKJPlEL&K-ustIROOLtPEa4{_6C~xQshEdl4R|hh|flPEDGXT;6NHZJ^XH|yEb%T{A zOE#yxTZZrt z5cdQMW2L;1t?*!>xOW))l8)<@zMeB0UwpI2Uu^?N9FgqF{u?|Y$!kVD=FP`$vFvG~ zo7vHe>P|*tpX~<=g=O|gR*knRT4}~|&8v3CJ!)0_UHof~7($ngcrj=y@w5Nk z5iK$dZsu2wfE~xojA>u*>sMAC?IS>ikRnVcbW+{X(C;DQ^*^IuWngvRMZH6}IP3(a z{$gm46K;VT9U;tMbJw6a6SGQ?K=}y6cE-u3bj3 zDA*KIV%y4R+tYH>Wg?OW>Fz{M*9_GyRcPPLGBn4?ad05?0rf=E4ir*KaC(A&(iJ6= zpX{cK*MTeFKwW`&j+D+>Msk*sU?f=v&oV@;BVK32Owq;Z2|{0Co}`q1RZ0(b1}sC{ z1b#TjE()1;m|v4N0tLuSa~hr{W47YoaV9HFyA0^>{9nmtt|R z#o{hV@p0EDx_SKUC#j)t`S52@S_g$hrfPi01m^+M2I6x+yr{#^BZ&u#_o*?cxY`co z!(T`Vo3x~xyStbt0~lH?Fh}V|vXy9t&DL>R|9HYQ+;3WTC}`SqbEA?iy>*_n%v^_R zT`lM!&_-G};xDj^&ce!%so{5(?kk|6XyWKzSKCpzEWaWW3ZbC( z)Bd|C3fSu^(WdO_QMKTiA{8H+_Y9f^Y*!re)}#v&4cXDXAvAllhR1yeMQ`Fluht2@ zTqm?xptY~5C0}RPw!$ugNp&IbX+S}a1lOI&%CXpY{q}V&%}P`{6Iaq(r2jsy6sM4| zg{ox_a99c&i$V8`Yffz}J@<(#^Db6f9$Ql9b1UnF7S;*P2AreFeW8xj;VIK z=ubr1cfS=5?PtJXdj_-@AF(-Nn+QZA5jKZz{6Am;;SHFXVo~Z?wx8bbm)pE$8arUX zyr-u_h{$%_@){nxziH@OvriUp=(?+TMOQoyP13vzF`!6@}RM$^11uEvdGP!bCvxtGuBr5L~Dtrw5Av2me&#`9s zO;TN`TpOJHXl6Kz{p`i_HJd%-Q^#H|ofcKxxp{LJ>i(a7^aA6e-zsT_`r08ML8VK9&AGVT=Blvy3Oedj z-EhC-K7!G~5ZkTC)7-pK8qjkOXf?lCJ4>^6;uDIV!$7y03MeeEO#&HhZh40A)oo&^ioJbnjk! zA8`oz@CP|iX~>cei}BG{Fg-d81`=j?Mb)}=R+WMp&dPr+ze2L9U0@zmiza>>?Zfns zX?{baXml9#PuN`*$_h)ZYN%e38wpjlMsajuM((&7uXahDqM3fRt|3L7MTm0)P4mZ+ zY5UFvzRBURX=Fs|FdFgEG~zU*00KM&%&wtogkMM|>vjbft!X>D~f6}vSleG1e+cvq)?IGiv6I>Cb08V`?Sh}#c0a!R;#a1*GmJe= za$S!##NW4KYuc|?emO_V-`))i+&$qmtm>-PW!F`=?j^qErDEm;e{XA<_?!>0 z`Hem?e?kB|vWnUT1*+A6_-yLO7_<;_Rnj?I!@I zV0gkjyNP)O)6INoI31d=8&%_VPsq;C#yna0V_D+0i36U-lQa*^6LDD&-D8WuSj+Bf zDq&13OHb@=inS91u}rl;J*%^6(?x$MPd77R+H3+`7IIIv zLM{Vpg~ZK>Ky=X~1JzRiu>@(MNjD9H3${BrN^V0-qUE^)acH)r!UX(6^DZj-&n z8g z{k|=*ekWLlm@^S2vUYW!DSMgD2>>31;nG2=3@Mk~I!h|MkTCJZeLX~zfYMx4Y3HME zk&vyBJWvyZ(DD$6{Uk()=xLx1BVoV#Gw^@d9!{G-x!!Z6%XCwz;?>_TqGM(^l$LD-@*fgzbo0|EjNAoSK+vZJFma@f_PW|kea-OH_F<;wyeTcsm+@5lLo=ZOf9_df?! z2}((rT@r}`GU~x*ridebiT)$<58DadEm8-h;}b|{mk2@>O1ytkkAkyvW7s}lVfzb- zbYEQTzlexouj}zg3?X|^s6Xq*cXs#qZ#LVTz&D8#lavhCXt_9h)9^P?P4_ge>6(Qm zbyKE~98j805@bNH~#&MHg#9?Na z^^e^G7rP(JuvAXl4&|Fx5bwb8o6M#<0@;xni9kIkxbXg<13xWVz|(yBAyJaSo{X#L zolXVaJ`l|_bS8#Fg>w~>g9P!^t=|eHAEHH;6Ubos7O5F6vI}_gMy`0862E89 zbFw$2%`Dl-qt4M8bmmjHuJncS@zp||MH9t|rUeZ$JT37fct;?+!StBTf3q+9tG@g@ z-#(JgtA>)aIG3jiR`x}j2PV>&H@w9|u&0y;^qoilYz+PnYuZ8`}Iu$)>e)x!C+%gXIFIGDL3`l@Cm!$m@ZoWm3hkK+$-S zHkMTjWL|IR0rU-8gvU#yGO}?i{25lnc2v__KB4vMYK6XIaeJGXdBExSzkdx)Waz_$C|4Gjs6P!8K9VrI21c2GG= zYdOo8XMk;catta5Lb1s~Qm+_&7}#f7KKzT+upJ7{mD;Qkr&G(Pha}&VcR016LK-J0 zO!bDX@(L-|^#2N=%BPpJ`D7-+w8EwZD_5J8r!?r}u>;LuJa&T(^cYtMly(`Qc@woS zME~r`0CxR7v?ykW3O}VMEdK_&PVj^Hb`nqal;;h#&S5Z*bB(R+JGUd#v|j?t*@X@*lnKb~BRrfbDW|JFB9oTPAtybfT^3X3gNjq%h0{nJ{} zk3e}G=*XyP+1;wqaMTJ3q~*L{*?Rh_ZP_KP!fC06Z|~8>x_=r>IdQMQcP3KBHBdJn zZ`sg}gz%V>5#4UuWo9TeP(9YJMbY@5W2^l^4Ugl>`%W!^Ilg{;V7#aic>0JUbMqZl zEK-e;aZZhqA5S*1idm>Jj4g1}^>gkRIxWz+YO~3<>a+pa<*?tt!d*}MD@UMEQ0HMJ z9ne!*#9lI-Zmtz@8mKc01IvhyVxBYVia)(jFFe~&{bWb*fMtu<;+HiegC&;bGEpzE z(|SE1k<2ekB_kHuwNUq8TvSt?HID&gvHeE;?lTPz}R{ZT8JM8u!;Og@JE2L@nY8g~EFda@eT<`LizPcos31zx6myI83bOlkCtISE&5xhwDw`J>(f7b> z_9kW}B(5BQvio-i4A!eE)Vs>EdAc{0Syk{iJS<|{jd~Lhjrx_71oZXFp#4uBkTsR7 z3Sr+NbD#NmQ++*ftFQI0@fJ$)Y+<|Yt-7-QVrw?k)&DmbTBytukkPJSy~R%* z*5E@=SS0@s{D;PoC^@R|Aj#QO_KQz{yzl$tH+6Wk+s=`sx*`Qqpp%uQo2hAhS00Jk z()u`p{EzrI9+0rFynG4NQj83UMj4foy)c0r{dWDaV{X8Dx0(1qh) zlz1D=w$XY2k6!+EfSzzs&XBr_C{=2+yPTC57vjV96R>ADfuz_eUpAS z(eHZtt)$a7xet)6gZOzp42zIC$pHAa>z8QaT zB6>c>j=H5783Zc0Brx7$lTxW`D%dHvvo6Fs>jQeJ_puZQJHFhFUWOhW)n=<*06UyG zH{>-GgghnrIedcs14-#UR(Qy}y)8bD*7y&ohIOi@lD~4m9(2Oxj{B?Rr?HrMPI##% z4|d$q?d_4I6;s8n!Q&$_Di8@4hpb>fR@D%Du~ZBXL^6v_GgBmIz?y!u+eTg{rCLEp zU_p0y!DkMPE-R2?M&VQ7twbd@WG4qGD>M|t4m6ElV$U|hwU`=W8yjI$PIoxr{h=)# zj5g*!kw&wM#+Wdp@PzjpN_e9Y9h^SVn4AY2xl8nISz+51u6Q(iEsc(~8rE5=Xu}zo zYm_%h!$lh@3KgRprscZ}%VKXdribNC@b>`uzoOrtDP}+YzDB>_6Z}&0zd~2Bv*>pZ z{XRv%&r#kl2+9_r8D?Dlr=y}f4^Yb`%4R5CS| zNax#mYQ&^&6Cpn^3u?^nB9)#bKb+I@e<^*Z1?9hx6`jnNjBq}aUi+E0{5VgoWsvl; z;jo7c97gZVuUczpY^3wuh-(L%UD4pTKZ`{+<@0%}DDbl`^dbp=a+~~i7Pp>mC%_7b z1SW~*{8?(hS!Pz4)6Kae&o8cA%f?Z4s+3*XLaEOh+QwND5vkojWFzNEQmD2N9~SPZ zODn9g4INH2C~cEDmrbUvDdYb-FtFE87A^Ri*x1DC*T*mZumzYoRX=<%RS^4ZaYQk9 z`!r(VEHvoM-q&KB9wJ=ojUU1e>2aTh(N-VXC)zmFBeIN5$C3-^;mq%>T{ zGV0Vr?Ln;7rFYx6YfB5E%0?=U^k^W%$^J@Wz4${mlltS&VD06CpT{Y+iY~1O9N(dU zu=6_EVLKe=ey>>_%F0FgyuXUgw?9;b)gMUQ8lbzE3*PWX)kkjEw`RZCZy|8YD83B4 z)ba_zkg~`+C_c&0eQC-@>#&QW|G??Ke3tfUQ*6W^)TOuzvJQN1A>QDtAa0=l@~2Ba zquY67)aC52wOKV;(Rq{i;|##J`7K$`-%7YUu5e%;!*RhuEm$$%nvD^&wa=(76M#Hi z)D25gF|Z(SGm)Rd8*mi`V@*=*Dy+$~`3J0wq`}+66az%pxG_3%k*}L&# z6Po)a%idc9f6-_tG&jh$Lkkn!q-Z!)6jh4X7lgL!tR>s5BsiQpKBnY1D3oFM4%n9CJ9 zB%m=HiTTqtv3tl#?<4I1Q*y$TFdU;XqEhM$M+5uS%I9c$Qi7~bS)u`No~k>NuJFA^ zm4+Uj!LRm;5;Sr|kIt^<$Fc~=RP_tOG`m5}xv%0rT09uRI`U8MCTUX$6|fT3zg60T zW~latBvw>lS%@A1vTGfZ+T^8O5pB@(z&7rKK_~JG_26c1fa1vcgP0qb*$1VBNN29t zn1gSqP|GboL}p`^^MDh)PdPKVzAWAP`@NMwP< z{v>9W5CH5Be<6sF5K=CetHo(rNzVJPwC$$Wz zs}LJPPX|M6BLAFPF`9qd1>Jwqrr5Vi6rx#MoHG zI2F-KtR97v5@s*oT|jCyZ_>B)UKp4kcs@{FfHs-htEICEMVdoFc2z9LE%g9zQ19(r zz^KxoWQFl{=kYEIW#M%-=Q}M@_)N)_FvBqwJE+Td4GMLX-eHQMnB;&iRy+I>Aue?N z4uyx(hwLn=qvaEg1ardk8kJbl9yWIrvvEyz~%2_waI5ozS z?AwRfPS>;5^*pQ-^uu~B^dg<_xgA?KN9XU~t_0yW-@ZZz>~$eUelb{m7auDBk|Mqs zbqqS7qGl2xXHvVco1;D$mJ8kaPNKFo`{n!21?G7@e|lA=mH% zwC_jtiYQ5ZG58$|1slz>XhfthMeXbxfmeQHRQgIzr94TlC|pp0m4nSpCZd@C9j4d#fk{xYW!6y?G^(09|Ist8;bt`w;QqWNNsKNrAM%iq!C2j-uFNKrSS z+3_FJm+N(B3a^iw6#p&qe@y-Fo{a_y;1nUP8-mI#SBgHmi3o3;8Vm+egzn`8aW3#Q zUS-?-#VyL1SS9#eJ zc!roep)*Vm=$9GYpkKD3W{?PP;dTDfy|sS&W1o=O4Sr=BTkeUQrlE*vyc7zmH%TMx zU<`hj^0i4*<~_(q$C&Jthh`vektV#QK>3CEm5sAlX+r!oY*{M87f(af2wU>3ZkoAl znu`JIj1ilJ(9Uva zQqg_5W$^s${0Xq`-D&lpCpP=a72v)}F!TN$1K6iDtnZ7{uzpa3JV3v$51#OT*Oo5f zzZ{HhbiaW{TU8y!yu!D*J+~*G;Q*W27+FHTq7d-d`j%{t26JKoF_LBto29u}Sc_dd z(03$$=SMogc|n7wu>}S3ahp_uA@+{uG$q77H*^$5RqWsAj#=j~!F{#6W_+BdvWkYN zec<2z6&nAx8%9;PRz1kCbwsP!;~q)n;PI*lSgBXL)56Bv+E5r$Rl(yN%La;lBhEZr zjpi(r%6An#i=y|kLZzFLBC8ANG4x)xS`+LSL>i_ePq_j39+()&LDIo((9ri*g)0>E z8)Dlv!0Ffz9=9>+nw(#V!-3$^LT#_^7;xMOY-cEXDvT9kzsT4pmudnig$kue^5~Fl z9QgW>qxH8eRuRAHytxQL4^(u99zaRkM^%O9yA{&i3dMj-o}lYlc5@h#O|;F0D)Dx2 zWncXIUiOBRvxd(fjREfSv9~2hZ#8?b7UYPGjlxms>|W0P28iMP+u!1*og0FV=Ns;$ z8|c~G$y*7d5-YwENi5|7>gkKYkBlTDBL<3$_8G~ZA3Bf2MznfpB@bz0&CnCx^KC7( zaWKgu1Jk{U{EH1wh~1%{!b6F$Cb0R=nmBMfX8o--QPB(6M7Wcb3x{v=BA=woe6GR3 zab2?RQqA4}C$YJ>qnmaaHn|dS$$&*SA+_*{k!A;CY)n>K9%R{57;tfG;pysK;x)@3?R) zxWlvXN4q#S03M!9suO_bb)+aBQwA~UcPSTBy5VGtiAB^3MU)C2pHiD}kn;zJTq>c4 z)AoFE!ZAERFg_S@!uxaEdIB0i(c)dh#d+2%WlAa5W#Gmfld- zMdGD5K4$^(_{3WIjqr3SKD%Kf|BKQyk1`t~)H@%dA^D*37sU@iv=jBU9v`LgPjA3> z_13wQ{*?EQ`dK#ei=uWJPLz0JqMt35?(m$`!OBC)fky)sas+(0x$GACC>ltx$v|8n@RJ2J879Nj!b;B+r^U* z)*XTXqwzPJZPdlnCI1y_?{Aa^KrY;9zi2SP7DYYS^51UBA%mY9aj8;jKlQof?^qXs zR74OU;=kTjYDODxNB}%tcJ0f-4ao!M1I?V0(U%F zhgv+FA)*G8WZU@%(&}#;Dq*=bMvR5qfTq563Mi-PhrV#s8 z9UT6koE3OXh*K<|tx6Jak5JyKBxm2LEO&Y9P>4OE3Mfx|}z|n%dMu3Dm0Eh^=*td$(?IUII0?HsYDO z>CNe>zucd#YN?pO?Os^cbZH;n%XWGBSA&&TDPY`0zrT{q+G+az!Al)^-W$Ub$G!X; zlBqc0b*58UOSaC(Rq6*`XT{C&@$G}jTIw_(aU=jW)kiD{_zrn_WeI{E_3}B$1I=X% zeZYq3E*p}r2?sSeN2qlUHeNK!$4P+yqY zocq&I_;HuPHY8}+3p)lw75(C`fk+7&)k(_`zOiPx8Los-WUgsh;o&V=G{IFu_kZ-% z(Vuluuogu}6Y8tb`v3ju|HTtufqHdwV3sDk=pS{=MU!wi{ig8wb&nVW96$Fp3`y~J z;7fd!u%hE%&HaFy@4p#b_Hr_rSx)*Q2lua(nI#7e-q5$Kb-GMEI_jWdqEwYkeSe~1 zOV2l*j4*HHliH@?MrE6PEOC#qt{0uNdvu(?DX54yQKSY8jm)Q}7^z`0nF`5Qv&o6- z=F4UeB;v^y5<)gBPn6^*sSGfb z540d9e$xIv?6MU8$%y|3^kp*pJrKNu0jT@coABQ+>Z4?3rRsNqRwc(aNgUk6fH!*p z0(o^LDgvmq7mC!3aAm|4m-~h7p9T>(iw31nha#P9dtqj;P(=JIz;@Dw&R+U`m-gqa z^t(Gzos?K?N21f^7JE67&<84@G{YgbKS3dp0cLwU-xgO45Pzo=$E2W-y&fWsIl$i--U zN_wBabC|bCv)PA<*oi$TzGV+F*x%W-!_#cuq)Av5FSVbsD{ZzQk?@pVVDT0W74oov zc2O9`EQ5HHw{);dFvK>KK}dHxm==38iSQHn-c2F|WwLcigrDHEt=JVxbYq9{a&ry# z)$PU_6Z`0D+E`G$08?~*ny!qRY0i@tSBIxt_Q}E=P&eF8P$E3qN>Nf%DEju@1QHqfyz=30$XgT zlg(mJNqGkax!sTCd zpt`v_CQ>$8M)}zrT%FTzSLT2YIKls@;9}?cIl`)V?U~;*^jpK_@!RJH9F3C)I?wdb zQ@kz)3$cBewx#bS)1K#iQx+EfGUt_aBT>ouvN7nnk9quf4||`3Q^%{&oo3CqVTlG94JpOPVSS zCi^xBf9`fIMu#;0J+LXTpN%jjJq+r?!~r>(_bWqUHxC4Z$)Oq~MkA~2M? zc`{2h8~}TNdh4F)SC|E2cm^u%aaWPW*2fA!trkZ|xzAIa{GrWRun@{_rjO02gF0il1AY?cay0OuU(`=6mG z#^)s86_*U18W-r#zqvgwn9pHzj0@j`;($(26W;)HdNM=9W1mglDic37iXZ74|LFqw zbZw4WNWj8a-73$@7T8}wzS)Wocjf2rjt~Du$(m8f7VXC(R)|Gu;`yvkz3-zq|5_dg zh=zmXLU=KW@`RK{KY#Zr@4R+^?D0vHl89hmbUo>Ps9g;p+qsu6{>e*6zg6cuA--xb z_VrfJ9;`cTl6X_<#%OX?zfE4;=A2n;hc5?Gpc9NOR*o|H(XPjWJl)oq0=5fjqaS^# zV!~ySaJV&_i(MxL~K5z>C zBv$BDL2s7|BwI9MOCtNM7WT{9Z=9-)Jsq(U=VL$Ae(%>>Xu>mH<^Imj*G35R z(#DQANJ<>ou1)VtUeZo}M{Vpt4ZY4s|3Lxgt9KI+ewGcZh0j8YGtB0p^|~{8N?@qO z#FwoyXrZPN$!>Pm+<$dznTh$R>M0x!hmJ^-@0DeNFfCW6-u%u^(8DYRL|F)`1;7(ph&D&K=@psW?{} zOFHP$W&4iErb~t|^cBkHUlRq~V%9j#lr3kE(}3Mj7PlJW6uegy1%QWWs5d3MMlFLz z(=NbZG$d0-Ei2an=W?No9+IgCx@-B;d$7BfDbr9~PdvuQa_$&NN)sPX@L#D+#~NwT zvR=_?ys6igtyWFcqq5PezWQO=20BMOEZe>WPWaxesBHXvU;S5kIodcyE7Vt@l~YqT zSeT=QH|P!YMtWnt6`Jco!%fj@>3bi(x|e69m7!T6UlZLIjYj8IM)4_Hw2EJy#?!sO zig1SE6D@e-RNYq|mCg2!(W3IQePcAp*;!Hacsf>wv+Syw;>htI_JmlMbA63 zcKSuwLAufUK+<@k71PH_tna9Fu2N|$yD?!)?GgmY2Lc6A+mM7g`op^s7>ki$jF%`AC03OPATQT zR~@Dt-_Rmaq&*m&@jk zuC#7f{v7V2*D2?Z%E?wvZ}D7zYF!W4(-AyB-;Kj{6Zj_M`3~!c#f(xp@|DwHIR(lo za&lYjpE2J(PC*vC%PGi05*dkMQm%!x8@W>)_hHAKAU5BQ3hklP&9|%WnajaT`0-!h zS&z@u9_Nn1A0UoMl`yZwFZ0O>9 zaNbYC+eY5R_p4+;(Hv&qN;(KIQCMcv@Xf=wKp_R0VRl^NOM8EA4D<-T3Q_hT==nao zlW0ySfTkN}idJjGB`rm$6lgPL+w|Yc@=}KA9I*O|TS_Y{mxaj+hb^`H$LnS&lpm7D zBjC#o+fpwduS1NkR|KmIB9S5>9m&XXSjuhV`q){zgba6~Hulb1m@ZL6A=cj6IYz2? zDr~=`m(6_55VW#5IWXSLb@bn#!(TMZw776-sy*M7e0t%jgk03RFgGC-GEcXnCqaJ8 zt_X!P*-ja663~y5vCs{u^5kh5GlVUZ-arF^<(1Od(nl|Lj60_6fJi`%Z-P@S<=P-L zYaq05b06LAE4A19=xDt%sFz94M}u`sjPPq2p6Rj@!=94hrhu2Vol_O4i=?hyn1HyP3}*gJye*3s^s)N0Mn z-c>70;P=Ys@Yhe~7SqYxVrw$D*ow?8UOgL4%3bp?TIx>Pl8xpW_jl65xrb%S-cAr| zu&)!8=RJUBUw#t5le`E0O+UW}HqgdT4u;%q&kl#*wEuKMLwl$10V=>V{bu;p%kkHk zcC)@*HhF2VK3!gmHd3=pdBqvb;d{3e8laVzow`ToEz@8-lxKHMNvkUK7KWs$y51Ym;AhuFln!7=xhJF1i{c8Oh{aUedqF?-ZkFwtC*pzReNCO}& z8X1j^CPq^tFj^UYBOUD@8f}es#+AlZ#?{6(#x8BxxJJ*;84&+8N>@&GGTOo12LYqhD%NCQd(fU6P#{2y zEJ9?4*9blF;+1{tk+CEvA(s+9^`NT!uX4W5S(N?$&^meE^B9nHJm+N2iJVh8m>7DI zeWU%>*WY(i@V&J1EOb2;9>-JZdfqV{&ugydeb=Lmug-AuE_FRmx}N7<&pWQ?fa`h7 z_58=}-F>d-V@VeH*q1KIXRhaE*Ymhrg{NH41~>O6*Hhzqw!5BPu4it7<9W`_zRXQ} z*7dyUCarNjtKFn^uBXf`=S!!`?>M~{H*62PFmv2o7o_8v=_Wnww(A$S*B`vNpw|?T z-`RM|&}yv$J{oI90#4%p&}-FaTH4>wp^uoeld-rt8qU2X9p)jC@Uv4* z3$}Hfd9_cmEH*_G1c-;frB0^3o$;9FMYk?*X!2Om`-3ZkN>={L*j+ zmf}6a3W9kH zl_eaDEAZ<$e>H*p2SKLCl{hQTznR*+zhj+ww>^F;2Hms%2eRpejvQkAyYV-BlXhuz z;~#G0BK@vkky7eJM~O^GyH*$iz^|J2ku$gnD) z(D@^GB}QOZ-CHr2O>gF$jaU_tiu{UvHm{j`6p|s*hKc+9sDAvP{^;4(6=%U^Tj(xn zYm(U6m-M=ANpgHc&ic@YJ{mXs9tSFmb*~?#O8l$9 z%(1dMN`xZWlPg-(0F8Zj70h%zKeogP9$YKbx-gIQGXC#I)Z7JU@24KmScirr@EHh|YK@*MA z4wNd-R)w@?^19*OJXR}<{UhdQ<7>UqS`f75Rww)Xdf~fFZ^n~ zaCN=#_Ilwv;)ATHPH2&Eg6cG4N}a6isrXbjqjs=hNbautkqh-cI;?K+=X%LgM4bGp;1BAB57!HSQ7`;;-4>s%8-(3HbsXJ6 zxK}RM0(U=eBt4BL^lU=-h%zuq;Ts_Q{RBGUAuQM5Iqjk<{8^m4o90nx@VwuRZg$aV z8|$H*KdD(}xnReLWPCsuXZs@cz^27~kE3rk?&(kI5`FhirX4In*|%JS$;gDWZxg_G zLJ^uC@b1AKe;N9a7-x^@M3=C6j{BuY74V|2+>Kb!2Hg2K$9!ASM{VBWK<#$iT~6+E zj{CjimOIsY&~e{&;vaFs^Bi}-TaFX{(QzjwD)$2?e9UocoN{J5=`R_|ea|W9W5+$@ zzBpRWvz+q3cEV>J_k!d8;^bT8l(WQfw>oa6Q{F1a z{mIEU*(tZwapyShdIxTS6JG4NOC5K*;~v+?yOh)Jcuz*8}1ZaWk~c9b-TuC*y~P(9*j-I z<*|wQ98N^{bLX*`54#g11U`IUk0h1jJByQY4$h@*7&i^G??m5B^zB98e)PSIzLV(N zhck9H3O;;@zBS~d@{pw3jOD$8zGo7__YBVLwdi{Qsl&qvM|9#2g!{g$dQf<_@4HyP z)QjS?Kj(3m z|HFw8t*mh1``xpB72bR`zW&eE#;=Z#f87&99jCFvGbr{th1dSVr(m!^vQM&BCz`EU zNAdGG6{WF5Stq=c+J!Xj`@Sgl2UN(pzVSxgzUjL<@n6}n4csUpi!;XtsDek=FL?0( zrQi~dh%Ou}WKi6PoU8MXaSqXe_dre<{VwGUQO+>s3|G!*<@{4Q5#@|i&Lpnfsg7Ib zxHBAgmg7F^xbqzMF~@zvahE#o3deoUaaTJo$?p7B`PVsdFLN<(%ywI1-D$M$VT z-#0jqx1x_$(suOGTG@%dqn%Ju8TuC8hUX0EtGJc48h~#l#(jjow~@^_jJ~xvmye>a zYA~6D0^fo{(!PN;z#M1LHyMxM&!cZIPSx+xw{Hw7SOOnS-^l`eG-)3Y629xsd5kWf zQ2%i2c6Zwu?(RDGDjd{XIh~Z#Lpj~*n0dZiIe%5oAmv=IWM0TWMmblwn?Js7WB*eG zkq>?No&Y_#B*#{cCH4fAnw9S0Q)*U<#MbOX$ne@I4}^Y4g?+gS?dph`^jTT*Q`2 z$099qP|;8(UaNvPBO0BKT25lcltp>-G`FZo3r8`>*Ur;Lx5fe6yv~&D$4+?nWmbkF zVuW93xor$~y$Mq})*NWf3IU-XIuUx?gcSi6vW(4;d=4^Rg{(^Q^Cax|w&2eq zOC_54p)~lym(co(xu#iB5e?>ALAEeWak|ISU=rZjkuCY$pzcVrn9yIdgNstbXeEh# zmnKeiu7c^6DcQo2Bdwqnj6@r;(+~O(I}wn3oI)X62tt4o(q*4w>mM1nsw=7gS5X} zLDJTFI4veUP@T(WH>9qe(@@L~;uH)H&n2DIus(%+uK&~hcA(xJwpH+*Fd?4TQa zP$-onz!K6i)pO3{)>uaNyvoPc)@EayoLn26Tn|&OMS@ILv-yrYM<~11KrRYpt@@x> zFud^)#RDe5P_?Ldl+j z0c(+l*Dd{jPOPx{&U*DT7SjHBHh^Y>+3KKPF+%eH4Anvv^t_ux?XfQ0F!<%L%{=OpH6z#F z&ugGdpxpu>oow$)z9mnGTxeW46S{=5rJ}-MowHB8q&x8gFMlcr7r^IUm zj|KBYB_HM(G&f5~3HRO!{`TT&juOM43+GPnE1@p+zQa?WirA-Wjq38#yaK+bTT z;e;<8s#{Tmg~=+F#(qqNiF>5)+(NqZWDgW9N-Y=3J?wlj*3TBAH49s*jw_Q1mDUWX zYoe-a5`N*|Sr#zTWCApaReGR3KdHxqAK#?2Pa3Fm*&kA<^C5Om4y;7(PqWy^DatTC zZ=L4Mb{nlbT4;75a+Z~oSrIlfg}+yb$4dH)dlvd)-6Z20S0FXa{b5e76fn0V+w)Lb z1)t|>p?uh-&Lpa5v#NJq8Kb#Fd{~Of1=?SLAZvd*h*u&|AHRzLf;|CmoXsOSLQ;|4 z2~k0(Fc5W*p+5dWfOg-nlO<|hGD}u?V31AmIC!f*2#Jugnk4y>H9NQ;m2Am|ul3QR zGHqWD4P%1~LBQOpKj2MjlaEGWtCO$~glvTJL{Zrs_e9<5-LT0)R)(VPG6q!#4qUhp@yDb8vHqNJ}K-a z!&E}qB;L~ikA**Lz!BY`u@aniJOMDcW(e11&l1^@$yVz8`yA90$YEWIKL*4d8Fmn6 z&zpJrExPD}emQ-#Zne-Q1+>G(7|(aL1$kWs@YOQOm9i~Js<(ex8j95`wB+bgS0>k zq^dm1w9yxi`%)4I+R$&I36IKtx>f&(IDWL zmIlj21&xXEk`}2^Q>I~aY-y;ul7e%kKw)YAYL<$r~lonoY3E*fMQ zn&C5LGOSdd-c(OEjpSZ3aV0F5>oy%mTN{ab@}Ee!!9(_d@nYW>jf#GL_Kl}jB&0Ek zgveBs_K;0b6eL%AYx?MiM?|j=inK$z0j8~8~ofGQK6yG zfDh3?nbT%*PXMjk=>|y?`1FRR*~v7sW(seHAxS_0MFV_B!vfg|`v!2JcFfYl=XI@& zH}%QHnrt22gf)N_|J?)8x}k|=-Y`|yqW0kzr%BIzL<(uUVUsE2Hzn(7U5qrd4ZkW) zChvu5l%6J&-pbKMWB|%Ebb$7!@tYb!jT*5{sYuEAZP6ki3NnCv*jW5)Vv!99apnY= zxA0**-!8DrY_>LuE7`4&VfV?frDxu_-8^3!nBkH;B@8*XrbudELcO9={sa@TXKym~ z2cuxyb}k9P>0&hUAX;nO(j|L?W^rl=Ut7aGZY@1equ`vlc7PZFJ4S+^oh2pMy`EYLP0QHYv2`bjpmD7W+vm z`6dhB?4qn4w)ep#J~=>SG=U5kd2t}|t5CfPEm8`3af{AXKqX+;WLJ{C#RcJ}9(0{mv zPT{qsj#a?-)|P7FsWDSG%rWV|yQU6C@N{f%Zh zuD-3=H&w>VV&7c)rnSUU{>|CP~|im_5AC0xjlVvXrOJ~6}1LM zU^X5aiZsaKp?V~gFGiviokUJmy@13524;mcIdw8W?mg8u$TjDsf@IGJ*Lj!2+BhZo zto|OqNJm^ zy+CI`Oau9TAH5;4%h+Kad!J^b;wCC9AH`{YL@v6DJ0szLn^bmkJRrEv>3COQ>x(=* zw_xcUZFo(no-4~(k*x}AcI^!wIyToP9@;XNvXzgm{(4|Qg&a{X~abV0spM~co z$n**{H>mFXW1xW6__i^yJ%sbagJ7P&pGrai^H2yNeVDi>!vT!6M!WNc{xg8CVDsN6 z`LS_&cu;G^&u0u#Ves%ENLKoMi||-eakek>7-#z`C(d?lXHP&ZnHUhMW6c}72wz5r zPPVwBN3f8DSc`&@;$R3cfTMO$Dvks(FA~E*lmN*L^_-L{&kZ>-1W7``Csza7i2z;P zhdq$QKkkescssRVRmiIbtstx?win6Xh^^LPWW3H=nE14M>4YaH;Qe4o6CZRx;hoy< zD#`akCj*7{Yj-3a95X(eI+xaI2E#`8<0Pa&jAP*R87LD@PJ+!aGhK}G>j|*s+=zsI zBkB1Xqs>0zpBcIb=?YI~x_SK#jvym!W@vWhpb~E4`^G@0vS~nHMQk&RtYZ^_iTXBS zfZXkeH%o(r|Btyhfsdlf_Q&s1Rh>Oyae>eYF7upuFBQZ$;?mU#i|89FtfDhi;|eO( z37g}XPC{6f4j_tK2V@b14j_vx0TBU#1Q11KQyAO;aUGOJ+!uc5oLk)qJZIkfeg2>S z|MQR1_tvfL)?Lm$=iGC?=UL=9Be1l*7XB(zebdoNACZ8xRudkSwBJ>aP28DF2&rr< zAt{yRvST=>>um?EaM8WPbzSxvoeZ;+sr+MTM)pXics%%Qsn6fB9Xw`s^#U~eW9<7> z`Ei#Ix*&OkwmoGKb5JM6yfPfbbIbHzmSm0h=n>Z*NKu^FZhEj2WHVCbQ(aY~LnD7q z{25yB!hH*hbr@}Pi*;aNmX5&_`l@@N-`m@l)xz|~cI$+k8BBx^y6As`@w`k41p`B2 z$u`3%E@4~K#mr$l`_iC+i-2+8I1-hdol#u_t$L}!*-1fnxsxpRgAgdutAi;rDc@~W3f2Js1XTm+XYnAt!Esz^!22z6Vc=7!-6vgi2V{LA?kdoY ze8Y(M?;sv1H(lWDpYEcclzKh%3QBM~`+|gxcCeX;`NlMwryOR>Ny%0KOPq;87%}WN@R+aSAk<(eqT72|H#@d5*;q~Ov;V+l zli3gZm5YR>4?DxPCbLiW71x_vda}crgg|aVa|n1ca+VY}J?BeXhG3ts7CStVtP)R=i6C?Jp zS>D`rPs$81S`yGJ6F~82FqwZ_(qDEe_~srFgbdH+!&xA|WT!)K3qxEYw z?HBx=@~=_;L>i3l)unNm%)LR3L_fhvn#l__yqS#@n%^t@!mB50lOvP2#?5mV%*x-(lUT^j@!`7Wn{hc6Ynijt>J2+4*A2WdM$!IPM7g&W2p+eiP z?{I|7?s?0Wio%Y@aZzuHkp-8d2awASCw&rvq75#7s1xX;U+FrEqN@4hl1Ozp3s%OJ zXt-Z0IW!cD3$3|9n`!5>iR>O&u?{HC)sB(ivNh~5wnWs7_5vvOEP7a z-R<`zPtH$^m~5%14@RNUQKc?BAT?~ON%u{@57nG??7Iw&{H>YcC-s{0NK$aJSXR@ZL~APj(NM@ zE)1-2+b9yu6dHNCKpS6@7a?ur7q_T%W%@fXIb`P8G5V3SN5nlSrl-KT$bf{ulvWdKNKrg4#JnbKc36b50tocK82Hb*=-zy{$mF48BGrUUQ3P~ETl_4ckS z^T_G0VZUtict1Vge^J@0aZxA{&b{?IppM!L+)+2Of zevwH^%$Uob$bdx_tv2k=R$JDP0fT53uHRYwf)?zcMpC*NwAkwzO2@V%Gr`_uC8i-v zbojpk$U56B`DtQ=gSb_y47O%TK9)kc?Unp2Mc^V2Aog^cp#32~M!Nt>K(@aa?vG0G zX*UCiIVYtuE_yK9Hlst14urKareZ>35UZ;4Xo#&&OIGA0#tuO9VfK;Q-Si9-)|Mp< z)vo0mFyB=re-sL%9ncRPV6RZ;)O#k0(C;b^cGjJ;?U*fAQ%-luqbbOT2W2 zmwxG`r@ge!OF#3{51N0d1-;$uOD*>OZ+z-2{G4yK*fxINhgvM=`7zFhL4?$E2Isqm z66}d8Uq%gawK8z|2m!f4vSIF$Z%#DyC+o*>) z$j|$b;^d=|Gj5PA@5e`B$>a<*?zd(9 zs~!7_2zxn0De;$PH0{DamXVN2rG~rimKBV_A|n$U@3OOdjv~`lv%axJR0eKdul*mPxtK0U2T(Q+s)xe2{Z@};-#Pm2N(mhx>3dBm37pg$tT+IxUF6HaB^kWqv2 z6hpAD(wg?E-%e9C|2oavfxZ?eXD_9lvjOcm?3J`;`^%-s zSwSu0Qhr|v{6}_0oc5Y$A(5o*=DiNOV)D4b;Vhe#=4~oR+XEYnpZ6W-(@Irv6G~5U zF|Cv~`*%}Nj=kvuP1j*^waQWPvV#-R4nWD|OT69YA>!rHfx>=vpN@!IlwTmG`O1-> zd%vQ*ZogHlyhSxA@CPvTw?l@^uP8$h(JDZgL%JB(9lIYM0BgBf$d1#x@{7R_UWe9E^oXozSQ<;h z8uazNZW^ppQv7@k9OKf$aemu}H+2#9PWyxvpE>tUU>WsNkMok+;;9c{zrOFj(&(nhs)FjUS5z}Lkbwp5B` z!=6QVJYbXTQEl1D6mjt07ch376O9JhZYiQwTW^5HHD|T>tN$(#>#yCM6@r;S!pIS} zT_rCm?0{ga4oGVi96rwgb11M2{UE)BHB~}TWNijyo>V%_4`B&+8 zk;alyg)B6?h9(_=o1P%lxE(|XesPxgvtRrnAO-{)T%cO~v3^=l+`5?zOg(Ot^aLUY zGL2RrHK!ou>1~QofHi6$tTY*}14FC!?R>zNU^LqiemmIHOb8%iKB^7nvY_4|wH5e_ zDzbiYK)et%Bu(}iP-}YHk7`E+#`h^zRFBq?3r3>7u4OtH zs&c_dWxi`hYz*n~t>DXs`TSuMf&FgK?W!8{Hcw;H7gn{&Do&=z9)K=bk|6~)m$%yyII%ta>Gd82dZWr%rX%8wzRlb0<3aJk5wW{k}lI^K`x($IUEVEE_|)Uu5Fy@0%ef)Zoks!@%j( z+UzA^O}aW47Iy(uSA{vDFeWaYXY)0BW*wWUiFwtSjn~D|NyU5al4hZBHvQA*t|5Si z);S(b0{?h;wWU;@-fIr2*Qg^99`okG9gs|T1> zx$Ly&eZGUNo%VC5H@Zy>KUC!N*8<OD@`Dp zYsUn-i3S!hBck<0gyuP*`&^h|hR=z)QMYCqtV6zkx}44yWW2}T?53}|t*r%u4_0v% z{T`q->S4hb-a`nAtX3++3_HYXR5k+HpA*)DXIY(8=7UcQg4Z}{+_rLRdxsnwuutk5f`Tt#vBPm zt8Ct)C7h^)p7+A8EYkE-V^A#q<=$WKMPs|E+(YPVhHFG67}m#+1~|~oTQU>DIk;Ok#Q5JVw%h2j{XQp7kQt%a%y^|?+ z4kkR8H!+8;$_`~xWgYjl>wo|&vbVZx9JV)keqxSb1X^XW1v$xW5cWup>bxgZs@4_L zksP(^4lTyI>$WG0Dj@yqh9h_XorkoX@OJ$!TS;SQvz52&ciAd*ai*6vLx#yzU+9Mw zWm#zyW%l{~XXbES_dz30D_x&%nvpw!tRur|_^#G{#Bx5OS|jQ;M;wiZuJAba{{V*l zS?HeXNfCA(jFwf_Lezc3*oG5x;Y6V$8SVwe(e`H~x-;X(MTFg{9KUP1+SaiX(*#Zx z@p&V0lRv^9WCZU7bAyJ$VlQ3A)kx^W>uXRcmLf%I2uQlm}RTQ@8zg z_Ihz2()C>19y54gs`*E5g#Rb%toZUAb};r@{P= z3gPxnvvup3=FJGiP_tsuHSAqY4TbuAHeT5tjBjRpFj0r=>0wiJBrgTghMCa5N7*U$ z>{HF2eJ1hjXdU}WJvCm(R%+fngNd?5qyFk9DhGfRdU{YaYwus#i&~O+Q5>@2Gjrmx zF#D67HTqCB4hk_eP&Iliuz}6cf|6;|>wlwYnnolsRwxD1M3*)%9Vv12My0lS9Pd@> z*ta?M?XJ#<@>Ry_LkTk=3}(eh7pWmDhffL)Z`;7$q<}A{f@pl8+<*59z7rj%J`iH( zC~`YLCM4!+%TcX_rIdS-B6&LbNWa!YquvaiQ0ON1eaZTD6-dn3usZ}x21I?5$lM_X zX+`C4tBz7}hNuL{KKZ#kDp_I5gUfMMt;6K*-%e{5E~Gcb-3Kd?G5u=hzMa(*|cY&gkZ!|&Yyd?dEHS!D56 zIYnks8w=P_yy)vht9{|M+DXq<|0{3t{9-JhpB06r|7Y)lI>DdpqC)B73J*i)RNsjp z(EZtSA7%rQNUTOK890NL-eOZL__hkDTst;ia10MWO93SR+S z^Mv4y>grj7?^R_}1wTH9%76_(`>Ysh^Hx&O_9dKuPIanFl+5GEZeZvFuL5E3#Be@` z${V?eUUP;*&OP9rs^D{OrC5eSL2%SKuohEmJTu`AXl5iQ^sI+CH31u=l3&zIVO?s+ zzUTZ$Lef9htnfqb!Qy|O$UH-6i|99ooiLv(0vlIOCn_{Ry$>e{1u-?vMu&ZeJO7~? z3c^$%a)+QW*Rq9OW)6&<+9&=tfUQWORhfccY@*+}R5Fu($y8Nj4uL@)s$ff~Y(t7i zBiODKn(?eY#iKB=WW1%ydgp>5l!64rZ~qRcO&J^K!MMaCES8e^O2ntfFORXuo5~(Z zq3?~cI6R=5;uRmFFaUS36I6rUgiQV;@2(u@_$U5sOdkwXK1KA(?USFmr=Y~(+&ke0OCu!_zL27sG)9Q1HYo> zB=p(p3|yIZwh!>e9pI%0uRf99P_dSTw`kCn^06Cqv&8Z|j&M;ZLsM05XqO=r?AhMF zK%wo70%EuAX58;`>^mCj(SC$EwZAjibdx=ms6Yw(ROhpA@?|ZQ?41gDpKW!6!EIv% za*ra;(1_s0*qlVm#Mm+|xsq6p1yaO(&09_^CkBVR4gP(#Z-CjQV};~zcAt;;wR5qZ2(e*g9y&90 z3inlSuR$+G(`Ngnw?ZFNLO8!LhrN@kW~9U3O--!NAggXoQ-XVtok=dx+oW2cVfEf6 zo0e#pn|83C{hC~)Pb3%VACimo7s*BXJGDrowwyq@;*%VNDm&B%v!=tI@Oi85RG+tY z*Ca|N_`J1yf~49xY+;&rYH6Ccd>=_oF5hbsC)cNW3;2XIT)=yvV1KXP)wKsY-GL6c ze%BW16D`MfdYNK~9~MLQxKeS=7L^k>z+4kmL)fcA4Qe;U-d7FD4kj9Os-#!N*cRz6 z^EHW*<hq!LgtDG$*ct0d_t0ahPT*!e0}=_5R`vQOt~Wv}50*-(lPKa3R;BLdxSCQNIS#fYVST&RsQA|pHz)`0a&vfmT}z)AW_-krpp36pYPc(H*vA~UV4+sK2h>7nLEP0HJXG`Y>6&Moj>(cM1UdUd#rN44}cdnG|NdFlb7BbCkxdzkdPdqjP zCfVLdPcoLkQDa8&OS~yzhtNcX1l%yTGDcZ5k!3-JiOF8$Vs4P?a4Y{u5T#(>v!(O1 z#3cpdE(DdF8`N#b)l#OQYw7OGY^m+)-)xH-YBn_k?Qahj&(2ySjj!&Vnqf=*NdMVc zg?7*kijf6q{;3YYH;)s*s*#g$sXhbj%N!)XNKgo(x6nBd~A`}(C$y^}*V}ZEcABCQl?5m=KSyxL@ zA3m66)>@K(c#rNDN5$|S9xD|zfdLeTxatb%0;Hcv1K`#_s#_84UuSj@rF%Ale}$$} z>@A`I{=JfI2d-6IFa(2r0uP{xu>VqnEwYPTuIXAZdXJ%9#kO+sM#Zx*@qveix0`FD z$iBh!d;n*4ff+iMt72)h60yJkbJZ$N3eFmwxi(OoD?GtrO>$<>U9CZ<@5wrG36h}qRe)?|B(#_M z?b2LFvZ+-YIMPtmXpL?Yg9m^p@eUetYwWwR{CH;c5;KHU5H;RTvdj)S?BT>@e>E}L zK>$bQ#I#Eg0|uviOyP*VLv9QOV#%0*$S){_zY1ZNo8gK`VI%^>tx+0HtI+GnBs?YP zevvT|zR|+PPQ~#MbBFEAUU?bHP-W9I%y3WAHt$v_iD6CqM;TU6P`02Bv+35R3>xp8RKcq?Zl&1T&#Qox&`)zdJg8Tar-O*sNT_D6~RmYHr zZSk}i>2EJ3>io=}|MUY~;8?j zFgwHAZt!`)ZSsp-w8dSh&#QfY;L9}C3AjYDediqQBsR>?zLhDebiB2ovcBJz8@Gok zL1C{K1E~>&{NpT=I<|&+WfG-R{F3(N(R=KAZzeNnHOQ?i?TB?BjT3Dj(VSR z@|??ICw+vUYpvjgP3F7cv;sH;q z2Q2UYzk0wXUBRbr)y0n9+bXdkFE-*Er20uvj`9s7# z=ut6wupWYbD?6K61Uv&g%&P1O3;)oWiHJ~%`4N`JoC?9)x5io+e>M#EF7yUISj+gh z|MBc`m!qQBz&nAvpvUU?Sg7L8n}O(Gh0lJ&Py07R=Ta}Zwev8gesP>y zHkG0ZdOB>1N6y|PDO}0%6myo1r;qBLLIafFZfEJ6@`N2$!1dbG61< z>`TF41*)5`>B(n{T}_>9V|Aub1ao{gg68T$L$}=N@D@pLxgUtGXc<5=Y_kH*4R(;> z?eo%G&|_)*8)70q#q|#y#W!qATKZ~$$l-dSz&!j2&%f!%?AB8bFK<&<38v%KFbsrdYUbuOAW3eOxs}ak4K%GRXK)4{EPy3BAcbU z?2r5yzPp2zrw2{WsFiG2U{3meCo&zLx}gt9OI?fH5Fre$08X^9!XcMrR;#u}pV3J{ zTF=UTrw280V(WlK5O$zbzmB4y!1UAtzxR09=QY|$cu`T0A&3spp^+`d!;v7`H?oJR z?Y^eA3Il$D9U4PkGICMzT5|207>JE!fP=Vx#4 zNj77saXZqV09Co@l zI;A8rhlZisNZqLvCF>=xLs;_;VPM8cPBK9h_#mMw*`o3HFjJO`5gQb}cu0`?q+gpt zoKBDo&W zUso9n{whe3!cM8QFl-NGPbgJk2NNnhP2=yt6kfw7QYP`a_pz1K@~=^+?xg%|`aLAD z^{3+p!KD5Noj*dqpV03~RVC8cq7Eu*Ti$;3WM!iBuu5JPf^EN-^f~*Kp%;78OJ8m} zwZ$u<03>}pkuJ{qOUy057V`simH!~Tt_+WFGn$THDkDvuXb}MUA%<+JWGjaE=B-DI9P6*!S1I3XjM$7JU{Xw=Cv2-o@T-eyzdOV>B}>%ies$CS|2RQ%EsJu`6il@O z$eL<@-y@)X+E_Mw0qbr$_F1Qp4BWC@sP)ooXJ=$(rsfbCwq|eNpm}CneiN>QLwXX>5KJF>zp-MiFUCxuZ;V;v=S)>lslJFT=u4s1FBd%Ke>`;BULWg$1WZWQN0L4ol92FMSvrlR?qvZ2;N zYF<&SABiFk)N^o2*3n9YHCuCoZby46pFm&_CfSq1_EF$?)j%1h29J?x8CfDLfEP_i z7}+Fh(?y8d6y;a6ghy@ZqnnT`k^0tReVfc)I0(Z>9UaT{1}XPmuPcnG8mTP_!YwVc z8)Oz%WgEQs;%wfs<=JRdw*IZ zQ_sn5KCA{3){M#S^tQ}Hrt1XJ@$muLfC1V&JYk@DLeSoe4RW&g0A-o@o@fFt39Frn z@d+4?i3u1Ev1&{}vwBxF7l} z)CHm=$kg`)@VYMQNS9ZpvuC4^0KtZ$dwk;%^I~qqs2$3lY z*mQzXEr10g_2F@751R5y<;GIRjSbe3`lwfg`i)MngVj zNkBgtmudKL+_i3*v(1({*uoVu6I-~0?M7wR{!zf=qvkBDzCIdzhPTK$wr1@~o}#Cj zMw+^BdwgNEhPP@dI{WoZ+%wPICNdYq*w?bTzlz`e9pdp6Ux$&In)$7a*P6N6vk&Dt z?kNt&HcYyuIIabQa92}7Lp}yKMOXG{yt9pfv}nYI0$72I;K2Ohu4qThKEEEuh!pr$ zy+Cq76(Ye$j3gLmTtmdA`DhdtRRK8QEsv3S5sx?G&N$P=oY5!|(^!4u{DOK-1+)T2 zJ3d;EMNnT&3v+1%aeO|wN4L=Vc@yVP5)FAyqYZZ3G_9WOah;fScnru)xPJ|~*~zjU zXiJLEg8UY5t}N&LD2(8%c&ip|agS_&1vxwLpApjg1C4u^AJde{FFZuqJgNaY-B25K zMiUiLE>vG>Am@+wEL7n)-k$xa(T?>5yfc1Dy9hg}#JZEstX+T66ZYbDWEowXVFuY5 zowls6%suIqv4_-aA8Pj6sFB$Ho?;NA#MT-j0qO&(EXc;jqCN;}$lkN`2rQJVgE|te4+g=iRSNSn zH6rz;-Dl<$nx;(qYLs59tc<*{iG_wwWEB9*XRsB`mgp9QsQ5dDsMxBp4=l=;V~EW< z*>YPDv zr8uD}gD{Sp`ld+t!;%NQ!qeo;NDES)6l89WJANS-_wzmXvNM{uL;Qu(>9I{z{F3^m z=Z;cqW04(>Is@4pO)ZaW&Rrg(;us5vxnuka7u1&7b1Dc*R`g6*qTrWvk<17`1k^u%}E#0E`BiG4>X{qip>V zqLH-SJ_??vzjM7_Yvy5OS{+#G)_PlDbB)$q7#aTt>|qA-j@j}8+~+W(g~h;3UZCgJ z#Eo2Awj&=^1_*w!0ui&s}do(+k9E6TdtAoB1iu+ ztib7_D&PT@w9#`d<3iv!5az^a0~gswJA67mGf+@QH zwelEJQt+=T*+ffZgW+-MmaC-KsD-P#T2o$aLeksE6LM~WSWHNI;?i>Qhk{DUwqD<7 za;fACyH^LJQlh9Cu87yfBaucBeiwB=lI4h&6V19%WT`E+-KcxXVO_li>3>X{n(to~ zotJ(`s?z$1<3=jjA;D*($I7JI=~Argf`S5rMz*A!Gf1y>s-aRF${x*h-P;-@2SL#S zjtp8{=Zd2u#l_t!M7y};GDA8eK!AwihG+D4m--6^(~o_0*P;HpDJu1^!rfy)n6!s) znV)@BiWiC-v+q!yqU+Hrai1S|u|$g@FfipKY$BOqMqp(AJeDuba?uOxb>eSg^gEMm zK;hxjyX?p?Ll%plTL6Pb-53H6ku{z}di*gr$krx7rLOci@P$@AMs1khg*eb4YC7Mf zAq|2BW}=e4P&_}|VM_(yfJ`epEI9^rF;VHMCPV|Y>rfSe1L*MLTp0UTvLpAWNVLN>NR}_wj?*Q#rds@r{tXRZX|IbJ^cG21!Ad zmh%HDw;YFR;>u256|PTKp(s&>tO{4X__3xJ563ss<^+3AIbB*YjHII?RkE9tb+MCm zSyuT9xG{%fJK`EP76?`v^gQ{cjaAlzo;w5Z z#9jG;fO_C0GyIS*5nRKkZ7bef+HgI3?@iA2q7g^XdV4MI!yrq#st7eh zaB3Ya98tDBQNmUk5_4bU8vZR2h;I$=xjz}d{oFr#UwCcu3$6dw*i)MtdnijPGW#YQ z_D{)%y(95?6^YNA-n==`LgSpUREO6=5Ft0L_!fqc^u*$Bb4PM{`OD4uO#`t zn>-WVyA$snm3Z&@ud@H&d)5D6=FR^HgS8EXQ$$1X&D}@{`khdp7;H@XP;cl~jb!c@ zo|N9kdM@PXu29Q1>KaQ_%e;1!WtWKbiEN$j4b*kbB&KBH%ZX^oM|AZK2d}Trlk#A1 z-Hh>^*072$u0-^T=keEATB*m5(rUmj%aNj?SU2;RpiUw>*@DGDVS_IeIUpDq8sdY- zDi*VYwDN;&9leIW?0ub|B;k0XGXIw=kXs4bD8-++<%=x4R{X9&48{l*&yEB7ZHnvx zlC8RBAyk?75}ctfdzdGC=cy#TEnKmXYwAE5E;n*Lakw7$K<2=r zeT1ab))W~}+fF!Nif{h2Peo*?d4n#Ti1e*0`wHd0FT-0hYinacQ?w{YX%2yC zZ`hw>)@U+%&EBljmpDbb3>Mo?k%JNLbv+_eUM|zk86tbNo??hRsUdl&F#n=!R&QN2 zAqKGj5x!@-CZgBiI5x!-eW@G>(P;hLK*N8cCXZ5DbuaI_Ho1(o}K07!<6np z`c+cX*y84LwuxSMTrqnfzy2x+>DCV7uCem8dRQjG2ch^8*(}m69DghL<7j44!k(0( zW*px$oDOCuB@kt@J6DMwbt<_Lni{wLY<7#p9PaeRSy)$jwRdZo5yw0N2!| zp}~L}BA+KR2i2>`OI&_-jyiH9$e`lE0U~`tVNG&*HcKt`v?MPr(_*uTG%QdvKNw?6 zByp9&a4nmpQJ5=`L)ML)n}ebsnKbAMdkHZu>!h}RB%Q6XN3@7_H2e}S%tXPId?=rl0)Z6dyPzqRX>#Ngbba|>UxTE zhdsSP+&w@Swo@sx{RX7>TWp7>n(L^RASs8mrcKxVT5{9%4K1WIdqN~vyqHK56cK|JExo*YocKa77Z;X``Mg}5gn#MfA}-3sqkk(8S0;E05=(2O zzUCIaBp!-JqjC6KSWkazCe_tO5}<*VOY0)i*fdDDilQ~})jRq^E+Vx#{UFT)T6rS~ zkinu@WO}Tk!FIbi7OLp)^9JYtb$Wh4hW|xD6G=)wrCHH$oc+H{AH&7zQ)Q&FguQ_F zkui{IR}AkBq<-187@Y4=w_(tvq?c;hQi}O~^;)x7Y6tJtom0}l0UT=D+eb2!*!h=+ zezhUE4ifa=(~ajk#ky?lzH8{#PH!Wmp=9;_g14E$h#3N*w!(Bmb}f55Lmm#O3&N5= z*Qqf(8aA(Vr7zZ{G21OQU75D5Z)3K}b6en_}a^qlijvv_mb(0M(8{*M^qK)>3K5sYbXS9Kb=j^5MNz?a-=V-w@i6| zWJeem`-cXt^->-xz08sNTSGT+yLzBZeS91bnlQy~Y0L&fJ##1~Y!Vy+bG331!u|Pn zL+jPhe?4`d1Amhp1S4WUrhBh|R>jA_jD&6!d4#PbG3_n*^*6u({b^J%dZl?(vWX*ZBG_@VKaR2qnF^lsFkQYpolKKD zwTVJiAL+g|n>D6OZ021*xN4M2xLD%z2jxX0gUTUI{Xn?@dwjgWnw!rwSH3a{SXyN1rsj`ExwyT&SF zU;7dkC_Tg#J%9u3xvdedfpu)C&V~jhf9QT4+OUQYD`CE~Z&MJ*6a&T(8H2V#YGpZ= z)llnF2*h&I;N-J4_-fG#y=DugI63kPH!S69X!%EU*^o@wg8hWtiyX44Hb==XaPyq==p74&RJ>sV}>kyuv= ze3POzZl~QT3LYw22TU<+qFqtb-X0}}Z)MAU{LoNb&=x2RR=cYLIA5L#<9=4!c>w3j zGhOyNzPQqg2GJdQElLI!`%-$~=^}jq^mvWyD%2aZ7p&r2B>(g}+E~>&g6W#Yxonco zpNDL(w!l|_IIx4?52b&klog%(D+QT)oYiOkeQre15(W~i40>5qcM1aZo28XwzNTmMw;vF%s8jJ6N=@XGH`tNj7*s_!0J%5_t#LBY-I&LY>~qz?c_!6$tN+lsm&;Wi~XzOzT!{6@><(EgkZD!6@*va8XzqUxmBF zYW6~Ry;Sn0Ma``he(rP=zaXQl&I-3lt-kv-kUI>fN_36w_4q=IZ5I5|3d+3=G8pCv z@T)QVEKuMYRU3<43S7*J;bcu>dOjok$u8AVWy>07afQjUh|^wEw2sYCcwaNJn}I83 zEAG`FogS+%aZIO#9Y_>8N7h8m28y}0J@beanXWU(2}Y;0y@V?^F^8U>txO5$W_w12 z(F&8jnVs0So|dDm{ie{xJG0d$_O@)=foIFJm1AnY@N&-YQxu8zTvM*C=^TJA? z&G#oQ{@8&mkFkCuE3qXmDgxacwl_=dic_HA2Ld890K+oN+Zw;Nm>tRD81Y-&6A|O7uG$1Yt*zCA>=mf+S0rs(XbXP!J8nD<&b!fvM3yE2y5h<&J-Kk-2N0(Q-(EBD$ zbK~)|btcbgAtmjA$ZQPZ><)~|%pa>%CUwrO)h47Vz%0ihP5)^y9P?H=jnasAK{KI z+c_C>PFag3VDYo{oVo~Z;N}9ebun%tie0P+yVjc=|12dl!9vOAhV^J65CGgNJyN5_ z1~6x6f<(4mZixLtsFcxBZCMlvrn@Fr#ohwW0KVFFhhq5RAls@bTM}3qU%PHXsu^S- zi6rcX1M{3Isi}#CPb2EQOl!ifB|rkUTG3@XJC~mEsA%$;Uqokj$tGX=7wPN<>}HajE>sXxZ#*N#2KMcDkfP zdn+7}?4-k%>tb7{uLlvwB4`Kv2hU!<9s61%vQpNSSVTq#NE72){)6a5WPZVmx~Adb|hJAF?fi`ewxLFG8c5o&X(+REVNQ5MhNZo zJd56_I%x;lE@+!^9FgeR=>#^J-(t7o;s9v~M7*h0NGZkr0kKF6h)=7^O|xTL*2Np# ziL^qggZ!?8O5^F`XhdAJ2dK_ae+lh00$JZ&TAR~TvWDwF%jBBWPmk6Inv*H?q@D-- zU$^NwRT!-ntyDlbdAr$}8QE+e>QFx#n%MNf0cxf3EOdNN}?M-oBPN#A)abljw@y?gosWIluY0-ACd_KHJ6l3#h-ktsOdj z@4khucw4!D+Z5Gr?zQUlzrcw9mh(+T=UvqdLH>OCJ#o#iT&Xv2Z-+A@k)0-#t`oA) zh@>K|v|WU~O<#+X@NfRIfBC`Jp-<4~bop3})$}i~WjA7j;0~yGFwn(~R7O}guZDl6 zc7Qnu#iM}`c5C{oX4#jdSXD&LB-#9Hb=zf+;iy;%!#*)F7YSEfi1TuU-+HJAD{QILkhEnc4oM8}(|Nv#Ix=-z>2spqaclEL+j6vR(=)|=1JKr7ot#G} zqk1YF`r`M@heOMqUPo~FnZOukMuCynGtH39cze{gY&R6*`8j$9i_v=asTAAB@@>d+ zWCfrp9sr>{h=0I=zzQsmcE;fcv;4!pjoAqoKi(>{m>1^o%X4BBg5s5IiUx3NXM}Ii zStu?OM~R2GX7A?aa@1~x!+^*cPL^)RVzD!SdlWnjIf)k^-drNw}~ zwzTO|ZnU(h*&!xVmW{+snI$82yQG&bji*NH`=Q|{LQk0S>X2jK84*1OoU0=uGv_ON zGDySjcMOoV}st(^5>YDvtN`*~7uP2J>E6)&c%vG)a zr~+zk@28E8q(W$wTZ{rEL~Bk5U@W=!#)yfY$6y% zorpGAg{)o|FOB2t$!7%~_Bcpw*^8-75`{nn%?b<14zI3<79rlSe8NA#UfK6KN>vYEp%Nb3O~ zy@CDWObYv)B)m}IqVaqO}dkCp9oK$j2VN#8C0V<*4Hb5`B=gt z;^$5)#~>5;SI8Yk1k_=4kH3+ma|F^XYafWW9NFszj*2Q zUJ48*LLP$7QsA{i$ii_=`LdUe*_3Fk`R|tmsV ziXY_)5LZ5N@7trW2Q4<8Yw7?m4YE;$k0rMBM?rjzTfrvsW*&ss`F0III%dYu$M1jQ z{zofUTNtmVWuElmW_4*PD_1*)5jKGv+lrem#4_d6i$Gq%JUf)vj@{0G>C z3?plv?6x`kVUPxQt0(Sm_Qd^COz6G?9eUYm$uU#UK9c;=!I=3#5;s(j@i&;Jy*u=H z_Ai&=@t4Y#wx0bRb(-~v>5TIj?49*b9bdHezb(bBKyfQx+}#QkC|_ldmCAHONp;86_mXkx1j^Nwb63&*6GwW;5MKPmM7+w>py)!u^ycx)>+P?b zc|DmAwTp@JFtr6{-t4cB_1pLbLhDQjj~;}VcVD~^_)nByan2#EhX>M+ zFR|mkO7}g}d?qA=-@jZkG)8!sk;D-72n;Vwtw?9^|2(Ig#BLC@`Q+Q`Z$&haTt^BX7b}8*tw;vAoAKE7h0dkRFb2TYF1EkP$)W`P=8`J(bt7=F1ZE{SweZGXv9=yli;?5tb@^(kle-hVRAFWm|? z!wZhK_K6Ms#6aqlSot(F`_hyLHkCf)Byi zr4%VLAB>Nf3}I}eXfW;#wX#!JwxC$&UALEF;##7@{jAdio0&VhL8CCBUs1WcjH2fE z=5k3@5Tk~EnPg_6@d-pA$7*zs$aEL7sKXBp(AwS7Xuwzfhi@ViV_)XryMX=Lj*{-s zyg21W$l{Y7H9)0n9Ljq{h9YDZ<{{M6h3mA(=e^DY8WWYs_Cn**AWe`kp84Qat_2+T z;2je^cc1bY8W|VV2drO4?33E_ox6{C46RHE0$)0ys{1}WJJ;jBIefI4>)%j%_cPzx zJgA;s*84?7&$sLLNqyh%stJSQ8|Fodn>OzB`@IXIv%Kz3ug^qW)-OZ$Ny!DzQ`KmB zdv-EJ&@kUV@r$b-711*EW~{S}uPPAWna1+ZW;G(3pGn1vB)P{?p3CUY|2&XCFASgY z$)VzkaASYs>$M{rWb)5%h*8C@d4o@`q^oJcQCQ+kElPjh)Vr@pQT(ZD8I_`VJ5ATo zI4@`JaVW%Ebv;d^-_|F$;C|@I>N6lm-04!1a+X`OoFv^=Ae?BA`6_K@pc#kSlsnmX3J0^{IK`d}5 zZoKyVOFZ?CAL<3^HoZL>(H!=*i?>#V4~^M;hwXF(3r z>u^Z_F(@VbVwzL`F(5@G`M<{80t0ocI%E}ja@R+qe9zRE;1h%rkuzi$S%HkOkC__YK`GIo3&oqf7cJ34$~JH zlPhsQ>GmD`oLt&bmK^o)!feKus*_t#I@QeY#`VyUfKnYo}>@pqYf$`I@g?K~);b zDR_ux{W4>r0=ngJ8z_J!g}37-G==P9 zdcca4AR}R#-l~FFuT+gsH^L`A6lnd9ArI;Vu@U{IY!9O|+0_0@?Wyd*d`EV_y{SDZ zs86l?XQtzK3*HkFRV~6sSW1|aD9qFboSn}J>C7DKQv6|7a<;YFJX#+_0NrMrB{SnNqk5AR`7yeQ|9nx_$RMs8*w9fKR3ug|Dt zBo_z-#w$yZ>qw{z9nkoRo&2+&UJ!IlD+P?S;#}VX3)O!!?EJeBAc`+fqtm zmTGn4ryy=~eZo&UEZVx)+z__^I(R*?G4Wlgr80&3ZT68CZs%Wj475SH2%AR1ypl&i z?**}PKikD4_o-2ZOW+$9RVRvIK0`yKPpp(w3uR|W>4i>om2sS;MD4Os>NnrOEP0#^ zh9S3W+>2y>O1HlbFFm_C1Vfr;0}^|-#Y- z5eohZu~imO=51j^n?lh0jz&!Gnv|Ck4uMY%Qf;%){K~Ru#fqXBZ!CAoOQ?J($QL~^ zar76wYT;}9PRiAb^z=5^pX6$y#%X@Hp1tLE`!w}vue$r_!b|-c9)B2*X7e9fXJAq2 ze;BSAVRr1Dv0peyPgf`ulR}%W-Ujz=)&?GQO8IP_k!K6;*b_rHPW? zE|W9(Ts`XN36+^Run1c5yDgh>@lCn_Sp4dBh55G>EpwwVjS02H&|JRdLDKUY_Dc_+ zab4f%2?o%)P)dW~J<}V~^ez1k_`a`3mQ#G{Z!G%9=)QtCg|J2Lzg69&M-DA+X%87^ zpu=5uCHv`x%jxWyE{w_?r=MHEzP$S70q7mTH`)~5#tu9GZWI)RiSF&y~{~! z&@ij&_ApaC57Y}`o^i~*&Lp{9D7kf^>IXA%)r*A|q1H#;AT0SKcnsAGh2e2{N<4s0 zmH*LXrbsFXPkwHa_qzA&q-1c$P-6mzi(4w5$~ngAV^k&JZCA1UVhgt8qqX_gp90Ha zxh2CkO5ki%NJ9SoOSADR0_#=o3)8{Wbl%s3z^Jq+${&b4kjIj0> zv%N$NAv_R%yXyd_q8{6*su3C5O@!|~aR=1abqC^ZIq+>WfX(VRlT!wZJm)vEZ{Hs- zy?F?KKZw;$b&+-W$eq_+rnf!%b&&1c&HLS4lm)p zmC5DO1UE7+dWrnFxsOQx;Mh%$K#Elu{oa7gn#lg16)hZg3fTm_c*Db{7t!@Bhu%TO zA`kqZJXYA<%@k*&)l%b`&v-`@pQm&};7O&ASl0?xJc3-&*m3Kd*0)|WmMeJdCD2p! zWX^gs9mXCXB#Sq`XAw5l*%}ihjYzhIcfnz{`u#V7hvH~8s<=+@F7BL$vex_N?!Grvym^l5$iFF_$+8R#eEY^hM`_q6c;}wtbF7tL z-C=5+9I=kgZPT!?7~&^R2Qq1&LR*rG7?kbS6o9{r%6UAo#o6)&&Pvy6C-z{X}2J^d2QyiwRA#3m&@=RYDW*{tL>}Qk+ zXiTa4Vl>Eml4AZwVGQwV-<3bG=a!}_E3+5m=I0v^X7=DiE1W7k%^qh-Fy5ZJC+@u` zUb?)F5p~wo^+=0n)FuuO9V=Z2b+ghvgJ&?8U-Z2-Yn-_#+=Q0}?y*f=U7lrKVysZQ ztN1DT5Vc8p?78@R@wMirz8pa=?jH;!n{IvqRwYw{b1R@vUViL_qSU#KN4F_(;&-w} zKo2bk?BZp`f-dJJHS@|}QHy2kM-Cu>=gO8|C691r18Z4XS?F8HW6#Fr>`Y1N{+M-- z0jx>kE9F5H@A<5R*h6Dj4z-;%NN|VA^=vIodRGN0m>s9b0`-L~d9*UH}!yILC_5PCYt&mS!(Hx!p;-&aSNy z^+cLOqH>v{penP;iS6k@fDRI3?}>xlJzYRS*+q)C$p@hHQ(u7t7H*}*M>xBo4p>Dp zhP6d{Os5_x8F6}g|6cF*=r8+jc}z(&8KaqcZRqr0!6tx0!sDXi%Fz)*f!jk*Lk$oY z7CJig%|9koNjU_Qj1%5q{HY@*)c_7*VLcC)e7e1tqj+s&f^z5BP}!n<8rxlID@b5O z#VM)~g)FKx)mrCxGCgPnNZCe3%_+-`$v+=9Eb)_Zb8tsNnFXMe)u3!EIy?oAYnZe@ zc&Y~2`gmQmaz8ScT%cYrn)Tb%xg&LXdL6fp*A}_1L-+Z!vO0=-b(H!I%2&oxiAZ1J zq03!H&;I#FW{$|zyB)dMjt0untuIXb7%PvCnVh>EwSWH^$BHv-kZh+GNwyf_cMq9u zS=lpI-i_`_;%=4b;lUg9_wJuQ{DaqQVssR!tR{{m_xy(wUopo%%Ru}bs!6JL6@UE$ zz&uL#Fzn`FT}L&y{c+4&E(_+_1kUtDVnqC1P^psharLtgA)Kg90mdKOQe@GiR#q<7 zY|n5^*8nBYavVH=)<}YxIbM4kILv1aDMNE^n%5z;e;MtpR>l8rk3OxNNnuhKe|yvG#c~d>M#1Pn3BT1K)-~Ju!ND`y1!P{= z@`tCEaQM%j3h0b<+>XWQS$rjgM^dq3v1(eDE6||M&UIMKz?dNnM&U2lMYmIt7`QQ1Z52S1K|Q1S^DocORu=g#&dc9d88czOjkByRC+WkGja zz-S|^xKuke3ue_neH;9%6T(=m11{zCxJQfL6K25zAEZ!1Y|kS;*nd&Sg6L|8lABkx@l% z^kDK)aO{BXQAgg#p@Y588`LdpYGL@DizwxQYLxg=RjyZTH)^oufbUAmdonO2h! znt;@3Pn-SYc|K@v&Rx6kk>BFGOYPFbUrkIs!<#Plp0a9-Qv$ub67uk=xtgh$sDu6I z<;{Z+w{Nv)*X-q<6yYXp;D z5A11%)no{darT`7q;R|gnykk{qj$5KxWM2bS)c=&oqjF32v(OT8Ck&b{9jo49bi9) z?8MUPI?8@-3(!v#$r|(+=)Q84S2904JEv`1gJ43*XGL-davz;*wLRL5mMu;MHbvF= z^a=5{Pq?Qh(cThZCI{h9})STs!7F?#-Z%!F$NPMptZgT+H>UTO-IIX)xty zzmoSDs{XP8gZ8n#6)uqbzw&DLt+elMIuYi>%VQhFyYh8%bp&&+ODF_kt`Y50&<}cU zqzGK(F^B#tGyws38D#-??LHXRnfm=!?NEv)$*jDJ##P64On8vtb}7!ul}M>$dJoWr zXO3@#w8SiY#byzs9oNp#ifH{tGE2|j{A9~=ZoT3q>j*YqD@QUx@2IU+M#d6Lqga6j zsOBA2wC$n!?pUXHA;L6J?$%QE^;LVt2h*v{?z{zHCj$Va6i*T0qdm9YYP|U=`l-(j zGdt*1Immf-1yW?~_qKH%==^480-YXXrl+M(|Iu>|QxBz^^0X4xb_tk4BmX6pBU*u4 z{9OD9s(pCFITC#SF;`o6R3y|gC1PC8tB@<4yKFC;6k?z>l<>tW>i$AZa;5{?dsI4T z-#jL#zM%do;0)RcR>>t1Kvi!UgIbyJS% zp_A(QRl*@ZTV+K2wY3kI|FG`b*t!&;yQ9*zb(bDcIH>)o;xCR zcyMglpPe7LlbkT>6iy}bq7oT%$8OOy3oL2g}A|pnzKV)XUgkB53D9>}E)Q^K=HYy3W6-t=okv zmj-gb_3Ebo?kv)qT!>uuR-^=@Qiy!{?^3At6)>(#o5B&a@f&SP(AI2B-c}rMMi=`J zjg#@DW|js9p`MyXD@3|s2D42@Rtj0N=N_3mkwc_O%kfexo;DAtK@~(AbGjPsF1W8c z>YSLbMAk&ao2(Dp8VYdk|Mm+W?}_2=!?mau@cet9pLP!jHtzIv7JtFLc_Ow~ke2ic z80VVsa4A-m*_D?04Ft?}-~iWKmO+dp#HH$!^L15^iW==Xk<55n`NR#n*UeK$R6OXQ zL5`3!58|c9@(k;vb3Fg+EPia$EUhf0dV;nRh z9kSVu^b5SiQy3ZGO+co)6pE7D<*q#>SYA&Louwyo?gjsg9*SuvuC=#Kz-0m|$mbSZ^0a^ZxB7ai zt`3r2n2lhfPOM2nrUtm!ONJcYZx+>v&bm&+A0-6?xaF1bA12l=`Xuv8w> zbtN`iHXEr|5!*bWRC?dimOsX0j5aJH%>|?z;u@JSa=}-9o_AB7vF#-CpZR11KyssF zBSxH4$Fw7GK~aNdh<)f9#CNi)KrAEoZmJ-ksXQn$GDiLv%m!! zw1Aw9aZ!oYUo#ANK8UG-f>SA>1mqf2zQxauKYyj-_L<9>Eo`B-&Qd@#dH z$a!iu1Z>!k2-#k5K`@ChS(_)lKia~no1hg6-yrfh`TX&nZW_w3`5xkbIuQp$7ru8b)T~w>+-zw}V_wM;6%)z1T z`^DXZpJ+2C6gBLz7YH^GyiEFYmfxa8L%T~gfZY`vgLAG?`iixPhI?DxQ42Z#9|Ej$ zGvc7j^8$4tpcoX7MGo^mg~Bc&KAB39N1qeITjnQilgcQs0?#cw>lXg8!%I(KlRz!rr%9%YBAKz5uFf~NOhx>QL{oQ}4q%lm6uVl?lwQUiPSd#)ZA)bd-rHEvz z$K}$39=CScti~fXj<>%2tq4oE zyxUME?k<%a={^Pc71~l;y_Bu~q*I9;2Cj7}t=hbOcvMlXzx`&r2T)@Fb-}(g-dC6$ zzCl;xIR|%*J`vP9>bl{| zI11h}x7D$VNmICN|yR_LCev*j4oT_oq~HOhG9h2cVzrn=o*- zmdAlEbL+S79k8=RJB0b*kbo6wjxKqd*b!P_AXkmm5=3s$=e^kh3R11AFW58_$!8`T zHy`C|%uzRPvI~x3&a<}TvjOI{N>hkX!Y7d7`N^@imwh%+BiAiSv}fXSlM|5gnBdus zz1VMp-B8q`m2*X8Xi4NP-W?Z^Hb~Ujiuk@mQu99Rg)AVtouaJt0TGJ5@LL=@1ZU?E zyVuKOfo8|z&xYi9-FYa!qqUAuqeOXpXbM{;hp>E>P;1j6W3{*!o5* zE3}m&JAMt5U;Y9(QbQ3J2*`De?yE^%Wr?B6Mpfidyd6g{cOrONp+O#fAs3K``9;Q) zjaS-7N+aSzsqKP4RXQC>aED$X!YhwyVq;< z3dK6bphr-A$}IQqqW!;;D7<7ODuAd5kwy4lY=F_{=hD&pavH}d$A&0VOKZ@HQB)sM z&viuG_Mw;isIr3K(0|=Q9#9!Z4Z)5SVDQTnk3K(=CpOn?Ruk$VFv}sE{L*JDvE1rd z#YS()F`&!5$?ikegyWj0PNiV)VTXWw*?ik4kj<^}Kh+?^RerN5t-?rP1E9-IHrOlnI=8~&(eCxV1|DxgaM=`j477gxO> zB6$-G_=o=Taipj1L5qzxyY93^8UYg<;fG*+HZw^Cxm;hX)9>Gxwc3xDSB$9r%)eI@ zI?YkLpAo`UjdGdz@7{H4qJ_W;8?k`|i@HwLkGY-oN7=*mNBYtgX8_x|&eMPT z36C6H>mulDV~Q7^v-7cUEG~1ZV^kkaPRB2(t|8PFs^=)1I6mB|=j=u(zw>MYF!F|* zLU@*D8(zfxdjgUpNJxThH0I>=fi4nqf5)!qPaGDVqWj8 zOl~yJVR`3#w^rnjKs1{k@-Xy=2Ar<^sn1Q5E;yqx&2S?Sshs8NH~;!Xk^9QqPF^%g zRH|j~*LoCpLF4W)A<-Y%tdtW1tT#5HLYPw7(o_=(ar;Z)YvY|IyrOHlomNhiHr^|n z8_Me=Ys?g-qiecB%ztl|eXpJ;Pv$HG8=)d9S2=U@yD|`RyX4oeexvdS1tvy^aXrI- zV91nf1Z!civ3Xwj%wIC9hT+D|yVck7T(Mz6)A>T0$OrqO-D2l$JXM+M0H z@Z=I*i=K79hI8dP=#eGz`^i{4sC*B$vT<>x%(=2ukB{h!dBqX_qlgYxMu&MP8<<05 zMByi6iQH#A%(I#+SxH76+$N7iD@n?N{J5#54dVB1jcggSlMjMso;*b^J&|9~AGDV8 zx)<-z_pQ=A8Lu-90}j*XkK%I5(Hn4PS@q45vABjt>phEy;DzTfaXKU6X*I5%u`JxU zkU{MIOpF*!e>Te^<=T`Kfowl2~R zpKLF@#208{Z}K>j-yW<&st`G&c>+JMYK*e{+qx__8?tOtmx?x=2`S2dme9Qy5dT0 z(E&9PHCI#=b|W9%(yXBA_pKS1D{u@JG?lFntVP&>Nmif-`deXz_FFaEN4aL+#3VVo z21^xWCvEngf+dT0M|lsIwAM?LkArO}x1UGqFoW7{NY_D4i-Q#snaiHfe9ewX@~|U| zV0H#>p~e&EXCX`T$~#36RWT7%oqGX;-1-JN#=`bjxrR}UT<>&g#hJODccLF$&C?Ne=^%3F7c$3i zJADE2;m%ROSi5AaS*zgLtT5S&+}MsdZ?)37!Oj%!(!3rocPMUUb+JcT8xp^7o%BH| z&@G}pXm{xIc%3c^Z6e_Wt=~=d_asIW~#P=WiXh%N3Ym@^Gsm|7{T- z|5s@)&$!ssO#^*F= zA!`I0SND1C%q}HCTMNNwzT&XV*lu2+j zX0$DvoRpK8yvZlc>72lMKXt*g`W&{y{?HV8`SSzUo$g%bxlwz~Ntu40*x?JLoupH# zv>l3Yvks^wk~u)n)~Xz`==HhxNdy*kXy)A`0xoiwQT-co%b%>7Y>Czh!n2jfE={;T z+d>PnkN6jF{w#jaC`eBKBJ&zf-7T4YoSzGd+gb7Evgnf*JHDcdu#^xv%P4s;3;#sT0y1=tbRUL3kV0l@N)?S&Wc1<-~QIxiWSQ|6-_z4hILZb)?tFR;vlR_}>k)H^1lP zNo@)BH>vWT81U$=qReJzwG_m&!-6_0A+J(unE-|r-wOPUbq%qM{M>V@3C+0u{z5xe zDChP@IVCW~zm)(}J0wi`J3$@3f$WlYt|H&iF>2+&{pH^EFBH*pLahkd8#9JS7l|Fq zaG`GL-85X8CaLTv$_eW@bH^PRO%nUj8}%zIpzdux>qZavH9Gy6r-TDvKnqr*{$eD? zV3IPS`nt(;Wv|X&qffS&!$7`kQ2zV?l5UavL0Famj5>s$g2(*>;f{HrqknTNpV8Gb zWPF<|XXGG2LkQ?KWc$Cv|E1u6wF(~23;yW}PJIcRR0y_fm}Ev-o1U~alCMWI;ds_F zBAjm&|I(CY9Ja(^>+NE=oVr@^k(wDWsV2ATvX>(GQT{i_&IsE=m;t(@a_<_JrDDUR z%yFt{#@>!&S|E^fAhQ2{t<7Y7s}o4teLjz@ka8dH|H@T07oz@;@@=TmjHLSd5zxWn z$4(k9tVb`?AMIU?17nhVY8=IjQ?f{_fVSD~jLdi&ZB z2u>R-J6XiMNSg!h)DP7J%)AB8$OJZoT^PI$TD*=4o({Y#K>8rXq6WpHi0Jm3`Qu_$ z{;$xPL%@P#yLDQPX;-vkt|IJf)|Hq*V@ULr#E2D0zlz1OYP=w2UhwxZX{Bk1g_c3q zd7eN_f8)B5z&m&FAWmRVS-VDYqG;Km|ron7FDK=086P!>ItH*|cX2!3#3 zpgT%bn$Cj*c%lm=i3toEl0wz8R>}m<2n7azF$?O9j8D}&yD;>-9I$1rhej%;m?kDi zO_ya>NKDM_5?9?y9Se=m)L#QuQ5(<2vmikNNf9n(EYpsx^Ysyc)j9!}%JEZ`Dz`F4 z58c6%Yl0fpv{DoK*}Mc7&jbKj0)Rn5d%jTBa@w(EPqNEWV3&|ECt6TqpIx%lZx#x$FU3OJz5f{Y0yWdIJ0 znRO~}?dIxr0G`c<1kJ}+%u}8t93oY2A@e%b66dpdZq^&Z0yku&P_nFZ6lR^gnkx~# z>8D1UqG-o%44>~qdPTQn)Ab>MF3jUeX+Rm-$b-uPRA86R<-m&cu~6}x{?tqRSh!&1 zK2p)N>aH_a!eF)@AF!I@LdI&nA&@m>Eiibj-K2kPJ6Vq|5Q8qT%L_QjXwzSx_9O-z zNRhTF5BcbXbXCb+L`S#F47n?ftS_*yFO=EL*N+Jdnvp`ONFU=cUVerE%OynT@^TI* zCtS)z7V>l&Pf*|6At}4Wr1!*C_f_Li!K(YtWS<&UnDP^F+OhfQrs=3f)Ox8K5b1kN zumU(>6^Jo#d5=jOfP?e@AISx7l(N=y1a8Q))-i@sKe+Cp4UqmxloU}WfL+~1d56V= zQ_dy33dvz8SB*6~JJ!Xw>7ePZySSQPA$UjL5sj5UN3@R#+5u7CwrxMU8i`@98?09V zn`)n@A6-5Slm;M{kq=%{U2wOzck^X8$#Lhg!juLEr-Hi2q{^RRM*uQ7ZRswYcImDJ zKvw`}sCUWHRaTiQVP1_>VYHy^lhiSXL9P$J)rO=%%==<>wmTWQH5T#JYlmKvU0Q9l zDTf*@I!_u0cY1YRJ38uLU}TU72-QZvz*)b*4HmN(HI?+-S$(U&Abf|uhGI`kxgmAxrL$kB^&~Re6$3g?=%m`f)AMI-JZIF~ zvj@aHhz&g$y@Bsdq)%rG_UV|PWR7hYY#TfEcAg~n?@I1oq>o>u7kYhNBD-CV-}Fde zu3rc_jc8M~EY=qF2v$N8%{zdO^hUDZRAtj#2#qjuDFApz)%g?(iD}}5Ey$*+QHdTI z92u6=Ir~_9azt0^|5AHKEo4#wrhzavm4?4{S4as4QmOfSftJ!~YxFa9i5zvG(}|cc zkR|5sa;>~n21{hff22`ad;}!&r|-d4h(G^aK zh@6ZcmGUXxLB;kQlCnfWg)9d zb_TBjiCU64?xBMop}|7(5@gXqle1(+Rx#7DLl$5Yt{q3BE3T}LgVJQMUr~br+UlG8%6i= z3S571PFXTam%Y?Zh0|}mxW?bd)Bg-at{pgS`wUC48PUE3#QVoJEOZbSTJ9q+AyQ0{ zGx&1qBPB?qzW>(6sein_LhfwA7k&;{A4EA zsfIVQ$zY=#+`*z%mP$2-G-3tHG*ip#KwNTV+;S<@xe6f^qi1SWoa)Eoa<#1JWdQp3 z8q7{Sl(;^WfRdzrl@}#)Vv2J1Mm8d{_z4%~Or&s%R_;p6JWfEgF9gXXe=iyQ$yii+ zXJy7dUHP;yE$Kfqqbarrd)qu>xpGFqrzU; zdsswQe5TpCDHnxbM^zhblxAX6W&%9~W7y7B_Bd16Hb9i4m^?PbFyeGA)5(>77rU>BK*-oT#EJ-IH+r(A|5L z%4&nKqASId@b$3U`4|)K2NR}l-yx@mBI@n%8=Mmc%%NH>sn(9YL~By$jr+B+iGicn zKua~d;yv|%LUa-TTK?*&5JZv|*rP{2_Tu0K?On+~##z;0FKKGs-{m6)* zFoOM10(?~G)Aw*~tP6~k8))$-SYR5&9c+iHnGpjSUr;l! z8JC_l5_JeiUWOMz-FT>8!mg+G11hj@^P-|LK|WZhPaK0UpBZnPegl0|RO~|b1dQcU zl&dMnL4~^N&X7~wnUke-r=j*l;?Gb;ro2_~@AR3gZ*H9utvV*@%|q2&X9Ugp@VjLA zi7NzhrmB%ov&E|m8j%sxqeJ|K3UZL!&}w0F>t=u)Br834HOV8feLjD6n&94yaCbd= zU`Cias5K_qsu^IMKt?n2!UAc>6mf5XQ=D9Od2%@bUL6FQ_+M5jbk zz(b$kJbvtZZ+HJq+!D|C#hS9DHYJcd+Tl2&JCq+Dc_>NXGLPjl$A-zrzj9M&@&7Ov z3G;%RGWhY_9P8N?lxWKyw;_9DPj$#jBQO&Bj6rFjxV=`a$18f+6LaewdFZ&(kFKblC;ROU#pw;j8(*r!x9XSVFHJ5dXvgoZ zd$bI5*_3Z|x@r4niyx(VoH=YzQ;kBMbfk-AECl5=vROLvQ`;$_Zmdn(*z4R;zbj$hQ2EQnZk|f8xKq6uOcO&A$N`@Lw{1xrCvE4N?T59fcaQb>BfhZ)E(Lt6sox3s0aK9fl4S8MShlKKQfTr{NjwskwxfiQOXSc& z-l@BsGB950SJ}ij$DNIIkZB!N1c{b7HBFO^-H3`H6+P%r7)?Y~WFd%tCDn|v4QlRv|qG6GLXt z;x3P^_2Wsmc2Z8^^h(^jmW6>S?M@wxbf2>rnLThD>1AM2IxMxj3e>ys(H&E9ym1vR zYjJXvGc`;KT}f*w-l!d9ZYlccAXmb<=xx_kUK7P0lAj z$0lA#d|tlt$-l0P%|U|E%j~P_06#kAH>iVif>xzmUTb&Ho1PWkx00V@BCeVWM^S2V zGzq?%$;C7-1FNaQw1|0Sr5-M9T_4OqA&Au44n`8xc5;)`(5eqe!a6g7biNaP6X(pN zzL6dZ*0)n(er+W;8G+jJ_awi_NWInXYBiBqjWmQg;B|ebs^Q($jo-Wditp4E>-;m$ z&S@9DI`bStJdDfy^Sk%J3#6^%amT};Zo3gp+t&5uMfb-y-#3!xN$1L7yy94ZAa^(1R9U0LZUQa)k|Ua?Dy9Ds*NVX+BuHFdkHP2SVVN-Iv> zQ@-lplpt>zFhIOZeEMxUenb0;Q4VM_eEt*Wi=g_U5{ZpLzE#~#uZ2p`iB(!dus(t6 z-tmt)9nMbs)mKefO|kb6r9O|t(-yrk8s zjnTZtDV(vS?MfEkU~nc+&Ir3{mqTaWXk@pkV z`s5TMp}Vw@Rvsxnf%AQmSm^XrZ~1uMQ&W^4)y zzs#R6#e7a}R3-dQUbL ztkVQCWz^|IFDhal>1C@mO=EUzFeN757@SWp2qdB0VWS8^;s3bjKrw-RMM5Es;?Wdq ze#E6(-%S-0ba@6Ai?(st`7WJ}*1sAzBzVOqoxKD8peO}nlm;GxSxH(4;&KG9IHiF{ zU?mb*9hIolPDu1>WfJP2>p&(2aC{(>A~-*gNgiy5tQ8wu7AQ~q2Pp1|oc8m_XIFzF1<9j5)(zRCBz7dILjqhR zzRtYEL2-`j6cl@pz9Z zihk)^4|^o*+6^BwdC(CgC+ivxuQ0d%i@#>(Ux>f|eZ?X--gJ=!VbgH-5bZMmX288W z^T1G`3x_J9Dq;-Ll!p;8-N?f#=?!>x<%+$r<~@tO*AuN3U@i1H>{ZtNw{jy3oa?uQ z=fRQpQIYp!k@r=RZYG0Iii1yfgYEQCA6DqgSLj;iB{208_#Wdgf$5jP>`S|0_inIz z_o#a}#Jzjmz5D%i%)NWWy?esl7wqmk>h241Z#L^#;aJb%TsPoY-{4#qZCoJNPQKib zer62wRXvV;^Vxp;{#2Em1B(df-aj|kHZU_=B!hoV<@3_d6c!!V|Gp>}{(^%fNO6cs zce2AL$a-iXySNhm!ie-_3}h;+QF-O-1M0|Mfpn^`ujQV5*~RMrb+gfa8^1qIHT*87 zkyw}Q>r03msq{!S#?)JyYAD_`xMS0cKF}44j7R-)udVt)_fUpC$}Qq0q2b+RA5}35 zIoFdV2DytloaT{8V-lWSj6>&_{&q|>@*V5NL=>`dRg}Nq649?(8TQ`f?aCj`|G3x3 ztLtK(;pDs{kbt)-xKFh2aE=N2$CN*xUM*#OQxC~i;^Q(+jXMp@&E(9mhCAjj&#Vf> zJ1~A>w^L%>6gUnPGUlOS3ryW0(v_j5-HgDJ0p=plBSMyr*g(|UzT*!t(}n8Cjdo5+gg?LH zu?j_Ed>+3y?wgr&NR8&A5~51EFnBAv@R;tLfE0N&9pV@LdPu^@NoLq;b~KWsc@|*F zEDzim3c9D?(x4=%VYv==50YmQHyU{+>CEj(%~AR5aQCj0lr^8soRHDM$#A8 z>eOAz7vi8&%~i4!F2bzIU$T!q4o;dvZw=(##b$v3BqN+G*Rv}!@AvmV@7c7JI9pZ^ z)99wiJ&09viH;Pt(rC87X~#-DXm;@HqZMzsr<3o7zjk8Zh4Kz5N%Akh&=pzk?td;; z;SYp5S?XuYxhph~^hv%iOQR`e?NkJ_VHtBnbw=8lpn2xhmlNGTpT#AurMhFhnzm2m?acnPo=U@#XC`oyLZ^+!vYi;N# z3P|^WRA4zc*|%h8B-Fbrp0!u@dLQr4ND2c?B_DHOr0#(Fs!OtUSNc@^El>}PcrFfH zW|_{JV`_d*)+=;AX4#Q*rSN4FZGO(v+iCa2KNRYWaLHZ^dR^87FW~MacQ;4e@Scmm z9ovCH(-m@nvtuDDMUs*e?2L5`T8ZTyy8$$a|^Tq(0nL(v|qpNrB>RB2f2PKyU!svwKAIL+F!iX8-y--il#;7}EC{ zEXI1`hO#8NgokTBk0&@Vr7^`K9)9hHdli*}i~Z*#h?m?JktqK(jK6q;RvL)_xg7~6 z74#?jqair@dDK5Kc@w0!N~LQ`_{YW=o32t`51BXi|Izl|K}|(n`>0YxYNUhoE*(Ju zg%AOe4oXL)H|a%zP$M<;DovV56RFZmAoL;#DoXFYhtL9qBsaX@`_0^$d*?UzpF6XX z*>iHv$v%6pwfB0Sb@pDL#lHEG?5zZn+bTMKd;hv|dWS1=5AaHHym^%RIlJ>k$)%lM z5=rB<&&%L$vGA_0B1Nfx<~F7ev7jo7!;b9FpAW zlU57E+;$v z(HnbBZQ)8uKmK65(b+r)IcWI#wxX}iUS(8?klp;nK`M4d9fVI%tYY}y@e{2*o!Nn- z!Q_K<);%}z3VffK=l<)maF9K;Om1!OGF*E8zRo>?@QAVN!Xw5jkJ53_ZG^yTCeNH5WgGb9+ zPf_C>zke>~>&Lku`48!840OMm5^`0zZ)UYKd5eaZLmmt_Jl`PCB*t<12~aPFzMYk5 zVidIAH>#h5fF8DWlK(*i0X&;(k15NQvcq4gu;3suKY`eha0~kP10Mf=VfaBsn!=AA z1s2YJNmSQU?6rBKUR5YdE?&i>L=VzMX_;{_SUm2|s-@1ga5RqapqZ16rk?<$K9lOV zJ`7)=K)=ktRu-PSEu0YXU1CYX!`&gPxoc@5GV1dFb(QgJ;G$q$5F#VnBZ6-m`4s8F ziIr(wx&ui%vj;9FYD#BN2jAX_a5i8nKLdx~l@aM%T-+VE<+>Yt#hzm);Q5||v(ig`Fm>hxPaL*R!`-)IZ3`6uJ<{eetL4(>NE5qFSX zkIY`|1zc4G7~d`1>$AY7yFHhI3mZ7KLb~&@k%3RG$!vxa+2r`Mu;WG{Pd*b=e+it$ zDI9RPo6%#x`-Z6eD|qp8<7NBul>kE=gl2=D{>#f4zYBpm-&RNyIr61F^a;^@pD)Dy z=NwKe1|QMz_Z3G4&bPIQd_y_a{}*9|UMN<7MSSR;p~ao| z{6pMJmg(ml8fe{O%s(gGa04#rbvg^p>9yk@tiDsqK6;$WM+H0K1ks)?$b|BV0-k!Q z`}_ZMP;Sg3WDaF8klS1ZWu8x!Vi^Bm<6dUsqS<~C#hrYZ&k(rInNVanzc(>$P4PX& zdw;NB{>Z=mobJTgo{63izFuUzZa#lh5x<$ZBzgeJJ5M4&E{1^0f}(A; z`Uu#I{{G_($8IILuNC~Agtzy=;XRPgJq2%ebSq9(8+s%1XL>mr%Rrc0|0sJty=<&2 znw0s2O>)Dmo?}%GFvABJu7zutcC?Hy%IpGro8;=tWP$!3YG+60RL|DnYwXUabCfn3 zU4kK;2*EW#v}QT-&IgMzqh@^>RzEX$oT;XrvrU^p zM2Alo7)lXk2c1#hmFdnFzV~|e#L#|IjaXoO@$J3?*2@WZ(SY+)ulRh&07Uoepb($l zLI@L?j{Ty6+tk2iXh6J5ATA{kvl85!K!{slNmVKP99;fDR}D=&A)(ZCNKT!kjULw9 zj)|MVR_!dT?2;5?X#ZeioN&br5bs%ztaFw>*v}0h*@J@Ab6st8SqTQ;>da0!ODEiD z1BmwkppC{iZT$rHi4(+RmLvaMwHTA)1TmNe$*}zllz4T?rg1XT%SB{7>9acFNt^-i z^rv}B{76M2&&FD~pUBJqpIt9y9MxkHY*V&rG}_1Q59h|dzt7wn*J|z?{vP}9ej1JTFy5# znq}1_q$cMg1<(xB>X=m1M5l#Oq$Wq)t2Ru;_^QuZemc)A`4>G?|LEY{SJe3Zqh-jK zqE|D&Yu|YOOr)i3{v*2kmaf&IwVlvg>uVgD10RXr8K?QgaZbRcWorh6gm*h?qKtmD zMc`SY;R}nx+RwiK68?TDpWLnWvxhpQZ?HWz^qnrNQ?@QKuD-XB5IIzH1PXI_a3F^? zssHvh`|CrDXhu=#U9BbGzgqeVynqMu%>1jPkAFX?l9Y)1@{KK&dvw#V)X<(RYo5YI zEyX&^ur%hR?q9nH0l!nl-KW0xmewC8J?>nO3y;6|!2SAzA$on=KP!KN(Lv>Ik49I9 zV0gxy=Dz4Tb>8#FZIQNU-!C28oZtEmzZ6X?@0Y)pt)B4=U21@y{gqn9l`j8p zSpKa`u2!nM|7BK=yX(RTsLj9iK@ZL6j+cS~%G~K8!6&|oQ{MQ_6q4*UYoMPMQvr|k zw@LVNKJ4xK{Ng*@1}7MXe6K8QrtQ%Gi=X~M%wg|_p@7*JpMO4uuhv0Su~~mNuxC}S z(G-TixqmRt(rhw*g%MqM%ah_n4b!7uMWpFkRyyZ~k1ku>g&ErO?sM)4{hos}x(k*< z;5#6zE5IkLkW|+0=lCq=I@Sbj_(NEl(;cR!72uOW(`(p*;_J_}Pep8Db3*HU3zI10osLZfSqxGe!9_BhK zPN5MlIgsh5k=sx&elgz+=ML0Pre*7+fsc|I0E@z$jDsH5e_4DftH$bKYbCiaVGv?? zLh%alcpLGr?yg5*H<1O?nD5V(PkvUYyJ9XX6&*d@&R?qy*o_K{N_Dp9Hh#^7=V#Jc zPmvNt=vQ9_|MCkb?f1pZ{C$Rk_9S>6=KmD>VwYYA@ezLe9%A<7Q;!SaDCsZ{Ftx4q zp^&mq$%cnojg?m{Ri2lWmpxf#lnY4lt|u9vTZi+>-I%0exzym4_bPuVW1f3+rqU*} z#;yDEHmU`1?}Qi2q$($~#ukgG@}#gv6;lnbs3ku0mPoZwOH``kNX4XxsMHY+3###R zXGho(qz)yPP zYKMw{IEH`YpGKWGJY_!C?p`WO3X|HHiZ^SjRLV8^Fa>Wrm!PUQZE9djmfCAh<`2bp zW1#C|yvoTRIi2GAl>V>|=c$P)c~hiPsR^aTzmTLDzRTO268~J1OkE*0Go@0+n>^K5 z%|hvznka^-Vx zj?{O_qe|YAsiA7_%5_Y`&b$XH^B>m1yi+{>1nTsu8*1!ItK9x%!xd^YYV6OCnNkN+ zMqeC1NL@(z%flSLF3;=8#T;AAkt&>=o3QS~E5qYY6qB(2gm;|NG<@BZSC_}1W>{G5 zI5{_J-GCRs)5@Wa&sE4hL$3ZfH8^=cp_n#xOs$P`hER>*c(m6&6{?*EH5UN{TC<-= z$-_?NN5wpPtR;@pWbqP~_BE^TcR`;&XNLaCA1Moh6 zw!8eA*2IkzwoGKu(|>BLZRJ(Dd{!25qYZzS;pA6I;^C??jU(1TG?>k2C(~CP(LK zT^3n4LiHaB$+#(tWpq_%-AHHVjRfdgbqE|$rFR9sv{3>YWJI31Tc5qoijNdDF)?MB zOpI)_wLUO0kz+85kEFL<;WM397j=~)pBwGbtgBrSag`-!8S9a*ul*_VKS%$!m^0F| zSy$UC;wnaN_M<1GuC_$Pm7aXAr>Cj5R#e25{Qp>F7ID2pp3~jKP+LnZ;(D9htn2?& ztPCRGTj&XBu3Z$Z^!vXT9o1ZV1U>!Kt=H+!XXr}Pd$jbXIR#S54cd0bp;s0XIiu~sRoeX2Jtt~b3XSh-Cntw(0Y8QHu|cV9ygHeOttQ(UX42ewtW zo-3^d6xXWgPaEq^$LLKz65MyZk;*kX-!!@=6|y;j$b+<=Z(7zRrL_wBZw*Uo_4L7V z>Niz!&^M_UY~ay*`>MEhMQ>VA|G&bgH(jVdP5)oH`PEQwx>5hFe96&RcF$OfQkq~S zn{Z^_gUAKJNFMIUJo(7rN0C6_r=Z+@&}1e`>pl zH>2kN`JjNjeQ5A*q3K?s;qHwv?-qJ(6@Fj4k-W9S{x$2Rvs%W$X*nQ_3?SDAr9@bJ z9D7Rm%c{wp30osoN3DN+{Hvmdcz<~(>T?j3$hVp-bR#4s4_#hC#c$fWk zJp1cC_D`wovx)4pD0V7Iz=8RV1lHeFEvgnOT?mc42cYx;X!`=Hd~Sr1hW-92`|EEv z@@bX*^$Pp!8vE;3_Cx`|U>a1I0Fe2Tz51*CqkdpRGVl!w+;WKY^aQsk9RCtJ^E6yv zkvR2a3TSzA?Af}$vOC0O_eL5Jzy>VvQ5mpd7uZk@eAEPd)DCQD0XFmi z-}Hl9_D?)-Z?6yx^p?a!U04CyUI1ev_G%mXH{;;9zXDsR&OF)3)+u>Cxc$k8U+{YH z_>&B`t4VYD1BTIR3eW18hoNc;O2-dVb(4c)*QI#bk`1_K*lwmd&P&!|23||fnZ$KQ zUO4w9B|e1S`TUrkCbUm+l^dD7&ZW*dta|)76_FeizHY|5#B+IjI7zLE>ymWXh!@0j zDU%9HzK&T3sbQ6lWl|x@`!74D`%>cn$2U4o;Z2cMd&BFGpPA+Ht_!i+CoaL~dJ)A; z>ZGZ9ygySKp6Nvu^Q9W8z2=#rRA<3EEN&?udCH&Z#T2upo~u3OELWp?KpVzk_~uv;)}^stJTi&&ed>;+PSLtt<*!cAYPi`P&F#0KZNR(sjqo~p)jlT zwfZkXDKzT8l|IH~d})1fuj%NyaB^ns!e1#Q_t~R)d@hIY4-CeOw1U{}KdL5OCu}p@ z9GPeW%fgaJrK-Kpwwsx}9~dU>=_k9t8^Z5_MOl8xKO5Wd_1?krl4#=x(G-5XyL zw!gC9;dpQ-PQQ=S>sx@dZ|Sz!Ijv(fBxXWI=HYV+ddHah{##ykvafP^b?yzuto1+p z&3R58NG=%U^>JGyASQp6^|#?E!(gn=7adk1Dn@7wPhZOFTd(+Sap&h%O#D%C)HcQ2 z!Y^Vl{kOlw$r{Hq1jYvZ)@2pBitgxhTD|vMnYEamXN_lD{*03f!qX+tyQ1HGeB{@6 zB%qdJY*CH*E#>%Ejc6Qgupz4v>qGiGr+kS={)|Wh%z)3@)>HQ3Ldr$4_3F0ZMHS5i zx%b_Qrx(-`w|#O+oR-JKB0pzE(8Y3Y82F#Ybwr0?4L}uN1>!I2@syT4HTFW7rrXE5 zotW=ghveH4hF@XqU-=5{MbiUruSdeO8$_mjtRp}!M8veEIQ^KN8rPjG%hTgbqt!Ic ziKTJ*W1M~xiAM5AZYL~ceIhIb=8RdYcdm-dsAj{V#2jDaKyN0N^JxN=MsUr>(*MyH z2GRHVV;#S;2P)Vs4vw6m#&WRPm49Pm#&XVS-{7p+$=Es^mj4MZx~X&SC(Z?eLtrqD zR7dDbY)d|N4@mC2IIy{dXB?W4mTwW_vlBHa3@YHNCjHYF^Zcc(b3aXVQl{;6dLVk~ z0?X$#fpGnVWv-5auUlqJ2Ew~|JBbO%HF~vg8~&E&8PQ(ue)y~d<}G7V7?vF41^s7!Jc=D9qVVDlPhi zFIF4$%Hc|;u_y0gDb7y#-RL$=J9H<>Qwuk{2}}F*|7BI#1y01J654zhM2S_n zJwxFMzvJhUfwklkUmlNw(=V%6dL{&RixQy9e+55%pBXB*$v@RXIRC=)6@;uMusXU- znAD?Z2@!aIfc4j2PKgX>90(Z4k)58{oM|l*_5ObSX*GpEEQ;v5k)(r}bMIbTV8mhQ za&_p1>IXDwi)vUq>3mVw!Yy~U7V*$I!2HHCJK>>*CrKE3TN_!&8Fj!`EGIAuN-dz@ zWGpnjnBw_cL+r=b0#xqQ-DYQP8w_t}n!jBbNYFCU4SYfY;#=3HT$oToo&LfYe}!Js zi+Om!FF zHj2q}oB(y#Gt;qgq{#I8b&oBGjo|DN(JCb|%Fa_JV#VkJWhU^JBN;<@D6qU~s9bQX zgSUk-4DDldHCGQ_TLgzNK2y-=T#Q^!B$V;-cmp?NuuP|ildg(Jfc3jNsOGCt4zq0N z#rMgY$=bwzq!GHkA%tQ-WIoKv31hBALY^@|0vJG&aU9L$3cJvx)w3`WGc5Q4Tud0- zBZ6gL*6vACQ~bnfmR8anTAT#ofMPfn5G!pm_B#_#`{DKHq^IKm^Yw(tYOmWZaOG=J zQzU$R71t&sl~jnhuEkk0wJ}2RD>i`uw0Ln+fXcE(B!+!{XL_kSFLce?`ZHXhWwjF= zqGB5KG;T>M4)LjfYCf}E9EKfR@j={n2d+bdEIrW<{c`+qpeJ!0sr^Z#t1R^w!u1z> zbr+GQ*T*6uh7552ILpj_j~}bec1W}Oi=}$-cgZmsOJ+ntjWVv1XeQq@Kr#-|E~(%y za7a5km>C}U^e>voQ#CB^n7kY4VDD*}aOD?A@QcutxkVs6kZ(JW@X&Bs=M7VV)IEI^ z>A>70&%qBCwnqNdqpLL|tBelFk@^cm)9X*^t%EtytIAIlZs*B$FWfo=F1r)>5#zNB z-#ym{Gdl|$Tl%I!6(XHNafkp&>B6rAqO%8zO_ax$1ZPunns9|U&?WYwqlNVlfO-a- zs6Tz-fMi_cK!~daEtXZUnF_)U z+cSwSYlbx-WJ6P-uJ>D5x)*ZOu~Vi~UfSxv0L@Dr<7+lUQ{b-0GyuCR@zw5^5W{T? z$^ezm6T7!%94~p~39k%4PY7z(;M;dK)O;KzyI8us*U$+Fn!w*t#&9;8Dd#3*)8)U6J~ zzkidzMcEqg?=LtmNORJ70Du@vBK*5_m5cj%I8@M_ywK z(I7H8mX@|}QkE03(bSX=dG+{W8R*TNbwq`Pil+ah7`a1Vm)Zw>SLxU2nEsNgK~E_p z^!TeuOd&%$?;z2c)<{RH8g~pYJCFLShwQ>a{Lg>iduQ`qlBc4TA)w%JH}NRCoETK)k)#u_{;#BGx7iHi78BiWJLv?K~*x@2C9wjh?|HZJ6EoHfSH2Etah`DAUK zR(BHF(s|h7biFq8j9b6U<+G$vp-Op(2G$dK%7_Y+|xvu$3C#{bX@37 z12Wssp0h`#dlK*STkZ@b__dvoVZY8*U)a_%y;y#5$uWN(^cHt;9N~r!dN@yOETq-4 zop;qXyc_9Q+%1rH_gpJ<=ZWufoWHQ9djTrKuuQs7w@?mzWeFwpBw>y6Xhrt+{8KML ze>xtcufW^7qJN3SdfL#Wf@g}i!5JW`C)m^rNfsu?6JSm@9Q333SOJw%lR zr-9?Z=v`iq;OoBXkq~DXO=@|Sfz!_jQc}tiY%mAhY zdkxcpA=M$Ea@oAKpn`+6#~4;9EPK{@&2Yey$tB*HrRL$}eMTmTJ!}yi{(TW#gydgS zvJFQ%tceboB_s^Y#W%AcB&3-UkHjRUSrC$oZmtg(U9PK;3bw+ok#V|!!|+-A4&PY6 zI8+QE8UWluK<9J;=e=xYB zL&54v5VjUO9VMkFrX_#>nJm0-%V>LAS24DHMq)vjv)ni!7e5lu5-PmV^$DDw3U z^O!{It5N56hx zXUtMi0>3-&Ho_ru_)w=uVq&V7VH5qx6^bLSf0{~@_|w+1TgqBoo?53n&5CuqDI&n=!=H_Kh%>*uE z+P6(~e5_0YilkJ7E7yf^WUiRLq9Q z!Xrf-Z;yr_xL|^@K^1!+v2Fe6$*ZYHj9>asjVXi|0zO_9He#_se6!CMwr6<}t$X6R z3jIi8fovnf!Igh6Ix_Y(tZ~H!>t(4h#}?F=;Poocdty-sMm?wZcz!UmdYyjUMjY;fB z+;zhzSlqtQv|#Y4C(0OlJUb|R-|7yGezL3GiVDWE*&S#_2xFY=Mq5$4MwT3fm=Fi% zACDte>=NJA(GT2aS=!%0Z7>_hyQX-_{1jMbZ?;%Q55T+P7mFjjWFvLE=z<2g_DPN; zvIzC9a(AG;kFM`#kvqONzb_Is*d>y68(LoAD9^B&#^LCbU3)L%{1Ac%=}&rr@$l47 zd`+xw1G|gGx(L2`^dcg8DlPby%gPVsur*In*FKp~s2sm8s>waQX;O|*Hwl8A`Kzd% z5m`uYOo<{|@ZyUZJ5#uz7KGTL$J{gd+O|1=8Du4MO)yvH;q)g2p=vR9>M-!?V1O8x zWL9umf6GDqB*_Pb7#!}tU^~fPT-@VuoSHlK`Ej++kaT{9MmgIhyQ=NJsB*u0$0Ei2 zKDYAUz;`B{Wlihjr`0+0Q0`^I+R+4nQ8(0zOUrx<&f)v@ERBpMJEZts)*TnC&8Ijp z8gPFz8MDP0=Cxj}d0Z`(`d~~TM;GloTL9=i;-2nsMZnUkey;pw)U(uiNd_T^TOnYX zs{~|s(vHu;MDVJniilOV{S*7EejP?C%hS3j^n~WwHlr?wA zZ^rPoQ(H4}%cqY_;HteMrCXJtBeXKedv4|o2l{LH(ztEWQuPqw%rgGCHg_lekM4~o zodn=6%1a8Q>k`kfCzE?aJa(D2Zx(9(Iv{xvDI7Ild+HA1QIv8xhNnqkSdQd84Upz0 z?fx)P!@LHc0#=u0a0&fsd{N7rsf8Txv3q6rw zwe1vSxen3&vh==gloI=dM$ z*$PCecAZ|P)le$(F}acWG`)h_-%H|_4Q+J8I4l3F7f;yxlvgiTRsJBJ?ll|i3Q1p~ zhov*xKUMk`L4qYU7PX}BuvqWCfCOt#pBiWD%2A92weU-fRGebZn#dPK3*-1CiMbTsy)*pD z8U!Ob?=CobDt)IWqWo2&V-{6SnDRROL)uZML<(&3n0R1sS++8q=V&U!(!<~3FJz%3 z?{?%+2;s?c-ay#fTDXq*0bhJg*1nzznQkfkHTcJhVlcZ1)Un%niruK^w2{`8e}#95 zbL$3W*hX$>g_86>%0gD|Z>_ej60i2JmaNjR{u{sAN)kf(gX@$~{*u$YXI0}@h;dx% zm4vBid>64hC~DzPHNq6qF~5IqTUY3aIaveDhiFN29ni`QpJ27IEgqlYT6L1Mj=jl$ zw>*xw^mWW1nwI}HbU!Z86@5RIFwzPLXFhW9WA(~!>t}NWH#XGF@giK>F}ZCohCO)1 zIXzNfF|cTu`LW76-+GERNhgPC&*ye~=6Sf$EGkVrs^chRjixBa0xqAm2$RpUXu^LQ z=Q-l)CH&)kHLc|)GP}iESkJq4OM6x4&m)BA1HyYHu@8}?=AB#X!J5d^Err0~mhs|N zj%>)U1IE9uPvu(@!DF&kLESC?4rKoJTis1GIh;+84EHUnT@vM(-)|D0C)isquria~ zmbp^^P4WB%>ETf)6>q~3Q}u{kq|O!ebO%i=kGNxx=$kEjKD3iSKYrK!4Hr z~L@$s@z6RUbG>;HTc4PSVtUT3k>42K|mBGApw4xW&!_0i?a_4{kiS#8{c zD}u6$xDE;GBy|YhyjTVmeHZ0El0((&w51C|_8@V{Ct0fS@Y;Lsk<3T-S%kFG=n*uT zKePW2hbMp-#~5heNq?L)dR!51vxdbZ*G6cNM4oA~M{)k%aTt&6F#`-^JHkNnsjI&^ue728-{Y9x@O357;IQGD{^4vgk@QdFWi7GB={p zPfrlMa+JQ^_|^;;=w_dW&*0vS8xPysJ*ft5!`xJstuG!=Q|d-`c)qX4Da=g`4-T`U zvqL`Z0d#%@jn!V}I-Phaz_^bdW|0W2m`YgN>nR;)bd1~1Ki&hC%%c696v*SZSjHnS z8_*0|&`1g55Eh4CNK|2Z0WuhPY_OT$sd6rd{KbI7Ug*ryr-+6T*V@HF6yO=Kuu6@q z^10Qdm8VmHHRpNmr3#xuv!U7IU=x@o%oqlVgTTF-4`fhGX7j#<4$pTF>vyUK`i&Tu zRzU(T^*eAW1uGx8Ouwo(eZ@TuY>8p=d&sMb|v*=d3W)9z$1Euq@0~zs| zkSBIQKiNQ95H{Z~87qMxX6f2I+gd04mzHgkUu)hl|DEa*%Z4l|9F8%oj;=nAXv>x$ z)3=t%B@SFksihx_B9x$vT49~0B60OE9S2pI<}=N}OuH|V9h@x(Xx{X-xPJzV+?(<=nYm6FY1YH=XMWMF8}& zSWEf2eSrS~Ek_@40Y@7=;cNW(+aY<^hCM$@&uo@4!EIPGu~g01ch|IRzjR)uJJrFr?XYJ>JS$y+- zmV{AnUWU|8!ISh|mpa`myIUyB^DS;I+g z$|DdmnOaFF{;d|Y;`BA(#ifEwGm!Nf4}K|jdK1X+6UaGe)I@acwYG)sM|U{m zM!=2=JWtNtF)h;Kv|z7w+;k(w++|G+jO?oMP@nh9c&X3tW4P)g2|-PQ4;W>KBy3FG_nBK%Thw9CK>Ea> zD6R%kgzv)EN_3BxUMp~3(u_b!PztJ^5ZtbUhsrtUgut@0Cz%2Tt>tRlDj&R{WZlV* zS$z2X-hUwoBc8KK_o5glU9^0g92B?l^H1jiAEX`T;v<*9rpG~zpiYX#1K60PSbSf^ z2)L)CC6N?JSL7Qc0n!F3i6lerR$;fs7qeLAx8QeF7cexeQDRBmZB^KJF$YF)N*##> z|M>++%>_9l88TYAGzFyK?x*HEh;dfw;A_v@e_oucOs|x7>o7fuJpt^8*&gA#y)KCM z!xm}*)nORV$E*>$JzUeaJ}&XP-R!ch|KJ=+2hPBNM2<70oCI;DXuatf1Cibk_kWAA=QdWeyj`Cw!POjh2 z-hDkoxi#kxi+ymb-Tu0KLd)1g1!MBP(V#YceYqe0kdk@adJhCQ&sDzI`4N zH8NuFPXqw!Ael7A?<}eT0_s^qg4=jS8Vk6iOo6slbUgwnOi_RlJ@a~9t*$RZXb7GZ($aMebH*~ zU6Gtcwlw=mQvFwLe1=~S$&lmQXTeuH&22xWfoJsohvMjktOF4K`BVqHV z_7sQ}dI4&LOF?=VWs05*-*}D;cq)Ldh8oWT{@tMa4<#3K!+#9+srId{rmd1fGWHz* z!|)}8^TCDS7;q~%9ee{*(!hHKfNS7dJ)ADcy~cd^X@7e^x{ss}+Nauob7f4;kF&`C zkRvx7&h|fE1iG(Xmg8gc2J27hEuUZot-aG4=t8T@s%AHO0s?)ag=5-md%7#N%xJ|R zl6GnMKZrl3Io2;)wJ)%*X!QnO{0Dli4lCDnL|ywdpE5Pw-s7_!f_q$kILp^&NIl0p z-K!;ka9UU5UvOmQ6%6?2x?wjN5p)QKq{FqtOPuVQv&|bP<~KE6{}6G?0A1^W~x02ceJpd9wP9Z^Z(Txo&L#GHLd zo}Q)E*_K&w=3i7S3cg~QDOO}2@7nsEma6wvx$rnesiiCIk-UgSyUyX> z<2SC;9x_W;KR>pymZN1@Ec5@;$Kpr2IAcom2#V{ZhAT%RglNwyyul>{8RRKHRcgnk z$4HGx@#QdW|N56wV}Vh3nN?Ss`!Z>0%^j91W14?dT2SEX|0BmcPbi=7VDgU`RK$3f ztS_#Aq))iNqJOWCrQfV?uCI6XhJF5e@%iE?ClCcdUBUK7x=)r+@$Cs>h&_s9Pse0b zm#k}epcPS~1`ZFySBK};!PMjPn-GgjJ+y`PYojg^+olHcn5{U*n9Nw?Xydr47#X*d z@e!F;gj`Carul!kw~MZ(VqH+tX4AOsDGN{Fd~nTO>=JYL-u{=$WuHbV;c1JSxqwz$ zs(SM~D-Y)Hpcj0@9=6a9tYnS)Dal*6&y&QK#r(C0+GqhT|4gpE0wDcTw95aUqnZrOe zuR7B59Q^E(vi3q=U*1gK81@Wi0@H%&!5r4RQ2)qv>JYu^=0$kE^@cyp1lQpCL#?3a z@?r{t`7O%T<9!qT^?k~6*O<=zb*qkbb@TtV)*DzoLIr_WcrHzF-zeCBFSQ$7-1>dU zYBUlwFvQ-tVG-zkbZu4S1>GnbFdsn0d-R;D;`cT76wr!XlUx!+t~cK_G~GBgejW;P zLF|>bqgrL5_+^ny*nb?xpUzZDv-Rw(6wKJ$5GIKFzHgoNzXyZaFJb z*MJd_?qrHga`RzYJFYEBe$!i)g0a^D4BC&>v|?&%_3HIy_PgoRt2yua8()3tJgHY! zxIVekWLEXIL>PWZIr5xp-a zyL$Cl?6H`X`v==v>cskd^Y-Dv`J|$uz4reXHu@Dz1*R=8zw3dZ9k=J;-b-)0(c9XK ztcwV6k6fKa|9?8QqSv)tiVM=4k+~n;t<8TjE`)Bx(p{f2Qi&@_JgOE5b&MOB^~LDYFyBU5~{Vr<_%#v(!L9m1-?{!ezg?u` z(R{6#tpGfPf&@UAyB5L2%eJZBzGT);;MDw4UJE0M>HwLD9I!X~mPj7{FG=E% zt$U(1_8UKzO$janH$jZ9jlOXSD3-tyb6ge#mb+FhH`JN)14%SEa6L{EoD>u`icep9 zEG|J-HgK*m<%K)0DxlfhLLZ`4+X<*%La158oZ8oeIy6HHrW(t{0*zBq=!C7;xJ|EkLUkb6huK4#@4fk`kYW1d3*^wdmP|1yM zwOo7zuLgQ!A-ef#aFC4pSXK`mqd(I(5rlm4x7fZL_%E*(JAwH9Zj5VaP47rSljl(SflE z`tO1_>p{l2ecMu_z(`7)eEFO+hF;w~27Kv`3s`G-(jD+KJiQ&Y1RCS2S?s{=EuXD7 zuFEhrE+`!b9KXn3l00^(+c-S=SsUC8={QoJ)XfqZJ-r)5>0Z(}aS7B|)Wp+y zY;+t9Nr>|r+udwjaYf7sMrj`2sqGE7)$(mY-nISqPOn1$efCh7-^+>89|3`xafbI=j9fVtk$X8{Cuj0joQB6DtH_y^iwMWTS>V$;qu! z{$?H`QAxsyfJA+^lZ5q+!1HmmNX^F(mp**k_LUu{$jZ_|#Wo zKCHj1#Qe%91i{&h+#^0cEYG=z$DARS`Es%UMGr8@GCGc=?n&lI$ab|NyVp3&uyL1U z%O7CUb$pxZu*(ofINOoeG~Emi^@eAr8;e5>fV$Xsv3Jo{CGqt}uvaicm_E!*UI>r8 z=sBj&&KXRf#o?08Hy%3kW>(5d_;YObw`{udTQ1n8wDb`U zhQp#(yc>NN{yt^u&Q7L8Y)9cXylR(TdlwT0vdC8It$Zn6O2->%eAR28^3mX2#m_Up z>Uu3Bu5u4f=aYWjIo=?)+uRuPdiyKoKSfQ&`{#z9+qBFSEiYZX?78zrAK_HmX3V=f zrb5&^xUs8@7Riv%U$y?V29FDK{H4+{_joTorIj{cMiQ?r7=RNVO|jYfWNzyAGz>{q z3tu$-Lid)x$7CHpKyOpQ$BIH&)i^Z8f+)WP2pKmz6qJ7Cfer^)sW_iu^7yZLhX3oygXK7DH zTM%cEQBW+DzpwQ4IRi!X)KA_mV#7!V{d0k_ppXxcCyMZz&iDG0OZ2B=f7-6hKXEn$ zx7ZY0I|Ul*(t)-0b!*ce0Rbm51?n~l?u+!L@!wW7C9XHPuVIPJhBd~+Id5-Se+c3v zF@q+Vu%Bym=sbomhDos09|6=A=y@Kfe^Y1w@V;||irYKLB|US2S!>OG!3Ofxal)Zw zN{mBP?Ux7Y!{Q-7#qGL8@9H{h#&>cO9L_&14L1P(lRuATg8jiP++e9avwW$hm!4JX zR=>3jOy3VJff)BJrLW8lXPYaq-TdW03^3-mz$B`AmlE_<6aPMZp}SX`{$nN(n^{R# z-?g^~0C;86{;)Pk`nx(JLL_m(;4Q5f=GuJL8;A8F7T-otZO1{Ht!){!ml{fs2gH{` zwz~O}KHh)%fKirg1*>II`6JBtnVoD-Zpcn5JkT4mloQbL>fVz8iARJIJV!&UZX`lB zBl|O7Ad8_MP5WXXT!@3Z8Nl$uH^eYAc;PDNT?@`8^&Gx%wy}kwu~u{*?UZNT$}_xs zf7HJ$j$wGK#NyqGF_Zhz_iwXP{$GB+WzVCdpjej92$s#{@twmg*b<>c8!U~{n5&K_ zOXv;6A~v`Em2d`V^gQ#I%L&Qg>nR_oIc3|AR~gyXJR(mlrQI1+wD+{SgdmWm&G3n{ zCt)_`6lc?wF5REv&FiF50*4gW3-{+k^)Iz6`xmMg5Ce?xLv&kEEm!kUyoisC$yf?e z>sAh`>m8LMblw0CUJ2-tGdzj=P+7eBTq{U~iIxXv7KL5nNS zP8yoO@Y4o!O7sKWHD(;Bo?8nmO^q$)^Ug$$JOQUWT?fpBM7&w@_{U?-Rdsk(_)PG{ z1FqKO(jXHnzRhN4Tw;~bmveyDDggBk=g_jK$SV{e@@MwJt39R3XuqmTv!05X?cCg{ zTZ`?}REd6nbtX1?wQZ&=7^gCgVg=+*$Ny+fyO*4tnhTSh_k6Kn;c)!B{^N~}o`kON zmH*$iK$w&l;YV6F)>Gv|i)(D(lC)_VIcAa4sIB(j2dLY__=UxW17@w+uVmt0c zp+%x&ej;z!rG4vI%I!Mu?1>L?EN-{^V0XUB9}!{S|Mm#alwPyr3zP8;eal`%=2GCq|&uCBL)R321 z&0EE8=PrY`Mxsw6HxPQbQH3=KR+r>}0bRg7fCCx8*XXWQJ-_M}y{*@JVOIZbxktC? zeC(SWiZ+6Nj0!!yU^q@vmA}Q!RhV&g{L4{7ZB*JIrnrRza6WDTGdk}l*7%fvd*TJ` zm_zo^az!(#KDFspXafxq@hSWXiT+@ke@B6B-Gud2eKXJ59R+t^wnbJ&53bnkpa_1! z6=t7pTB<|_SLi{zgChiR?y-4WYeWw>L6w)D-D|13&sv=&Ow1o|G;fy*T=^Bt1tfPMt%Rp#fuouvN#xV$EN z-@j^{&>F{zCG`E=cH=IFubVJnj|r5l7vIO0;f$5r4l$O&m{35z41JTZ1Rg+l(EWd( z%1+mD{Qkz=3*^u+4|uXva_wCuCZ>itU~v)imqFN59~q(Utn5IA+|*oC2mLN#MbZHi z=S;j~0E0G)?k+03hhX<0e2m)rfBu13>+q2U1UU{mCIf?AQ`_P=17VoM(s3DlGuJA~ z_%%zrR!Ykg$#}TxjCHK|u(dU=S zYuoyfwak1yb9Ihn2cE{VhLk2oopwmpvMasuBb)!eNVTil_~b;lc(qJ5EdmPHY_^-k zg|uHu5}f%&U^t7`n7f@u1!2UY!w*usvyecZnDy2Pb7lL?WHyyK;aPfG>e&6Q)KLyapM6~E zFm(?i#&Aodb&gCaXYWp8G*DZy%wN*v#_R5?^^tSxL%(59Qi>h9S#k*eh|L%?DcAE& zdJjQ#QIx;sNBVRq{dem&n_DcKmYAO%7h}2Ime_hn7~U16_U@@Zj%D7@OD6X&j3yd-8tR+N$yY9v9?JVcd!)7ZRsMhdOJDVaf)|0tRg;0s{cKw z{@sFns8e+BiKTryQDAmFvBF{FS^3^|<=&W{O7*)_8SY;T9netx392LBp z@clX=#W+#>tMeji`*v1dQM_;9tu!7-XaT33oVI5mJJZ*0FR(?qsoxh|`LGu8QIe|V zNqL?*tgXOvkXEgzY@A%$Be;sahIdw``c9QLlh-PC)$IhB+{PyvqrQw=vnJN0N!FLA z8BXdhraQIAhGM1txj8KwJEY3}$EyR$^=MlwhG_H*E*UY@u8!OVq?Q39gLAXaeEyl7 z|LPLnND?1O(qn7ts;7rBK9Ne`c;Rrl`3jXr(5jI9>)!4_C(NVeZndlEyI#Kei-+sw zBj#?sySp-!GgYgK0|Vn?(nwJyYfkRfvh-xkRc{mRk=%Dw0887wxlx;on=VhcH*UYh zYIjW2|22kraIr&gVkM+UWZKvVy-e+^Pzk)`ij!;ef@>HIkIO?wcq14&ftNr%5P^U# z4sT%7C_^~>LM*cq5F643r#Ul21_C%8#C~gEEj{beCC^`}@2_+0{B%3Xxh2@~f_cdl z3ZXHu5MME!^kUupJzB_Jst+>zt=o6|5>T>>hZU%b7zT;3OeoLb3(Se1Qy>rXVV5c! zhH2Au_@OuW!(NIGQ7Dis)INjZ-*xkQ4As|largTV^m4Bnd0L{!3)mmDEkPr&=4~!6 z-iXsn)!9`A{g5t;y{z9qwC}+UT)1$?M6!-ZGru-xv@(Hcu$)yi6I5Oy{;&7|?VLUpHIu!+2SZAA5Px(b6WCMP}osBSjR z2zhPRpB>E}C=^?Ht=7TBD|WiZrnD`*NIPQ{V457n*Hl0jtDXN!v1u;On0nKjX{BfUxRTCj%VA3_iO*g* ze&XasJECpuZ3+{9eT^qdP>4~cw%&DAaoAx`fq-C@Njj|wc5Bx77OVbX7T(8!_UPS~ zqsp=Jo(haIRqdjnuQ#uDz*RMk&$DPv&zmu$(+dmgx;PABK>}2~AePGuwS;Tj56=g)M95_G{p78U=)OK+X#)Saw@U;pU z)Mc6VtFd6LxZ=q}X;$nzcq9b;;u`$cR2KJhXZJW*c?^0x3F>e4%qPJSnE-WSb$7lE z!GXN4%q70UROAx_EDk=q8ytMpw5k&hEmtR-^0~eGg_!+7Mwg9>`IEEw5~Cfc1D$iH zF2MBs6)U`QwbrI{UNC@rsFz2HV2HKo?8idyee8u)&I@i?>;cN)w7NyHE*H;gJjI5b zu_HT6t3&D6lK2IUM`cFkvr>|!cXy!mXhO8B-A(C7!QT)3&#wjAAMM(6S72p1+a3z9 zZSv8uCPT+5y16Yb)A6t9%lbTi;6~BWakTnGLl8IE_-^K_7&~7V>3IR>yMODmzIfNM zu@>K;pj`^Sa!CQ5XkmZUf{CD-?q!NypOug5Iw?)F0V{BJ!GQ{BD#9Gu9K0EJ0=Cvl zt{~O$CVD|5f~88dmR!88JyN!8iYyMqr>LqQ7UTTW1+w}kbf9m~XLhaAfZ&b@`nA8hfXq zBn5RQYEgH5m4H;Ap^%H#(XY9#mF!nprGV&6m|P?9F31iMT(UNxq4jwsW9b{_?eAFh z8-)8%_u3vh+`#CJlBKg()03-ATRP1S4#a=*te!40z-RpDBcX>WlL0GeXR{>>5JXQ7AlH{e=5+e%mJJK)Bu(4|9&SXT(ATJC zJ3vHMRv=#tW7<4+9 z>#^`DPoNa*9`>*9R{Su`y2%uFPy+*-NKv_D2!*(;JZ4CK!d76EZ@h(XvU!x|=`opY zhw4h}U3%1*0B^$qHo?Q%krE}C{0i>#b3gZrY+$%A!YnCAJ zt?H|3#Ce+olB!#uIE$srTxiExy^&X{E($s$TR!RR=xD*`a6rs0x8-NwN`m!X?-dTK zd>?RuH&qI9_`E(lgj$kH)0e(|X{&+jRB! zIN}Eu@K2gYJMq~jGbX2yhThDurR51`9&_^3T}O{%>^BSgunTd4u8JpYJuy4Pm`r%X z#m^g%g92@hb9%WZh}PkWneFyc)@aYoZPxoF5;)<-=3mNjeq7FlWw#1Fc!{xVCa1}6 z7gyb~oG*tW6+*Wd?L4u(R{a9Fr%i ze})`>rpPD;ipof&P&aCFq|fT*1inMSxO>m=XU^%9C3=~f6ybumc0NJ);PrknZUGKH z1Ht=Rur_ig!~V1*ea7Uj#pf|f;R8aL8ptyW0E?bukbzGjg206Dh_AF4LoEzb7)XD z6NwD@P4_CP(XRzlC*V%R-W;u7coywKnZZ9I;tJZi<&DtUkVkuzP zi-kdHE9ebQukK7**>)cz69lL`Qn4~6&JxqNfanAcgHh5?V9>l02)P^JET}!y5l7~H ziX0KeWD`vyPJAI>@>;UoxguO`i#Egn1C(2o6u0w5B(^TDy^=-y3RNE{oIY3Q3rUr% zb;{&|a4b0iHwd}&b@P)YW0g0eznhmL-=799u}O2pO{X+F-=5u9Js-RX2Gsj8t^A0|SG+UyB2 za$eE3w>G5iQFd+CZ z%xxOl#goAe-Ox1k9j1M6E%-f+`j=L#2irP?bq%7001fhOf`U{vNS{^8t>EMzl?nbl z|E~1jSAfbtd#zR)o{6=NA^Wky#kQxY*%n+Syw^z=r%5pm`B*QQ5Fam$=AJ7#Q#gNa zv|k+p^CS%Omq8mF`>dmW8-!}(-k2%QO}4k`wTYkAsc+?~^H!0!N8UN@gGI5oTqvkO zie#@0g84APz;vUiqDW?2F&*>yK|N3Kl$DdSmtG`*emL1iRQjBz3-xGel@H7ymH`u) zGa2_v4EvFZeb7cdUU!6Nogw^Uf&n-}RpWMqrlgw#{~iqbOV;zb-iyhuw62mW`TaZ# zJM@e@wgtM$jsJLv#a+oCe9<98O7j#B0T-uB7r#L_>GM4m6TuH86G zEY!uXi`vyDDd)7S-Yy%8>cO0T1vswbSMIqckF|4P%xyIJS4A`Wn#$%Q@zdCt58Hp< ztL{0LKCsTL0NQkuWsg$EvjY2`jg8W;VEKn}gUYuwTWo3kIu1tv(;wOjCu!rPvuV ze*&VsV5d*%;`_r~T&yRHoyYBb776uqj65|qmMb>Y$>*jtePq>9pQYdnd!#FRM}l;I zXzV-GEb*biUYqE(-ZO>}aTL^5)j)Ww`A7V4hcV(qG`n$RQabQz3~9u*hZ5 z?V+NXGGa7c>@%GvYuY5BP%BjqCYim`&wC55E>1@1Q-%QfKhk~u&eW@NyRni^mdMJ( z&l{jnX?9-X1EL;RF&JNrxv@b-7F|*pUPz z_M9a)d)A<`0M0?x1hH4j?yE9Zi@HtIdsGr%RSmTal4$~0+8{jEy_15C=EkeSw`}~| zex4rDZO3)wRAUL|5(ILCs8TEP^PcO71a-KO*6fl^VoK8uU z>d=8GpAi-C*Dx+=>;{vRm=j0KRFHK8&D;TWfHh^ZE_<*_W;gUgdE+!*!%!fUJ&ikD zBfBPMIq%k;egXpTETL`m91$vTS36sRM08*BEH2*JK(VgRe!Y_l>P=&Vo4JhO0xVIR z-sp*I}!N){t>2TI| zrUJN^lOl{84X?Faj3~Lgy{m6;M#rz)dvsOYS9wohttvu=a68qbd4MX~E2~;WZ^?E8 znk%Q>z4P&StPqpG1t1>WfXoD(9=GOGx{xOL+?MUWrCPpAY8~mb(+aFUyXg@fZl@h$ znh1i-Oe}3q^kX#g$125JpUE9-e8n5@EkRt)jDjA@lMxot#AX92=7&?Q#cKnpm&Q?m z`;8=Z{4vM8d*tiSctq#XadLG1!+hA+fbDHx(Yqqs`_ux{Km~QG;g;}x3EeSi>Ap(p zf2_X`d>q^G;^ttTJQIsh1jJM^@G@Zs+{age9Qa-adQ{OvWm!Lez#3@sv5 zX9FuM`LB1_UbGbO!WKL08y!ZGq{W*Xllf95y&B@I<;*2=GO#mGj^?tvYIg2y$eo@Z zaDhr*?6`Uo47)|?CmX@OIq`w#l?u}56CoEVHrMOva_fV8WG?~N-AwcRw%crvxjqBRc&>ezy$?Az~yS<1Ljz7gHyW)TQki!eKyk2ft7qSgCuk(;fXSKaF-( zR7bJh<7LMh4IiFgn{c!$Js@&2bq~^|J3zj`f|?))aj`;>E<*Ul%-Kqkw+L;|a&iC> zQrD7{M1@1!VP<#toAoD2-XGYfW3!PgC_674c{q#PJqv{9$g^O%m43Zc@CWhj5hl!J zV303loLWA?w|jKB7|Xsr<~YByPWoY;Z14nT=C3rFq37#D1OSj2^;H0^pQ?V}i~r@S z%KtHSx}B0#N!w`+=Pzd#xReOD!6x%{mdq1&*;t<|P8sn0>JN^gB%_^Z8p3it;=hoK2_h~s8 zW1b8MsWI|$KAMsyP7bN)$lC777sd~6&XcTk%ebX%c?YtEZRx!3R;lB>Fe%{$LNP-` zM>LmsDNxU-1}dy_yGOml5$D18kLv3S^vc=}am$&@JzmRWUpQxx(CG2kJt;E&G8Rhl^ z>2G@4Ru=(WV>n(f+oRE`Z=8kRk}#6k;ns8e0}JO0!bq!o;$EXDHRK7$6?TW8bPg#; zzKT;j)e(-vz}2~!wV}d2s$%R)KJ+z3Qx^Sjy%kjq zVw@4Ym@ipX(ksu}a5gqH8uZK6mHo;id-oV8pliO`eXtTiH#ma9Hec#f3xe1dkbzqs zjMjC()V~yrJS^C>ERqSBC|o-*+}89Qv^$JfH#cD4z0XK_YcGA;S;_{ae-r}A4mEh& zbq6h)eLQD5bm&(4z}FH>N9^eB&=Fx9;JCoq>}le--S4p23D&xawK~2PbtMvT1!);3 zM_K7eDh(vg20YL&+3c0W{cs)`$d>lJU3(@#f;jX%nRxbQqrtBxDxNVJ?R}og3@3Lv ztEQ6KW|&^-aMe1|x>x63sE@PtWslEJ216lYCfm9mbN%9s;yr%){9LCe0SGh+SW#$B zlGI#aSOgqdn<7#0F>~H?L#rm;xkj(E3dp+M;VdYHueCG2aPUEewY4d@wG9n(23K4d zf%15=SPr%?QDLFsq8!bSoar|U@Lu1o;V4l=cU6D#nuJDN+q7edFHC^{wNAJvj7T7D zMsAFxjkl9#7_Wex3gJFUCK&kSHb?~riM962Wux>rZ2eq1rU zbyHXnQz=Sjc)*U)>^K{%)RkGsULjJymnSuBuwi$XnN?(**(4W2HOU*sT&RG4)yb|N z_GyUmWo{5ZuZp%z(VJlC4z(rX()i3Uu_s1|H2^KPDJ{hjJkeC6NmcdKZU$Ca{|wU$ zXfhV4s9c}&?o{^ERwS+XVs9Z+Bpu~Rc};6T6^lIf2}k9Z;d zwyHp22_CAp>AdhKeVYz9YT#w)$Zhy-@T*-H&l_BIU}N)l0Bh_uwsv6wu#{^Ho@thr ze${9_Uz8NJE0n7<2ngz|&PfAE?M$Ie4?P`^eUGW9-{+`*F!#gIvhFlbZAzK#k;|by z(j8F7QPFrUy>_iW1|z&(b^){?1bahy3*5DYw!co3h`sQvN%q!MU%k!YNFMA47i{4K zUVEH4=%vYxToXzGP+asG{M;*1&yS_|kBXhwSL_TZxPEm-dh713iErcS%LKXQjhiPz(h)cc;3YLNuv>+bo$R?>MmZ zAuHo8$q-fj{WR_$dH68JvM}>?C&Kt4;AvF5A)#OL@-?b-ZM|1|4fr1x&h$4G-Jf-& zIGm7+aX23f7bI@x=U?b~ShdN=1(hu~>$aRR*eUB@bi?GbvDLBHo{C)Upn4J}5e~oX zni4#Z=vE=>G34mWu;i;I`hNrD&*2}mmmp;k5?^0NclMKAZzjlzW+x^2#lZwm74%M56E#-f92sgQgE-4aSV9eib`=*Lm%CN493FOSZ!h^%!Q8qT$gmSFsC z{mF%%l+bZwuk_hbN#3ZD33vpLMPQ?6NSU2iO6cor1M}?!Yfegu*`-Q}>v*t@4Q5N_ zRo2#=)K@3@&I!ppg}K5NWlC@t+^mqSB`hLE}bh$Rtp3XC@_VtQNCqV+roX(uY6*DsMB!_YzbLM{ z+grz7qI~`I*HzH{0DH(>TJ$a8g*gf%&}>ui>Q09;c{PpoEQYiXI7xT;HBo0mK3lh~ z@A7k{R`BY)@M=}hkJ7&1CV^>fQ=xMPm_yl=5@6U~Idv*1>Mr_FTKy~a@5x!F|+TNv+dsJAVnZ{M>js09!huP*Wtz8+rCe-NCLk!oqJ7a3)d#3 zg9du_JKC}mXl$2!P8G1&I-hzU?}ZTZ#1fS$IZTqn#T15%E_Kux>prX0jx7u%6qw3p}dJPQP& zz@8FdLCnuJ^FEK7 zv6uM%@;Dx(%r-d(Fht>ECN_^}`H zN=7-njU4FGY+{J6J~{~ql8V?}`Q%e5{KEyyK9SBYy-(YSF0WLC>*Zdm%li3yCa>_( z11Kl+UG8v@wsm8$-Yzmm_6a62{Kpl+$4%;(p$l0|g#`f#a1jlOVzIayC7T>xeHXu0 zGad~Yl2MN~D4fH)WYKuhAB<&oz1n4i*IGhW#duQRUQZr_r(8mL7tPE}w+n~dPr>>{ z4$-6clWMytIc})8cuU~7DY3K5vGi!-qOE*E^wE2V6+`S}zlMs4VzCIn70qn}1TBA9 z#r1osSt5)$}lQ3~eDyAnEXHIvD`Kcn?^9N{ony&0C zUM9d91tTtzGZ}|2WVl7?Pth(vpl5@gd#LOaHRiyCG`Az7X#v2~5esBG1L8c4#9Cg=`-A^*HYBMfpc=$rUZwqb$ph_aao4$LX>o2bx6l zwe3$Yatkl8bGY@ONAJ#=HJorT@6aWYa2mte0M@dz90)~1i004cG000mG002!zR6#9CPDU?7MN(8QQ%0@5$CBen zvNgOPvw4TR{C|VZ5SqX>y9+3SAOs-^u_*(gH3$tp{l}{6?rA}0g4wexk%q{KaB$ABtZ^|NB2()bGO1 zpZ#kY{cB0XHv89v?)+=;tq;2KdX2hoK~oQ1Q+^woZ|&p9`zZWY4PE&S1hId&|NO`Q z)X5)yyZ`;4gsMy0VWE9-2Q;JLy-di&K;&b4{=XM1SHD|$h?XJFqB8u}M}8Ni-@+*N z$8z|&s$aIL|8Mg7%D{}YoUHTqtqA!JWg(3n{AAzYeer7L-*36h`r%vI)XA^=Oq;U# zzSdtBS^^Ec9&J4UbaEIM4Ve=c^5Mt@UoN!#;dHad0S|unE%nRz+qLwA;v0mA?USW0 z!r~H2UmqtRmMg}vS_14$3OMWXmebsJjrHR+|Gcn*G>8(2+93w{k&}Ylam4scxk8Bk zY2ngen{oKp1nqZyR7Sz@EzJC~Nxt=2ojm@YHdzpTs~)o0J^uaQOI7}9sd=oWJ=pGK z9X{Bkpdi7y26u~ZWc{l>mSH!Pza8phvvK!0L^{R22340{?J>*P;H_&)M)0(8rNB^{=N1Lh#cS*_&(b+@_LS^O6UNv?!S! z?y(&Qp<870Auv@`kKcmv4~p>Db&3+_ZzB{IGn@Cvt7hgI$N3lL#G~6p^M@9M*_4I9 zo#e}7gxGKgo;><`0w=@^ltd8;#h%qbYPK!*n|QWeR{7of*@8RcC|s3wfPh0o?yo$R z_AQRx>n=b)laxP-%5Ue{wCkVb<*7EPayvS6vdVSMt7&-+$|HUY5vdZu|J!6ve-V}L zyQ+V($tA*kx$#DYpZU-!dj9OH28Sq@w%90~gMa;&)nOL+L-Xk+B5_&;=moB;B(9uD zy-u+{rHL?~+^35EV+B7L9?t38^c%!OeaYP@)@qO;tn{b}Lgv4!r(YQL)Acjx<1{{H)~^Dt`V`kUGQ7W!TB zxW|O~vZ1brbCOl&o!3#pFS}89Oed4F+l2`XX zul+zw)z4!sA9n4b8{e+YFf`SZ4dI3$H@9rRlP=t?U1QcT82v=vbRB&UzC6b*f7wKO z^h=c!<1wdvVRuv*cj1v7KQi;59ekCwmEZm*B@aa?{jm6Si`7))l@ zf&ddDu@jT4IT)}unZ_T=_It?ni&i~5ER<1_$5*8MNT7W%=_f0`3qydYSLy>>RYu)! znB+P>?)|6X`T&tQrpJ0qgvaNuKO#U^MPL(Ysd!O@_W<69*iKy?>7pfLUAX`q@A2bI zckQm#RF-%P+ii57(P1ZzoZ?z??0E(fAG=cqU03SjSzku2$n%}KF}UQ`Aysf!Cj_~@ z!1n?a;pLuk8(r9Dz!UY+9H_R6BJMrPip=Qma(JbvrsO_#Uq4pJ9>V_GZ3%(HhB?Ak z?l=JIx>Jpw>%~Y9ia&YBX6%Bf|F_@u!Jj{2AoCSrRd0>gd#dqNv7S}>hA|+zT|s{H zM!#6+zo^O+Pf*SSOjXFe^3KgUf-i*-Wz()BC=C6gX8v#jPXRR$lb4t{T^u~UgVBv1 zedY0Qs6GVSFFYtCzx(*MV>xg4%z_Xcs!{8_C=JncfXrIjCY5<(N6ns;?5@2eL?wr* zNvMaA*^QTDP5=JzehI064auJf5D|IGdJ}XJ9PAov7gaD8QNQK!DcFJo9!RcF{qDOZ z{v0_f;HitmDJ@r7rHvRtS*@u<6vt}t4e-D1e57!d^z&pNk}M%FebW1D8`mlJ)&P%xHxy~mAKNbT%#1;a5OH3dtyoaoEQ4TPQx0&YSzr_^n^C;7U& zbR0p6@m&FnZT{{1dYvC;&7YQgvQ&Fjch@!?6t>FMRXEwPB%dg0YMf>hX51YAlE*61 zr7_|5j&#rrCSXPL=!1t?u)gBoUU&g1N(3&CYfb;_Dy2)l0BVV z&T%0mb1V%t+-EV!9 z>%4=P%Mk=qsYn|pL&vELYApnu;5eSWL`u4|rI%bRPLt6qdWh*FhpyM3%EcH5l|bYnT; zna%(BNMrkOuXJ-N(~C#n57c7z68P(8Q<4$QHC=!5MdGLz~- zn!L)?#Qu*&&9ia=2Wgy_9tw%J`^UI9v>Ih8-a1XqtFN_9JGS4VC3~81*3R6? z2Ba0eTcEHoHZEjNo%?!7ycF@R_~VtFdpdle%m=P4*n``Z+a#;Nydu-bL>i(G#97f;vYQou90f~;)@>F@)N6{gAD4&$@~x7^&j zWoa2(ur(FdnBqWiilnPaG{CtZ4(-e3CirKp_P{j5A7hv&itW0{$yC7frVI%>`vA^| z9D-jF*SHo-gf{cVoDu+9+N&*(fpyqbgfZLuSFbTUJL{AS(#BU;GgRG-Lal2&Zv z)?_=*_q9l~q$18(?x?u+26N)CDUhf6Fj$rN6~XghDAvxlLs71E3bm;S+-p#uu=%a(?52YL^*W*!4)w zKub9bwKZq7F@d0g&45yHXe-#m2lwv=?}uYok)`fCev*3;zKMe42&bSm}W2rjkuH&W(Lv!r8zNPsRhe!(7y zLefg8ypDJ15*G5-i0bonRVI#o=+q_;?nM*AU{wR_KjWB?=)%kBcHb>YIm6!nKflhE_!tKskh4@;VaMhGyt@yYGLH%1n3k?wI=W6H)U62gJ z&jvMj{g>|Ud9d;v^zL@lUi8|_zJZu=H{q6v3x!j{duiSX4c}lYg1g)CBKE4C)oju* z26KW3w?1n}ws;5hZj9NNj&n7v+j|pHG?i zSkkO_E2v#o<~7muSAhLH{^ySZ?eFc{YgZs%NHETCWMfrm!{G%>3aq#nc<7$IBQM+Y z_>~c&)ZvEYH`fN_yReH24vDbYP(P?Z|Ki_N?%B0|jC{A5}@WcImP-kiN7CMB~j?E4hJGqpa1)GBXtnSa(^SMo5L} zVMES&-hYXz`e`xFIMCObmoFe{E%(DtO}dj{uE{uyo6=L;^P{7oiyY_@S+a0+23|<4 zLg>rYC)s4PPHi~Aedx>FF8Ae~aUK&y*@NtChiGupKcpG|T08hPtNc49dcn4>Rt_9g z0=i4~p~_`QzVVW$2!do$FBz|Cm(|5@iT7`D*Ho|BuL!;l4lkG{mCZ=m>R{I*7Zv5K znt0E3ZDhadRY6!f=O7d+ty0*`_a>v);;GoTaFDVK>$A^%|o8;b0xGup~F^rAHG`D{Wv zw~Anr3x&z;_SfoxG-#|m6<^F$eyZTe$jE82h@@{QIuSXi$2N%sj_h6XIU%@tSjp!Z z!&Z{O*)v@TBH>iN(eiyQQ1NmC%lVV?Wc{2s-vQqKcFoT;n@=n!7>IminQ|ckAI}>K=14OXLySk`Vu-)su!(nZsVzEte?(Tx0WEO1n zInWF`IuyZIiNUX%G&;7qh??crx8!oiL}Ms<6C*!gG{oR5-z z!v3G$kRQdWYqLDrjuDKQN8v78GK6ttZbQBVt)ZwSYyEAG$qUh!*4eCE=?ID8l>poI z9;`QHx2VTi_<(@%@SfpcIj1j{un$Hmfe+tR(n@HZQX*C*X=)1E`a}x0M$Y5;G@a?_ zg3g%Q=5bs^3x3?64W91*RuS=Os$0B3#gw_&)i;<6lj}<-_XtTyGhMvHh4?Tx48;Js z&dRbokPZl4Jfu84g|e`vMO$WvO~9llZIV3hW>9N-CEv9@)Z(h-89sQu`<0@gBoFYecs%ew6X0T zV-$(vu{1ea?G@VlcL+62Ll*8K_yPtk8-Y+JoyEC1AOx0<6^#`)jJ~0`>(OSjJzw%( zvix3L$lG}p(hQv>{g^AMh%F_N#6|K>7VQUAeIjruVP%pj%L$#B5yOHtbT`uxTwdF!kWD zRiJM+tY7vXy6iZ}n70;bKF`xNSmy1b6TCmC`avrx9!iZUzV|kzso}7QzdSepV*<&;9q6|FHl_ty1*iS=ti= zndFCEdyKNa7)&tT26EpgUF7>l3^9B?OBKJn39MxyJ^*uv!{%0@cf+u8-=aVU$X5pw z`rE@`@Rcd!RhOPNv*9+UzSB}o!0HU)30AvhafPMIPsOuG@x&V;-=_(N8xw}PClD(| z7xrPY8M{n?t9D`c@|y(E&&Ux7i3if*i1U?D0C6>=wgnVHcw~;v8yot}#6D@GZm2cB z#wPOsT=g+qSDZG*2RZk!>%P7b`H8N}pDV3DbZ zQrp^%!8_fMW(&>c8PSh!irpa@Ff9c*67K-VZT!kuX*f1M!FkZ#OuJa30=Oqx$U&#&Bn+VK`Im7{QJ${T?ln;u0*KfbSIgB zcifn>+s2T2%7M)}jTgbY;?ekRH1qw%twXS*g;Qg_HMe6E$0BBCbcgWX2|rG>-j(U4 zjnz=U8tB(#@#A4GcV~ACJ>-`2I-$-clGVK}4L(hq)YqmoeP-2xdFNer-6`kf`D75w zaZkus0InF>dT*lF8^hl+jf6!}4D`z#y1{g-#yZH$Y&dKk{`L+>=1iW1`hw*V$pIpG zVTE)*Xp68)RPmKglPzr$q}K*Ym;wk>NsV(BV9hWuRMj_P@n7k_{%Gpe9kN7&GYf&3 zuBhkOQpuDz;?Cxq%=DWvchhV8D3T*>S3nn_FYv%d?pnh^!w0ipey*`$^ox45JxHPK zDGa&q^*Ot8z@b#2hT9$tZ;gVl`QdVv;<@qseW2}J#)bBUy}FdS_DvP zzwhVe72P<{;O|WxbGPGEDe|>Csemr#fYkr3Q6MksHgt~D3=C-ez6}Unn}^-CA?>8H zbZ~nl^t(|LuTf#Ty2`2_bOb(Uh|A$OU7A7N7H;A;;?G+%Eec24H3!fhlO12cgTC(% zqhX#k#e0?SCEvrihvqPs8efcKEJ_wG5Q@i$A$)Wkd0X~i)0v(8cx8B5&!n`WW*0ys zXpQ02UhEH<9e)7=A1ncYB|R4z#vcHLR4vbR=&Qy7swr=qBCy>_O@MS8L48d0Gg|f! z+fW>hvqz2y@@8Y*hUAV`nO5r6{lU5I)8gLSXx3vDa$41wDE?QM@y_8v_eYpbIy+r0 zjyS@*KDmc@32EYw48fF~WtK}b5&Sk`>lUj5zZT$}C@U6qejJ~}WGu!IGZ?y`mNk3Hud!HMo7J3Fb| z#%XsSd_1-}FQ|n3Z4zaacgZ6OP+YmhNlSg*l#Zq}1Z+T%nVu&& z2mfpRecoI>_ywqNrE>AH5ve8<8y zs_j~_c(dc`MKIjQ6SX>giH9B4;ZYCj5EPIhN!xGG<+ca+dqn}61JZfqdMG7}n`@;J zZw3!b+~!)xra|ku&)hgdH`Mhc!GmGOSTLMD!Y*3k@8Hzu)z00boWT3&5E-mhK$+Aj z&f)Po9EdN^e0j!!Kjr?A-m)G{=4uWXFRxu#yUyT!BO~rDXvgMB9)`4N9Ko|7ozmN> z@Epn&EAeAY^v5+mKz6QmS}|%)xK4|rTXl5V1@{wUMw0iu7#Q1-(LP|( zU7VbmYhupf&Wl*?izM$)?9+;1yYjYF7U@~Vm1tIE)NjaLUyJ_lmkNF(zCFW)7P4b} zR)J6cew<*~fe4Q2i7`3I{kBNw(>kqP2{@Er`yLdfeWiU7Ekco`-O}Qx677X)Fqq7u zG4^(8M~Os=cCAuMC0Z<{l9b4jC~b;1OQQUrgUKA;dFLJ9f3EMoF2C=(y6 zn=@y9Uli1i4ORMbdFI4&r?KZR%5}6m7_7Hs{{jE&n+{y7G}-A_u~sKBIW2bOLhqfU zC(Ze7RX#HGNx6BkQ(Ez94UcXz9%|)kc84u(uNwGV+?IBydaC^KyGH5$KTd7_ZCfjM zt!Bla39~x+D6TxawYjx_WF?>i$V_D z+}w9iec9oISxVeh@grX=&rnuXT6(Cw=YiM8CkA%ocOByPr{{~^R}asrlt1d>9`Dda zNpAS&9rN`1hL0NZ9Gzs4{4GHm<&A%Fh1->TF{u+u`zX6~SFO2$VY+<2F} zI!JIeyew{;5BqX?Y0)4SeUf*cb+4pFW@%GmZI9ncE(~SIPBS;3GT3YLS)Yy5f6sg2 zX>!C>H&}LgID7oSuOVf-Q;J?KQi-q{JT-gZ@YuuJ5xnI(Jr8-mDLf7zf$hO}GXG`0 z+QVCq9{F_4x4rQt1@A2%zrWGne6Q_0BZK=Dj{|SGV-Erwn3hRuu&@Z~Rg|+S#%8`-A8ZnYyt{ zeq2ec$=q>N?osxsK5tSt1$HQKnR5D0K#}=h(@F5;!?16ki+W5-{36&ivQt@@{=h$@ z`!A?H`X8;M+VGlkZlym@+2G^(i247ejIm<6Ye$V#7&p0n&hV{UmsKQkz9fcT5BX$y zpvM zot1xI`)1I&%U%CyFZrJNa!Erp^A6Pna(=GsKe&_6d(E8L?uyZ=OZYSQPk$7|O2}V- zsfR)Je=qlQ+h02qKQyRh!lp0!$rkb*e#LFs_hIX&znAk)t<~;OZaLwK%9#_6w(Dhc z%J1(9`dW5UYl^9ESHT5+_oPwhd%AK?^^>`DmT&6*S$S`DPt&S(p#pzS%9)(sQwA-F zop$|g&9P2-OZ8&(6I8Z+*Jhb2g+KK-x@_$~)TaOGsd0sua|dj%WvT6WWURU8px4Ro zr=BNtjqmbk>x6spJ9jOcms->PXRlM2`sTJ9^}4?tXZVTCBzK2ZK2-xM*J||n8sql! zUHFyWJEJQOAIKTG@TyA1XP3j)?S_tz%9-T0H7j&Rv;s49VaeXYfCC$A_NLrqJ$rTR z*h!NYBaDLw^*nMmd{)5sW8tz6KZ_Fm79X+br_qZos}k|W%G&P4e3vP_!r<|hp*nw9 zGSgqqdewjbVY`}Paz?-SlZF=Op8KJEiB`K~QZU`?LeyC&(=y&fD*QGG%?<(3mxfrgvv+7pCz}yq?&n zLy^Uh5VfEXuUMy<9saAgJE7uwmsb7N&FU7{Ibq?%;0Jp*e_(tVQ#tLl;z0Z8`v->q zy_o5hFe+%zP-n#&)qcC2BeJhVTiNdXImFXx~0pE0|5W#FTtNUe1hPSM5*iG7QP4}6ksm;UJL#3b7#?|Ki*J$!Og zN`Cs2X!)JJRXnHd+x=)u?X#I4T7F)8rrEHrZ7gK|J}37#sjh0-$t0hR0{f4Q)J(+{ zvM=LT?A~{A#4gqH)93emHQ5$5cyL^gptsMrkM3I5Uf*{m$JXI;EO*NiBk%E*>z95CL}(fgaG z$DZ24Mf(m73KGm)`CC58KK@F%_h7BZHV;_+4W8OPH?EJ^RHs{Kn^BRhxL;OPhsC(L zp`T;o4wXY63vTNlENXvzL6J$I-O!#YeAj?w9^Dp~BcV7Hp^8r5LE84NLc63n>9w7+V+@+PctPXPQr)Hm; zx-@HWs=Jlfgv#|je}y<%o&LD-Q^Gf;j3>Lar;gEmE$G8j*o6+~y z91cAeG3VsgIPKNr_8El^ESbVE>YmmkPw*-uSxL#u+_2lp#a6N*j)KwIf{pT}`=jg* zD)-<8KaIio)P|rT)o2)ejEl=LHy-T&w78a_`;v zsjqU*FEZh&&R;P$wz}@2();c2dvBNyCv@g-*ptOq*U6gyXlLn&wEWYzxm(KPRn%V@ z=Nwde@#Nds7uCvfPGO8?x?fMlSf}hQot0Yfah>YA62ZX{8uCFM6vwRlz+E4);YyT3 zh?lO%z>WuFRh&;JuhTha@?`5b`~0jkk?h|e7wx;9a>0Ag$xKkde9Vyz{+evxyI28my@c?vb+V> zRwY|}1~}em?_I*(|0ksIzISoYxz8qN{5hfA?nLRk-`B4#yxv{;)zb1QtMdGJKIw5{ z;K@INHa)K6LC_eiswMO^WT0*}bM&o=xV7a4M4RHC)&>Mt5;-_Ng7?-IV(XlU)MoI5}A zT|BMZZ`m~FMe2x%gB?$78yfpW>D%n`JYCk(<${o2AqRQ@?HMwurp-USN&8d{_NON=lTVT(hvzyl8 zVP}_zmR&LvlLP+jSvGtWWUai4kAoD$_pFi2OPhIYeMjGoH;YC@+*o=+L%URs=GO3Ew@j?|rR6Pf z_ou!7)9%y970%aJ@?wv}{yzCrRy{g5^+~AejqCr79qqa8{eLMts#h9L zO!3&e_g?kSHLn6<+?=-O7N1<`$9fc1tEX?A;T1MYaFpql@o4PYiqsw17Yio2o~vAw zS4y|;zP@UNCx7Br=bksuzb||4NjF&=W?gshn%;|&*J}S)}3m%F)C?>Th8<;aaRIorQb68 z>ixz(&+Yns5T{n?tviI_Ks9?0wbTThW| z<|5~jczLCt?AqclW;edZmMJ6#VuZnOTvgR0*$c`8M(Eu-{T$Y@@_axPg`b|Cm+)i?=ahWsT zs{Bpo=RG$k=GDk0rd8a_%FE4;tM&h?^>BuMM@I0<+VYnZ_p4M@pxlM~j20D&5_Kde#YkoS`K6&)uNo?fK zPv;DJJ)fgCd$ti*Zo$N*oay#zqnFCdakmanZ9jjHR+lj42-%p|vi54T)zl8qR{iWO zXMMf@?4^-?T`qNed~_`P-n^rCx5>({8`?EwT)eIIf94zPcO5;rxx?J8D-J4+IaU-H zwm6JCbmS8!N4wPwJBFR3o&D{cK zn^aI)FV8#I?e&WR3HzfHx}P=GUb}3gUFNkb)0YF=hoWL9z1>Zcy#OlQ3h$;zF+ zJ>c@iz_Z1ZVw_p^^&b+#s$CP)m(KW-a>aO zJKnVXsAP5zjzH&A)sh<**@cS^ZLE1XWmLHLMD;?o>J6tDZ+rQqZogBpdbOF`9i!(8 z7JNfL`2(r)uF(UpZZ|Pob9#FOyUH&yasIius>ko^3;N$Ry%KBvU9p_*`pYoJ+^sSx zVb((T5lLu2+Ax_wAre86?PZouHEcUITAX(#qv;>$fbyDZ>>s+Z6D zlHR=+y`0Ca_x_;Dbgg~;c2)iIn{}BV67+Npzv$iK&P@;VvesCW_d#jBCVaM4p@V1( zTxcpI+Z#UFiazA}13u(xeSCX>x&nr|8dsYscrY?B+ALEPJMlK+}W6 z{`-&yq&SIF-yp4g_;-6`Xf$Qfe@}A;YCh9N3kWz`3>#azJ;RPkXK@izOO{?P+O;=f(_M$S~)m2Q2whCQDuf$kNAEKIF|$ebc{O(0?I$*{l6G)*jM|FaZOq? zFs&L0J8jbvYqXG`m%QJBNETE~9}^n{eIFNd=Ce2qz9(J4^bpYPSS}13Hj~cdvOWKq zPHbZ++Y|j!C^H$8VL`BxT1ISjtY(VZ zEVj@?$0cjj1Lb09xWh1Ny`e3sU6>5Mts~u)&u(x7QCn59ocEuwqiywVxy9PybHcb6Lh?}>au;`&0Bj&|bmiDcZhAv1 zYQ73t@$q)Hs$^EIu!=NAm?zU{=V4;f&Ud)o5a=`rdRSq7)Ea5+_zZW{MKm1koLL%f z6B>d8!-nqS$lx>S&JbSd90B-|!FG0JXzFV^a~;rJK~&_2q25z%5J1qyM5;%Uh}a0Y zbcom>AmBjzmonRH5M^;1V0aTBx-U)`M7Lye^SM)E`Fa`64jJ8Ax0gLNEcM&l7 zbe_GvsM`sgelA-zU>MAF5%5^KZ;~`ZO@41|UIaSZSit*1E=x zCvL?1P26O%Km!5S5x~5F)Hj4Wj}LYEYo>%i$99Eg@^T{P_*)T+iR)K&$ zk@@$(Pr!q@ufIl~;LAr_OkxySVBR7!{ak~ZcM&C8&-|vO6p#I-mYLP1l%kBODQNhGh75r$p+gJ6&ctS z6cF&a<%;DLR2r8W3^rRrWh(mmyiim6IW1?X&8>l?M2^lrgj#%9RZh6w<4FI z+);dkcI_?)Lm}WZs}#Bf2{f$Ou+e;C{6srvq7iuOtXH%QFb@JwE^9-XTt^JKWuJ{_ ztfABh6R>_U#GV4VBZF-(q4*2z>a_q?)%q}E4cAk zwoK}g%CTEL|11~@VIpR%jvNvpHp>Mqx!fR^fyH*h;i==X`TiBajew6Gid;z=_B>lx z7p5KE5pn^|e_VrTQX4$d&*lPf%!5^5t_J|NVX+qc`huV5Vnd>x<6m!$D8&C;~YZgdDqh2AfzGWrHW z2r~iAzg~hiijh=pjAL1+@eoT8@a|&gN}|><*h09qb7FeJ0*K3O3hf+Mwt%>?ZO{0- zRk1ydhJX(t-#ti#8Z(?Cv$}@xE?%ZPm**r0;R^vDc`Y`O$hg?@U2SZjN5Udnz~`|k zOz!VIxV51hs2~_LI|=@Z-YAU{EbN3$y`gSmR(Bi5WS9AX6ap?cWb^+fN4U~UoVds! z8|s39Pxa+|sK^O3Od_K(Vb|h%++e1G1_C~R(cVf$N5H4D`Zfx_?&S=IL%<`Qxi6WD zGmFdp7p8?1O2T^7uaZ^n4?_+D9)@~vCsSxjfKaMMVqp*VeXtV(J~!U7lSD%ROBEK^ zj%CYe$o5J|RIK?tx%(XuK!C-g$S-0SnFwSO?O9B=9i3q-V7Wm`*-mt_M`$x{r0&^N z5J13V&#m2*r0kgX3A*=I)CU1?h#i9^>$p&l66L(wnpq%%fV=7W0YV{8 zL&C8QZsHn;_*?|{AmDCtJxEDO3OAXa=p?@$YJ`BhX-lXSS`yuKdcob8rJ#X;yJ^KC z$vRTF>5Fnl|MMV%fX6_^!-PT}jfvql_$hI1Xha$K2mzm3_Ku(?C55A^YQC1|LSI6_ z4akU;MogloZWu<{y#?bT;O#v4I0YdoT-E*Eb(4HhLBQMj^OM9%ZTFRW>B>PXK?h+b z_^bKXDT<<&6wW%U^0ezIn3W^oHcUMum6}9vDcq}=YYt5U0dMZ97pN#n;Vv7GyOmX7 zHw3)7yIv9_)pmbzA1j3hfUgh?nwG&8q?42AvB%tc zS$Xgl0^aInZcvhv!eyP8TSWB)3nJjNPW$*4T8*PsTeioFe_Lb@1px#+QSjszi3suD z74i1iY@ad5F91CPE@7M~wFL3T(uCNc{lakrmzZ@&f<)`RE8<$1K1v@@1~ovyC5-P$ zEkRt1A38OCbzqf_fR7Ts$r2@`*&bVCzau>tq8kD}Z|L<<8X-yBV;yzpo>qcRiGb_O zdLluGaNA1U_Sj%=ryM)bK)`k4p0!0s-1gYh^}g4NA&Md3BZDA^M5hhgV}E$x6X!rn zL%>^G%u5m_Y1R`pH+iftP!WW2faafR9=QaS?J>)`y${eyA_Ux2JMty4OSwIEW6H3v z!BBVvJdyFafLuwM?J?F*g9;eCXb5;P&V5C$BE>-VzJNK%6AXrcZ;urhQW23jeEphn z&+`b>00H;Pg(3<9Qf!Z{Fr0U`6jTs!ube8TphR(dZ1ZWqi#I_50ncr|e?viq>h@Uh zyTY(xFybTNz47;3Dl!zd$BcU13Ec*6N5Cc4z9*Lurbs02BVQ>WHpmg^5wyTy&AH8Ooi-2bl`@r%|A~}Wa zv97_|{|Q$!xPpDTbPD3?V3$90Tm)Di0UzA=!-fM{9sb|8$9Df95t3?qOz!Zxm_l#{ z0zP)^`YB06^7dG;N0P^LU`D{5ajilUJGJdGdoL$Pp#t99@+&1N2=@%o_8!S@((yV? zIibWvs7Uiqu39Pyl0Bq@>xL|O1H=gUqE7vnBn_#z$IKlKvmx5i5M~0Je`{*mC`MAX z`Th!T=0hw&z`M)2-y~`cgRNBCW0|K4r_f;@jDQaz=6^_pq}?7yt zjQH-~hV3zf;_R;vK?T78(EOV$D~%Gx?Xl&TV=gN}Ohdrs?B)J9Il}ER-Po>^pF))o zCO20N{(9YxiX7GLF;ngR&r^UE0iVBgkf)+UZF?*wwbYUUhC{$3ohnS6#SRM6BoVx> zWD8fuco@pJ0ak6;{rtz4e7SW>K^ws6HfK;Bu_;rGLbfHk5yIW z|AK4|4FQimid`s4QQbVsGBK>Z3L*%`fac#IIPfLb{pj*QjL9R<#qJs3$t8-#0oa?mX}= z1Pwf_KI_qvU%T;A4%#M#1Kl=o;)^9LZ4lX$L1r8!nNM5f4AMY?V3? zKY()M)0`3r*Mw!}Gf*O_!8px3*Cb`HtIA0fN{kmNISid}l2n3(3#Z{|A_@KCqIcVq zfOZ|!0uPXN{aeus?<6%IBq8yu=>33M8+vAp26hBI&<`8fLZK-k-j+1$O^=%yHlToj zhvB1x$W)}sv!;z;^T&dx5pa!_aKi#~1y&Pc4dN7KxXy$3Ghn8KfNK;ClcYg4(;7Qp zdu$2tBj6f5Rp~W|>!JUCn8iA{hJt{{jVNdca)WiK(z$pm$nrZYR2~yJJT>Ht%xuflQ1UxkBES4Z6MbcIKsKv#r5Hb<) zA;xnFB^8NT*9prPZqI`{AmEVEaF)J}8vH zyIr}vLBEgpx+hdhpk?LsCgnt>fCi%iYIA8%Myq(~t0$f>@?Vx-W11Zi1x;xl!4CoFAn*q4esz+^85|{g$C3v~63PJz^9$n`YkSety z`L(B}F7y?2QUtu^g~9)Y53g7}kS6=}`e=FeZV*7gcY@MiOA?`y{wj)m;|dAYhVT5~ z20K?QkzdOE*X`{)LoR`15b(L`WVm=iZZK&QU`s=?Od!ueL%;*Iafu`yDKcPh6;>z< zFFfG$o?q{%$w*9rU1naoFc4~ifP3f1CrT1hP6~Q)Ii$+&mg)b&JOcqwSyal&O6c}2 z^HkzKGjcolDRUu=mH(VYFc@H7-Mx zM8KCKle&>gNtF#78Gff8qJ$T}r@ooIStx?L<9jbDMM#oHniun4=|E6KFaVP^|5W=(R*^a- z#`FC?WIRYA7&dFcUvYigEJsqkXR2#I{e%dEFb&f)Q6|-sJ}H(N<2NT8wpkJIAtq!9 zsg$%?v1&c%6vz=ZeBK!!pHs(>3jNFFQ2%~Mn6_@iu}*Zf(+IQQB{;f365?8EQOt|^ zG0%pnL##u<1sPiZs~}-w%(6^&MIO`)0beG3)utv$H8bYV9~GGeDhT*oM{NQ%C2FZL zvyo@w7lFSJ@CdkAmt2Q>ZmfT(Z}kWm_7L#kRI5j>Ax(1Z!&p}KGq4r{KBxAWN~$7V zb}V^+q}D@_K){b?ADc!l(}wienOKGSk3k3lk4O)vQxv0`JDQ-8?0y$y5M~3Ke-$$* zN(pC+loMpra*8@8gAjsovmpG{&pwOd_K}(+ zp+h0yDz}Z=qC%YVQ3#YPtAfaffUC@yEm?(X_Udh^;);jRaS?D8f0!<}2?(Q zF6%pR&62x7O90>v{i2y<6{%7^ioQxwUAoa|2)NW!cbitr-Eg zoj!+LN}2>rE%WKti70#nbg*8u3BD>!Rv}QKl7ShYo2|bOIt&6n7AdZkC?G|;!eMK5 zS}-&-1bi&22?65h+nb%FKnsrK_mqGz4QT zT*jRw*J|rBrH5pcz8QU9|d;W}ke@60JOP(K9RX*uU5C{mx+E3nu1mjQ<% z;1h0*XbB?H%O7%nGu%s zSrwiFm5+rIYhgxs9Zx{oVhau4>|ye`@Jx@515t@x&WC&41=4UJABU04BuFN2_*Op2 z1(;gh_eacuc^(9X2^jm(L;`j@cut7t@UNMPUTzZi$dLU{&(A^yeD~-1ZRr#mb7ln3 zei<5OTlhgGxIDs!|>%@Z+*~g!H&gu4a(ZOTK;AF=A;YoMELsZ58G9G6|?%m`o>ha}a-3h$v=GWU*h~ z0^&NDE#kw6;&U?M#;^5~7$g1Q`cxF<(TV_{1q^``Lao}m@FI2dol}wiMds6sH2)65 zVQLK45U1o2=`_t`u;-SD3?n<oJQGhDea9pVe$ZV;WbtyN11I0vQd4W-0~IM+9gOl*cHJR=AX_vvUg zhFW+jpm8LH&m6OC9UERKXjxcM3EerV?S&F}Qo^T1f`kiPxP=!1C2LIC;a+$I{1*<3 zYJ9pL_`Zck2P>Xcb^+d`14KvK1efCt%s5Z+xR$tp3Dhd~0h?0@Z1PfG$noy*|E8>d7v?w6LCT0oN@+Novd99c(EhRxzKU5L0x*3nNu z`j{33ofGf)FX}0Bi#5+wO|w~6&|QOoA2*M?tQwBDBN4M>gJNP)fA(j<>*!o@BfzZqXa&>0E{zjC^S9A}V*{i;)f&fO`a3 z126YL7z&%4hp06g67da-CGosoxjMadfp;!63%p4T>r2Wjo^skFhb1F`63&{n2;pbo zQ7SP-<-xPWVwzaH_=|7Q6`zGrMBKE4`jPV4vUx7>d^K9pku|il>-ryZ1nxV~EAWPv z-Jg)(jV17eh{OYSK3&|vqj+;CF^n<9k5; zhPLK!!|WkbuOL<(3ZK=vrCDTD$OXuZo%MBK?La8@a$v@dy=7!8R?4%6TZ@ac%bR*1 zo|UK=-HMgz0gvt2p%1yB*Y3o(2V*#HR-UFLPVp94rl@jDt;qto zSqH*fN8}c0NaYa~)#f|%O*j-4J+z50UqZB7kv1NFYPPHRvT9bgFB$`7MW0N;X?N+i zqHP-2P(+7^-{EB!Tehnm;mGfJ*uMlV2GGbq6mwQ5J#n-yESNbGvgPjosR1{tXj6d= zPXV^mCugIhw+x~74Nt?MM{FTr5?S}a@x}WhzyxE#y2G&Y{+%pNfn<39Wo_mKqb)7G zL(3@hWm;>x#%D0?_&jGjo;$ZO@}d^&Lf1yKPonbvE-N)Z1+icz%=ZUl<+U^rCm=55 z?p>>VcQ;r!t5p+NFq?o2J>4!`QIUnLIv1nFDkxeJP~(f&adUB6bPNWK4IG#z5LMQ= zO!L?RU_qk|-br;pYRN4Z&OLEwhXQH+baGT*Dx}BfYWL_Q^pw|KKd+o;j)UT(Z329*c7=iSyE;4bV7c2kg3yIIO)R1c zd#PxCO?QLOF>RQqAq>Z&sIhIM0EgwwVL1PLe4QZ6Cdzka%-g9aAfthR^IhX%e8R6w zOW+%|_41jnJ>czIfC^T=aCeOF-*GYtgi(+6?$QUqr(OXgFv9X3I3ZQW0ry9B=?N5F;BJ8oZh@d7B!dMB8eBsR9o*d^Sc1E|1(%>n2pTkKkl^kv0YdQG zv(MXSXYcdw{qB$V=hb{QwYqw(s@1i6)vBsikw--%1u!u&0p=Qi4KlT3j|ejA7do- z)v(+PrfSJSPT}$+NX)_Jvred6bD(mZ@(a$$aZZs?ZT@{;%Mph_nrRqw%>Y@0K|bE< z2hED`{m++L#v0M&A73kKE#(HJer*3N(V=+$WDdKE{-$(oI$Jk`=tYguxt8P03Y>l| zhUO>D4bHfE-LmPAu#Y*^H_0tHVqV}lJx$$S?i$siFF)Cj;WqVp^ob~ZPLCk4KH^C+ zeTkNUTFgMnwsyKtO9z>K;u(3X=4>*T^(~eGclH#Mn5cM2J!knds9uAtHTeC!QbtIZKGPMk~l$`KWN#C#z?_R9HVsTYrh-K^@pIY!T&ZJO(w z`2HpOvam+ztkSAiakoRvR@JtrCb|+#Q>~0+mIue#v2Nf+mHSk)qsFdnI<+kAh2p7n zqZXW@SK#;{$i4bwg~i?R7pxJXHEl#)UkRxtgKZb#+-8h5_(OQSavAq0XIp4>cF!pm zlP)nr6H8L}y&4SH(pbadZS1aBU~R#>L->n7llH04DN60-+MI@eYJEcV*uJVMD2Cm% zi<;y`2wWA6Zf)>6NtOySXi;OeeIjQ)FW;;c$zvACcRc<6%R9EM(q8f;OvB^W`{OTm z;{C4_j~VD2#d9B;eoWGIsEB8rWa^4bE_tn7Tjc+$rO?3$5;K~tPv-dqvmeknND zw_fc_SDZ$y+=u#`fy)qYrqRbOk#E+R7P=%Xhz>}y`8ET7E#TgutH@(u{=Vx}!2O5~ z0GI%X^Z>uNf6hHz06-!W00Hcc9Jmqo`Y!qgmPVYW2wO8w=lk4dhPsyePS%E|M)q8` z)+PWDtfC}?hfM{F0r2ExCDlMGi$qK)_^-KJEdu~JXL6F_8m?2jX>L)Z->JKro5w{& z#%VY_S{b?^_CXA9?r0NBl9Hn3607Fq85C*eV>3~qN47I2sV%E&g}sY*)p(b~n-oIs zYbtp^DkzW6Jd9X{hzP>*9wzizNXF&nN0;NE%jml+SOrrs|oXTF?((AlQ>F#x`_BJdKo(K~m%FW4`2T<1jA zuZlKPC$2V9ENlev>4{#q_*e8dyKRgXH$HqMazoZ^bzG9A=ThYm)=BlHc2@Leugu|X zqUuv+QeKQ6aw&?VvmEX+aLff#Pl>w)ttUB@zXfVszH{&2_7t;@HF2sle9;A)g8>SO{YsyXY< zx$n-+qtR_*#H>6O2Y$8u{MFpdn`@Mfi77CXXN`;HPdke(9p zfU{L-nR+;)Q7FRm{J61V4M5v3GyZt=9)%rz?*#8kTFDQB^pNIbI!JnOzO02)VlFDP?efnc_&- zkTT({$lT%SCT7}*BHrS4Q@k|YTE(;3(fP18c_QPW_cfF@O~j~u^g!^novHGAbAs++ zrxEZ|5LdebxTjdNmL^c3*tAtXGKLAM$(uOo<}YE{nR2=h6>GW)42-?N!uhXPCKKZ+-uce6db50=P*sVMqdO;OLq%ScH~|Kqrxy9r)AhT9&W z>wpa&v88Q5@{OUj_K)_R3z_uE{pYWTu9;~zOxMH9mL(!Lo*0n&qi_Y}If|_vqCpD$ zUWne%Iayfw3)VJ~^#TjA&D5S-$?vukQQ??$n${S1dCR1?l+4Yq4v*Bw1B+4d=umk4 z%ZvwK0uer9YeEo!foFTeGIHNzp}2O$uyTb9c;&5FG6TP3GZjg@1-CcN{26)t&>d@+ z9lvWN&KwXPX0ZzCi0SIlRAN?CP{S5%{ut>8ta`bFgyNWQJI zUVU}bV1Kk`^%jqHKo^4!Lift$g1Jp8Q~fl8i4|iqwI{-sebpyqEFO19`=Y0Hv&83Y zjHXTQ!jCB)b^Xoik#y!G#(FvI!f^CO())!y6V9zr?6Ptv1xI}=ucMyGhkL?f)2~-7 z61+Ux+n+6lORPPA3hxuy@`2e=jx)(c)}+DeSxWEUSWhQ#8+!Xmi7Gv>-}n(69=onp zL6UPH9JAC@=jvkH3#!++(1BnslTeCMWN7?(~ zup4Zuf|v2P%Sk9krMGpiT}Pho>Rd%XjmgQ*rguN>!I>w~-;I;d1L&B>^_;iU3)Qyx zM2p;sZM@ImQ}vIWl9J>jy`YjZhMnJD(1lvY9B5bJm5Ay_Sf3SS= z^5Ey)JkL~YmJAqGZ|SUOKQ)RQq2jJCt-M&xV7R6mSbi9tHR^MAHkKZR^r!p|Yn)hj8xWS~E-d*)E1UX#76K7LH(HZ8q zg_XSfO4@!xWK(>mkB{B~Q1?w~iEx4I{4KkUWYTD#`CL0}c2;U1`9kUps2KKPlvHHD z@OUTzIgO{rdpC^*CFkdKYYl+j#bUFdR!yT9YSPIUzRa$(CnnU>)9DqJwO3YywfHo* zuds%Ns5J&SSYEl$et47V>D+&%!|i#$l0dGJq(3^AUKZ+qIJt;7F;ho8iJK#OlGMDj zI~5W%LvYphSd1?382(`Qiqjc3xq;$RPtF!39_&ASB=mtAzO`0b6yzTF?k?Ahd%rYR zv(;o?5M!G|!Z$P`>581()f6AWP6N$UB#E#_vl%C$n#!&(ag2Q~mafW~l{wsx%<^1> zJ(H7$;Y{yatR=1A7$1_k6Tc<#i27zA0(2b+xU=H3I!`aSsw#ID5#Z>)>g$^UhBk)$ zOCIyzZ^enSXIL3tw4EGBDl3b^n`P3f0mZ-2 zA}0)z?QcT)Dmj#aI&x&&uu=rcdwO;vK58fVl%U4RC90f+$hY;I-20O|(G)3sE$tD8 z5^+|Ahgyhvs@vglW@Hw)F@Pc~}m<1q<;H4c{@f_El@82@;#Uf z5}VN|)wXkIQYJbKHK>o8{a(}Zadsb|I(1tuA+eGl``%~Cu@)vT{4n=>PEqRkGm6j7 z4$x4(?n#nP3MoIaAEpZ?DkqOZNHb)hVkDS{?)NXlfgai%>l_rl(C7|c_QhkDBDhd$a7ROcnKJ?<)*#mCaJV(O5la$U14GiGmuFvLZ}AHhI@2K%mRA zR5i*l%1o8!S^lpdqlUeU3GuPcoW6wggng7&(;Edx(x0leGIE(jlz@Wp?tju_rjDO0Q#c*>P@Vq~0pbJ)Y#H8ityo0me;UG1;&8uEs-`!2d>rSQ=nVf_d6Sr4iK1Go|*`(fiTiein zdUWqSgUKM7()4E$B!VadnoYI*gXtF)Njj&D;ZA&ZDNMyTuapJzR~p$xmX7`YV27iOzY93NUW@Qgw;~4uju!$q}qIU8f8~$HV7)?<2Eb(yVhnr*7-U z9vzaTizaroD$nwALa_2$C_Cz&imXvyx&7@@6ovZAMSA$GWPjVYNq?`d`vd|u7aPUx zhX~J8pE;4LA15Y{+;LjG^K7uj%sMRf-E5p3x%CYl&792~-E^(=&8(5-0H-Kk zL?N)YmsN65;_;i3oo(smEB-L-|v#9!-*xmH#3_}%oM=$@`b2*<*?h6{eo>2MwOQ8@~Fn>l)0 zapcvU4>5!cPnWVE;kIR0I@`rDo%C(EJ&(NXG}Ri2b+n7ss8>p9)A%4XBxQbtA##oV zM$JS)c<>~~CUYa_&S}1pCgP$cRAu9609&FVTAdzEk^t2m4-)Bh?}L`Qc(Sn%FQ%7=gfEU456Y}x?!fC<0_7y}5fWdoRj zlnby0jKC`^@X7)FnSp$3kaGROu?GM3|Cl#Y)c@~52ihDBdoZr%W01xkP8xT~XZ)>Y-t#4%nb_F01LVysYpr}6pc})toARzw9LxCs&dcX0I z&jbhYFF5#j^WV?K)=lZA4KY9PD6Di?;4@jLz*+`wpQGe=0 z&i9`>|K$C@(22AoQYVuB-D9$foo-JcRe?1Z9FQ1V>N_}q`x{~88lLdV6sAeqHR!ps zgLpV;O+2k=AX=9>R>~|6g?%9Z(sGV(7aD)(P2AdkKX%Kw1DD>YT4fdWp3y{cr zT>kirqzfI%j4E@8y=eC|bSO{ySOoU4C33;!fHg=u$h}qH7M2Ey^u*LhDB>217M&!R+>jB%z14pldGp8`)AfK<9vmtwIZ42Ux!#o>)!jJ}7NW zRDk~inky`gSE}g_QHMC|21E1(eiYhlm2~3*%6pO>2-`Od8ZIEiOnK3Dss628vq{LWkO18)wQB@6rHzO8 z>k38EB?7bkhDa~!pFVmw-K0n6ALd_+LDmnGS`Fzwl*+J4=}&X8SH$~<<<3>~hOEhtl{otqmRH7uj+?R+QZnmfWy_!H z6BUaBH2TjwOY_J|v(xj++|5XoYdRZhq!j9;ZdN(ZE383r+v^_U+fGGgjT2+|Q&SdJ zR_~;W)qXH%i=K>L2)jzf0<)FS3m-Kn%Wo^>BCWIVLHrV4P^MNg{&MW8@Mo6Yi+w{; zlf?CR{<}w&X9&(jH=HrkcS}=!y=uzx>+P3hpKo1$*q2agW2$m2RVm`sPVAT|aW32W z^{DfptZF%aGUU5jEC=;`=NZhQ!B{cEa#_SF2wj|0-hcW$-rO>||0srLc5K{eoc(0s z#`U}k?c&2xpPGw>v4PbsbqRL9QGwXh`WA}OiFViWNkLJ2E}1O_8dBM0W~VwaJ1vf> zCZ91QoJUT)ly>D|2M7bXez#J~*a4i!(J>;rx^&giA|2^VX}w!Ic0=XS^u){}o?l8` z4f#{iAMA?Xql{L_XHE{2eIr-`miXiQXESypqr*R#wQ&vN3l>N z>#28ls=E`Hk5SWN z#G71p2XQ^c0}*=xa^{W{ZaU+YZ3)c>@9E}u&q*HC`xW(AFHQ+&ZE_}=ogr4Dc|Q#s zWY7>he3DuR8kWd~scC&+;(5X74POF?MB2!{Pe;oQ1-HJ*4a3Y`+5|eyZuyyzYp$aM zL*D#*Dc^hXKVPp1zNXyi&3`~&Y$m^bts&NPbLJRP;OsOJ%aH_4{R!4@`#WMhzRCEs zRuKisqGAU_CBv3N9XE^&CY9m>#Yb)CD|8aqwXQ?OaG$uL@@zsc5R@Lm`MW(-sa;tq zIy+eer%iyW`@9c$&|qNxZq2{jxpq*kRur`H9EgO!+xfASng*A;wAD97(8h$&1tHMJ zhPP3JzCV`}USKs>C8`+;>BqK7C-9(5x#qw}V?)Jgu4AgmR ziaFfsj0#1F4Y)Kg+L=C*=6|7{keY+rr7SxNbhAWEXCu@y{QJy$)e`mTc+`Ye$y8}d zZ&e0l$vlgB#}@Ry$kVAwsw`-upG*C0!!7F>?EnG)ctyZ$4{r&V&QmXg3$2ST{iN+6 zU)atatDX55Bml~dsrM@Jc)3nZ4OoiZ?KTY|J}rY zH@@!1BYGV$7{COh5TgGuzM8r?pQ(Yd{_?2#k?F-iZ}&h=R`6ztILU|%i?sA(YgDBN zT2_yYS=h9osMY}to#={T+;}OsG9i`o5Mvf;7M6r8{$52~*G2PN&wQWvwX*QMt$L5e z7YMzLee1v%{_@LCgd3aGSu)!j11JL>k+Hr`VUVA^xtdwMZyLNJyD~dEJ2*QqxX4#3 z4qky3g>#?a3-kO!=UKNk0%4?Qy<@~}y zUf4)-SKEI+z{%K5z4>5%C2;Igx3wujbg_8?f9*?m>4$=cWjuGaxmGIqS6_Es8;;{n z3N#-L3eX)OzP8Uh(3CX{o&}05h7<(PoS>(c^?rtN7W|e z`!4mfph6Nwr6R(>7@;SLBVnBNSplYa_H*s!r#ia1u%q#uRlzd_6C0t7>)TmN4rULI z?sZMR9rF@Bs*~f*cTKk-I@&Cl_DWUeNq^Z9ljoRYgnh%IZlxLx9YVb}nK&7HGCv;q z0ed_;b$`K0w=jKwcD7`M8}t48qeJ}K| z&@O$l*k|w$&+z*zs3MO7AqBndfA=vTd_#YO|K`&^QV2FOj70|7|M3O#xA8y}_}2e# zlFWZj>-RhvSzY)Gpr8l)pR(G2&h77c^Y3v2EK<#kOr#P_bFDZ6_7mcJfo_ymRkq@89?C{jL2ZD;sm| z)yM2}%)aJYyAL@@U=U;gh|gcPT1at#zy06>-~-q?n9`aUIoO&T(b^e1SerXKn%mkq z(psC_SnIpdDJ#JOfLm~us#<++zaO35paB3u4uJsx{`dzBASVe9@%xZK|8-osf1okg zeTe-92LJhl=HH?@8ap|e+n74inmXtkSsDKUo_(053i$~P@qdGlj!8~XNQ*1WHAzsD z%N+py5sM5Qb0oqi+Hb^v#-gD2`j1#tKZB?Hx3T;g0Og>f+y2)$@XI1DyfBbylduPWEte@Q7T*BF% z=Z1F-MmNpN*YfRVvZ%|TBvuGOL*m82?Oh{~js3+-xQHU(Ntrq_*s@gSr-xV|ht!cF zUHX!rWk19tF%3p}St__0n6mDTU><20M}vxiRBRr?VQ^HG5&(uFgMsFZ=ueujU>2DC z2TF!OF5xsbgl?-Ix+lnjr3niF*OQmHB4~S(fkd{<3{Q)Ummj>QjmCoxism|?jFVE0 z>#?O+#OssNOuU2@>!;HNMvm2uhZ;LRw0sfA=n;eEnCJ4H9}7`5;+AWw=*2RLnk{u5 zfb173qLoMrmQKOUvc_=N3Z7ZU)Ce}$<%x(=4J+ai6i0|Ndmg)awKHXTb=2LxQfcRA zX==5nZ8N25`P2bJ2LsjzD^Pyuv-*-AeDrAPNZp6vb>tuK54%VVM3gVbv}Ih)$BubLoR_@U^;+yMaJ1y9I4G}_Wcn_t4&=reu$=G2$$6rQD?nGs z&J?&Jj)OgP-y>_P`;HV(44F3R{*vq3He;H2ud=1en|V%i$XbPOxt8y;cy>6_C;TaW zuV;+Pv4!_L#nB)ul2-r$0DdRWKhugl@1H6DJJpH*ZCcTq8yV~WIjzQcv;WBIf05b$ z+q8oF8)nWYCc}S-X>4O?YxKwLa41NgoDiva3ss)okp$t7thC&ni0lo{uk zvdE=tW z&e-DN1X`Sz zF3XV^2WS0t(p4yhb;>2y*t@kvxfBhNSy@tO|9G~4ak;|N>x%E=b#;8Du|r@!%7T^d z{fSMyRi4JsI&I2{1PT3eR%CF_3ff$#x`BH!&)JUV0CGvr5WYUHMVLzb%11dr$2PIL zckH}Pwo9v~06?YJRmt(=Y7 zUEZ2@Perqg?c|QMq_L9rb;6_kDJXEmV$;>TwHZQRm}<6%Ucz#d*Q>SqRM}V@p`tv` z8b4&J?+5x2bJqjZH~VW$l~^#pYlG#<3Cxme|1dn|h6UR50q~*^Q`g6a#f$N_f{?*? zqu|bQ(VOn|UbC4CZ85A|4|;y)x`5^Hvu|FPc5D}XPTp9!izd(Rw}U^~4q?8!>fez} zW&M240e8&_dHlfeyLMqeoG2RnNosLV|1H(EwXWOH=hxesd-DlA`0TQL6|PHB-P3nI z9N5kYu!4|k*n-%NLw0)yTm(%q&&$4YQe1rVV2_Gg-JJz z7H)Cz>k3-U0@keeu$FwG&7-841~BLAtY0ZH(rTem1?;D&&e1;1Y)NLw-VuD>OUZrk zWJPu9k1ionU$p^G8n%~84K`gVc5$FYHT1=(7`~$f*VjTT-m<>(mh-c@U9QFhJC}<= zmPpm&llYz5EXt8$js|ULr=gI3!?*bCrHE2>gi`Kkw1s9X?N0V$@|i+~R{t~Ca_ARa zOI6jGxG;HZgtHa~tKU$f>q}emJAy#`NrfPT--{6FhL-5vkGV@clynLg?TZ_ef}CKJh)m@ws!4v& z1{Gj?QJn^O;Qo;sS4~~0Zl7)y=Zf143TvPoZYD0agzK=txx|S$Vn3ohwv7Edo(Y^bW(tiCUxd*{(81)R(zOeP z-96Eh=gyaXSsAHekK-F&^Uh#J z{E@CXe+k|XAO1|Q+)H2t$U?G+7lE#g2K15BclodGrkx}My9^W_v*G%zf8-}0#`uoZ}uN%RntNoBN> z#fLqpVghz(77*-`raA1K>8Um+_m{arKQu~2`wW3W>DU+|&Zpi$-y!JXZ+2T1ugVP3 z@W1#16VwAmL=w+59*_;MZhpyn2G-zA;FujK1TfE(coM`S>A3e1TBJ zoyht9MgT#MMh}o6Z6t{2nD#<_T}f1qjIZAu@_kd6)|uQ1_J9L1spTojvWMpypF!qL zapzb-g&|0!8S+>;LoE@(X*MoHgHnylDiCOEcpUEigRE+`eG83eQO*iwWDFDfy%CqqXP5%w!Pvz12*Zg2!y+yN z?eKgNhBn}G>kS7v?`SrZPEnhz?K16Vs(a+{SuiiV+sKoVXzWMy9eBi2$w zkxvjF3gg-po*^AlvKA}8|E7YknnEi!WB!3my)^>tB0x|Fy7Q(;fThd-fe{;R&HpZZ zc-_6%E*WW5$m)V06VOlF$4_<1{!0Mpso1UXqeps4W6ftUx#@{C&+Oo%12AKIetwvP zojtDY-gzG`2ysxKBTqh$Odnq1 zDC3|xQAyI5r7;j2T=uKD1+&iZLnz^cD8#xYzX!>+s1m8St`xIygr+1K=`|&ibj<=k zqdYRjH`?Ib&>h)b0kUH;BpbJ|CR2p3l2ZhvyYb%Gb%G)4$%+%_280}jZxN$rD$FJ( zRBqp7ZsK0I#iB#rbkj+uYe^=BX*I#OyExdW?=XZRJ3D;+5%0X58l{rI$z<+o*#`=1 zX582#nSX0;T&8U%A2J#sf(puXLkC?I6VzulY2C(Mnw;uru<~Q}gmdUIf6?X!oqfHc zC-1gHR46X*uJohgy>syU%ug-+{CvWr7~$?|q|}IHC>$~>6I(*oa6uB@v2OYDhDP@I ze5jIY1&T`YfgK`Hq+zwLveeWt_O-w@Q}Jz;kytKI9!!n2U3y-|6x4MMKYlMLL3oZO zt*fmJeh1ZW?#x)Lp*l-DEnDkMQVJxs8C2$WVNxyu6sC*t^yI}s)*J_Y>-{dLJyIOl z{Y|aLro&>hA-@g=loQJ&P2;uJUgL%6GU{@rQ)Emenkn`Qu4?^`^zyO1hq%Rs76LYc zR>awT3(T;fo({w7tG*aK0ch3xIpWZe7d;T;27}Ub7)V?pKtNN?yx5~Dbo81l1=43Y zg;K18PotN)JK{ji>XI0_PDf~Rs0aocTImR7Q&7;src3w&w@iZr%!#jVp%A(o|z%j*c@Y)EZ zDr_cE-zr;N`4NO%*u$X)9Z|$4VhJFDaLF}D!Rnb`8vf$zX>&u8_u_WTBSzp#mwpQ1 zsZliR4|0}@r`eaf6s7SlJ|{Eme}Q>30vXN8Ch6zi0=_0aEEk(^oEl1n%Lo7STl#lI**DOS{MJ_|hdF^Q+061myIX zQa$>Ycon}fprgZhW+TH)8jsNkJwu7KZ96{i7xpUG)a*z#YS~p;U!o6J>JFmXpT9Pr zqsbk7vQD_RM;xEaAA}Qjc7TfWDLS4Jln)@P%!C(c3Cj}k4(<;hdX(gB;GiXkbg*Rv z{G|X*QEQlf^uTf9eFe1s=Ekn9Ri-1#I<;McG>dAKNr$REoM^BP59W)2PLp6&9k-4; zu9!zk(|CkKeY7#8)DCJF*Yd0@lWZW=HCkZgc80WET|2A-0}0i@^Q{8SI)j_%=Un$d z?JzECQJc9zI{$bK{JzNvsc%FCeX*TK1j6vfUjFTk6_%p<#>qrwC&}juL27B7u#oBM{*ATqkaEe24_rAt~h7OL@Fh@vuhz@Aun){ zC-rvl8Kk+zct9NRa(psJX`p!e@~=e}Lam;)31|UUO3p|3aM~Ja{v=xNUHdmSi4R?G z#X{^IEKha#xX@3J!*crps~#!Ne7u%Zt75}K&xL@p!znT(1)=Vs9e~NJlauq5h&ml$ z6v%aJ?NE`mlJ^dL?5a+~F_u`IFp_HWF}(^vKop@)_Yg+3GAknzjg*=SHYWtQWQhdr7> zr6h5J%U+=h?u3R@mkUakEE!}{O%WSUHN=Dk_ zu7>^+JZ{-CPM2bmAbu74ygp5%W4N)%IVv>Nd@W1B?g$Y9&DCdrYHXiA^H*UR63JSEI*1J`J&u%T zFW;u{%sBKY{3gYAr2+3qzBO%dDlY(<^`_QW=^@OL>5zK)L8T*1D3thsf9k)LZzOqhw$u_z0VHpBfeg>I z0(k;)rpQ*>Zef~Iv2}~zhF@0h&^2LuE||<09d<5M2&s$mg`PWieqsb zOe&n!Z5Pt#E!vWEzi#tD)~ZrseB4ndq{%~08upxPR+OEH-j#~9c5+s}R9n}nTQ{9F zsO;3vo8FMOM{APH1KPxQfINs;!LC6oA@T$qgTdn z4FleVVyUu$ZgpI=eZgDxl~HZpMwMJ`@WZqP z2TMx07` zHe41qxnTw3<-kaczb79Y#?qQ%H5^ew2&!NBsoBBeAkB;mY3FPgtINR7R_*G*qQ?{mSxA>(+Kh>9(he(xi)~fYMo;!JD6)eT)|+! zb(X@QJc~X_BMpVz+zy~phr2I^?ozM}mEJ#@)2Ea(3;m;5$KNr%uL{8xp@rgTlg!Np zJh=gT3`nR+)k#L&F~fWI(v8*(@$OKQ%&xUfHlRU7foaw76@~UCuBwU~+MK#xfN9j# zQio&8h%r%!fVGRI%1B1ZU&1ksY<Xl3$7N{r2$dO^C=DIia$^qDzb3qBA{}-s`=xA zo>98*7#s+fvR3l7)L55MZ3xPZ&uo9;#4wPaS$H|JZ+$uOVF!U#+VIz&*T>2J)EwgwWc=5H&HJOvkA19U1Xjn=$iKY`erYs*p8kM64p@AxcL z)tZk~(>!V9Ch@?E?9#xB%xfeov-qnGMf$~D&m%nnGqax9DRvCo_4u6j#uJQP7F`Tl z$HK!ERpjQUF%u3l_9>lc*ivzJbUP@dYfU6OhHo|fG>(<+P>K+gte%r>v%|y)m2(rK z>|iC=ZN#HE$GP?#D)29s@1&59v4m^ekM#uRLdsU9rJ9pJP!ucgu6(DARgC&O7pTUU zi0%v0`zh`Vx+u&m!p*)DXe!vu^JXK?eF@Pk&Pf_(W23yE z6f{&lo^4?DW6LZlujL9dr~GhnoF9xBIWq5;W4rElsiE)y@+C8 zZR*+WZO8{w`Uuy+?uBbD!jCPsM%>+(-m9M4WJCkLXFU;;J!(W?q(e>c{)f7NdSSkiMK`fxcjbR}z7KM3qwqkw+9#D*Xv1B8KGRYFO zwU~@w?Te9-e_m0xMU6Wn4FPm7sN$(vGn8ERQY63j*9}DIx(3ed?*n(l6y$dPZrpM~ zScZq-oK&sG)a9lhF)-MwKMeNPLs5q6bNOqtAj}asT>w>+1z9)KRHb$-&Gktrjk=pz zFq;xyxU~JbMdMC!B_%#^`Jk%djX&J@&-2Q7e1%Pmb z%%3|2q`LiabVtbjzdqvQll$i$u5J&1yf>+d{q|SmXCN0}pX5A!&I>8KBf=xDVziCz z&}WIg!?<)Io>G)bC@syfh6s3*6&Yg9eJ?PYi^LipiUQTjxZw(eXk1Js`_XF9uoQ7t z!h_rF4E&yyF<(K`=_>Yg@0o7b((m3%@7Jf%#_yrv{nVuUYm`B)8##VbeSzR=29qJp z7Ja%bcix;qKeNRu@HAs?4lV+dcBaB|lW6n@OMbuZR&ZA0{X(4@Kt6D-Pr$muqzs3j z*H!>mKWyv}{j-)PB1B#W*v`m^5H2vKTX3JNOBAj}w9+c{)q4b77<_-ES0fmH&(s%o z*O%**TItDd>af)mSM&=W=b~>ku*&ixY%+_D+jLVjl#?7UI&pon_M$p3b)I2Jr(IW` z?UXYIfMJD)8wAH5us<`LQg~3ib#1R4FY#E*o=8^gC?^~C<=~DllM`8hni&=U#DS{lF+{&hPl6EB-qW5_<8yR%h+q zbp1#)TH^f6;To)}2`5mDl=9-gtLzS~b%ahM z&Z$|gXH%s!2%VEj>_L}4DzNf(AuwS)qhqg((m#h0r9Vx2yJ7?G+d6{nox(shZIU#W zK7k_H7j9phJz5*S0>~+(gc;J$auL1uNVrNpg3_(P@1lv;MvSu9t+`*CV;H^AV*?F2 z-M=de?@dREdOC8lR-Tgr}G@< z;rHGePd<=@eleHA?7yN1@gzNG53D-wiw z1Z74^>7mOdW>3>SG}!WZ1xkZ?+CrP4M-J8fvU9-u6vW6WJwO-fO^nb9FhJCz3vEnz z1AbRpM0}WvJ1g*w_l!XXIug#iMhMqd_b{H zZSA_t+&Mwg5NT*jZV_$-tX)xJI&>6%0||@XJtgv|1MHNl7NGJSEd2hhF{&&cj{)5Z zU^;zfrLhEIkl(Yl3lY>h9tC1liCHdX>8nc~2iP$aDk>SPK_=PB9xf*I8o9Pa9buv5 zTi+JCbIR^c#M^Tq^Ag*_IqMFMUQP8Dn7+<4AFo~@5(@WX&;IPpT^dW_Z1fnOt@Y^A z({lIFM`M=t;+0^)$j8t^E)JEphEsoiL8os86Qk(@Cj}CqX;SRDcQ4RqNgB3InaZZDOi;$G z!jQG7d23op+B9tLQf|DG%B|p&N zG#9tFMr?a|JZ$GqR2<_1%NWN8O1hH|LTp}Y5&tsIfl5l*6310c5PTPc3^B$NO`sU- z6_Gu`@_u%q%H4FFnscKZUvZviyb~D=!FGU*IfE-uZr5c~L$TT~pvl!S!U^5?3KW{h zowt$4QMXMtd5^zM@TWjYdj-Y4Ed_6lD%o34`#8g3BZ$kmLX0O*f@87&#*s{3G$<)p zOHM_d;0m`(v7)W?&({&21!tpl*J?%63Zm27RTRd(%05!aEv(X{fva}2DNu-*`qSv+ z5H9~Nl^oo-08~!y=%3w@jX*5%wWzM$Vu2JvyzMmSC;ZIaO0@3(7|93fkvC3yJ>;%xl)BoPnKgP#Ki(GrDuO#%uFc&20YDY znGkAO;&2#dxtUnK`3ay-czmD0Oh^(?AwXRTq1nY%zQ)u7l63`^x2ws9_vl)8-APJA zPy;F&p#Z_S2rp^}Ygpnfw`a+qr*D6EV}Dj{6e~J$A+77SF6PSMb2@*~PgpzNd3oB@ z=RAQ4xtUJgHOj`d3Gl$!tPv6$-ZOS-^i?Pbb(Xb_G&Tyu00aP_Lsj5*1*vjJ@56#sK+wfoF$=4`TDyma+;Dm>S$FGXr~`}XK>|N98j7MZl&E+p*4tl$LFRG^Ow5bo5 zTgQFR6ADGnZF@|9_C)uU3y#y`Z_xrrwdw^7Q&Rg;3!rvXBu}oEC{{QE(P-c8^b+>;2)EyE<;y_y+M>SC2ZZ;5K#gP` zh0A?w&cW}w5vbO$w!SUJ1eCl+!bRtwh1NY0p?4rseM7hu^AkdJEN(ZqQ;+Z$e9Kg9 z?2qmXX2dud=`>p%g00)6AC|Lg$=|a-wtq@z9NyI|t$b%Ngm^1He+PE`8okr?q1Eyc zTGcIZx>3x1Vb(^DoBOQdb9Hm-EjIpyFkkJ!vGDcXaEeH#Mz=}5V*gqH~@O{*k7l@Dk<<|r#qxeszq7ATav|2uM{r%mH+EbApL+toB?pJt3)mzwBXe|8M zn8vBieT)_q?wB8u=IB1b1=pn62hE#4m>Zf6tprKJW4ICXM`&vJa!<>k3mx!tDeBvsJcp43q)CXhQ&3sU#X-N^kf*Ke@l zUK3xC-!6zT3=d`T45r3vZ~3ZC>U0!@b>cU@!j9T#BBqMF9|e$kp_}0e&yI|A0@6>L z(Mx5~QsSnnV|`{*ANLW3Gdj}?lfF=5?_q8&AMDdkXe&+DpHT4FpdJ63Q& zrodT(sD~U_HQx;(%Fv;EcFzX)%Lqe53sd5h4=>tvT-q&~;A_+IR?bTl{HkPIO>x%3 z>b!`l{^?AhPRyEaAmg2$z+PHynH1zY$rIQH5)tSnUEnF3P!O*N?LAf5R9S^NzoN{$ z((wGlEe23!R89K*>kD2>$%)+&>ga_i?+BTp)J|66S3M%V)~8om+@sO5G8He?0n0O& zyVeB=$SJWezIWG{uWfqL1}5L(L=8@IJ)xFPt>DQ#J2{gs-e9LYg)IALzYI>O)y>@9Iw8bkTG)Ng1HJ<@4{9x~p5yRX&inBqY7`F}Vx2c(3=2t;gM&ytJwp z9KW|KtrKwxlf*g7G#1_n2b8(gIeVo|-roOco*e21gyE1CV?#f14e=m8sZhMSpXd4- zT=DCf-x61iXmUD>e=`30fqwfw!Co*%S8)q)v~h{XQPJFVgv7p9QXKRm9mv`HcOAh`MfY&Li%#r^uwqsk$5+yl zq=Z-&L-rA(u~GVyTq!T<75dK}(ymr`Jk z3shJWyW_oczMg5kaJ=qYe|BzLHaop+UhXJg7>>8aU%S|h!ANf3b5Jzg$n~BF`xS+F zHjfuh>86CkSD-$~Oq0^e;4Rp6s^mN15(;ftNR7bVKd5SM*R$Gb(p<>VsEv+VX^qiS-b1w+7+;g&u{N{ccj4`2`iRSes_Q_Mt>dx36g%C5Z;SK9kVUyraElXD(KzwXWsI-f88@U&253Y=Vr=6nj~Mn$01R0mnhKt1 zyT{7;)Z?c4zukNQ{&r`w)hWf*k^unxwgvvvFo^s&r)0#Zck|zye*bi5TH6{qTNyk4 z!!B6zKidV9Vn?BR=)Z_Oc#EK~rIR;*5kKw$Cr1`J))3@c5Yzdt{QR_{QCgNC;n&iO zVRF6~F=BSzB}Z-wDs_ksu`*{ovJWIPY{DEM!o11bj8(K3k}1fHA6Pu$W;&hRClLSy zXG`m{tZhhLF~-2W8^JPO?N%m}5HaHhufe}QhJl3}{j&ZoEmL)MCszF8B!9%rOpb1} z%ojKG&9y5iQ>S)QNt6eyAbdqvAgWeW<;~Pb%{pi6bd=jv+oH-y9n1O_D)Fk{~Si$f4Iv3vVZ<>zSsZDz&b%!LOmiiNq!|gCMhLLqwt5#l|qJw;?oIBry?dU zElE92QKPJ&F!gDNoer^V`m23FhJfGp&H^bflk*6fu zcb;__^i217g8^s+I4Ag^EVV6_TV5n!J9`m#C;QxzpkdS^Fw!NXDIA!&NcSj7nMh&X z5PnkirrHPH0U0}nD4}qZ9%S0qAM#v6D6|KjKSt=ra+{mBZMY4w*Let|8@^;6Mbmw2 z5YRPaL2@5iImd3eEe7^36Tu|{QXuCJY(CAru6vfof zDv{rL|IZomca7fpZ2eDF=D*4_{+iOiCHnXFFH~kcUO=`NAG`nJ1v&7v)NH#O_^ftm z!i+h7#dr{OlrLNXpFibnHNvvVM!Hd(r^n-BkjUMswh~3d?`Gx@WJ6~|52Te*@OTnr za&&o~C;K~*Mb=X=X_0>lK_F~4WgjxK_Q{#bD}4A4 zEdpllhd1c)h4#rs9N%XBR1A?L@Upuucxt0$L#5ZSpBE+=HJyEuY|%ni9Jq!da)1IH zj6#Rk^%zM-v7LMpY8lH8zrql;7B0yB=v&w#z|MXd6L}*Dvrgc?soIM zL8a(m0vTc=ac>zJL9%W%tNUBmg#&*!-+$`QZ(jd3-Gc2jYV|aV?~Cffwi-`3X|NKFl&q8a2A|Qv5iI z#X>-d>3!qr*y}M~`Lsx9)w{8j{%iN974IUvi<8B910sHi6!f3FacpMaAVw5Bv*R`lQu#ocA|2`%SYvk})Hym)Jj`wpPdw1OxrQtQv-H z)idhDgTWEJ4u;^I)0IW^K!+za9LhpgK(eq8=EaO;x=o0O!#K>N=ZML|4iWskF?6Lm z9_3FS(!v0DIOKhBjThs-)nta7v2kZX3z*wOljpO#e9Ng}$GnKLWju~?xCj3|TGnHw zA@qO%0KdoNUyl~^XA8%FI9d+QHbS;GCg!Hj4*E`iRCN6ZQ>8t=Mh2JxCisC@Bryww z7%aH0OpfFWumb2FprFA_Vy2fvydqxCn!Pm|7+4>&J{&ZFjpiNShYMZK? z3~H%`rPK6Yv@(}sFz10qprva5o~3j%W(Ge{YgEC9F06n^S^Bn%7wha1kg>ay!&ER7 zRJ6YM&3i@4HnZH%y18X`<9Q?rei$EDE@YS~JZ}t{4tY3qei~@qXQJL^a+=B}Pb$cA zQ?L#@KA8oFh+akcwevYIe)IWHrvJX)!TD^Z_z#(;wb8f!vsCT(y5fHjp;0=CMM+7D zkx8j(DlwXoacbJnx*Dp5(ebfS>GI!EfI}=jL#W_=;{L||XH6+X) zn`E!I(I+%ZXDT5G)ratGW$yIQUe_cQ6V^~F`!?@Nlh4q}qmRyCf@)Z3Cu6Qpf)E>I zv}RO?AUyLuIE}!IhzLN{hZPcXYW-=x-jYk%%3nxa3i4FBcWX3juy~?9fBpJB2?6~y ztt1Y_jiocAr@u^BcPX-G-l8Tw_+e{~)cHJ3O+8I~Pjmi$ikqJ*Mn;YxjU*)<%o&g* z#FX-tNz6^2T)ZcPI|y8v5*D`(k@rTli&0G%zO5sLqrk0TB#H8eVPs=-CIi(&+NN>0 z#E;7QT*hSztP?Sm#8z7?v4W~pK|`wy?nT{TN;)C(ai_DWY?Fm63)+eHXzm=({^u(q z4v(Rcx*Zy`{AGeNl9@A`UB23K^DQw(jZ^b%{S+gAlK6;8BKEL1B6|ymSrlFYkVaxK z4i#3p8f&HMXO2_3(Ao+d10O8A$6vn+9beH*GGajZd$0dTFC~o1S$+yQ(IuD?Jg0@ z=`eq%*&?kJ*GYzLi=9}p0P+vodvUI%p^%DSvUs?l6_li>_IfeBvP#WiXz6k;1$Q1< z1NgczMg~-C9XXNiK)>|H`d!QnU>Ov|p-uQ(C?a{m#iLhq^P97{x4U*ikakc@0Phwu zO^`JMogN8;D;TX4`LuG{KI;*G>%u=31L|)@zTltd z6Uu+9V+PLVRz`oXxkdS`wf$@RZ}o9W(L8WH^e{mW*@T*_B#1a%4**)-($r!M_C^_i zdB3u5P4#zSlV5iaF2<{bcK4)5lH_GC6p`q$CRT1_Ip-ii?}u`{W`hCE z1G%_bZx)AO2PxhTNF5)*vi|}h++u%>z+1W5Sz+c^3Pgh``e^u}4(z4GEO>sZZRdo9 zhk{#?o#qYn^Jk;Q7c(yBK>iz1OHg%D0g~0e^n+1$aC0dzY-ur}TG~ zeNLHrR~1zk;1Fk!H%9rUUh{SNhyuf$^BL65ob!13sKtb2z&QDBC&awfei&mJ15;c> zFExTbpo-|*bX z%)s#3$4KOjtgI~|FCgH@><4Qf;ZR@sBi+e}F5%mxknrjHnbj$*^ib+ylr>CNmY1QC zJ{U%v-~;tiz1bSNzusccwKpQ?m)RSr6^K=SNePuZlU~AeG`Io|o$KsN1gV#~PFw*b zNO(9s49KT?`|q+(D)Cq@pS6@FdD;@z0a%SSPK|dpIsmn0N7dwlg4zXU4q*3@(LxByM&KV1VA*lwfJ3p+l0u8h&Jy=}->J-$R43Pu0XtN!2RXG6FRQ=k7b7lir8H z-^orlmOsSW_A`w0DTMjT+lH7_x#1PNySM7b$Sm6Uk@A#_83g3&cMDYfXk5nHF_>OT zVo|ZZlyBfF7ymKlejOwQM&hm0hwS}7bis0f%);C|P9T+JHcCD6y3;qvX7hwu+&m_^8 z*IYy|>XDf&k=PRMPdBi+IFe{zH)jUK9XHSu(iaO!N*I$UL~K(e(v`-!2;}pPohIVG z%b&1N0yF2Xu{bX(q=tN~U_tI^SCDo*U|77bAyR{#bIrb%CXT*=>)zb%6I?+r1~l&z z(5p|d#WV+!RFuPdd6;{6(Me=fPZTzL1Jt7V`TA$&Y3YgB2>D~0{kLU5gX)f773gN= zi%bMIq^36PAAh*SDV33{a!SL)7Ffd_35mkVC{l5xnvE%yEqv({4Pkx(@8NPNPBb{R z=ev5S)QY~6Z5fxRCGiSzY)-fqBP+nf;frbpWN%9q=ataXlI$&9(AA&%?v$~@XXNKQpMa}ez$GG}^nBSdX6_a<-CHN!ab=!`B=fLHtOj3nn^p z@=iib2UhozUB__6yJh6AU;>kpcjB_f76maTikgAwI0K2IbPmFe#3njL!+y(9z0u#CCwIc}Y6>eFFaAcCmNdVO{*l0rwGoRr z?q>HOd=Tl8b2EH^2&STL$&RI_{VuT3EpnUJ?U%c|r}+F zQ%$&&%QK8MI~XZlnOOpha?Vm&wgInKsYm)a@j;6U6jqB!mUo+)U+UVc*M>j~(dVPa zG2&las8y*pqNR--%hg6?Tg#hSH7l?Oz$;*>9%ghoj917+{rWPdsg=Y_2_yYEU$dp- z5jtZ*hrcCa8cq>pk8k?D8DH37QgQoFPwU2wF-~0b_9bhSG)d<X41)vjP3?F*V253%}-F*P;YT+ zfYWG*nb}=5+>c;+X*H-4gg{^OQMbU*=r|;i7u-2Q{Q+~`2y|Nyt0aqO?&VcN1Wm~y z{K{YVH9CaCoq})Ri@h-F+X&GdC>5POp4fu=xaQU|0l|Tu-YHs88L9z1Z(Lf0RL>A`OI}<@y z06i+$-QGjGtXF0&S*e@r623>kFSgaK8JH+=!Vbw>*=b5n!)Z?)f_ z*7JG>y881KH~DziL3{d?cL5XNk{~spum<3#z|i4Fv=JR`wd022U$qHKi*xGmqm}5Y zLpj71-ysa6T=atjjr&u?i&ooj!_~P}OOj9eaS@JrA^S4`O{w`x3)a~QANG_WgMSu}jnj$!G_PahhMcegWt7`kaQE$28`S5o(%B@RlTS>!JIq zT5*9-=b1+>2A%OPl4YCmq+UM}*=kx?9E~ffKvzac9y|p%I1VW0fbftKFD`ve7pCY~ zvF{l5hXAoZ7;mbfC8l!tkF8eUW+{W5)#e3kQJh#@zU3m6F&90tAM@jnNKfX#vbh1a zX5;NUiC3C-%5Emm;B0-adC%xJfjX8?3lc8W>!(i>uEu@N_WaIviqmsq0{3H5v9gZp zB3wC#;~xJ9J3z$06)#L%x-C1NQzp=8h!@IP!m^fxg@(a!hgl3uqh7Oxxs-Xee%sYM zv?&Jgz)UbGhuz(v9Kk7o=- z`}L3=nf8zvE=h@|?>CN`>I_%==_K9b=%ptPDEsvgAIZuz>EFEHP~jN)oHh{`GGE6z z5938a;n_Prk)&0bgss?^=q%V6#lmH(nbdWX-sFhdurQ0fI#%^w3;B)3yPNiezka>_ z7!4o)xKE6UPc+XLQoulGtDmfVffjv|x3nsPj}D)cPqZ^lnSNdf zJ0{@Hzq2=qr0z=TRVh~a!BpFJo$bZLU!F!aa*eOz-PRajt(oNgXm6NUN%r z3KUzV&-8`(#f$K%A^rwBi8ShV1+*u!%L_$9Mv;4(faNAGWOT{lVEfB9fZ2508mF9? z&8`zh-grkfMb|OKoySVAZmYvi92{PK>5f2&qz)&m0npAY zVLI>x3+U~@4OPnA00$$yKztyTN=T4SnF1GlXLsZ_l}c{fp&pfxd*P9G2H z73)laTLBnROJZK=1eFa;s3%3yOtV4T_O>&=E6O3dVbS&l78%7D#lem>34f`I#*_YgjZd6#w);ieL#josR2@#~lCphn=IS7(TSU)~#RBBc&uN?G=maE)s(j(%Hoq)17 zhPj_O4r8(xV{g?BSY%7l{h&1+R>vT1kKPaH6h~%0$ zr(mB28c~%=6%Jj(N4U-*jr2HfTbJ!#*^-3mK9q0((KM%5yP#%kn1iL6ZWrN+^q8*bR(XyL~U zKL!(1JM&x)7rOg9>RcPHw4&UY+qPJet(@+)mn9f9tZ-N5aUe%u!^SNhYf=B|$O0w4 zXm^=qt1*~7%%in!CPBmXwKC6sJ?^>9d%3CS)vOwI_xdI?*LJD-U6Ty;XW%uhdG{y2`8StnjKoFI8gV-AU#m8_1RI<_DyHdrEOCgmMDnv$uRAsTLg-5yDH?Uf!#) z*|&Zwt^1naIPmCj3wru?^!02P-P$w1Pj0GXIb7j`$64TV{D{A4?%B{1))WrQreni^ z;YD{jpY!!o>$vp~#V+SJVHttH!-13{?jzAg-mVK7p!CuD$b7h-Kn-&8uNZUP0CVH< zmjVM%N>^Zxy(yf6%rVM_Io}wQ49WOnNjBinQBEmT1}Q~MF$!wY5Q=6oyhG?Z=;>I$ zJn1U^#ZN9b8d8vQqLa-J9d%F-$uHvW?RER$2*Nx<$+I^c7l z5jkR;C_ys|9-;rOm5AZ=B0~LP{5;f_N+^M2E(YtYg^-*iaxTfd1yw>KN|s8ffom!N z>nw(tm?Vmqd@MnfPz;cv5>#RycP5umg-=QnOp|P0ge)QZVI`H&0;i-NbY}IpY?8}b z^ZhXiV#2+={RR6^Y%BWWTOR*)%CY};G5%+4|9iYEVQBaF^?$iLv1*sjsH$jxY_m;< z+@^{Zq@+TjKrDYp1fbi%P|r)1B9bZ426f5WCx@DF*s!;tqvyYgeGS6J4XN{U1rK2j z%#OSN0X(~N6wX9%nt9#yp1RJx=Q___?fvr=#XDtY0iCz{p1p^{nX4)l=&MMwjj`kL})hzTgjA;o4HS{XR zVHSr4+i7$3sw6R!8BaNHN+v&>{Sn4%%!U$OnrqZXZ1@D9G#yorwlTw9^rgl4aX*X1 zf3X4Jb_l~>9->X7+Q7o>w$WiWEW^WYWG2$n?LymOM!|0P%L0?NHslhDw3|(lXqGDcCP+HSC9%71Y zg*@+s9$;IGR1ZYOGJ#ER--=`E)I}C0{a6)5f0BpcTJU?b(5vBsOZ?nHcTh$%Oxxki z*yGu#ZlgS{0ai{aW&grUO!`?`8NXZbjH7njd2zhlGd+rio7rH=#xf*5D9*ek>B-`} zA#ur3_4n>}K{=XB9hhI4L8qCT3KWl3Gq)NeOLNnN8zN8Kb;#+`AdI<G50UEk6@pPz!G^jQ3xq@c?+VrJm-OFu|2iZlXd^Y%F&J*Gy^ zW?cfPI7Pj|R#e3Un>4&Xv+-#u3wE67PM?Htv&&lJq{Nu@(-ea%+gE{gx`s`rL@x60FNXb5AKw+;O3M1M}}A%OS~#YH&kx(O^6^F-v^$04M&$n**v*)q{(8{*Z@m%3W!kyNs>IcohaJq9D7vOC(XmR*M?m07SuuZw;ZP zCt=oj(dfG`5dXO^^0x`77zV-IveSJLdwt}~xB8u6{BWL}-Ab zON5sYkUo+;Toqv}WS*O%UdoaesoGo>pBM+0*}acf#W`PA)I{GibC55O1#Mx@5WyA& z62S~1o^yn<4pdyEQHqQ3h;4eQSL8SXkj1%YBri*J(VU#eUpgdJYv=bA0&RAV+dHFz z+auB)@-vW}SApD+?}p2AQ~bLa;+WS)+dE>Ebgz#~mlS*i1*QRg5Egs`C?$?C3`^1S zL2~l-4)BK@y9DNmLT~88oP&othp(%OJyQPlsjwQ0Ub)@IdWrGQ?t@$Ke<1&9GD|%f zyVU;QGt|FkeBCt%a#8~?f?D#8-5>2K3QVl z3?$uwCUC2QLNSb88rn7uBq;RQvJVM1i37mfx&B|ktDG;Gw!=R?KS%ZK+kZB)B8 zG#WFn9Uw=xN?{ykq=6^QlCp6gqI86+?mGO$o$`~$wtN%e*$juzHq2x$j~hpTd3asv z+Xg{I1_v9jEKx{Hh$Ys$gW*6B2T@U?I6_>A7vm867&@1EX!Osg{cm%fVvzP(nn3&2HsWnjS5_P0f56njE6jI1s za}Pa{X^_0K3YNL+Lc|7ra2cBKJS6#vpJ5ihVe8BtV9=(E_4EPF&JJmEZF~;MJiu?N zK(p`rDTs0X>HV~YG$DO*#2>I{+jzM{=u$VuQ@~oq^u|xKA7?Q?(%sE9v_sXQ^++Xl zf~Wk}@$wM&g|YEOOJ)m=Rt=7b7(^#ub-`GCOGq8e@i_WKnN(zl_j-A29i z0@=%PYq>kk!Lpa#{^xt{ivu`kwEvJZYLFmjLR6XG;Un8D>hY;9OR@6)ZaA=pz0zQ9Aicm~`lo zMR_RsF?~!t{ItA`(%Cp2jZDnWf}_<&kp*^x3WpK)6#WXnMP_V8#$Amj%?12}f?_Nm zk0584yS3iH`n`z%=B`no<5OBeY?77Vd|5_9@s`6SBG+&TfzWI$jv^*v? z1>40}ONZuq&#-UKww2)8fbEnHS9F8dcqO#zp4w|_O+(X_n>)W<>L=DJBbyzEP~z5w zVgCW!)y+cqSn1W4cW*A{y#q+Gk#(7K@2_1$wU_MpW#ib54(>X$>{>z8R>1W;gCa8K z*m4y!+h)oLtF1q3l28YH5#3nyr^iL@iZ`a?YNbz$2_}Q}EDHI_d^$nhQR&S=?^M^3 z1-S1x;4H4XU`XBRX(Y+E!+K-k+Fx0qr{M&K2e%FZpn!E$XsZ^kj`^HQB!E2T{Bv;g zcay6!p`NSj()}VHbMF;kIxNX}HfZvL>k=*@yDK|4bNU*ksl<7d-Y(HYIeS!H!wuXK z2j3vH=gR#iFP8d4SV@5(r%CFih(6ooHv+=*1T;FPgW`xMFTqH>3f$2cb>0vgy0eGY zh%(lZ=&qgSi2Pkt6gcgJ)LIc10DGjzuKKO=>=RDFT&#)OkGLB4tu#tM^2xfVXn(rf zykq@M7Oh{EDX?6#D_QP^OnOa6l&Q}_Sl^}iEjMcK2(jm_SU6tnUL4(jFkiLiNEO}x zr#^a%hj`jKJ&ysJQ&}}8*t2z!18_a;VN+1BYeqpqZ5NLwv#zn`-i!H1fhzS$a@jFO zy2N&gVO`30iF_`9qpqPCV0&m!WqT|vs$W{{Cc67%6Qc4EzDLptEH@srdDv_%o#P5X zQ1KRyb_Vh-X$QkHOD@@4azG}10$b)9ZIEQ2ZUkPwdmu~RrQ%M%8J*wDLG zy`|h7oRke9U8BnmQN9c0PSnG%Ja+ivzn}kOY36q{;TeBIV$9p?E#`h5#&pi?Ck$8G zRZ1=vy0l7<3nbYqKNUert*S$5ZxRGJlSf%r{?geANX9?VY{C)A} z%A^U&^Vl^;MQ8JJFjT4I+y7t%cD1NaYbjbjx@#6xe^s-Tb#yW1heBx+jpnfC2Fx6N z^tsDDY2Pi@a`@!|S3|81Kkndbx7C#{;HEaobkn%t^hu;1@1VvRzJv~__o^a1#5#p@ zAsW7I_LHir4*`aA!T=Qx45X}}>T+aCnC*!Rt4j3^0VlIO=6oqwYIa#)L!gZ$YXBQ& zw0&p)BQ38u+rE^^j6(wzTjos-6<_Mjf-W)}%8rzq+;4<_weiEJE{LLTnfZm{#nA%Z z5n${OK65&l-394(M&Wkmr6m8XU;+wxx>$R#DgjP+seRBwJjgVn(A7w2iD#Gwxe%;s zrY_Wd6}$^`%}(zauk%xSyb%MQ*A-P>$?BJ8vizp8%nZ@9ct#N8_0J`QB~f{h3tIdK!)s1qw?7IGlFa6lbo(~!EnAyKK#PdDG7Bx0y7f>6+^KS z<}$OM8iA2r6pQ(Jw|Cjb1~y)fr)+YT-&5YQDB5D?LSb3|$tR^RF#6R}VI3*qj*;lX#62nIiu7hSNu*XQT56?FL3=^1 zCfTl-8k!^x>$k6{~cH*6L`X}es zM_=#jV@W*Hg4iFafPXf9lrokiRzE8UgcaCwbfO%mfSI8F4h-==dk!2hfNE-!#F`AM zGp<~ciL+0Vhf%=Op^Vh)|e}~O0?cmol0ZNfqi&wT)U}mx+6-r#VjJA8UQV&SBrxQdsG_G+MTj&B0b{-{~T}Q`RaII+K3c{gf3!a9Ly7iegsd48HXC z+k@8foXI+xKvM9*I@2f7!@NAvAZr0n-euK=;>lsS;#~41lcwo>bTPmmi^c4&!VN6T?MjKR(EXc=?Fzk80?8(+e>xJDP$L%OusW3oqBM^!Q8Kvc{o;-^qejtg0Su&z(Vu#BVY&O}jbRXlE zf!oB`X{M>XvD~3R2vR{5tU&d>@COLCyOe=2 zx{?`W@k>>$yim_)Y*=czHr`>78oE6lZ(14iB1q6-74BI)ixF3HuC2g}F{dzg<0EG_0_Mf0b-8l3s5QH%68Z3Bo^{16%$0naTU=UNC|4jH zt3>b_2Ex3?rOuJJmcS=GsF9g%JmOirx?>YeL#~nihXc`6mbMQPs;kuH$xevP+TvTX zIgExG6U>XKEZBIAyHcgFigg*2%AzI9DB-IcF$kyB@-oS@Z>c$i8gE2hEWxFny#RCp_FjWT-r(bPO)5tN$4lsTqk2VQyK~v zQWj86hOxpPpEvfk6Tt&}i>M&dB2_qI@_ESj$%0z%0cSDp{1-tzM4?C0&OCiyvjEa(FSJ$8qhf{Y9Bx5(+Q;{Szyu=w`6i#fCOXuIAtuu?b>?Xzv zA$3%m&79#*#g5n9Z7 z+vr*C1_NN_=1YXMjhoS&s0S}hiDrc?QQ;a47@F4^=AlW~kEvBoY@z6o`N>Aq$=X2X z7L5FyRY_;*uvL^oRW=N*tuPFR)Dg_Q!NbOrm7d)ZVVyMSbaZ1kce@r72|B{&wx*61 zxl@G0m8Tx7%(BJDry!~RLU&benJ?P44QRa`DjzpwX4maq?4Um zA9N%x8#zh~3tF9<$t)TBW~2@H;iluM)v}dw=+8u1<4gR?T8Q@LUM#1Zp1rIV%VZk% z_x(6NQ+v<$`2qKmFu8a5CBq{J5Xo{!p*_@kN|r2m82YqLy&=vxBk~tN7B@h@X`-QH zF)7!j+b!&zm@ga>JXn%8B5!0LSay|Dxn1gd(hXa+!(y6QEZ%7{x8^HbQPo9hmVOdZ zY3_1?jV+vUryDr6-ihSI(DKEh-J$HkYfvrysg_F+zL~XLo0S>jh*Cs~hnhy7l^0-f z9s&`weziE&8YjYAb)JdyMkARv%$%v19HkJJb5k=SeEv|k z>V`IM;p!I4ZuR3>96UC@(kFsY{S7)bA8m~A#P4cVIJ22PasGqMw~F_Nfbu((K6QIX!@G(cmx=R^rPHfEX>XCK#Z~!7=cqn) zQ~N0mXbJGGEu*xm4S@|ao#ZYFs!m(tJc`tk&%E^xFjcVKhRg3C5fI0|(E6@;BK{+E(60JjT5zQPDL1-UJjt5s4^Q}L55~hH z&TahF@Y~kQPHGk(MWBbq&QrcrU_l(_kJ|Cx{WEp{oI6Q-o`?32_w4h;1o4@6iz~?E z7<1d#<2ShDrj*K3S=omi|0s1Z0G{I{o}9mu<;FNq&^al^F(K?&;eBA^^mYyZ=n%ufak_k=uUpe1GZhOvf6Af+2i^7kxcI8#;_Rs%b)@bwt(5n zvM^`lyx|(&>P9Rzio*?;ISJyEOiMq5{y`}g1J!jw5vO1AE3y8(XNwLjx?i44>MgrA3Q4m2G%N*x> zDyD`^kleEuErBo>Ms&vPy0GO7?cMKc|T-4TH15Gxr2!a%echyiTVb4+;u`SiP4# za!7KrFV7l_j{TQ(iVdu5U_rMjXr z>PFQGe6wJVJz`&lxU9G2bCRwpL`KBTJSmqCZyAmj^sJU8n<@E&+B%VNlOZ;?J6%~-x2{%)ceotlvW=OW~6|@&XUp<*J zma0YkItuO+%-U2VcmjWO=yPWP78J-H>oYcR)L?uTz9H-?Jzyo z5!EkY5G?ZH&hC@(79{^6ea61N7TkL5!m|TCWA(q(c&!oQ zR8^eNPDme!lmkspK_C#eWvL ztk!VMe=(wvKvWYHKoXCLY>MucfHGPWlb;jU+y#k+^ob%4)l?5WZ+Sc(bVea8y6>0i zfC>o3mjOS*iGf+s9XD9}Nv|loPz-S_L0bB08&W&v=I;&bRS}g(IiT}l!sS~ zA$aE%UGPeQjwgc_(9Ba1IinQF0`qrQ?WZjLJ*CdI4d{)!>r` z_PX(5!9>tXrz)QA$v5>7jRgOisHU3IU$Kh$^t=@1TcQTxE59(wyV=D+X6A@m?QCsw&3Ygm+ zza4JT)3(pNvTjDX1E-FrCj4l>KWr7)%H?4T=NCuE&1d%+92uu+!s?)gY$)c_Qu*+L z$CI+NKrPP?YlzBH+l1BjiBEV?mjfW%6q$u6@N6q|roEFktv}H!cq%aMoC=7)wLdH` z)qbH%LSeSz6<8u{*?Qog_ULVctfw9`?=dBH!eQtIr3=sZLfwBNIYsd1|3GjYaDzrK z-a)+FgN@z^mp%3K9yJp2r91RvTWuj7^hP>eBkr>ol(`ij=8XV&K)v{3wGa$_pf)@i ze!_#qjR6h21NH13N&9TUJG>C#^vg30UaT2@ct+|$jPbEX>j9&E?WYx}pR;*%rnxO5 zo`v5vnWV0ri=Xk>^na~~y@YGd`9oDiotDqzJ}KjFik^86g}LSFn3ZzO+P~ zBX?anE`C(@b`~)%%OCVW0`|P;of&bxLfPYs2j-ZvAX;Q0twe$?5kgt*Qz_=P-87CT zLOrwQf)kV)I(r7=!mW5?T=P_$sT-kl^z4SJomNTqtpj?R0u8hu@V2iLHGVFK3JY=G z{~>{ULec1rG4KGV@J6S)Vk7%Zw?tk>D@+T}g*NMz?GIT;MIuO==hJYe_<}(|N=!GO zY0dGo&8CsJ`&jDU72PKjY;aHDHtD}~NmwC2-$;3~IXrd>BX;95aQg6E_vNdB`Fg`VqHd&PT$Z9EM#-w4&@Beye~jtssDyPPjU zRReY?7sZHzE1=jf0Yiku-W2U^hM)5L`@dGT=P8k>GOt8s7nBr3wTf&rU+uCKG)>h} z_#or{U>lr?qLqtbIQk2I*ekr$15CeBkGJ=TF8oacfr>Pdr3+SpwTDpvFMYl3GmY*x zhz3eBe@sr7Y9f+9pXLf~BGx0g2zXN;U~DYD3zde=QF9DgmUF0{7%anJzN|MXU_?@8 zSi9Q;-t^D+mWY*t%cm#Phkwawxl(YJG`aOZ%*SH;7hXkWne!yoF>qams{MMQ@smLY|MN$G&g5| zoZk+)JKu55{<@gub!R8Mo$YqohOS|B&dX+6&wYW85%i?xeO!;`{_$W(u=7*20@k6X z>2%@Gza@n449G+dg8>1hLjSipRYLamF3v808?uI$cFHb>PA>m5=|od|OAU!{unD{h zWx$3B%mD-~dqhrI3b%k2I7WFKR-tq(Y_hxz@J40B#kL=zD z!|!GP1-CkrV2+0sMEA^09_QKVUgNL#IeP}+os z#kW2pv};{D8X`QFS{GK^N~&DZe65Rb{^lZg*`?Xd7ELuaQoHK3nHovpU0QvZGep~w zmt|14s%kNAoOZey3HdIRnV4Bi?rfL43bibfmSsi^qHf~T892jE9Y2j9!PUAdbVB*8 z@Y(pAEL~YMqcUtG5?BuMSkrNJ^`lZMpAKOPJS4y~kBa|GBel{x@KG^UP9=eRVMT| z7ILmCQx}ww+Nxf;*d<69V9S;*2}fqLQcYZ^Dg|l>B-_D3M0HdiknLbDItkpsQk7yq z5f)M0&@I-J??eLQVnBis1v5}y(0yQ}1ub;|BrrkISgF zQCCzRQNqBor-vU~-YU@0;xPO}r=ljItn;C3t+sK8u;BWKG~jc0Z1+w>@fbt#VqpZR zp3;LHFnuHLDp!v{)m%fX%vUuAAZF&%Ie9QRW%$dLSM0Ex-Lz*)P#C@tn71_$Y{dXM z%M@E%o-sZ!NXVvOWbnCrzVMgefS-TfTh3y0KxqVjwaz@NQoASvbi8&jDW+&z6&hkx zHAlyrYDv~cwA#xu@dYL~X_dblq6nzvIqQ=)5LKeFRc;*`A<;;69iljblDg`ywPZ@o z-KjF0JBkncT4`%&j`y3V^D6H@d4%hs)(V!o?!F;~R%Xhh3<9+p$+znq&8jbC-c)0c zCPlfeHnSWJ_zQV_s##;a_ofEXL=LPH1Nx%am4Zu>p}O*P=5P%GIxEs-B)vrs5IT9^ z%@jK-RK+aVD`nw72)3+BUyzZvndq3Sh%`v!*`V@7>&|^Z*UtW|B7Q&q*r$sfy=;kI zq@BOQ=MK9I!f-t+UO0u~nU^m<#4!M>Uy_MOC2l$l|3kqOc`{R&XuMpTGnkCzAD(d+ zb8;{mZoc{yGe~?Ay zBW(r~K?|XL3>vk-A-Cmrkg?7PZs%!cUYHQ57h&2HQwo?uKa}a$k3F&vx2$0>n0wH;hhydiQzRAln#`{~^4f6zfVv|-tw_9G zO{ugTk-MNhx5Mps#DAJYiPd(prN2#5EFd7j|1rf>)Wg)+^?&?hma6V)fTxQ6N49Cg zj(sV_E~$-*ik94VaYl4%Cyi868E1UOW-+U1b>fCqbNwo0V}k$+1^}Qg!XrTw5v^?( zJcoz~D8d-Qz5U?79|X0(d!3PCZ{D(n_rJ=1?S1XNee)gj{`lpLC;(&7i}G+p=eLbK zpdAeOnd`TWE`p5!QMhlX**O;94(?D-XpeY^?_rLF-oX$dh4*x%E2wg00M4~XH{@-? zNjBtt{Pbbs(cj=h6o5GSD%|v7nCVLvfc?J9FeDE8mf=H~a6QC41;I$O2Wjd72navs zp&T0f@*oQkABh?Z`9c-UiIb1Yji0(wX8v#i%10)Qd%F+0!%NKlFnQ4w;Kv-^;KUk8 ze)#eM(udlQ2KJ!}V1T?!1?r=ol7GK%CF%;fzI^x!gOgW1%zjIgcyA-zgD%3{Lnq&Z zJ^XkJ%y=0h@(Uq^yhr_H4alde*jvQK$G*A7!9T~xTj%56ZuhqEaHuf%Fp&|gxMjAj zUrk(ALd92{k}08Jr_xxoEm=%UYjU%gh^aF$%?qfTwTKrN`aV%O9cQ0AiRzg-Yn$D{ zo#nN5cWKf8`Jme?++9o>Jj54@!p8%C7_?NzRGY0PBu}Gpl9AVlG7(p}%{^1EwZEAq zvG`3L&SK~SMTc;+G>ztqKdrHZO+z^;R_N@dB|p;YnBB;0R`NndfmUXQrv8k)K%FCX8>vqsop z#o(Il@VSPoK1nH}N!h5Yvq+pYZ)`@|c3~!T;f`qFOluf%p=;ehAxO?72c;79r4RTi zdTT4vxv@usaG;Q(Yug#Lcs55 zh5T6>CSuUf)E-)u`NdBmrPcba1k`TnYzDqAauuP|Pn}73orwlLYwU!!+g(O4 zRd)GYj0KS?&QUqqH6rEso z-q`$xxOE*oIFp-Dl)dU2&|A9LLoq|bU*|I%ma<%wIqec;u+=p7<`yl@XK2T9@X~M2 z#_UyjWA`El_nNIRHTkIBj!daX8>B}{JsP9Z_e-e}_NCCNu&BQS1e7$lmFso2wAAk@ zd5aHSJ0wT)MRf_r63k?)-l82oRoO3lvKJ&{(=Aw8N)PShVzO0vX>2Z1BhLZFg*-Ul z^xc2Pw;aI!D6@Z)9p-zg_xYmJ2up6Ho*KAxupUgcR0-w|o$)iO zids5_x?ic5ni3$5?t*}2*xfmgXU*)>={KO5owsUiWS0YhHk0Fdr4dZ&l}zLnpm6hA zVkmn9f%jCC=XK@2>=S(~s=P^S+^KtInZ2E={(wNkl{3}rG55TyBo`0Z?YoTH!BWxB zrSGXoXFnB?4XG~M=T1K~6}F+Ts-n=1=~M_wd0*(6y@&$Y)!{i%`<u~X?r^fh>Lpr5aI479xqV^$%M$ysv+*6gbXd`TaMNhc7`)uG)J@*XECsVIFY4UW z?Dz{-Q!C-&MOuoRMR--`Dc9muH4z>JO&SNKEp^P#kST_VS^K4Ut1f1QpDZ3mxly`h zJvzp%l#VALR&*~P{N@Pl`=b^NNrbP>I71~x1$s4^;C`M)BHrr^Vv&dUX`;m4>r7d) ze_Xg;RKm_}R@kX?OMmzFC4G&*U$r72%rP$_5$6Y&JTT2^LCj2{2`vhBZm2zisc|#F zJ~PyRG!6GuW0vIyi%Z;8j`F(kWkRNfp{fB1B@b}_%nHT?i36tEbfFO~+7sX3;Bryo zNwA_><00cL7EM(>R4J|&ZBY!1o7ZYfXU*iKBDALyuXWNb4{$VTV}hZIrYpNZi8s0^ zacLMrLKm)xYRMC`iGkxvX=iQei{zRJ*})fWs!7{kUWooMQRIg~)6BV`Y3;D8wqZ@l zWlhOrZD`~sg;AY5qMSP-mhBkZ+_tJ|-L#g4SZG*07e;zGut4Il{9(56u>R#@41Y7o zr*R6>h%U`#7Z88B!inF?8LTLPN_jwAmlF&%OWumyyDq}XJ~Zsv0eq?~Mp>#8;O$7< zbk+vU8$7=qecS<;u1p{(grdxz(#&2F#g`06-DnPCPj%{p?UYh6>M8ev1Fd0AsA%I2 z^6YlP8<0i2*}3==Zt}1tGcD90%*Ix`@{6RR#f6Rj9;{`dwJ7GDFP6q4RC036KI=nG z?$ym39%)^;@LAJ_GpN*=Ggq_Q55s)=a2i|7Rm~6qUh&wi>@1>I$yKC-x;KiMOLUHT z_eX?=bac{bwj;#I29@N*RdC}Df|HG}RtHd4n3$6~F)ScB;d-ga8j^Mlae$l;@ z5%GaGTlg*$h>xQ`>~(KQf1fZE!gzbEr?yaWm4f&v_h>6UW=JZSa+e_ZikhNf#D>b4 zJ?H@j=n(sIwUcP?JJ(K- z6sHV^ZX`X?CvgHiYFo|rbj;o;3NW!WREBHfmn*nlA~(O63^)!7nA?!z-mWfO>dJs|Z=MM^ z;up8~F4QfG?smTf{uPWvu#2l2|2`G|3&zy{-NEty#N&U|3jVVdM-##WbqwtbLVjb> zN{th$cqkbJW+{FqAf}-oQ45(c9x>l6(6&1p{rv7+ed}83Al0aBEn-o!A&HYu{s1+b zlVUwm?h2Jc-rehV`n-qd&D`CUdz()9XD`C^b+_kdkLN9%0{`P(5ztCh40Y>1JsQp( zb4Rx>eVyW+G#VJPZh!_A=iyk@r$@|IkNU`^LmR=%>%AA4y`mC%!>>DWPmj7tj{Rxq zox;L}AAM>g@ZE9`K3%#yL}~7o?FhHZcXnX6_lJH^UUiYj9(h48Rhpp)<(hydXnaK_ zl8&t~1nSp#0))!)kubGlCZay_` z_fotCdn(ZUHAXDCs`pqvD{-?@nX`ZH!N7hd=lx6!QB*1rFnBhOnm&vH!aBXujA-}iR>)7%}?!Y`D4le zLCU!9o}#*zrm7;op|U}-_1)d|`Lsa#EU;-3>MiUTi5gpAn9B5ciEuA@kK5 zi9^<39HT!2$y~!8e2TWiYs&OR6nsc|p?LxVzsguIQbk-Oxv;5|Apc z#PpTU8WE&4PK3GTu@aI^k^4qr{2ka+UA)IC!kKL4L-~2LFF^uRT$_rRyeUAcxQ%dQ zG>-CDPe+{+s^nUuA3Awih4d%!47TbAKOwli6~^d3RmBYtUX5jS-g2a{Fw{C1&{zye z6WPU&o1?Rh!ZB;44lv)-`wyb+a_;Ywj{~GC@ub9zhajTEk?`7> zE!h9q&~Ys3amqbR?ea4eb~p)Nw@f?SOeS{2Y|?^RwS%u(VGht?+l|U$$L^D>7s2R} z!u1U=x~SFiV6lCr@D$5Y8L`JOQ?Y(P_o?6E!1ayXhCA!#?|D#L&6(qT$I+DUzq|$m z1P&CSzpD2cUTKo7PK2))l8Uz9+W~$1x7c5S{#KF)@Ni}KHgM=Ss&@=<-=qGZsb1}M zDl5mD(HJv__1nByaT)K7)&b5=%0rKiSx*NnP222p4GL}II!RK-(P(T$_g|Bt^nx`I z4{FtxQc*ZqdHOPKF=)cH29>5|5Yw)dS?0eAO}Z43_~lT;h2gaD}=fmfynX4Cak7hy=PDsy{ja_UiC^92H zs>Crmg~XFfH!gt8+Ct*946#}zwazjxv7AjX79U<1hHg-nhP5x!tw#P13 zo%V8w&b{9~BC2d3e@%qWqVPOsAO48_B+C(#+4=s)x+A=}{NglwZvc-mr#b%uV(W!<=Dkse}KNKFz#LPhy~L!aho@$!Dgzy zs@3G%Zg_wI8_6*St<97u8b28P)n3AH&Jb3fyi8rCpHGjGHd@ov)1^}5 z<}HuddR{XehcM~6*p+pxK-+XZeeU(vaEC93aSTrtqQ^mDT&K>o4bQ7!uI8r`V6>(_ zM-~k|v%Ao_2kNE?Q;O;1N*H{K*btn{++gkg%dWl>>izpm-J8!GtR?-j>Fac)y-H=6aI+Q90{A3N0b8mr=pN!ofq=WkzDm?c$)(z-KVZrCRoeMrS8?oT&E?v8z#`W`H5 zK!mx7HAcf5k4akSvZ;1fvQ5Ty0T9Z~oXSSQim%q}p>13yaZIwyZd>z{+4 z1=YS(R3Sbq4n48)j7RNosI0Pryaq+MC)ySu8hc)~nZZDK60bTTkbnp=BS*kNB$T%g zGE65nMMHg7l>IF#G=N-j?EvO|K@mIvLqNR0xHm{*k3buf@&fMxY-xuza&gYApA1=- zdLUSZlElm9fsi1zNK=yQbO|cYOk8He1-$)nQZ)nT64H%+*OuCwEqtvgl5Yq6J1IZ7 zN>|Ys-C~reL>1OT0*w1C5wBHA23Ng3LAw8o+YG1V7e*t^9WzH$#y2A9vG3 z)!H-6_`wNmlsZP;FLlls*AHuGR)|4MUFN{w9ao)AYig!z_rGr%yV7ctyl!jz0j%t$ zj+WSIB@LFdzLe*ggC_-}P`Zw>%-X;@3u|5om1K+#CAUa6INED-JQ3F@9xGfL87ok_ zt}Cf(^1He>R*gZ-0s4dBkk=w)?-|^|vV~Qi{s?B>8WZu`k*D#!*;0?Xym1bFK6G83 z{L_f&ckTh5;2R4TyNh?A(l)-_xMXgOuI_GZ%1L@LfitXb?sZwCYa~o7*T+g4i|go~ zVVyy}&fZr|J>6$~r{lh4t#bnl6SmI`^*Ix})3@8tb;h&c?Mnkk7wOJu(@U^NYY;!JE0=Fq=P z)4wcGJtbH|k;&!@aKzb79VlNoA$40JUzYs)KV<7ONFMp%KtRp#|NrJt|IvE>e_Ypc zG_2immeICXv9%(3rEq`zPznQOB&1oBhJ_-P7e?U;5Mm;dKNywM8C@WZW64#LAfYHg z$nPE`nFB6KcPBu!kipTe<}8MbbE~Oc_Pdhs1M|-}C5SPZY&;y2`>q(zj4 z=pYO2?mzIn=@T)cT!{7x5?g2Y3=!1q@@k1dDwT9Nv`{3JV? zx(RtS6^U(!CDsd7bA;Rs^*cyvnS++?k(M#pu2T+3E+5AP)8|v5Z*X?A^i*T*V}1&Q zCt!`r#Z;FeZ^m1EhJ8_juSk)x=Sgzzc{R()uaIf#u6@4C^3lOknFt@W363HUzceuE zG(_Ehi`vaj@yr6mi~KH2br2OUR|#;ltjVpg=F&ETaJrR0vMI`_Vf+tkZ! z%ypt@=`{89jAN`E<{|#eY3_~|OCu$-TKNa`d;TF~kS%HyIom32L;6gNZkxC{t*Uop zRYNb6e7H>WXH=aC;T<;Gp&@I>(&=s!ep^9U@9Mg2_y<32UYx49M2j zT4}#qoGivBWXtvX6nEIZqxs935pY+>@nxHdN7*rj7Zw%ZVy!j9wjPn{)63VA za{thuEZQ|jE}incpX5RAuH9iO+&g0sNFVBBw|Cxn1P2J*U*U^LKE;O$ug;(Zm+43X zrdOwij0PK}4DymV?G7IY&~_SA;U~$(u&HV`nIJ(q`TfGRM6K<0zzv%AD&5ZlIm#VOErk$Ur0cb? z4^3xuNgfo zo2G_elGX^Egxj)01Iea|a6Z+XZ;|QkSiKv|z$D3Hi{drsxGSF4eSq39!Fuelnuf}l zdLzUklYG2d4Pxz4X13%1IWZb^rPlVLye^|VhoxfNC3}H3ec|YU?^Gwa<8~eoVU5#x z3(RBi6&`bP(rKLpr!gNC4P8qqB~f_o?n%ONCq%6m>^u1l*k<&+FX%NY05sHGlnf;C zuP=WvM=-27c}L@n5Ith*S;&`E40Nj*xc!8dt-UXe+UowX4RMi+>)LkwF(h6`Fe|c2 zI(O3tY4LliBOOi~rd|v9>2udU)k~vI&k6e&7AAI>=&`)KJ{DmDpI>Cb!qz^m3(jCu z$JTR5ObB!T$>sx zSBNvkB1g#j0+yIyz7dRvQiqEm+6SUU|9m&xzL4O7^FU6R#>@U5sg!I<=M<4I`5lwa zl$IxKt$@V>M%)W)@{oq|m!>Bm4$Vr$v^sM%^S9}6Swki?*{{7J)28+h7e`!$(L^BP&ul9bN^u8KxvS#)uROfC#(t@1Ydf`g$ z$mQf7$wU#I@j}=R=ky+k@oW^6X{m=35%p)@n(x4zR}Qy*nx`sGa8-z11Z&5%PP||% z;Ft2l@$#g#BK?7QuN+>K(yPO|e3YwgsZs!^GvAF7Lo~xgMi&#LT)XnIlCs=BzMmRr zwcEbFk)>g`zaatuvG7!_J?82&)rBUM~e1~rff z3UW_VxU;_9PfFykwrt~Zs(FmNXOVft>RR1($ZvjIl{9j955{ceSBUJ`88^dtbQ=-T z{+9E%GI;(-Z}&R}gx=GlR->K-s+A9MAw3sQ_fqo{HjnXpD~+wBw5+Ps0&w1P6@5_P z$b;f5$P)!~zm5(It)r3AZR=*9Tdd%nQ%XYi2<1v@$%0BeP24M6e$gTO>8vHZeUo+N zD!V?O+(hz@>9Ao@{A?<)o46#+MqFoa2NL6jL^R;*$29|aP5<2>y?R?@?VVyy>?zXRlIFM>~Fo$mE|I0xecxfA$bBO%dP8V3s!2uKD2 z2#DyvH(&ivO9hPxe^hfUKeMJT79LnGbYxA+_)<8V8)E3h<|Wd2w@uaoS|~k5$3~uY z+U+SDb2BJa+n&nbb}jg7#rkMEajC5~lye7as=V4Y>N+179~eugS=(1g>QfAFu`hpi z4!!eEy-z1o{PX<5`rSTMOpQb9LAd6(7_fCr4=EkgjvQr23!%Zr)Ux|QsQE(>qE1MR zW`n8m2PI5>WJkx;SPxOCGw-C(5Drz0-WH+pmF}^8)LHXX?mc~kMlkNl=6SITug6e* zv_>@U+N0~JUo#`8U%h~KW<|S#?8`lXcUAA{vQ_I?Z_*-Qt1jDzn6~iRQ?>?lN7njD{RpTMM`P%S!KjlW!*&QPUFB4OG8zOmyV4- z%i%?g!Cx0y=rn~GtVox^X|HqIt)B-r*OWDm_7~Qio;ez9>EI^L4ST9{PHCQm^cqM) z#t|&Xor7p?%OVWx@feqO(CN0=j@IM3xj0&nPPKcJMvK-R9%?(UN_U!(zDm@fZga$# z%Ni5+Fldo-BTBZD1bQ zfx<2vY)Yi2l3YWk12@OM>3>qKMztEn#+)>PW02KSD6ttTxET;ex2s-G z$-m*rWpy%|Pq;^cnx3>XF121O%{Arqh z`WQ?m8npkluC6W0VRam;qTaAJk>kFt>o2b; z0?Ke$hV2J1C%fu^ud)03cGqb4ksrl^n>_@>VzA8#=#t&I>}4$ z3dX3iu@4t#3NOnH4v5Wn(;lM1rQJEhQQe(Ya!TZd1x5d~cqQ{I*tcYWhCe)$oLbz7nw8LAuc_d$Jz~8C99?y;?p9p4Hyd8wDJsHN z@pCkf?E}ny{Iv?uw=W0hKX!@zMTC4au;pJ3+NqwI(r-g8k3o&R?({B);F3~=-EcF| z+pvgr=CV3 zS!odoYs9?(&^efgg3>8+r8e%dUQ%k?Q768GR?~Uou6wO6kKMmvJ9+X+#c(xN8>m`8 zU7xFb8}lX`T(-TTn#oGD_beF)!?=+#wHc$S2}^}bmM#tnux@BorBb)jm3i9G#)(*| z(@L3>e(#=;E!3jYMrN;eP*R!OxTvd7XW~#9{q#hCfTrKP*i-(-Ss4daQow>N^$(vt+Dw3A{ z=3**R=M#rE_&Pn!g+)|JqPMS5$In^4ZkMdiV6~FuyShdva20QA#ovN8pPy+z%9?5( zHX;rH@3o^;FrynQ@6pnak2acV#Bjkkbk8Bd#s8^=d9ls1HU4tw*1NqE0mN>=0nUYg z&@~sP!_`+~)eB*G@4L@Q%g>}QaPj-c&3crt%^0V1$Lg$~?+bGAO>Wbj>r1Yfi2JVA zD;0G1ef9Q$8%U51hvSP`NIh7L#Td4DGdx~<63w<4PxwClZB6ISBZDUiQs6931SU4; z$yhDw0OqOD>W0G|?$M-0HxL;S9gz#X)rdEV`;QzSC;O7s@>3<6ixghzb_kR$IvaWC zwzb_Qo&HMT=HP9<9vRJ^1zm*c-%eYn8P*Jy$p~{HQdcj!touFbg=X2t0%Q=Jx%zJ8 zpHWnL(Q zOIj*dafbb6`I%V)+zrv(j7Z!PP;SYk zyE>T1=Mg&`a1wThLUv+7JqwahUJ~HoJ6;LbUm;cAC=EHK%y`A@ctu$A$bc9W4|z@N zl-)ubS1G-N8{41&Ky(suRd<+X4)Gt+iL);Yak31zWqBf?9@$+8ERl%EVR!t$)PAUA zom82o*QFXf@6+*%#Kyzpc|Z}ERQu&#%S{na^k#zk>?Lc`O6J$EW=MW}v}dXIQfv*m z5pPYp%@N$7=n-x)bQ*XFx;VY2njM?kD6lG45#`>!45I`}66QjR2i=F@CLBVQaO7IR zKQ|EB9-Q9Ap8l%1y~CZEyYG<|0;c2L@xph7LFh;syE-HijVz4}Oo7MUyTDZ$P~dZ2 z+!?Vk1U~7BqN=qAkOL4Kqvuwq=@X!LbIJAHh zFMt0VSM+1?k1GD<3HkptuKy3Fp!-jzp!?q_;qVtR=^g$*Z#$KlX$7ijDK$wcxyh+X z+KH*zL*?h`SrrESZdTRalibY^y zhko>CpX!b?XiM2BQmKZ=RPP??8x+3OcI(u1y48<1UQ=_iqbb=VhIR7f{YkYbE;UzW zYjKF`0DY*Yv!^T-bu&X+1f}-}*M6Ww=Ud3ex@n&0D7!M6qvR&?FAhqt3ws+1{q2rX z=SNnL{IFEHI2@S7QeW(0uJT0kBhk|j-1_9nUy!L80VCwP;Yc{61)1{a-Z|$S!M}b7 z|9k-f!oR|vv5n=wTt4uR;ql{7sl0#3tAGIkG5y!!LPr1S5I1%avA4A~v@?;lv@;d4 zw{tW7zrErqs(SXwLa2NoFi|wE;kGrqa|p*pE}Q%r!jh2l7Q&TC3&UfkSgW=MX|N(i z{)4-P46O6R1bcDJJ6iFIsm)J@r#oEUw;j$WJKF;O{$Jn@;UpkXS7&Q%hy$@d@Mcq9 zggv?NJn_Kr!~h;6zjd`t!%rT{V70ez9RSOK%ljn5x@oaVD|aX<4xi17TAQ@>lj^KQ?`MN`zP zbjjGa@kwCEIz}^G?K1Qxou}GR3pFQM*1Ddt+Dy3!0FqH;xC@P~;X$=h3)b|@e6-^+ zFLX?ML59}){Zj+G5KO2&XUQp8)l{LET!F2WmL`n)z73u~J9|0i8pa%|&bf2R!h&kA z3@q6Te?hnqP}dyRM_OTa3d@$mh%XXAXZ5+M5j1K1w*9#*HP~+pm~vfB5rz6AmCh-7 zfDexq$&ro-Sn4JRT$720PELs~hp=2ZD#&LE!xbQX9B~VYxH+%R2D~pA4NNh1>vA@~ zc_tDzv51Jdf03(Fij$q<6mv`44Cue~=>8)V|0x6&4V|3-3fBKD%Z5e^{o^tWv2TkO zZ5X%X&TwmySw&P(u>q7}w{kj5V5#2@^t=IK$SS&>4*ZV-1ZF#zpB}*Dh+&W-q9JEC zcCCB1HR<)^a+}h6H`db>mUx@4B)5rw<)|>0#^pu-_Hr_jSx8AkN_jOcT9oke!Kr5o zl3=*IcGGl zxirZq>}AGC?jbY|4+tO+VqlVI9WV&eK&Z}O+g4dX-(~2&AI143)R!zIxgSK>3uDeL zqjScQ8BHa>=2Dn_%UNyy-#&QxA!uk!M{2`L;YqAy%T?6K>8a*oRMVnNI3sM}BO9)8 zGNMdlj8AJxc@CTN*KlcF+`-R+klXq!9fxP|L%QpYRU?(tG^P4mOfd(UYE_O(R5-#f zpX9NEsZ_rriC|yQhlE=R1nrWD8qL%w^Mowhdo?y!uFHHji<9;nTZX3P>~NG3;7M*^ zf*0^SO*mtTD)}E;_24SCuX4pC6sXD64(;1q7i?DjC6pSE(>~A`GIdp>aBAi3COhZ= zjBQoSeIyK6iK!MsHm-s$0ne+SA!I9bj+oT*%)86-9qtH=*o3ALFDkhO!C;n!F)SS@8?**+4v}CuVFLoXOSU7Y zebHi6R|=Cxv^|Yw`5rJrq+zKkA502H#6`r7MSRU~N#sTTa0OK0vrjSjrx-AfYl2Tc z>yBw~ThNHWDP>;N%O#%xs*tEDzG@i_Hdg{vc?9Ds+RNqveWdJfb3h3f8^pqS>1ZJX zJR=gRfJK<`9q51u5?aBXd~4gTfKPvo!|pHvL_wBPj5vY8h#z1N4mC=a?iAfBBEWHs zX)kyfgS*&{nvc%QC#V!V`_-n9a&rY^bX66$=p#aq1}tYt9I!<+S-)EkQvca%qR*kW zwpBl=e^}xImZUGHHOnHw27)DO!AWL;^oBxX2>O7bJ}9=p@+3fP@J6SKip0}I! zJ5OV?47)(6_f!3dCvccn^9}jN^8o;|mUQk^wM-kOvB+38Kp@@uxIq?CYMy|>+%LOr zBg_iPF|TFbTJ0Sir4}k?ZAa@te#BhWKa}NQVGHJxw>h8-uFoI}+%b*bKE%98?f4=_ ztB$mFHZZ$wkZoFyJ%IH)(e2i$Oggzie3-J@%pUYyd(V!Y6lqv5x-F%}4xeMmZ0JRF z`5_w;neBu(J?=xma%7}0Mt+h$5z>dqDh%Y<&gV|Gu645pU!#>!1y3RN{mZ0=w|@n({Gr_=S0LzbP& z)pY1X9tI01Irh_nZM{KH*^T19UzuI9({2F2jus6H9HxpY5RE zvhZV&H6YaEDv}9#79b8dhl5&)^z4DhWee%9U`X!jA#^R3;(~nWcAEi*=P}M!jNt;*fu#uE^ zNK1tidD=zrDV(at_vq&*iNm~)EGzJcb7R8$ie;m1oC@yn-ibfy8P_h}ezVvblxZbW z%7;xSCTFQLvau=c%Qf;QCjCxj*#>uk9<4BlePH5+zivBftwVL>Gj{!w(qM;Nt4 zxNY!5A^r{QUt|4@1nxoNFO$ju|34w?pJM&*%I<1wYUd*6VQlK~Pc_(tX=xB9)KG>qRcE8)*aOCcRze6nWSXU=z_Gij&isD zY@JXuQ3~LifxMp_j8>FmGK3=7x*g>RA49}d3~xnBDuu@KtpA?%s|!h zVBE4sNJ_z7P%TSNCIiGpD%&ScjfisYLiUE!sGo$z#*iL^!oAa&V=FLm#zUc-(j%TO zxC{`e(h6nvMroxiEGqhR5u4LI{*=O!OY>*EtvE2{YZXfUE77#TukErs>Vk{h*{}`u%bmceQH!1qdxV2pr#`6=#>{xIL6i+Ybw@dC~*W!(=kp9(YWGq<~ zyX!H$`tJ&+s)hH=5>85EJr>w1X7lYcEYF^<>zRAhj=Xxl?PhyJh^9ucshpvyibyzX z$3?eQ{(s{Q0St@pF$f@_FqHq{3M6A^?{4=W%g}$k@=u%awx+cQ>M@#MpGlGyIS3#W zC{VpDGv34*;YZY5Gf`nNKoCbZx_QIUT^5{!Wiw+P^lC&}=XzUzj$Pfm0dm7DP#Rgd zdr7~(@b^lg!uPZ1JFoBiZe9(axtUv2)^>e_z@O8s$DG@(UgtkEHzVJ<{yzkHc2XL^ z+-vj6h>B2*k!7)nG^3>+9z6AJ^l|ldOBJLr5sZZgk+4?x%3;CWnVv!!do=?Y_9tas z+GG#<1~KsJnR^56A12yNd~kLR2X6uQe4|@G18)x@x<3>L<6d7m z2?PiaG4Ye{jImtn2VbH5DLg$Xqw^kK46)+&%w_*PLVp0i$h?wOd8!W9k!B+*Ru@}q zo&;FqoP>uYg{-HA7TDHVUbra;JL7I6SzI?=C9ELnL{U7gXbxIjH;j(5vh0|rzxz$Q zxpa|d`G*O1)CuifOxC~iis~U{NuV3ts}46|MwCoBvT39_M7H~)fMXKPDQ~UNda=9e z$`rq*ruc@nIM%QoV@Is;4>_LOj07+lS=s#}A7F!tb$|a8ViwyB{&HjFcvHT=)U5Y) z(hDZrv&ab7CbK8(>-bPwS|c!-cufCBb@!F4 ztBy0>Of~c*-tx7t5Eiu*L-V<=(hc9^C)nnt0yL(dXw^U#Xhgg9*+ohFpWZOkp?5@JjOU1S^ zIF5X^JBI64Hb~2K$nrFt!MoJ$U>r0a=pxWFMv{Zc{jG)cyVjiWrYU(`F30))s%XPa z(~G1nyYGYm>hu9Fs3zzcWBCDR5AnfAX#M^uXuq+6vyCk2cJO5@@y;Uov({ddH-`Ne z<40qyqS2~)mPc~>CUX{>2_O!eO zStK{*WmReVX!qk5j$pdbHY2|qrlCWy!@O$1#PPyDH`#~;+WAq20g)t)^w!&p(&*>U{f{%yZB(x!voLdfJZ-YiRB?}XXhC@JDaJ@)0943;bqbI592fq9E4>vk-- zEmih{yu{CWV89{4tkd|%XCWGw0)bnNOOuvLKdO^%qB|7+!Z;SkhB`HuiNi?k%>8%3 z%#Kb*Fd@1QLDMKpLtRg{#6krJWQt#++k(Q5lc+~AA?2V-=u64K;GYGXeP7F){I^@L zAes8E#>6nRxTX+u4DL75YkW~E!+=tYLsaQPBk+=Wt`LB^B75kA#Ug64#UtwA{KXuq zx@Z*?P2N4}j_74dyu~o@4=vtE>U&J~$fS1ZY~dOY+?WHXCnPzFUz+^SMg)68HtrD+ z4aX(;!>wVw;WZ2-m(PbPSU6;Hy#m}Zkzw_g@V^{POwT;4vFT%SLs=c*HKy_(Mn)~G z`yV5=pSoB1|rQZPoOIBN<_&1^exYy76}?KP-;R2*^6P&n_3P4FBr8!BIH?`O<brEWPrHrcon>~9q^={@zZ_&%XZ?_too)ZmR{&UX0fK@+cQx zd${!Hn^Z9uVbB#7JRC-oM8CAUN3y{mtu1Pmkw|~c@gAIfB+EmyJ2dIQRu?(#F4qI% z8|hY=_UneLJ8H{6+sQ4xu@Lpe0L5-ZDDe{?Y@bCR@EuG&GM4Zd-0w1v`Kq-At^`#n zK?m6&*GLL))Z9?f!L6#t4&rDglumHpd~<)!tW~jxxZHM^uc>GVeIOJ{H5Ux6;t-}` z2peOtbO`|{+h^pzAk*S%-N&pAjgDJ|g8m39i^5 z8_jxR^7NpAa6(2qj@UqH3^j?YFRhu7aPS9JUrO`v&J{`w3I|!A#l;pgb>Ehm)alI^ zyupOv0@fF8Xu&-z24wrK8ZW&Vt9*@ZdTSLo_*SIk%$H3UFtyWQzNS85hie^svJM}t z+)BGmm63UQ5u#bSCa+h+vr$k{#kQyjwK-QUf`5{9(%#A9nN&1Rxcq?!_8#9AN_a;* zO7dWO(CpjM&xmw87sRljhXekCU5;x>k!fY6u2I zy}vo=S~)jL2L`1I|LW49MT6?OOnwV&a#oA&D)X4hTa@yR*K&?k`d$Z%bFZ~QYSm%I zk(1eLeAhbe7Ls?m1kHS=aR;u0+=``syM`>3x|v0TW4rgEg1kdbxsT_1JT1&*GXkKs ztkrMT-FAYT<(%g+jvFCFjo#xM^3Yx3v`a2Ang`Pl$Zh(V8{!aCrGVy_K`E5*jzi6 zP2~9F9)?HafufV1=z7Mjd}Rct__f#DPLwy;XCrbY3KWBhaxMpSAg&XaF-)oB2{P_8 zsd^7eYU`0J*C^Vj?9AwpG$O;6d%Nk*gJG9YYl~m>M%mk1roBZ?cr>-Pg95set!1vzh>R=2GM`wLE zUj{UiFqz~2$>)HaySFzf}$=E}BdRNAChhN01jV@&q`Lt)7&bZUl3jnhK8(8 z-GTVU-Xkp04L0mViuniFtkxF0lXb531~}dbOqeEMzi5hIp&>SpFad0ly+;h3&o{e) zOUQe~dL$?AB4Mhngvt9p zJ4U1->$VjOAQSF~2n7TBt(`ah&r|i#=g*kYmLJOvG)$rdgYfT~fOu560yX94@s}mC z2PDZtU)F}tW}10=+1{VV5b@0od?C$O_=6j-_(yo$@$tl2L9#4gNX&mgLw&_L{si$q zqm`Y>Rv{YznFINg(VKip>r%bZD9MHwnmf|BbIa(PNbRq-coP#3_P%vn{bt=W<%}Bu z%7BS)Y>gYwBH6ojHRu5E75t?-;Cxh))Gy%UP?@Rdoe&-M6_t*88(@~;G>isio3^we zW`w8^Es3_&2EGF_pDHk2ZG ziYX3~V=VcHJ4$WzHadhUk1k67VF)$C7~M+q!+7R^Rn0Sk7um?h%#pA9=)lRvijZxBk^#k1 zBKcwsY7(jmx>_d-e|kP)x}R!}OAwk>28*X$-iJlZ-znZjHvA;iP1YM_N|PdHa+hmD$R<@sXQ^7Lb8LPR zJyj>vv35tLtmc}+W6AogYGp>&$j>W%colYV%d{t@xH=qBLlmCEO4mlFQY<;=5M=lp zi1pZPOHLW&S=g>5SdPp}bH6-w+y^8j0oy8CbJDG;8le-_R#{8Z;g@E;jel)i<=#oLi6^jZqziHR!N(X&g^mC+-8nM_8 zXfLh?b1{so>k8szgcW=pTKhrfXyefFrfS#Kmx%P2vM1DlZ6y&xD4Xk)R*7wll<4xF z+er*5@rY;owJ)4_UF74fwIcxKuR)TY4?-%avN$34VrPZ-3?PM z{VbneQ*0ly&TKU445STGkXZa4N|PC;sxmrldF;&hRv5pCzpLCMv{`6I-!IhGH$esC zX^;`u3JmUneh!xqx1ff;ImnIv1C4JWJMiaKP}tpA!NjM0kHlvRenmI#(zKOlxo{Ku z*|0B2;jSVGMED&xFX|fOiRq`c@U8&?LyHdd0;a+KskJ+v>rW%q0gYGf0S;of-6(3c zFdwJ=*i?62<*Diex1Up*+};Ekxm{kde9%9^kc~RsEgR-sdk}QZChAl3uphjIyJpLg z7WFQ|N}wacR#%k*Fqeb!jk#@TAo0{>$fk=23>Gad`RtTLSfYXkst3|TuFvPc8)LcD z)yRm^p>c`eo#ShYQVkK4@{3_6S5m9Hu-zUXyMlM$DHDTC4T{>Wi+be{r*~f-^RgX| zL3V!CI?F-Rzq@JqjgldI#y=2Q`AP5)>oS<;3jg92+1yfT77!wRWLe=8YA#J^q6wF3 zcX9y3L&i7432h&KjEIduB^8b2|*x5)pbVe}pxheie?VO9kKWWU;1VkM3 zmN02|i$=lH0TT9ZGd_7UPO>x{(qF@&B^W{57vyot9*mRGYSpG41?n`Ya`Mxx)VXd# zrn!GyH(19zM^PsK*~(X=xaYgcsbdJV0TufLGAGXSG70egm&4n?zxdWEs++Lb^Hydkl=BMP)$WEv%AdKwrM~tR$U!|BCoc+tqE5#*M={+DX1Q z4A(P6@=qL`XcqKR*Jj;I$%)@u8-ey~hV8|v)8kQM!O=;^)-?JA-d&>1A6e`N!HJA< zlw#o-yTuIbev&^PqrUiHWen?_zS>FWAhoP`dL8%mJ5DYXTizxM&V`<6Qcx7#?X3@1 z$VO&ho0KcHb)hdwC_Y#N3{Dm&Dlq{J42s6o&Pyszw1fa`HH zbu$XG@1nk9g;4%ikoTfUclIAhFqUrkGdW$Sxs!bEUmu^JuzQFf#NTcuShkyXv7be$3o!cQS)l8~iVRA9r_k!*tCCxHay@$AKP|oQ>DhGV5coefQ|taX8fahQ zo8t?j4QgYt+vIACoT;W<0Ma>+il{?!IowSuM=1wwXcTK=g?RJi`SA!HX_Rj@SDc9Q*D&4a8m^7HpZ7b|wav(;coCo>L$5js=0QKVt$QuZ%ki z`6vKbmO#X4^dqHIN2G!q}LKs!uFAF=MAv4?2)erguo)B-ZelCc=&q#*Lri00O%-)$*MxC-+3wh?g#WilVyw6g0dvyUxiQlH)jvjiNxmx!i zm*g>GI7Xw{;5eYW|j zh@32=wzx7HGgw>!Qy82?;KHnaA8)Er4tZ1M)?p=cX2tDLT$u))DOppk5qqv4s=dIK zu%3ShOylA**%|oNN?V?y&38S{Zv8Z$wF0(W)v;(-mOzM)!;xxD(beb*#$%W&z0p0? z#@W+jf?n24R&(@XE>YhYqPrI+2TTCjiiP{$0Vn!*Z});|L1X)K2IxqvRa5vhSzm4L zkOJCV5*`rZElRE2Ab)DoEt0u;LBCjq^ye0QxjFv!52k9JB-ryJv^eqd0HZ*4hg#GywXO#qV%O(`}DH$r%EIe53WvZKrk7NT@j= zai@f(fz}=DZt9~k@N(x1CeV*SW^!}F!P3g6j`{&9ka~~8J}iD?`k^{7d*=)V(c{RO zeO__I5`&S@wd$c0(F5MEa>~#ck2bZJ9EA1}q%ljb66`LbIq`n2mtayq-ryx+q3t}5(d5)#u7KbxC53ILe%=y-yGKUX^@i@s2MU&8zjmz;3CVR*{GaQ{V(B$ll(^x5Z zFu;tfA)^(;YNo~Tm`J-7vqxw0)nc#@hGt}hLJkKm!AxNnkm>5i@4>PQdIe9BJ^Z*y z1TC9i(g!opPnjMeh170LWjJ8EGsW=+xK=?sP%TIAu(rrDo`4oz7*EM`<=4S)C3*Jt zj%7Q*K|R4%6c>os>Jdz{hpL$g+QLi>9Dm+~o>DIuE{VJ^MOGiGgUL<{D%-EsQpS<% z(h;Ej^9-52)@~opueTJ-?jBpvxwCIgpW(=LoOFJm=LG~tnFw>WvWpyO6kU1ujISJ~ zN?(L?%&juO++w)B#(k_@u0z%Jl`T~05TL}wqhx;fDO30zKXpTyNjuWsRmxoojzbD) zUY;adgGg}&c^*LyuBfkkq}Uo2!A;EbL(Mf4Ves@qUpG7dXjr5C+-;uyL{+@12heMsotgV`!eGv z_=(&1-j+^}H}U1Age^=}L0Taz)C!GS*TKDD&j)UYRsh}};s?4l*Qmy>tBfax`}4DH zD$hmgLNNDE6&c}<5#gxMB*Ns7_Lts&9M{7ISuH$%PU>KPPU^V+WL&qiHZ#rYYJfCx?1d4CyG-CpW!({EukXAc#27=nmY%` zD7Iu&t)dWj5o4c7==d@{4w;)UOWHId z8tJ>HIeeIn`a*a$<@IkkD((0YpI1#82>{-M=J4HLy%8d9IQ%o6AvLNuIFuNT&-rn% z-(Tw%j;E(uCPa*%@%m?t3d4Xa)}q?u!xmx`0e=oh^?)7$Xhm;bYaH7`(0dBcd_0r_ zNy`!)2|Y9eNlO)_h5qv3Oj&&MCIyMfLbX8(1PBNW90*A4uT0d1b?pr$t?Ui0>`fg^ zoecjx7pXw;_k>tx54ugg*oJ%czOW>Q)`CYpqDUz{Au=>!3hlbV8jaeKsI-LLNKW|Ha^j|Mej1ufU+!B@*DV*o zJgdwPHIb}i3U3(y6)S+drC+Dnon}1H5Z2gYEOu;9qClAQTs=ptDECPngf0rPxHcCj z5=-p>=IQCB7!Pc0FU05|8{r+Qxbb7YZkL{bL}SB)nBqj(yfR80!QAE8XJN4mqaSudJw$CMg_X)TymfhI*))5Ltk>9~*#= zdfDu~RrMvLL2EZ=01L6`{l&8g{Dt@yzMk7K$b85&ogD12lS4@qe?Io%JVZu>3dg)m zN$zkuc*4+Q)o%>DHU_4$$3*hmTo3zrKJdG_+0c?$`x&Db?62dT)Vw+#wVw0pMkJaW#Awy=%JBkg%<&UtCp$e#&g%ICd^ z6pCKK<7yKz8OD9XQPfxa+N(q`xOXq{BtrE>e)!QvCwwYRq#6Z=?FK{U%fG^;y7YlkyiXi4&)SsgA=f*L4o-RZ-;`7R@~I$i zuAaq$1g;rJtMoX&UKjhqMO2dKUgAdNi6EcXAhVC&nBy(Fd%A{UI7za8cAEYZPUY;A zw4rfKrho|Cqb}}RNX$kCNxI8ycX?Var5_QrTBx)PX|#kqO!=5#A5%z-;TxSq35yY= zF0GBl_O9#MzXlBOQVd@#TASfsO+DnA0ZIB2tj%49(4uk6F`M2lc^fHIIsQe(XUl|>aPZ$5;CUjb z4Od3&drcznJ5Yx588n4+mI&JF;xVAN#XhMQooO@NQzR<~tvf6dS@x{K-M2yXy|(rU z*EIsgmF>N~reF3I{l4s_Yq-VcQuEx{>{Z8mh$-t_?{?&?cp)s2@J-YG%T&7Sh z+Rap%hVpN6Lf*JSeGY*)Il4~Kankg&5D*syv<5K!d}YW`Oa<^9YVgM=NRg*JX@045>~H$d%lpC5}9^WB{}xx`A`*z$<(?bhNzXogbIa@(%Fq*fzY5%^=(X% zLDj*)sfo%2#3(>9g~Y@_tk4o*G@E5r&?k5$QDPp4o>}-4aAhdb(6@ZhXwPacvjihZ zIU661nPzM_0I&COWM6{}wo7q$s>zNK;VvPi3Lz24aMLmJYf3@7&^V5R=?c!>De0>Gv>L^8Ug_x?z(npO_z5D?K>lD-0E39FEpell zNig&LMJ_n*vUFbO(D?-nBQM&8UK)xuGMCWahZVQ797fR-Dbp<0pS@YANk_s4Qh?1- zarj5c!adnNt5Qheccz`59n4jOq4oEd~>TT0y%ON zXihOofzWp4*D!8UgF36Bzk@B}@4k4{Mze;S+CL;SgyJQjeYa}oCh1f;fQ9ezG$|}R zl#jWplLdF+Tr}OQ_R+4|JT%m`aSU7&;z7TYH--Fa`bZ+5SfDPv(RMEkZ;B^K=`KK^ zk8YjEInKv^zJ&tJT&2%$bieR>xhjWpr4^Q3yrZ=!vikIKuAu)fgAb!&VfH@Y^NmM%G}R6Cllhf+=DpZ@~<&KJJNJX?3w= zsFp&-Vcfg9HwK{Ir!r>sFWF0L`M1KP=|;rwnh*AC&bEKT)6QG9`*2w7{crD86xRR7 z8NBCec04OPKrDe+b{y&!;7gs!rhEN!mK_MsrcX8)Qy1#%%A7f7drGQQ3`Qc*fX%l*OA4TXv?%9T6FpfqA9bTb)8d-Cn<{9Zb4%({IpL#>5nU|f3oL~@^Uc!@@FS(VsB z2>0LX%tyur49Y!@-s&XnXaQ$ewe(L3=98|tK3Kf+BLPACL1XmmW|LvS_yiAgzb15$ z1iZZ7S~(j);crJ_wPHCd%0@vT1^0dE$EXi{jXnX3iu&&KQE5RWO#NJR#VVdy4j&Qt zHEPUeF$RiYbr3@|z8RDIEYwJSLehDTKXi-5wXtyp`vu zd-H3!>rA|MZPRJnx5mfb3Dh^}fYXMeik?Rz0ntO1O@^%88rTZDiHlE*q^I3?viE^@ zq`|h7_2L2tMncw9G8JToiVxCkG9B;(eg+Nd>k1rrj-CdHG`z+U{#$|ajAtoG09PRb z4`T!1ZVvHC&^8gn2A1$Vk_KbioX@c}m$gds@gT8kZTs-0MP{$!CW4gQKF^M47kjIW zr6uC}R}}_DAfTcJP_4|xS$I@#03~OITm}p=rMqFQ!Bjjv-K?gzgm$zfao1m@!V%vr zIRjfd+7IG{a?2mR3pvTYtClGT`wsKV$$ zj9iit^!x6Xww|c=<)ETB3{VtiBOLNXP;dJ9LU2L8qmb8YNk~PMjQ)41 znwHKh9X_%q31Tt`3WDuwV7MXGmSpgo#{5GzZykt|!TI>J(nEc_XcxY^WVHJR;MJ|Q zo=2xH$WFnrn?MXc0v?v#HxSE=~%?E^(> z3>Q(c53U3Bh}b$2yXKH|Gk|-5Z0Y=CK?tJA4WK=UF<3?CStEMPb*pD%q?+?7eS*CC zilWPrZqagGO4gE6Ko{SW2AW>tDYN*hvyi`!m2mFdeV=Sp6|5#knx-Irw1I!CGf-rf zi7ptNn*rBMW&njPE3|rIGU~QxWatS4=U=F6^r;_9o>^drB zaKRofOk`=tO9H2XBAzJ;fstY6^JU1+gu}}$;pbF<^1Iq|Q3AQl8nyT%T8%>U8vLy8 zsM7Ji=@_emGxsI%#1jN%CCxYHQ%q68q0II9r9mMNZspjxE{IzcT+{{MO&QZbt$(z; z&7b+WgECskAO_x6H)uKGnd8nMo4J1&Y$K7szCF)FgD&pr%JhzMu`RtNm#x308M;+2 zmWU9BO`xUBL*wjS{>qkIBUaA8hby$3zkS1mW2TDM#*A5{m??m2NAJa9Q&E=ESd0jUs=p~2d#5W|7_ek)=tWM&yv7{BMFTf-7F{MRz$3> z`N^0xF}XxDZ$)F_&QuX8+Z->#fGCn-IL0X@&|UNIh*8!g5jmZlBj?{98C?l2gJc;H zBeN=Nw3r3>f)VQb2yNAcuh4s(cc!6ApI=#rXw5BH51SWt+}uRALYE9AW#e!+a19-mXy~K8u>@r{Ic?;-o?^z)Z|Bj9idZ?E-Yt0Uea2^3vmM(%OGi z12&Q#tT!B8X%_rH@^c^XPOPOj6aD!ujd}xP^?df~8|nTOAUxwWk}hjye}>;k{0nle z%CSF+WWECb7p9g!KAtQ7IQrqE!}K+}3|pwfGaOK+5ZgvheS@n-7Ff2wH^#b#n0>?H zOW=85s9~`lm7AoRU9R$PQf68v+V|bd{)qXe6I-g}6|@8!jNWh`)lHRN;0|IY4ccKG z_rk%dyFz&ppvNO=dtCrRNN@axODZ7a&(7VPS=F+2489J#J7EG(&{r*EO-9!U6i~lv z-Ivs#0OBnUUk#pC)(ul)Hj&%xIa?%-@hp=Kx1GL$qe6QgvZ0%@FqhmxtJIV4CH9G1 zm8Kv87+5mz19vuWGCrw5KKeR5U>3Xv2MsmTk#MkO2cwEMwN}&4!7rfq58k@ENFb!} zL-xuJpg^r7M6GmD5kbz*n@q9qHUn`>@E*r}grsh~BzIGEV6t0Os;a)Gh`}JMkOE=W zT1!;rt>mODqz7BLjK3x&u>2-)i(7+%Qv$onmeqVEL_c&a>&>n%#~r?m%^n##VY=??`ap#S zd(T6HcNqJljyTV+V9(h*sYj$ebm2B%1>Zo^y0rQeKW$y~1}xae0~bY573RN{~iox<1(f8;cA z&ZLm-uY19mPyyC`@u*qGO-A?#wT~f`FwyBjzb5vgBo=czx=}RhfkD;U;F*De;AV zn#TwyP((g5w;oAQwhU73;4#qYm%RiTa=>RI=|JhH&`dvs=4QOtI@Uxp7l(WnsV&t(%36i;kMmFGMu` zX6{j^PbIMB%fAaDz70mLGv=+3nsVS zN(ue_Qop72RcA;0X0M)Epx$>5e*X*mPGaW0Sr7f=2<0!0$^?8)4wMm_fexZ@tD>R%9&DF1;$IfKTB}8$+jJ}kF5^|{VPc9m$cYboY6`@ zn(V3Ewiu8|8!_6Z*7c7UT#GzoBuFjzRsoC>4?J8;SV8Dbmm`>LHuNl3S1u#%n4H_!zkLA#>Vrm zmm9SiYYV3uL4Z{QRYt>suiPO+{hw5zkn8@GA4O#u4r~^peTkHiAyd4=U211Kx*VTd zVh_(@A&%U6SF9amJ&bt-!f>+9w&ss+^1^MO?36w=7MHA+TVFnqf;RPFvN$tO_K;jsZUdQ|o#u5c$ zN$ZlF%54}(C==s^r)Skm(c)%S@c9rNQ~ECBYl4B15CX%*!;OFhn?|`u|8a(>;O)mu zwQU*M!zmj3cc{s#x1k$W9yyre*f&Gl;b*8t#Vg!34#8IkMQ>*TEEX zAiw?zP0-opn5Xfe1mEWD&LqpSbL1Q`_Hng*a$fhnoPhK9px>lilIDkJf&o7J)de33{#X{BChmgh7`nR)FT`843t=zO zTv}wr@a78QxSiThJ$BO9r9(}h-iw7$|9&cK*E#Bgg>-20tdf%*h)gf(ggISI24Z5y zH4ys?4zpArAy(qIQV0V_SaLm5A-#e7z^ziIFm1*cfPKB!23yASq}fi*>5O~_jtMSE>r*B;h4vNzTTjsm58lhF+m z44~PY>H2SiP7;|n>()q-ZKyZ6?*ri1;k*EWJZV#g{8H?I>GlCeY<2l`ShV%Kg`IO( zj+qJG*Dw<0?(_4gxU$_8(Yp9Ra`oHZMf#Dy~_t}n!ZS&thv+bdP!O62#WfR1y6mEUiwKWUAQ zaip9V`u9J>vIw$|$y$#+Xx0LKByl<07GFR1M#r2tK@uK#q8%TpX*M)tVu9q$C`vMM zyi*G^xu=0@F?)B>%j4uRckmH*6*34)53!v?4u~IJ&1ghvUc2?nfVm`%ilCj@4Pd$g zf4>YC27Dk#p5KJ#%pK^h1q{>jw6>^+PFA?Q2hy7o>tNu|-qkaVUt-8WgV7V@HwaR+ z@k571h1vCwgt;9TU$LG)6E#{FzZRLrD>2D4?Z-erh!no+YW;g-8FJOC#ybtSX(>#{ zDj7|d0~NDi`E#$eU%Nc*(In!qDhq0aZ}7c3s6)}5#ODtTyw?i??C@<>mD*DerCFVS z8d(te6aYj%koc4TbwWy!4mt!5L~mPPYKDlF`Q1XIkz+A&c?^;Zb!v2&LgaAiJKu2T z^8mWCD7n${iTMjAz^Iu%PEgg~^SOEXGX6HG=~+4W_*3qmxSa&Hy$^KsE^0id|m#<1f{O|1(RfxzYj_C1Y{wcKgkpKs2#X|C@g|%CvY>KcjBf^waCUG zb`4S&42i2f{cF%s3&q!kyR@f-WSqx9q=PbC^d*&W(R=nGJ|#)m!yHmK`DvO*WkK(z zDJF0uS#4ygODfXiA~9nKt2+`lElL^s0t{-R2`lOZEWfWpE17{^6GtG4G8X8$V#1;7 zp5|wLX7U6MqD=Z(8#zLHqdn3NgNd84lUN^16fiZ+Uy~)SF+s%Wop7QF)Aqk6k6Fi(slsvVT=}L_) zvhCFDZfb`VYZP_EyNR%rYXGb`zs19ukscKB2pKgL#lwQPN@?-bxoQ_Gqe1&mf&@i$ zP&Vy2y~-!Cj$m6?o=Ot-m6)0>9gbUe_A31VXhGq?rgq%lu4So zgj{Z}*p`X=MLIcFA?Gd}bSXJo-rx<)3?=Q=>cur=j)hBuvkS^=R*kZQeNAV znX~Z*g}2&d#<+)uq7OQSCfi27-1=2hPm1Y{8_4A2RIjGjyu}hoQ~K*$=v2hvkP|c2 zj}KGDLTbD-ck=Vzsyxo=$xaX5SB$Tp8$NS_1Q031?OHp+03CGW{O{VVz=A)@BontY zIM^NIPCuIiV_A~+9EUm7!_}v1Ypn4~N>BJJKoiuLzXsB`CwC+uI-=>NULOuj2_OCl zVcEe?1}W-!$v_NrDFxG%ipv#OiZkSPvUG|R;@~Q1{!xyRd$SrDFFFcJk6q;118a?d zqC;vl2Q%8BB25!w+zm$P*MPFU5eT){_#T#&-bg@CjCG~#4RI+w%Pk=l@H;!|eF4m* z<-t}BIVUa%v`>V>XlZTNR$o`Y!OnE7d42cu4>+bFKjEPG@I_}=ZmqLq z`v*o&rH>~UKufkJf?l>U%dLa;bpzKRmVx4`0Ij(^Ac&Q?h4Op{G+Y%_?!*EoaiYPFk0BI=)4H7!AD0$XtA6_Qdv%9!?V zL|>1k!59X=ZY0|3_)dB;&vt?j@ra{LlZr0qV~n-hp=g`+R+#_U7aydirhJ-J7S%*F z{bv{@IMNsqgp(xhm#$t&<1gLGX1b`xHstkEO6Cki(P6N!lh)D~rk6Z)3y+T7BW>OW zO6{BdcvkKP{3*s4^(vhaABcrW;P%~IQPXnwKC^jYj+iW) znDcvC$}B^a2t_3Ie8u%~$$1SR;`Bnh#a1aN>s{;SS33 zTf7f+!nq{6T4gje{u!4kftP(deueAGaD9ps4knIsVn3jfFa9D(-X&2u0a4vWV&ss| zd`5gdeQ^3mG6lhiT82SxvGof|K4|*_*g)P}hO!x#*OR<1Wu~1^LwJhO0mt`6oWzz; z#9F?eKyv&nBrYR*y78S6C9@Fs8rq=;zN!wxL!TQ1=Giwl zf2eCa@*eb4Da!mtn7{2Cn9#9okDAD?J zzZ@r3aFT7Y%Vg#f%LnZmSqa`lG!~5IJ|YYhAWW}ynhCY*VP@FL;pNZ!SMyux6MXK_ zdZIXEFTT)V%ydbt1&jQRwS$9#vZtWw_hWi~+iXH_?FkAa&%M1i%kB(-_q5zd9uNwG zFyMJfFqe4&qb{Bi?esKs7^z~TWFmV;iu{yWl*CF_vCdDm8si_91q7UV8-|B2Ar>jp z^*wuYmL(#W{%>>TxVEUZxvuW>Q_5xsi@Va3={j=<79(QFe{}5W!U=9^)Hq)JDz+Qz zxDsD74<@tF8I+pGjHiS7HaUm9mkXAPS|ga^dxkpqf|h<{{g?|tVTGYQ0}>dsw$~r2^Gufe z$jZf@4u)I2a`fX^h-J~Ga#;|e)V9ipq_?~L(Nn3V;_?CYzaTr;qF8PU?6Wq!7iG0l z3~P$bN>352cPyb|;mrmwN-;a~d@I z!mZ6c)?!SpVAZpFjFA+$s5sOpMYEL*$i1xxZdXN)UJx~gY${A={_6lT+4xWVzrTKd7M6DtNNk6VOVQmMAh zY~~*R8sGLWQHEYI9Ea5cNIU>J`^ebGd|Go;kd<;}Hi<<7&iCz}a=jdxNiQ~eQ|nsJ8oU}4yGdx0qYE6CqSREbTo@QkKibScG|~y3 z7KT`VQeI!xuK`7Jzh?qne_GsLfKKhE_Md>9nPtVeHT+1j_WbZ_^tZml+KH??tp4VO z$P$`+;eNc8WFF;DVlt2WMC`_8u^`Rf(KUBZlioIV>*v&kX8vJeFq_MGrFOqD@(~tK zLY23Nh9af`X*M41eGQ17c9!f$u)pc00s7(stO9{un9$gJ4B zxTdVU)UvFuzxf5*zTe-^(%U75WufKaM<%L9Mp{-xz&We66npf!prqH)-q(3`k8@PKDl9(KZ{E`Q?S{8C@Wb=ZDs1*f?&FT2e|*it zXr4DxGGMGAa=kWUKFyzw)oS*03}P?oGzQHWQVDrK;e zq^TF{f-s{0R$>5|+}ZNt4{<)NtTskY&Vz?6XgYY-x}Z;)7R}=fohF4S1S`XyYmKvN zDy`7LNippleBTqMP3(M<7+(;TH4m3v2-z|cEJX_4wlT7wC`%eF36%43|}G`T5It~ z3;v^CayBo;5q+R?(!Ub|U+SkJqLv)#5cfhyPE*y^4 zXTuj9r-~ppLKp$VK;Dz37K*l}G=fXsqG(9A_?zEKkmrkJWD{yHFD8m?b+=s`^=-l? zScBq5gb$JMO+gOMYU_08n_NRwk5JRnjTn~1w# z9yZK>L)Y|dYpyr*qgG{SBAkWZJ3%oS4&{5gnPNQJjp=7jL@i;EEdj4TaSK?xX!Wk= z6s05y$2&h5pYHcK{!-I8g=&j>%I@m`H!_pQ4VTrKV}Rrr2f6mWjG z!7Dm9xiK_;ScNSSEAfJu3nE7pB|pO6n>yuJR0@?6b@`_qBz=$t06bgbMRiZpNS|+Zk=b(&EwL0^|m)MS@Hy7O$TBuN*ScUp@CY6v+er zUO`3xn}&ZFiY4-w#32nfa^*xNVMv?P8mU)nE&MT3v7%AjIqgL0-Ko-Ouud81$T8cT zfPU~IX}YDj4l4O@@GPHQ+7K$do29853A8Y{!4T`>-?}FpOQe~!bl-4SgalYutKG<3 zC!11>8zrZb{N|Rp*FoEtYJiMp5ZsrpSd;zVYhjML)MdO zY$kgKfS4ffz+;1zql~3A>`DF?$dA=}R*B{PZ3!y)r19x%pwSO5m9y4~DWgC7oD08s zdQ$}g(({I~o#)ChA*bg0jzwSUWm2A1x9`hc`gBhAgTQxt`ZogsL2(Zg&By(=_z>** z>9aY#nt(Z^|*`rLC<^9=$;<)%8vv|toX z8vsT}-z*Y(r+r?c*)aEV_d?G@rxeY1kq1!Llo2Jqfl&i~2K}ZtZ`(30>rulqYDGax zHORyt{llYl0b?L6>O4NP=|;=Jmb7qDO{|S$(o0JeqB`4 zDgM(JKk6TBDs{ zT6^X*zFlhFl3rhXRb7%J>nMuO3ga;|!|s)j2R|JqvA)>Z4Vm~HRi#L(@zP-wl(CA! zw2DFWUS{VqAHY|^s4Ltiz)ini=8Ybq;R~_dR}@t1&R8CSk5@Sz52;uIl&6mdCNQfq z0Yzhmk&c6FzsDueS`SO_O~pMUo4D1vsg7oM;*(7I$G&< zKJ8buq^&gh<8eyKm5=yDx9ODW*tj6&e$=K#qa@p4@e%d%WyQe<&Vz`!I+Y#To$_IKfY;t_lZQ`y`3!#6Y(*Dnm=a@&cEB?f4Z3@&q?*c_+ zT#t+`=pg_uynUoCP;=15)jjX>%b35RCpHGrPLdcbrw_KnSr?jaCEV~v$LqhRr_p1` z!SV?d59<(;El?gPdl15~1cM2%PpheNP-#uE@~TnrZDV~D(Y0RvV#yIeD4>VeoX<4~ z^Y_LkPbFxX4*HbT?po{SS3jaH4eymKO+@C_WY=6qqzWCQoU*opCK9Ney6z#mYr$EnkcFyG@lymgnOA>n!01? zw;HT$q_O=ANMIc9ij5cP~_H$C< zk+L+&k}y4e{oSb@pXeAK(XNybfv$m5@@%uBY<{gRt-{$EK^sHe{kvpgS3Tz1pSoYVOBRP z;lt{AUlranS|M<#fQuE)31^>XiSO=HZc<=+XUOmDIDiz0Yf9XP}vzI^53Vb^e0B1peJyB7YlSt50k`LcBuL>EChwKH~k1AlVed6#|H zrB>!<7N(Zw&vR?k`HJ+q3;%k8ADjuW_}&u!>_DpZrI@=N;k(>H75NnIEATbAeuU^9 zoasHepNX0NY|$I|#&PNH!6f^@RxABh)bxc}ZNcM+d1{bi)9=~&((~(4eb@o+&RY8P zI^L%`Ing&X|EFL6ZN`n}%9Y zPSNSN-!t@w{O#cPxytMD36X(~1%;7~&6WB6@vQsCI<+^yAfADb9>NzmEc9c^Y(Cu^ zTJ%$~9Dfg<76#z#9D99Z;!N`t3;Qd=iV;vl{FD*!1Uk6Uen9*|>3?=z!(TEbRy-W- z+TIheX_tq}b1VDoqlEb$f3HO`oQOFXx7&Sc<7g3nCQcG zq~SM?O_elRJS1<%*nyeLX#gZ6WDN_V}p}9@3$= zEv7y6M);8)E0BD;;J4`SJ3^S=G5V@k52^>`q$Bv!vi|R*ycfHR9jedcRy$lb-@W09 zPt@hEKp5Ic?S_Tx{(Ta`~3T~E8c?ewFMfQf4xR#vc40SUS`8?@s-v;u|gGG+%RuZ|xV~mP8Mj?`4cbbe^<6y%uPX zh_~f{19YnRy&dL5_lbw)vt4xL@Ua~hK6mNI-xgo!OA%|nx!m7qUsc9$^eZm@kF;Z2uj6_o5!1d}lXtXhT1`EA#u!(=s_)mdM_N^7dZ{IR-)(n` zTFEW>Vm<27A7ABzb6S%v0e~Kcp5RYhk09SOo^9*9@1X>Y+wYa+@0Luv7R&E_l<2Pt z?3NwF?y0iRAdl>Ke3R8~QumDBmk53CZ+hv{M`E_xwEQQ{R$@ue4tqxd-%KbIm=d0bW0IN8d%57v1|tm3O8Z=We@g)US2_NgB7I5}C^**ekLSlHSaxYL_C8W>xf(7QPr*#Er!uOaP!4e9J1?S7s* zTbMYhs=xw4W}jrKadDNaLH#rrcNidGuoF-qp#SV_q6A?A7%+mbzrqF0S~#JEZWK7q zVoB0l1d@GD^jmLjP#?~zi5PA^cxK+K0o-voTtsXndz8mzyM>iAA~(jkkL!?&D_XOz z>y+?o-RnojP!6zG7wlsk{oDkfVIP;_{bg`iRK~_&QL>9kA)vzxrOK$5SCY z&*6A*6&@iHR1;HQkP}M_A{tsS&fM7j=fW-g*EX35p+C;*@ z$=t+=&d|d4KlxGk*_{7p`)`}{GSfqQO7?wZhH|bv3QZ(~D2X*OR>DG6Q)RueKqsQ8 z3n~waQd5O$t!#5W=ps-hakRTI(0Zt5Lz~$p`re!8^}yrvi{n0|W99wJXPT9HWm0=( z(rvn}*-tD1;SD+{7=ZgpuJ3To&+Iq$^sd#kvxD{dr7K~C?rQM=TvNWE|D}sw^LL)u zg`MJH!05mf&yn3ee?77=1w8-#qg&1OhTr^tn-NHnz?g30kwN|A3MuNoWF!BUc3K=- z(;DOPFpMr0FKnWX=tf1<`P3#?H{bpl+A(2(cYo^jD*AjSF_@Ay%+qWYBoTdZ>=KGS zs^4v(9y2O>u%!`-?cM8jAU?B{Uv)MfdTwQeM~-dO-g$StX4DtXxT@VN4FIbpYw>#rgLX$8w#K+vO$@$j^H=@f*p8X>g3$GiuPKqV$-N8j|D znd{|wcQ*d;Y-y^R&Dmh&=Xl-RPCG5(``cq{kgdhRB62x(MR3w`9mt=i`mG~`^%4%6 zdJHSC!M&ANiS1xFKl2)$!`9NdRT=bR$#i{JkgkRcce)Fr##oqwWl zimJ^98#DAVwfLty#2pq8swLOoNg`g)Qm}P_{NhG(R1^>31iW{2BIwC156rt=+nV)w z0Ds-Fjdb2^7tG_gysRU-{RH&Y&lQ<_iv0sV!Dot@4w_+F?~=nGZo}4quLx?%IKq8! z5Z}D!+DkA6ml&d*2z*m9^69gGP7WSaxQW0`LuVbaoKPsMAFEJzF!%*10`|W1lHyVY&_9W$9LePNU7G|pcVNG z2Yzzru4bl1iY`!Pum$6uE#vHF$yR%IySFJ&58gV9sPi26;oER>M>KpmD)b@nOHcT0 zC!6)5N_u;SK2$5#eT$QPP>ys7$(9T39YMF5OrKkR7-jHL&)`dN#o(PvQZ5u7O*Ifd z;dintONeK>ss2}5^E!|073^fql5y83jai}q@_eP(rUk{`^)z241zj89U=MJl*SalP zfq_)}^Q5K2jWqbt!>v*@uEj1ODQ6gO%0so%W!2u|A)=aYA0MObjy5Ow4Pnn&ZA#^ZOHl zEz2*btIdS0V8Ph4`OeYKU1;24{1)?i%zfz;#4n2t16b%e)!me!)cdVT-A!V51yqMW z@#Ij}D$`NwwZDcp07~-y$PLuXTNlAz!-ted!cE!ly36~2J5$ z=-2o-;3KBJajRjtQ;eS@%eB9ND%~3FVYfKx+p<4rV{o{Ml0@*k!-($P{+%)GH72F^ zSR8p<32jKZAI2jB^R{Dipz9X#YsxWH3)PVCX__K}#bb=@1RuFy%L>Vuy=W%j_D9J$ z;OBcLv{4!K6v!{Dg7d-EZZ@RHLe(Epb|k^mEu3A09}2d$rj~x@RM}BJ+D)L_C9o3*J01;MpPkSZ;#O zaINWzYNbqDSvW%@ox*oRy$fF|)UiyTmY=Ll{)zGszI#fuDNA(JK&YbrPNL22x9PBgAIN8Q9@GYt0~~v7a{PnJM#1b{_ag zap-^4z>rf>Um+Z}F$6hm@N=fp;i9p-lZU@B)ql^QWpl=hze8L&fl7F#k>_@3s91$z z?fa8M``SEusl_w`Eh^*OzrxhWRlqw3dHqS^J%TCFY`*-r;uPpZ_711hBQlMQ8@Kz? z`zc~#GcPJVcqxf9cV8o`oJj?KKE_mEeKrIoUbExg2%3G|yUD;XKBrp?`$T+X ztc&qG^!G(AFW_BVKK?qb)b_#0lMH=X^`I*?W677d+=CJOj>1d{-|5uZO7iuz)|Vws z`sK&Wd4JNCWo(QU$7rmI&$QU!=Dq#juVY6pytXf=e>SZoGY?%EO*J;uD1EfJ%hSBE->TXg6MPdqbAMkThhcKxzYp>SSg+ol&xVPvq@TF28sD#mJ4cTCT9t@8MfMUays{X*_`-1QKlWJEDsr<5>+E~N18or&C(;?)M+}-H6 ztj4(a&5RwJo(?RT1MYEN!{Wm-zJjZBDWMzuR|l*!Xs&kU;ye_HPI@_@3;30iBOgph zK62XBAz0@E-Is#P)Zd|T%-6c<9heT}@gop7p&8$uN|=7F)NATV1+U~>Bx?$w}&Pxpmt$N^6G4=v+aI4pY zku0<28bxa{h528o6W_Jk8SC#cNU)!}v6T$8 zU(reh%dDEOh*Ojf1*#le<}B_1E);?7@sozZzq1~spRX^&eeDoNp#O@Bd1O2s4RmN%!Bu{Lcj3=oE)drYG(N6 zJd{o~9>ZfGw5SD(BeIWD$Mmb^kCsZQbvo=NniP!I8^xZXqV($HOn%?IfB@3u*XH{3 zqvd(-k>Eo&(P`EvDGGK9V#~nGtt|LD$(yufI5>&jZP`b6rDFYHgRGOPl|LR@*hw=Y zi!)n^`S|`1(%v#CjxTr{4G`Rd1a~Jm1eZmEg`oN2Zo%DkaS1NLU4v_ISlr#+-Py%i zmY4s%b?e@5_pN$A%$%C4Idf*ZdS<%&>F$U89~+8&ffMOZw}T}XUk5r*X%ev}fPNk! zqYk!EOS;6vuj5hwHr8Tvo22iCbTP@FYaxGi{|*)D$`;$8tloq*TsnI;Zl%Yn#f6?|lFID;tyu?()k z%K4l_vmS-;ThI{?h@>w*CIT5NCF2+JN_L%KUrqR>AIJ`c@t9`@hMYeOVSy#Uzh=$_ zS@7c&k4^obxXK6VQ~!dFV>ws7gr)0wJTm(5WU_rJr1y$CWUGWLe(i4i+%6Ua7ll64 zXmjeF9&r|PYcdu8D(2L-cK{!DqjS3~;7TB;77diDwPxMzeu}o>U)VKj4V1lGfDn|H z_EyAoJbE7>6bi;VmRpykFShzq(Enk5@lO4&6E(nGgiegmRZ+l6nC5QWZ_x9sTeYq# z9as3;t%suLl;@_J&Vt$~ux$?%It}!dda5Jd!O06|aldsfH)vfSPQPd7GG_9SzgrkY zi@eGUJ}_1x`g3_t!GqoP`!9>tVp-Gx0Dx(7n(}}@k;#7%|JLrJh^er30|{+w$-EmK z&yHPywQ+qXWCcx4cZj8n9c4U04rZZESz^UFx4qZg^#reH=nSsx0H1OL;}e&%;sW5c z;8+0FKm4q2{7=tjHWQNMA~CHr$clSndNZ(oLNmvS*#6)x>nG;^Q^n0X`^=#Ap)CIy z(Nu{cvQKF?BSKW$R$|=&0pm*A}yzMzcR+t48g#D?j0b;z}TBtiDLkpE_6 zpS94V9dmi;f3FOX@kxnkEgNQ{h1=nGd0E6F2Zc24|8Wh!8TyC4OOxiB443bE{K{T~ zql`bwQR5=!tho}T%3u3GH@ds=0U>B!O$&-d@F}A8O=g9wun~I5Llw^KGkUCx1@{-KFtyhW8#rjcwB(VCt-dh>A z-NDu4C5;wm#=jU-OLpXL2tT1Iji@zqf=x7jH}ci`kRFq~)x<`#d$Iiy^Y?)*7+aM__GP=r8QKfQ1qVyY{IML-mR{2 zsUqsV>=u2$T0yk$W~7$U?o3u@BmNHGz^K)FlsyP@>4T=?iZmx5v*rY~Ocm7UPwZF2 zHTxsiREv}+j&!vZIm>L~&^cs$!eqzCD}K1zZsq+?+St$m$=-5}j(!=%QllSp^yX7F8n6q=v4q+QX{Q z3#r+8pm`Ui+71@~+~vRA*1nf^&67|LoUY!^F|Sx9E%?G#2|{g+pEASGDRN%iM@449 z&T&6oT8(v+H4E9Wv$*0XZ_UxnGrfYx zR8dni-hVNn&Ev~F&I|N06R&Vpq78m{{);T4A87k6C-S{cH zl$AswCTv9xM`Qq}X(J1r<)W6a^n*Q;duE(V{DaU^w%R1V5gyAexBo!fGDP3w@LjI* zN^h2KuZhko4!sYo(9$nxynW`m`B^8{gToptaeOgj0AxJDc@lJ_rnUcM=Iz*a2(~DK&AAV`Itz%-UD~KkF^ho^1{ zPwP2>95>0Ru|33%k5SE3l>5ZuhAG_7dAXehqfFSScG;B8gdu5Q_0gdqQAdi`4+=hS zSSLSEL;$<>HhjOx3M{Ux&_0l_4;-b*7Pp%<4f(r35C1w9b|T7XS7d(^GS%8>)l@ri z4r{zkyYltwo06Nmis*R8lp){9l~_7L8e-D~#@@;uzI@@eogGbHAN#>QY6}T0PJk_y zg+Xp}E3TE*8@bHqopK5}hlIFEC6KtLhix%dXrJ6eM)`$XD^%8 zfp5X*0lB(Ry>v6B{|qe1Lu>5=-cM2Pgp;AJB(=n+St$A~S&3WU#q=#Z{#70SbYTN> z80oj~eSC}`6-1D!JQ=Ra8`m329Y_18n(pEZUELy_FPwoe@@uO`quQ9x_V$lf_$JmL zyq+qW8wFJAI#YEII;^Imves&@V*&2Ae)Y9-#+e5}I=YgCk)ymBgyV0Y!z7ghc-i%l zv_U$TB6vRg;o^fOXZmxvKTc<7?lo_SHjC%VbUZY_bU6uM?B{9Xh>SRZEW-os*<pjQn$N1HbCz z*CqOd);i2%E3EG>tWy>ExKv>(xtaqo5mLTpWd$_xql{s#S@VFf@p5y0oL9y|( zgD<%JKKRE}TqOO+A^vTXnsyu~ z+LRCS{6D~VD57lL^K6u5uBv6>VfbvVFU7PCp1zxtlKKJ?y^+>z(h$93WiM|f;wG=d zi`n1~53BcB-DSfn4=DOZtaohoYGUrMH`icNlm}=ziXZRt-d6nZKmY9fSI2Vf5UQs&Z=|C>#@R@jkPk&4$T4ku9lm)rImxE4glB1?IgwzSreY(%b>7c z%~g+~U80TA{miA#pQ@kG^f4}f7SGmYV02O5_bN}T+VU{1m$DfO=N7*_pO_3Dx0lYs zvu=v6m$4AswV?BzUjKCaarOMdExw?w?~BQ!r@z$5w*D+tG4`0+TK9#Rs_*IIig=s< zt|4oQ#J-V|OUVN>MV~a{{319v#K_wY9R96Clb=jfDIubv+QI?i4bz%>WyXYHYb3w! zi)p#!kHY#s)*>4+TX;Kd@srD3Xc64rOO)QN|GT3%Y#R$sGkfHnaG1;2Uza)$Zko=K zm?%FpT&rB||7+^4IJYEHjQ#71@(7~|%WHAxg2Rq>>KKW8)Zf7%tg|H~<1K2;PIC^P%b z^!9Y#xkPe~n>M-mvQRHo3d#TOcybN42u{kh5kwBg%6%uP`@rS1K;Q3m+al+}StAxV z@qjAlu8cpf+V#O}(caKO#fgi)#QOM9>LzJl9GNj@oVB8{DD*$V_MOI}XbB6|caTZ_*1Gr?v$GX*;_Q=^ZjDWNplzo@<2uBcL0*4Yz6oy|wW zLDjZc)(=D(^%$<#lL=s&oV0JuQ+vgA>+H(?#~KOY|4AH1<)oav|B)FR1aL)*8`Moo z9tRo+d`wJ0Tq8_1$F)k@Sldbel`kxQ@jrik`Q9fJyExjqXRWq4IRO@G)V$^G_nCA)il|t82xNL#@^g>_4VWF9x!)IJ_hV-)Wy>Afa zcF@O3%kRy)uO@VbylotzTA_#99UZEa{Cx4bb(Ng>B6?t?H z)?Qdeb5DLp(>9uLd{%cdUz76ncaLnd=L4naAo`2mewEkoPpbQ&aqW4jpaE--i2s9) z5bE~rSP|i{LVqJ(z&7UXNc%HD*4v3I121Xd5H=POe}|2NM1WJjGt`$xBMHhXA68zp zTrb;@hz0k!2zww0VBk8I@XP=ZKib;m!BLZjF9jlo*a~Pn zZL@XNJVaxaPO+(kgRVzr5`0lDLE|ThA}Xd9)k{|4!nlR4*<4VH?0PxRNV?qmGuNKz zj24?X-<;qfD2aVDYL+6glbw}aBU^RR02zoi-szX@~fzf}=}-)7MTfhVC*z=@Va`pxrZvpEd#KTz<9*sOsw+5Zi8{=ZQ0 z{}%?uKSB8L{r?mO{b_IP=wj*M`oD#Qp6es);Z5L99USK&)fp3h`hwn;ic$ zIugn!A=JD)c!Ezpnjg^#SeJbq{w}jTqJDAjkHuu!Z6DjLqM{DLyJYX$f5^N#h#4|( znwXrNgdRC#W0hiE5#Heey8Axx;f0CvzFXa@{>hXFvQPiN z!%+<&HQeNF27c?TaVODs^T3HrNr4;-SrCU@#QZe6%Fd0>w|asB%s}m3dbR9kfRcKfvWGsFX$Us9=m-S;a>;sJ)^fGtf%@khMZ$k?k={>H9*$v=eM zt|@A469L6LcY#yvvW@UpbvcsY();n&#NC+^c28w3x{=()`MZ+}4jZJPhnB1$Xips} zGDLFi15AK+SlLRrZ0H7ITO*{Q;9YS#JOf;&j&QcGROp|$GS|UJ3;OG1!+377`$MPN zUY$>5=~$2L&*J{u{cA2B)m|8zF1#dQ=>py*+kZVi0!M2Su#WtPt=NWFD&xYgPAcFW z_%^*w!fE>zF(n=-csKdqQJ;OD{t2TT%vGJ`j4+|1$J5EMn>1gbDi)nRx~WsVv6*+@ zgE^v|=W(C!x*hUE9u|GfCVOPzK?a|5C5i%`vVS@}BlAKZZg3$Q$raRTH{5Er+v|Za zvrq$18u`x3mvQ;Ul-A^6m8&P1=kPCG$X9~CC}2WQzel%TqH*=2e1v_*N?uQ^MH3oN z<+l<#pgYG!n|<|ASn$2lU!*4%cO{UnoeyO}=OrC*a_6snD$UCh!+to#{c^M!iT3Ad z5KJQHI05Qq9hF+-(6)>6*rt->g>woYzGV2$tr!ysu}GMCMjYDWh2I;{-oyoiDw}VP zLT(YE%sz6kUB2huwlNOkz=!qG5GZ4KLX0klZtziD2i=pxsf}{^(&e2Q)l?lh9q^>R z`EGVMqYLTENm|ao<8A=c@71p+;HZL)`f04j`rc2i6NbTgnc}F28{2uF*W4J3_PD|N zm=i*pKHQ$>HuqtRI%}U%DH@Pn;`V8HYNQhR=?diV<0Zj2_EG;4){hE>vgFROD=b3kjD;D<#_*Q`cMUQbY;$?(*Y5aF`b7|k`b z7m*J5$GGJ^ZWM{&*>yuVy!CJ@zY%`VD-JUEmV(tZZjX6|@xuX@)Anl?I}BSE&YV!T zDMKLc|75|*O$HM2~EweOhL9tb&VF*c+$Ap)$o<>rfIAsCPQ9RU*KsVNd zBKHpd`p7L5x~6m3FwgiwtbXCoevQM%+_lE8d0zO;03J19-s)N`n-XA3RIx!0UV72b%svAXivVj7MwDYu?<7R)YfvBcNtK6ltFmj|-9EL19k}m#8H=`dP7uTV>_I{OPQZ*OS+1`48+l3{RP~(Xusy{4au!8$q&k zfB|~lA}2app4 z2@_1&BtNIywoEPpIz`_H0ZYm!#u#tMt2O9=KCewtLRQV?@cY<--ahRX%01arif4Eb z;_4c5=+$#@>QXG+m7yLf_$YSW@1pA-dm0eMAO&mq%&Yq!KPmd=RV^{tr2)aWw3I&Z zfiyxMR!tpadU$u|Wv{BanDJvfIE`8C=4LG`*qJ2UhuLinyapf^`Imp5eEmnM|1nWO^98J3pKN!B= ztac-Xh^-uc2V<9Gl>PD<_rv$}zsE@g9$$}Oy=eL&ln^>UB8>oSg(`wI`!9m?fYrcY z-=Pd%Q3~rpc(0F+Z=%pSn7B+~Sa$b|p;i*KFlH0W-}Ra_f6C%r9*MEBNiihB{(C6f z9YW8u+ftoY-rcd1O}+jCzi^ixb53G50~|8Yo))FtC!^LxDXzEr?%Zr+CBCl(c^kbt zA1YBj4e5(*a9-;{P(`)~E(sZx49a~j=` znrilsSLp@VPi4Vk{;_|X5wCw@HqUSURxf`7h zi^|9TtU(YC&zvIz1L#?C$WBDyMRKw4mQSYhjirzlP9#OJFG6@AUGF3ow&Kfxu^oY& zk+pa?t3#BKv?&$koP#a);jD~H^i`i_46wthVKq0c6TByA6KxpeQgU(%BM%V!W7c(g z)@`Afa`0~jcJnaiVJDbQS9iU;<2T7Zj2zcF!{~HxyGWpXWj%Xbh@F{fA~1B04m^`J zC!YswstSg3Ve;MC|4}%Pn*vF~<|SWsQlG}UeaN=Eywv}N?WKJ_LlN#sBH0J%08Q5_ z-7~v=R{J2s|ArJ=YH}_=ypWi%Qavpp*t^*hEruL7zc1b1C19gldd+zE;cb^@7*xlm zQ+l7tv;AsdA@AP?TRp2PRKjr|-V2W3^1DdOx^E^y5De!F^i`HbAKj^Vikm?v|A{L+O9=@`#dbbX5_X=*6WQH^?% za8Zm7U{j>3kFZf}1lrCDcVEpu%xygL_ijV$7{Xn3^Ei}Uf8&&>;@w8>L0Yf+GdhQk zEsXl^j$ML0UfYp;L6xhKX}OMKX1O|xK<(2A{OcS7mA9>jmg_G=2IyH9t=cMY>&lBh zFw2#BTPlkmgo$tBHjdYrN%}uO0Ev93f>+QVqz{B9;XyXs6yV&Li{vhUM}%$%{*ZmZ zc~hOjy$2(;XB>|nM_dW3HR#w2^XGMkVDeGjO)vwNs<%P_v^0O?vE__qLJW|J^y#dC zdjBD}r4-go{0%_1jP@j(VY{&dp&_|eyo!f1c9QG0^~c_Sgq9)2ZvjVF18}&EHk{aF zf_-aTs%n}Z(e8yO8UG&ThD_S`y@`=^P}&hAJUK1!HlFtej>jMYdNj0z*gr*k|Yp!_V~S%@#o32-$mSJ8?_>+}XVNacZa+@e+PDVCM8dYmgSgMRk4+&zi>NiueH?!Oh)~TPE7=FY%5D?FnWyl3!v6o;+!_tapM*2g0cL`Yl!Gt(6Q5{DZ<`m z{SNiXG!KY`Itj4gHbsBbr#pok(X7f`HGUiA9qE4#f)Otq&%IK*>Z0Bfd6?kt4?!d+ zHRl=;ugZ`f6c=ht`I?-xF!%RE-m@^Q9p=3|B!@o1#%HEu)s|Wy|CVM8yD7vg^YqK@ z3BH1nRtxnJe=oB2sQ@vCjOh@BEMbA8ye;`X<2cFvA-P`cIm%P@ z7){etdVupK#{SHj0+?4FVfLZ9wJ9U5d75IeWBujV{tC}=3@$@OJ zr@x>G|4Fpxn(3?nTkjhl!cnji_!jG*!NCa*1n#u>OOoj#$z^#f_Vt?7OTM*Rms4Ch zBaC)&hH?0cQOriHYRqW5+Nriv9es&S(BA3;6jhJZv$|$+M|?q^+#knXUy^4SG_=8I z)r5Bp{PywSs8|}?bNGhw)|kW7|45&xGap9Nz_I;(7zI!*tyM-e0mJJqgE8FDa0ys8VkSFgH26~6LE7sJTOMSp$z z=T_~L?OQ;J`lz`_4SMPKg2?{DJ@epetgxASNaxyLb(zjxKb@x3eW}vfvCJ;A-+oeX z%&jV%I+PK9>SJO zt$K-u&A$L=qEc7mNYKtP>Nf?-X7|*@9>E|N^qilkZgrv_kVw&CTk#jEHoT>#df{^AE0Y> z2|}v*6#?1;KRo5{?z`C}42pQdxD!Wce+IeBW_}BHzX-oKKmeU%u3XJVIsq|{q=L!U zgqlb#y|6_9cc}ZIW3GOi9Z?h5_+PlEP)4^Q5bYEQ;++VU`CHnVE6=+PlCBYu=vs`y zhGR($a6wDNex-{!CA;g)%l&w-NQafvKvEO&y8={#?j&Z7@j4X)0h=7TDSkXdPltcS zRXi6`7TRG)x;VfHe4d-WEpTX7{@2~r-HG@>-iP_3JHGmaVAkdckCfzFcwFowjmjV3 z*PHHu^@QGZMF#Z@hovoo?|IFL8%rJm7_GAxs z*NpjXB7rFZ)&C$DQ-c9O!b#n|{`ut9F-qxA7q1_lENUo-+K*F^kB>;Fv473F%e0qH z)&&P-Js7=Z>MiRExN`}iia0n$?`N|6`ZtW`bsFXFHqFsIP1s6ecdT)dJr>4esla}z zT19R!`qDwI_}&j>Jw=azATQkOwVs#uL*Da8^a*7=Sizx+A#d&_kMojBNScH8wOE1l z)oDIgk}j^lt?BWDjgt$wr$?V8;DxuEOC&Wt*Hb4IB9Ofdq|Kw?1VY!BdAbmfDffA9 zHMO+b4$0at&=xr!n8`TMQwawT-wv8|nqsivgp*wGnktGZKv!8|F9E;+mqXtDwX5{z1{a=M4j14-5>z9`HD#aw zQehdpkVC3#rq`Whs{t-I3GV7nhtPUWc=A%=QA$b5XXIDsSoOxpS>($!$29hI)7?6c zHC!R8pYuBoz7`9ytoJ>n$YT@?4o`x*liO52RKEt)u7&r$RJwB|gi8JJ!TvC1(Q~(K z-;la+Hn$U!HFg#ceeW0NB=)2flIy}fe{_*~`>ZZ&M_Svbs%~lc4|u!UL)D7c5+_C4 zs}lfaltxAPC_xa1>dDgF>YcYI772_m{?afu7F~FDm}UR*+4#ge z(cwt&~J<3qXs?X`>mPl$F%uJ32d25zLXo*>rT!+Hau;6A+#vp zy*#SS|C&d4#O{?3cy4-I&xPGr#t}i7x(?Y`*d$8NkTKj=V`(j1syTLsbQwh>d#TrHIN0_eln@?0X;tms&zmsX`c~ZwIf-BCF@0wm$Mp}6IEn{VK*BQ+ zd*0vS!)|{f=Z3?A{-lwRoTsn&VDySbwC|PJ=Rf9gS5c*oDD=4U9@u&f*aB`SCN-We zN=ceOI6M1`1CDB~^*?g>V&UE|i~M~Ei-An>Wpeuy#RI>rQ_9X`f93rxigH=iGR7h4 z-+!;JhwZW3^$V>7nKI$g>!!-$U&PBT?KN~akyGkybEHDB-!}}hXx{AI=N&}mSiPf% zPWMFHE?~H+OP@K-gPFJGS=2Jxo=Y z`#qaUjxzmIbzrRQv(7%w4X4jeo1?x9L*Z#AXK(CmxPN)w^QGj{dWx^4zh!Fdzb+z? zIvK1qfExZ{pxeaYt5%Do9O}0 z&F(5CAKu_tCG{Sklm~{VOWvcnnrbIsWTGJs$Mp?G4!wD4tRT0TwBDOL0glGCdnLTA zxcE{>QMAR4W=?yLPyK}XBaWRuB!jCl)tQKch`fRR)Kin16py&a{ZIHe682vGWDiQH4Wvfxtb`nj4qo z3mW-1`Ig0t@i-(fdHw2ND%0W6#uTzl+1&f^vUXT*xiNuo&*;IO#R!9wAoZvMiuY5G z2R``0lEP${C(gy!Wpe`{>%hKr=F;#GJSRQbRyu$Hz&CVfl(*lX9OJ2g!)~5Z(Ec3l zQFYoLqpD%Z<6*418}_ZH`!QT)ZGe}3$xvpQ4Sfejs$mYhv_KGxMuMVFU!qmKPTu!v zoec!Mk>&6Y36f})bt=(JqNh)De6?R-ll`+G73p#-?YT)g)%^Lz=YjgXne{jo%Yo0l zIE)kL93+=y6`$*N|6_bgX<~u5z`B0JX<$EMz#K6Nu%W_n;pne6C^etDtZhsz;mw zxa8}TSoJ#a2hOQy!T+zHDU5^-Yo^D=xAaVJdQ5l|F))9Mw zme){uf!KZI>rB7YN&X50w5>{fF()Op{|6kve{~^_%jzzyy}|p`EI0UJ@Tj0AG6rw7 zbL`(O)-9pd?~P6=L>l0jM1eSEphHA=eX19>YTk6;>>R=yr3WCNimE@665ouOpj8)) zK(|f}&ozh_g-C5OCZ3Rr=($LP;*+4lN`QnE!3GV5gF$Z+0j}tupS`ru-Ye#T1fD2Q z?=$Y-)}`Tr=L^071z_N?!nD*j!Rf*N#KWhE{$Zp!F7n*;bvu_xZR!DWG6ifszI_mb z0bp5c2L-Y{|8 zPCx2_fmst_1OQ3ur;YgLa>j-_!ItsfuxnBW?#hi>jFVm8HLV<$PbjO9k7rMKIO-9m z93FIaNc8%3Z+EeOUt;}c6C2ES_b@=wRaF@U?MS5(r|R`z?NcKo`r=He)%*G1GVo^w z9WCAcfxPD++18wIyxqM)hWj(^Z7|K=mtf9JveUHNE_4| z%1C~sGc^9jCS(VLm+vp@PPO2_^FB60nbi()1zf<`m_%yt($ zN|!Rcl>PFdbF?_2s5|rL=KZcpLmb^$>Z;aoeH>P7)7NM}t3CM{v2xC`QDaK|I^s05 zGxJ4HNc25azOE#!$nTpu*m2P~q*R#oTLR0tB1I*#lk?$AC|X29phYm9fEQC0*7`#; zJR^Iej3L4e;Pwa|fweslbUB6n$=k$%D(t$l>V|(Zt`50mB{v%6P9G34v{zJVpgbX7 zRcoa+E{;h?=WBSCs!brhSChCDhQBw(`7--Qsa@=xZ%pt4Qg)SN>%^iefrG9_l>D$qph#+5_C+~IIJnV-zeVB zeB-mp?T($!B9#LDOEhKHgR1@%r@g07mr{TAjJgp&w@BLsuy$=`Aw58Mg-8exB2O)% zWa9WI8BZ`ti)lY(dH;GE+{{F&{86E+My*gy%e7Hx!P1G5^54h@m8 z1R%~eqt#*8QI)shs_%LWYmiK|f_PBJ_=ZakIrEKaYqcrz-62GYLa6QAP zb~-LY`plxxP}9JP%d`Ox_v#VBo+&R_R*ZWGt*?vf&&{bEK>Ng*&GW;v?#1_-4O`y6 z&eu}=Po^mmx!tpIl(Ed(YJ$G)e_zXEHSWfhy_9`!W9Qmm6aR3(2`iwDdRe=Q;pHt1@<%?6g={g%bZ zb%YCCQBL!hHn8u(c9!O2Cjqy-#mHph+>iaXs)#Nj5xNtVk@2k2&4r5oyYb&mYsDKs zB|*e%ZfxlEYc8}*^oPPrnOc`T7&66xGd6EzSC0t3Js7(3NWAsQ*eo%Iz>(5Ju(&=? z>Gz^aZ~o_wP>0huSoK3!|2M7lDx6Z0NreY>U0hDkNDMfHqZE<7_QZlybxeZS_~3KA zT#v-ARxRL*BCzN`u-x|3%f-r4v8*rs2UxEyO{LgUI#eKl_3~OqJeIj!zyiembtDw`b5f*NzX0}aT~(l+WfXOKQr zPKoO~8Vv!hUzQ3x3&LX5_%H7BEgmuB@#&YynIA8C5h`_wCFKV9@>Nu>zGz?rF7HOq z#^(>#@`bx57`vvDBQkKfs zBxB6~+DyT>S^4^StNiQ#ogDSn+o@Q^ZeUgr>ggPv5q@VQYTp%7p%^+zIKHrW7M<6M zU<#;R4tl=cop3SRDE%D6ql@IFysBW->GHsB>ptp-3+IqXmN%(!4_D4zl#&u$Ykkeu zllqLgi)p~lWq4=A6v$FOn>kCdN>rF3kgpepa25ezZ|%@EQO^ZQ2AiOTxz}2JT+%X3%?nA2s#G)>8RtLW3~LE6Iyt%>w5~}Z{sIyK_I)yo4AMJ z2=B#}3X{l3w5P`>8i(zGA&wOWBEDd(wVY8qy8jk*v{@e1ASvEAPecb6+Z|@ejZs{nCSt3fr46)P(Z%Bn0_r^PFLMbC= zI&IS{xWDEb#+=ahKeM1!3#g2BL49zdEDT|+#Q!PpQE}fxfPaWodrVbmJQFSOR=aG5 zUfy`MbQJi-tn>&~M&p8Ipch#5=*q=r$#Ka7^mkr_tCPUHMsM(ZRA5(FR0N9iZz9(B z4go}v^ZUVD7lY18+b|-V4(j1c>!n!b&lD!ned_rbJv3ZOE5RzgJTJ$OFxC3ih#SEx z_-`@#(Q-BSo%t^N8=j43ns^v`WqY)kvm2w z`#oo7(^}|fA=S{VNElkMH1U<((LYVyi5#VZ5nZ97wX`k!+Oj<(6P*4OvE|tx%+>__ z#jOmv0~6>XO@3Q2kEe_cg32oY(p6acyzK-iHJ;P0j6C(r>5(~QDhdLGA4%bp(sv93 zdZZ}I@RK~XR%%7h{3C0cRO@D<^a64b@4(Jd^mYpl1`cqe;`sStU*X|`)!m-tAeYH! znNb@fl@Y5#1Vf3i;e&onEgaQ<>3BmY(t92VV$$m|QIqBx&uZM@{T1J1IUp+#L^!a! zjkz{WJ!T_!omQG#f)>Zy_Dga|QMXlE=D6FGxmlItbDVVQ&)U=Yi^-tsE41b~kYm1b z6s>E~O^U^{n%rJ7En^duB|Zhe7IdN=V)rUTRBSYsfDjxyn7Isy(Xu9DWl~~F-4SNa z{a_5pCq2<|#U{U8(Xco$2@CcsI^#r+{M!ltO6TD{$955tHNF`3gYwrw{J)k-eYMWi zow~=WE#HPda7P8hr-PoBwm%8XRH&ufF)aqKo+7K<2J=1>zXfN+mLd(azV`%~!v`0q zEi!Q+jqU0M%a~RuTUi|1t{HpYS80YX;zHnoBuZu|@cOg4TuBP?7CBK-SS2=rQ!N z2nB#jX+3@yG1R$4i(jZ|`~!$So_V1R;@REN-7jgd={7am9-vloc>sI?gt|s?`63B! zaWgT<_NST6X6=0`6$v}@&ZS?fiJh-z&}s%+O^|5TwSqBen$z$nG~0wHW)o0qEkCIM zdyO*#t0mTIasl`~Te9u`>>Q1#=(i1xh&5v?OWnWHoLKq}Zg`}o_)bg^MnAnFBB3|K zy-Pf{jl%gk*GxQ&N-V)nvOES*BEcqK+S_NMATvHy?jJWqx;lqg=E_-%cA}!gsl~S& zLenTq@rT4--+7rJR&<_ydQm?P-=EUC$LB{!yXIWeZG}#XaV=DRC++uKL@}J3C7>*m zg7BbhOy=pjm#@R6W}%$b?RTMuK*?^9M$v@#Ous@+`#GicHD4+o6r~lU`m8aLU3l19lWRLT%Z;ArINK=iG z)DAVr@l*G9QMWnn7tu!D74U8vF~uSDw5cHjAWg=z>eKkBKbiGXc!bJOI+RWUdTOmY z>NPU);mOD71#2R?hq6|4W7@uIZZtR9%`>2pEGIAG`fJf&M{Btn{XukgZoir*>ibC> ziji4b+{>}y_N3uq^AP;2F`yRe2P7ElI&ShjD$un<%7`9$Z>Q_5v!&iI#9b8K1J*Q> z`SZ!pfS8E2)JalRW03SSu|1J@h=Bb|y{5p^sMo4&abrtWVw9z1)&_ZI-~-ZJb$~+W z0yFa-&EC|F-%kXo__*KP-~s-L4b%(=J_bH-{zW$Z^O8r3FWDM?25&^VNiM)k}pFh(tXRd!yF^~!dItRC|Demq?Tmv@ zP?&={cWJ|`!q|p?B0ECh+B1y9_+RlX*RN4Dhfjnzsc}nXejDX3Ra})gXdtt{8#R&o z=L=lFj)<~Q3TPy$*WAb;3^t9Ha+t<>k`@ffRw`$LyfnHwf2Dr#Txxwks#W}YdIf*1j)^?GsL3s~MxDv=;_hFq4pqGf(Kq|ZP-mBLQ_W#U;j(Fm;3S{H} z$MKp=ESIly%GD%(J^QzGjgG3k@!W5wo0Q)FWhSrj`=V(hJYyr6C)vCbw~X`GaH`j< zX}KFVEqw`oW)So_26ymQLj^5wX_2Dmxl8Km~Gn+(S4_U5n594i$H zcC~0Te=X%Pp#NdX9-t`cxminae?~KBV|&k*z?DCUl-7OU^9IV%sICkCnD|nCj`b%6 z*L-HD!TpzRAQe=xMle(#fSpG`q_kx#^B0cdzb1nC$QZb<8Ka1U(cR7krewgb%d=so zo&XDZugKgOgKRi(#Uv9%yohPoD-i*Q!BB>9w$P`%g!!Yu|jPOl;ML5o6SJp7{a8qLaWh zYtLkt@W4Ev?SM`BbZhIdO!hHb$Fcct@>$3p5i`*<*yGbx_7|Hgb<-!sJUT&!fAwRN zYWP2_-7!4XBUv$Xtj}TFIZ-~g9dEFs0*Ow$oH<~b#^$;6bR6BEITL zJsNzZTI=+?sBAMklRhY2b<42Z^~4>HejMed`g(+uAJ(ZtmtFS4Q)%JI?qp6t(*1zv zjff(`*)U9a!{cg$H+wa0rtv)-Y`q{@{$%MH9X6DtGh92uOzFOs zeU+6zxW6M1$f+LD5}-oD9!uY+5Rw)cxowkS%Pt!z%{2Muz7$xEj*FUxrtNP>-;~!l z9*%DtlBHZ1Gap@%Fh=Jbeme-{{*s9M5}jSy`pqN@bI0*(qtmYST&%n5Iy`+I#Zc=s@O9L#5V(f5z{1s{s5`QE5ffdO;3ZfUu|U zZjMDJGQIg#`sy8CjgOfp=Hf5=Oe1qr`F#IvP@uc!~K3O;mR~HI(u5J`XD+eo`xMh+iJuVC)v_d#71iVV%@6cFOzDMw61({l^1bRv(3Dzz+KIv zocS$hr_`7ZRmY&5Dr`N)@DfMJPTgHXD)tZy3m27B*i3|&F)|vwQK~&qSQl7sl2SEu zU>5C7bbj-Fy>YBoi)CuH^y3eQui(buUHoEMIh~pzm^B0EHjJaR$P9Xe_C0`E-I4Xf zyCcs_>0A7*5??-p*}wukQEe)#l+B#g{nhsSjbt|Y=Hz>kcv5_1hcS?lKv7^<(bm|m zgQ3Rz%AC)}B)mqOFIS-8SQS3J`yq2eARlFJS-4)RF~>GeRF%>7l0yxO@TTVym5#s* zX_}mLDsNY=K6FM9AnQkC#LwsAQIL5|rYow*JE;<}C@qZ9ro$Vx0r*Wtq-B+o>l%_T z(^~be*M#(y*+?^F4S&9`xmFUgkLdp?g!1ycl=-t`>p8{-X(N~CL$KK9gmRkMS6e4H z`^k~S1Z6c9UV4BL1#ZM%ypFbRW22=NF*QbF2hmwVFu8kWPJBuS<7@Owf)5GSNB_?S zcd~I~^oIL<4=G7mgnHUpyVEzp+Da%l>=x-TtA#}0X9nEjU+N~!HVSP;v}bMK3J^05 zGV`hyg?+wA0z~pLc$rqG>3wIq7oQ)*!j}}XUd=FOlH8NeRmr3ObNpYVy;F3pQMWA^ z?O-Q6wr$(CZQHhOXC>LOZQHhO+fH_p%75zKTdm!D9;#YBtU1@?T z(uC3|GPy`l|G>QKfX4nJ9qyq=N|!xSZXD6yhjTNF;pY?UT+an?s`$BJe`N;T*4&S3 z#4@*?156XKfQQcm%WHwmREa|$%yomHGfaCnS!2^Flo%8da!U%upG7sX5LGVI7x2`z zL9kQcB|zXR=BQo7$CLdvs1c#V=5n!G&fs zfcdWyfm#mo)UVOEdy2oe0d5br?QpyzJws$#1JM~ae)%JmThGWB;PcA?Ln@PBNlKj; zt54LOYexU{uaZO=f+Ne`TaGepYa!s%uycn(8a`j#CJ+-Dm8f8m#L$*{A@iHe(fz`04KI;}CPnV1Xq zU@nM-KdB*WJCr`IPZy1;%Py8QRK_D2SW61%Nv-)~&*Psl>MSo=mPLnCn$G6BT%`BZdC=6uQaU%!W^fQ9{Tu^gP*N|?*uQDO zN!iiJQ1bUw<|0w>FE}QRNfiEOfM(1%n6=sNIp%t&BEp78z7LyBw4)2(DFjZO<4JtN z7)4^x2@EWR!%)Ost>xKYjluv8crK=LuNW9gO3lNt-GC;b&gN>7edm~9T(!!~0S z#;*eI9{-1l9)qO%Sw})^&Jf*R>Pyvrd=;<`ICG|Ch{WF}CAC$I=wyJm*TBTNCS$C~ zkrl!cG?*n^rcX_oA%wQa&d<`G?x{a7ZUaVq5+7IE%0Xit>28zq1%44y0*{GQ{eg3Y zjq}1LyVk^NJ9YcyUtFp=@bZXNH4`4SLPzqw4;QFcd|t9OFMFfUZkLw>_xKNUHPaJY zV1ii{*-08Od+15ampuijx=eKO|MsjZRSXyHW&i#G5e6hgNsG`@z948mBP>INmuICA z(?G2q{7twL$2rMUn_1*K`Ew88X-QY+E(>6+Al{9AMb4BD-h2I;pAQCzv47ISrFX2Pn>W?c>Q?ZxwUwM;FUX$^r@T>?NPrL=xhgVObDG))@Dh3}VI z0rY`_C<;O@gNCWWFRN!5d5%=Ive$d-0NYeG8Njc>DO7a_j}0Yjx8)=0E)V7xLALD_ zBP-7;Neov*>QCR|9&^}xsf5C0)Ap27uv?itO=a-IFPUeSP+&eulAM9Rm|heo53a>} zETSI1Js$M?ORjf=Lnp{GY+q8Od7)LrbNW2MhJ^wsDMkIT@WktE9tM%!>iXYCr5Z%f z#2_eA<20~o-P4CoiwAon9*X*m5@#4A<@o9cqXi{GwF?;xf)HQpy?wvO=NMZCY)ycu_^H!pcDZA z5=(gh7Ebb1kvw`v=P|^KpF!0`*VFo#rB`wxoAiT5eG!&e=Y$@SvoS+;h_RLLDOP*e z@54{oVp%Goaj8g})wCqof;D9P zcJ2oUpJam$E$Lg3y#A3LjoG}qx#sxwii}**-X(J~a3p_$#ga9Y3V{y7@8L;&=Q-WY zX6Z`>%PO0 zw*{naf4Eo1fK%nW`B&0))-2MnqoppuQh5xD0JN<5NsBi##Aj z3-`0q>tJA1`w9Q6TJQ%W#ZdpBqE z-7cT&zxy=YL&W>HO1ORX$xJ4o)C^y&vO{dVU zR+H(8TqcfQZr4WsJMl`hsS3?moHMzNaukgDjF$saY7q+-Pgim4Nk*0^+?kkQYPUU9 za|m3wz>eJ}>+prlQ`+1@tn^1V{34w7?D>RAJL@DpV{e4kQIeqcIMu=a>UOptC2ed> zfZA_Fo&m-jx^XK5!`TJ?%OSzfM5_SZkLWPM*MGP20i(c3ZDsW0+N^o!| zyu4Mjk`=^uKKe-WJ?dMSaS*P8dFmq)oo}@tK3y4N4lFaR8Oi3Hw6Doracd{}$`GmG zw@oKLu4vM!s0M!}&drXRZ$mlaIj0 z^dq88S_S4c2#dXA<8=UxTw+Gd$YcPi?`cgC_F%flTPoKcFznZTJuPmQb!a|bBX03a zx6ZQvV&UZQ9Zp?8XdKuoe~sdQoNhiGJOqVji*8c<(keD=gd!WJY675Y{}wID@tF}? zgNRd4n7I{Kc$0n(IBZ*FrB%z4$gofFv*8)nP7lR;)nCY>9 zMtA%E*G>FOvfpvCw-KZ!GgG;5-r2r)d+v~Rjzsm9GC5>l zN1RjUniR5JsJ^af^_O$RQnS!%uq{1?=1q}Q6lecP|!}_zsVogL*Q9mBf=a|zr&@#-*GgcrnT|LCN z#3|^OTp?AF>Ec)z@LI0@!xOTM14RN(u2evo^puYnif|Cl#ZLgbc)0^n6ob9fSSovJ zyKPy_U!feJi8bp1U7PRx*z%qKnD$wMxJ0UE|NFbiLNdo69wdCdFA!CLV%a^f35f!A zCeJT7N-IExVydZmKfVh;uM(+Vd>gcGH>x3G0 zV@7(LlEwpo5P<(VQM}mB{y6e6ItLW|izLC=jY`AbF>KI>06*VFlxeRxb;mF7+vs8s z1y4j4M!BbgA0o7d*vpz%)Pdchf`aB(QPFLj`tR|qzxT3})=ko`wguyu*(kaLNmtF> z7v-*$ogtHv;|Y<5@K&_R>SojEe|mouQ>GG>xby*Re^p(?A2{ukeBGz^6+IvW!GLiC zfnMyL+`2nj{2%4bL@Lm*<-SXOvShlzpVgWrl&fJBbYyK+8_#IJ$4r~f4+q2T>^D~v zYpL;Ym+?ly`LHmY8?kb^Dz551eNSxUVw5U}|0P_t^E68?XQ3fI`AA>+y6_;^C7z+L zJF*7v|xg6R3>PPKG^k~<_{4G!b{^>s8hk5#BKHpvt z^+Lr}ETk!A1$Q4(6gUPPduwkHY8LSA0NpbiR2CYC%2iL&qT5{z03!9?;#9g&tg>oT zgL}hswZe#(`%cJkbP~t10t}w9$MPTqJ3<^5UWgHLaM+14#xv{8A#fxS58+@LDMOG| z&l@YHTT3R%AYc|SuK`Fi=8cW)l)eO#WP}pGit51%IDWYI_l4sl$oS0M=dHWT;x(SM zYRhLc`7`nzpL7*&OsrDIEId-C?fA2QB$0jIgcrC4Sa6$*Y<6R=VKiz)181Gg?;X2J z?^*jtF$X5=`SDcX$>F`y0AeF>eK9PmO!-K3EkA^ece7uV5v_^!>eX6i*%Ysxk0?>b zf*wLGGEMKdt+E~K78T$$8K@6g?C7plotISki<`%|K{{@%+XjGd)rrs0_wcvhet(Zc z#kn!v1$sd;TajBvB5}&x23bEb!>ZN}4#pI#A@|Lp7Y>n33w=mlom z7^eWz*1vxp1S>|@RVkYTpAFR^G=x(6W-w)oP{xiH?R1OQ{UVJ-&UDty@bUtKni{C2 z3AwKJ{WlBbW*0C@NZt!gCuVfhn9|ukdnC=IhwHBYAa{ZjhLeM9*L8c#!^#$%uW6E>ktW)j zD5R{YQdN*Sjc?b)cVd zil&=tDT&`^EF$|$Aa~1kO!CifRaE`vkE&F%_68Kg{*N?h5vDJ)6EXEj_{PQ7P>!k z>@ff&rM{{=7bHvr z@mU(bByC_oJBmATqLJ%WncoyIJo3v*9=j(slACjHJnw2W`anb$VoVAPPRNCw#1E(d zierUP?x#PDdg4_2#JV9#slNq-KFc zX(L!9Q`!inu}t`1don9QN4n5{h;w`)M&*e4ub<4sqIX>pL`UpR=dr`nRKu>gZ$=Uv z^2I#CHotg@TqpS~Ae9L`)j~ewUO3EG6B!cRB&2h4^%u4Esx+KjsgT zVn_NxQp4#P^!{|eQ*S+YtI#p=Vfto}Mr$pOc^2@T>ZfOE@%TsKrM3l9WPe}uUR`c` zPOx(dofkf$!XFFCzKbzkoXe&^dbu59a`hwr=-{^mPXlsBQE{TzRMkl=hLdNOA0W0h zaiqWJbb0$CAneB&%9t=Gr_)E)s_qFjnZBOXI!2wW|3;?p8b(5mJI8hawhR3HlK%&g zQYQZokm9n1a{ljtRDd`3{{y7#2NA+tmoC|Prd{h|+V2^@!q%nU>Bc3omIy)DA9Obd zO)REFFy8Xm|GbY7^3{`UN6?^G{ph1-7`^5R z4k)y3WJPg2&OZM7dUwsk>c;Xjp3+K0m%3dfuCzp1z+|)=$8q>%UzoBrJ=n{!O`fIS0YFGD0fox8iJpzjB{K}xH8ZAB`N+OpjXM$Fwuk`1cb|247dIt1XPy` zp02_1TOxEO@C(zTsLIcy6Sc#*_>MUBa3MX3_79g@s?+lFE7r-#D(J$c+^}8;V!U{G zvj~U;-ca=Dyfk^sED#)DpPd;t3~Ayr?X-_;Uu;l1YmdN40z<$_EUBrVidnnu0v`QD zu2WIK9M}KMRO>s<>M*+Op4$#sA40|+ay~ujpAG{_Bj-o{p8g-wTm7j#2F8R_Is@b= zr12sO|GG z;Qcte_#vQ#?H}6X^SB(_!58hG=K{Q5i5tMiXm{JKaJ78@?Ad*1Q~$Z_OE}(g zY3R@Au+j*(=}Vv9^I7-(321-@PzI{Pdah=Rfa(Vm#Dx zkp8J7?xW3 z#8s2F{99xA_DVZ}Qz_*-;7dS|FM!yl8jF-7F>7a<`&OVsXq4*tw+7hjjvzK7Iifz2 zxof+I>dHjs!3L-15DW83H<4;-@npn)^xO}{hGMxFgTkR8Y|MG}o@Q3;GpDH%w5}r< z65|hf?9lOsKUSdn=(7;Ql}y9<_M@o>*asc=XRUKC3Pw{Ip9+f@3(gzDs(5sob?`C_ zwH6R>%i@Y+{=9WpeQ1nSaX@)=(Kp2n6B`ri$?I*EiXlHFmYf15yYiXiSlS{1$LFbI zF>!I}jobL^yX{nfX$I<5LkSLXr*=%fx>a}|Z%I!&n@NNOnE{PNa?T1m&k&SInMVhu zY||G4L|~!V^R{E(?Kp5K(c0#}*DsI=XZ}h$u^f>%-TAd?`e|Q<58-(m#EZcM=EMYE z%4Jc7D+p+p(zMNF*2+RIo;VXjg;o$ltr^4@zC}S7N~Q!*hP$Gu z9T>|s#AGVQg}sU*YVhZbp_ zD0yg>vde7}#)t@%W=4XBk5Hr$Ukht?x97#baZ?y6Z2%t?(@n_Qf6RR1(;;T`oRLUs zSvFW{^TMUZNP8F!hMyvs(I9pNk~G>Hm@-HC#JeOI1<60+c9y~V-%rJeBSRt?VHrEO za&Gzoq^~|hV#DSgglH-=Zp_Vij{eVHzt0kAb7!){Ay}`Dvt9(R{%D0J7y^K=R9ms{ zi5f5R99=0tJCK?bO5D>l)}%0x{tsOrT|*h)SShN+aj+#(wB>)&y!r^Li6G6#E`Ey7 z*4ksCueK<-rBxRKdBIsmWfb4k*u#d78Yv~1Ml;(KJ?j)5u+ekP!{UCq!$dWmPSFF_ zD>h$q`cG9IGo=|Wmuw{}@cu;6#PRyF!|G!cQ8|0X?WKPOZY+{jnl*q^*1}B)cL) zyL`*gIMVg@^w)DXt)x%!q8SOTCGk?TGN*xYP||(=@lI>0f`M5{UMH-QHtrBBMvuJS3uOu)G4$WxIcp8Ho7UsK?jZVd>e&OR?&;nI4w4_RZvd zG`6cv=4HEal2MD|27X&#TA%`$?51U8{)a}*AH_2ycthcRtJc%=+&j){W{k+E2*)Nx z?W#yKp?UZFM6+`WnPEv*3_pM{d$CRDnuoqhdeCD=5HqLSM4k(ER5IMJJN~9(*T3}! zcd|*qG_2Ef*6?DBCv(wBt47c0E`3l%koLL;xRpEMgvZz3Zg#+X`U_Tb>zo00tO*7+ zcp8oHkWXDANipvpn!f9ec9)EWltz4pt*1fU`Gk#O%Ej_T)tVDbM4|Beq&*w4=!v^*}v7_<&b9F!;!VXI59}=q;zB`v& zsM1eOw#kp&=DmPUAj{jTqCrf@lrn(aq-Ub}_z&?GxKPe;xa%)f*}HWZ4( znPz8hhhG<1Rwrhpkf2sYo=E;m>7Nb-l0tAqHkqxGpaK^7dKS5d`cJ7)5?^%5)JNbF{!0-0i$B2VD+A6W zGFJ2J+n(iMP7w?`AxXvV7L^K zcS`S;)QQ~YTa_jA@?AV1H=?R7xgR$s0O{JLs8kTP<5~<1Y3!zZM{=L<@x(GAcW&mJ zMdAHL>Li0(C(KMvlYoLwGYnOvUfH-G?H;g-Q88;9RZ_!cIU&H6vfz5(@#u$rGGR2@c32)o}L?I+QFq#+6j5N{6y5fmEfMwa~?4{Unk z8V1122I8dcXMZaW1gyLf9#78c`BQ-79 zd?oz5DOkhKsvdbHNugEZhZX*osgQP1z)gNW{7&P6l4hO~j)-7IE!g`{&y&s&aUl5F zlXHXS-xY5|6_(JT5Xsz_#QT^u3oo7x4I23j5^_pM%@)QwF?4WJax*1Kp+E0s;#K4k zDMJlwc-FH!&NK71b)pCD-s+UaTb}=-o@Z;)k5Eu4j4O-*0(w%zlUNGU*U<6O|=U_L~ZG;$hy;+VzgEI&nvMpD3X@O-+wCX%F;poI*1 z6;u%m!BYBcZ9Eu5&7e8dPxihCvxJ|}yD3E9Esk4y>$n(=6~`4uuTAyiKrE!#ZoSnz zXm+fSrGk+?G(Yr#6ooLR21X%8D0=Q#oJI%7UHew@5IYbn7uTZe{?}j@VeO9rXLURF z)}(V_Dt3M%!q^3IFB3PmBN*B6)+BK(L)q`?Qa5x@gX_K(xz)4}4eSZ`-S<5?n3X1R zk!?!;56h|;*_X|nT4IlbZH+Z8=XOMT<|gCf@2g?*Uu4Jz=!+Gj!KsbodvO|# z3ogBpC1Jw0h5sNZ`Yvi)yZ+I48zoGnS>#kdp;zJh=vF^F+A!4jM?`%wX<;1DTae6^ zj4cBq_^S8?UW2nwDS^{)qZRNn(fQ#%k%rTxMSdzh-=b-*8cUuAwwUuVS^EZCUPapx z{6GEzRLuLF7qJ?w6PV6)jMBw!j&!104*Tci704=urPdtTloiN#-%pex%ok7y5P(Pudkvn1_uQLOrFDRvmXtBEHQntkfZ1g>9rPeD8+jgv+W1! zCfDvyS|r5$Pen*CQW&qfG1h$HiZiC{m*OC(PO`UF$M{;@rxT0C4t^m_W>E+F1?y%t zYFO|AYW!WP6^8Y}cJk?I24DZv6lr|EiB@@P>wC2iJ2Mx`Jxdp38ukJOA$9Pw>E^i#@SY7uXO-LSlwZ8lyhK=79 z#8a*JYo1@dS`|SSVrPKm7GA?Zo4ufm&ySdmVfU^wUMA1=1dAP{!1uXq1|k_z1OG7n z&Jee7ukodhxJM;8?*^+o#NT70kqw=B7& zQ34DFDW-=;2baUn6G;arEAK?*-tU|7R7buZSMsdg||a8P{;lP@#b5i1iev5z|1lLV=y#z5!WB7T=3(XvPzrz zFKGplOONu{x1l7Lu1$pD++cE62Hd^=UWN(lpJJ;95z@}*)&XIbhT4878Vk4Wlu{np zVH>0A4OYwVH}dN(_MqY0Hny-?um(Dc3?rV>Z>MCHODEU@|#sMZ46qLbvwAD zBy^4;O6J0Qa9IR#j~TuUY!;vI?ZxrWORJ!mi!2K`U0St*)0v0d%@bop5gL=L`Fazj zWm=jUbV{q#ln&RjW2)%vpF65?CpA?Q5yW~bi0Ka}Cd@qUxV`JrO`tJ--cU<6u$YIY(-Ak4dV~iBd^Dr6QHb${u^=)r$^1QRj$OpF^v@JNnQPyR`C@ zuUfh`&ldA8J)PQxOtGbc&mB;|R}!gHNZ&B{--^{(@Is`vn2t@W?>%VM}U zwng)vbs8J=iCe8X-K6C7%px_JTpzpS0$^(Y*3_*EXTi->BN?L+ql1w1ldb1$JnZrf z-8jCBVG~vtVhtXvib79SMA18ThbH71ohtJ4h$>r`qV<10${FJu$nSPat4+ViH@9Nb ziD5*Xev2afhq;ZsHtS-QR~@EYBO70mbZDZ?{xdeus3DnDmnbbNdJ$JQuls+4vq&w- znA_K3iAx5r==PtK9HX0%TEYLfJ7W!t^wdY$S!bHTizP!Zs&Vj52(S|p8ugs&{@{Ot z_dPk(u9R=(}?#X z)IQYI>Aqh7G>U0R&L9&pl`q9CyYX<^IxxM@)E=F6IT{dWg?(9e5CY zowHghJ2ic`qc6s1Hppm39%~0RrhuRMWnlV_2kd{#tZd{UO8BY^qn=k^!W0+qUF8Ke zIaV=tM;Jcw3LOlg;sp1GizQZ@7kzB?-L-?;-EHYlMPF*FPVBB;Q#IR8&1sga7JdN7 zy(j}h*A#*}&5iGIAf|R4)xw6_9k$$s{W?E(>N_&`8C&pyQ-%pqc;$9z2=To69YoLc z0Av@{tFnyWe5<3~-8*#1Z#@A7Cq>XK)*ES+(msJnxL{T?+r>K41_5$hPlH34^n7LM z-OB`d9VF<2Nj(F5TS|u-mQeTLa2rC~D2}-+!I=q5R4j?L3r){Z&ynI23bMSP31R&u zQ@Ub4*ZVDb+ufq> z^Y?0; z**FoTR@Fj&9i29p$LlW30(zTHrUeb}GH;Sve*AT?vPq09zgw^W_GOI9D{pH`w$q6Q zE#Q?HlBo`^yZO=nybR{3k?&P;nEuq{&zR|XyoG$7HUu7R9cVb4|9>83&h{@ZDqvRr z#m?r(+xIfLL~w!aeosC2gPh|D5mrJbx4F+k4eAa!{eWX6bXJ0a38AEz>oC_nSL8M= zNpPz{Cg@SFjBMKsaz%~DEzfViGi}v&x9jlV*6(hC!!*T+LGV43}XZkT(*XI zudNYN{GFJ=X|3R&kr@W^j4{VA1}QsYY5{)`_5SRu=nLh_q6b1Rt-1!fam)VN*M&FT z$E(6KSK*7sl?X`t4WT8&Tv&gbYi9*JuS5?1SR0(TAc>t_RiEc2+Gpx@7A3MDH*aQc*R>Il0F|B zcxzel!BN!gt|NcDk-vdF&_e<**n~)SV`h{jlavBB{L)pqd({XM5Aoj7rUp4v?soKD zFxJenVGIfj282oV5zf+M(j!{aE(0;6&cu{Wk#V2NfZ`PTa>FH<>VW$0!F#{u+B#SOn|Gmavi*t}TZ=d=^K6R{St}FaZ)pjo)Yfb_ zIAFXPdpL*TJhu3gC1H75E#@W9Xb1ylCwx=9=m^Cj$&s{gOUbw#K1r^-6LXYEADGe7|m!0gVFtrd)b_*!w6RkqDPuJC2(1E zKG!dU5rr$0!oCh$oU^zE^_e7P!&65JNVyY`nP*{~n~=b(47z#;R5Krz`R28= zbRKDox&zWa(;9>gY>kPUdJM!uVscD^suDQVo0=SYY?9&+V`9u22jjNRwUH9bbfcaL z0YzCcWmTvqJGC|~@$wr)YVeE<4K(P_VkIqY85oK}F2HO6>7Zt0SDL9=r*ZY^ z3OpIY8E=PxR-b@}PQLZrq}U()H|dSJ&PSY^z{#2&Dbl~1X}ZD>3e?qp)(UjW%G6(! zFEv|^0|3AYPX9FiIfuB>F8W{b*Gi($y#-Xqi2UpD$altFr_ry2IlO@=f11;<$P2D<8T7BdfbfGoq(gI}v8QOa6 zCko%ra#xv(uH8aZ&9k+%G8*2t`wrzm1N2$!M_TO_v{RUL!{AL6NN*i+QAF4GWWVou zZfWlmXxE%6*%P>@Qv! zzG+F<%ieW#@b>iHKHADHgg;LR%HM6+cI;UlChj7h-2h5UH`musJ&nd~zy&vh~H^xKZzP z;a@Yl#pN@)U;Cm9;dF@k*&i}Ge(pj~g-#!A2v<4AW#@K&JdSL+$wSEbJ_ZmfpIbIo zq$)CL{Lgr4dF6hY^R??}5jTkWU$0CmpB0mXX5U#c?h=iDR(0)P_p#q!|GE!R=5n67 zRX$71*bedB+`RZV`OYiLzoPU-cb|J-@`OLQ*2>>&q7;{FWScMe7hhDqX&oDEr%EI6 z=n$^r{)wsBeXcK5Ypo}p34dJBm7iZNdrEO@;)Ii)^RX!|sZDcaJ2cwpdF5v_X{hK8 z8JbN^Pr-U3UTM`RFRkQPLFIWsToS)8+&7nZD+tS|ov7BZB3(i9m7QbtY(J0B`SPRA z$?`L)bV*5-G$=MNpzMD+bf`Q{bta+1O}L~9Ekcl#o@>PI6zZ|FaRt5VT!X3jM8!6} zyXk7#5IFe7O_zJRWpJ&GfAfxowDK|VtL#)etRN6f^GLMI^i-GI?eH{3m578v3Hzj{ zPj?|x%%zZR(-EFSR9tusD{Euemx*#K@ag22-=OqwHHg-qBi(fnX_cRYX8ZQAsCWAC zDa@$0F!^tDn;JR`qBHQaI4VDZ3JrLfe&Y5KU(ZM=Ey2Z>vRatT;M489p*<-sIoZA` z>+win2yA{gc9-*p((b*wt;*gKrfeOA2&l_Yaq@g36Lg*k20<#k7bm^@6Q?Z8bu91+_eIb0qFq6 zjT@J0gRdjzV`F$u40a)ew<FR1N=zdHo~W~QsQ2>ls|)unG8FJXAe%5|e0&#sjA6 zb_QJ5`fIY)v&qBk9$krMTovIdmlNqnoN*F-1?~Xlfe5P`+lB%Od(e;_HbTyl2sOC2 zI6y^=^V;z|Rn0k=6}}ET;1kH5IQD|-@b*qGk=S1FS2qa3uKA!@mwWOMdNlOh4oGPn z@YQ2?QdE+b>$Gf+>rno4z%j;*ZL^GBiy-SUWR?8n{-*LELOn4E6eV)FylO3gC^00W zNTCnt%!9#uVQ^Bn`aC^)_lZY1P&ZH>6rNXy8cwWeO9U}QJLFDv75;9>kQW`<9)kom zz)z51Jh`D=OoZYvQ=VX5WOpQi8B(waBo;n5=LEVvUlHikAFNPZ3P+Qo{Lef7AR%H* z!Wcq{Ko>oxF*Gnw-KP){KhhOAfhs$~SSXPZe7jT*pw1~?Lk62ogdX9)DYg87|m8krAf z-f9+{3>abysf6EcFHfq%A^GzZSjS6^Qte5(=f7k6%S69}e_Yyu=^1i=`RRD*S8F5K z_pdP3W*IK$F+~ww!(F;HEbxUS@%63tvun4hV}fqWR7rz5^vib#5*?+jz|6|K{bf`^ zQ)&MTye`Xy^H!bVm8X*!;zUov;)Zy>781mc#09F41^!48RjDh=5nin2m&3ts?z2!d zzY6#CzO>O^8$5qj*;cBEIm%e>t$FSKbqbh-ID5gXK^w(5lS^8re$Q90uQPxedCFWP zS1QI-PsA$1qa8J)+r$11{et=Pm{E=PAFcexz(s2^=g4T=Q-uEQAC84(U9?c!YM|qb zfU<9j!{R*w#DhU-#b9-b>2Pr~GMUB>u@f>WRKou%!;QcS(>|M*qTX+ja;Lv|oP6it2YZ^;0fX}1LXDOq@|Xd^d0p_u4ioAlLG5PC zI96dgWMJa7g*kyxnlniHnISes$>+hjtGs11v}>QszfXaD`;d24I5$VCI?B)l;RRV? zvM+8JAV*p5W661y7HSwY1w@#|0N!gp9Me@dU-LZYv*Q>zOrUm2*68wKbn}ijw?lz^ zwh}{w?woMy39WPjJki}_y<{a(z7v(q+jPNEf0`p}lN_zu8!*l$|L+?UJQ}Z+LL4vJ-x4j59}_Px23?j1 zU)4;e57Zn4Uh8c6`$&z|l$;Z9-atE`F)A_u2H1*BZhspW+oEr&EFs$DEjgaN-b%Wj z#MH@66$~QPsgan1QtgMQFh>_70G#Y4U`mw}R{hfYlHxIIFnG^!!{L=pf3;AT?W)*o zmeFe`?W?2my`CBCzNFZN z>Kar)41k~NP%&J!>|!QH&5(MOYvKa-v=-dp6>zqOJq#IjAw z4C2FuF&9aJcv1D=*4C)zluSy;X`eb}s5$QB`O=$Te!OX5p0JuaPH?(d2^jr^iq~2? z+N^b{(>ZZVV}7_ukn7kneZ$7~E8jYK0Vi4kXfbPo&t|%EKqG3E6{PO2q*y7ZKp2Y9 zicy+({;?${w&T`oRi9IN(;nRuKm0=E;N{d`qE1QFYJasNvGS!tG$IBYPJ6XwZG{mk zQUsjDL>hy5!01XnPEsQ3O@71m;=q{4+xr3c7j=#6-GR1n@PX0;fxfTZ=#aU)o6cr- zsDzgby|^j^#T@cOF?NZ#or*Y;QlLE zPS=mkc;qSzXSv-@zYgxUocqLsMe6LfJDAAY8!71x_AXM_?OUH?RaKLvu4QDb=|;E) zGvv;Sx!Kkfk&yP68|p$FeVgvf?1V3WR>lOWw&r(%~`6O(_FkiH4LB0#$JfPfEu0I7|l_S#kXw5^OHx&GSNMg^Vg4tttT?3Uy&2+sU5(%bl}dd z3Pl&;)fxTn9+pN^MLw9S7>#t)*PFd0XgIEG1Jd7ZTI#tJDb66eFi0(UP z&&P(p=Kk3uh}jSao&^Az&mL7ecbW97pba>*q*((c0ZAJxmo1xGXAs?SY~ay+Z_EX5 zdpRE$(HxcdXiF1_O|oWOr6#7CS65>oYMcO_BuwPK^8s!sRZXh5J&&y)|LNG5{)Rzm zOgz8hX7YlqLtnlrGYau_Lfc`K6NZ<?^DL&9cpMsJ*M8Wp*P4 zexsMk7#Aa@jg3+4oO}#RN81xq?{sG(;WPaffFs=Lk#i3Fo#kQv)f^Rd-NyMRIGpAn z+-1u?_~8Fy?VW-%iTZHg*mg3pF%#RiH8Cg7o8*mc+t$R!#I|kQwzczp`_$eSXP#qO$JO_Zil`6?@aK17Ts;TfEX1zG(N}|QnVuIbp7PO!Wg1Mb$)sa@2+-H=K zmV!?87Bt9!Z}zUuTK|^E&_H%`Q%N> zYA-VaL84r0uX7DTP0IT}4-KD3UbkO!$RBtH1Ua4$U}g)SkXy-;JoYqe2Z7|uhf;sa zJ<0-0RReXF8CxEf64nx+E(txP@L3%x)X0ra&m3fxXF2y2A79*hemC(3sFo{~)PNN^o zzgnZZOu;@KJgq$+bSNp%;`zk=51pscYyp(6Dz~{#m%kx1PaMfx{zTQ%Oq)-TO0-+Q z(JZ5A&H(g`q+<@8Krk5%3Zh{mD?N(=`-R~=V#7d$$vT#5y8*@@8G2E~a^ z$_*UHeu&+0sXtWnT5VPQ_7cxIU*Ig5z1IB}HDW^;-q#I0W|nc3lUmt(uvlbYSt};6 zwbn}>#&_7bn%PXKJ)x{aOnl_$4r5Tc%1vSXj54WYCJY{7hBmu%08Q-kov~fUel48u zVz#HR_PTf6@CQaMDLeza9*Ax*Q1T3Cm`fVL)7A*ZFB7M?R+YYXGa`PwCQOfhUVg3J z%BAUAbpg&!f4$-d4l|4V@k(G+Xw=x?u)l#BTAOk||9mcy?sYY50wQH8gq5L-!b|g@0#8n7% zi@g@J35UZgKSU^ZT*l{MX5~bkpa?mE$b+*^?QEm696>6wegjo(K%P!i^CTA`JDBMK zZP`FTYK&4K;bZRB0W`q@-?fxjk9?uSIklX97#)er-_tPrdedcZxEIvq>LHug_VZHr z65)Ku++$pLt(2vfhghN_N!o-{fi#v3OQ~Ogz%rcc1nc|6<@S@T)RvWzUC`cxbj5VFyEy~j{+QoVTvAa*`*1&`OebU53uwp%z zY3>)KNu)BVSQ@WtSp20p_P8krwqtmFLfH$GLjiY(|-o+W7arEGJ1LEY9!H^wTkk47zBn9ec(Ag z(r*}bh&o7-9t6M=M4i(Y)pH8i4~;5If445~=^3Hb_KbZ8Vdz`3lKwH-79(@H@ea5g zt*28%{^R7q5AvX;A#?*VOIPsQpooWwH(ZY) zJ?73YT~xNx{2)U#*61Nm!``K}O3q7^AaFJ~sub}tq-Ws=0!}~*(es;9R;>HfSeN}s zsldz50@iPL{2%W>uYIGG@dHtfus`g%+uwUgd3f;ixkbEh+Q4tPLXDO6; zSsh97e=+Dx^tnb({Jb9$2)pZz_eOSaF{#{o4M`xncyiM<8tt-vy;JDoKG_3@;Cl?e zS$>ONo(-Q_abupgyqu}g5!NqtGx!-vhVmNmUekkm6Bc)mI#S5wzAGS4i3&FiZZWW& zUX+j_)oElwd=uoLp|g1qcR& zeQPBbvx(=qjd6NyOrK$LDZ0A0&CXprJ_GMkoH{Yry!kE{TF&OU!wA$XZ(rM$9(lbd zYqO{`;RPmix}BI*CW6+9IKEn@TjTZJ&$j;2GGsFrlHTSGHX&c7!txHWM@aKx+mBm~ zfKvq!Civ0*W5|dg)_xLhOa^?|AwQ*nyc%`qrl4n4b(;26q!Mir5dPg%IF${3sG2Cv z5%Vh^A!BhsBGu7%$e`kruSyR|iCtW&EQi`W+_`4T0i5=?5vJde@)hF$;4@r!JnZ~5 zqwdZ-NvJ&y9<(yu>@~;u-5@y4J?ly2_IX8LXr{s1T`M z%7U;V|CShPSf8^vy7nr64$D*wm}-t-vwW_s=CE;2K&GPU&NKXug&P%!XBfSOG#N^} zNk;xar}X|Uu6)Lgj5-aKS(CU@;7tFhNjetX>HtNbjC_2)S=UxS8yL@F%S6Im`VlNW zlVuHx|>4I?s)Oh z2Iv3z+wo%a%0IslhDYgKOI}nq@Oc`56D%CTiRdS+-D{IOm!?p(=vjCM{><(FelI0g~oZy zxu$;rjc&ztd4y#spatO&Whiv}shd++;V%XhLe4>9 z3^WC@?NhQe;Xx3FBT4ouSIMQXRK_7Rfq(wN0Qy3iAlF2vHBcCojY*}@!umGc4zV^S zyt2zSKuAI&g3*J;XEzKQGr@y}s}4#v3wX-EU{q-_ucdJURNtcCt!o3Xd+x=!?1M1a zWG>aqY`{fBE=0x(63kvspTR7MeFYJ4l05Ow*A6=m0;(lWlf^QA&I0%yTL?1FJGwZ{ zvISKGXUKok#tt{Ynns{gx>&0~s@;}K%!`$HhuKGzaOHpF)V&6bqJtV@En9?1fF%IG_z!UhvmD*&W zQtcZSalT^~C4e>{;Ml^={wwCI`|i^9C0{X3Wb0?-Bzvl^?szn1hF2d6IfJht{^1xj z=0NI#YTMC$&mig~b+r^9#ouRWg2&FL_L$sQp*L|2TZt+)&bE~QRd)iv%{e5SrQaed zo2vZVe%RhyDp{neE_jDz01D(d0F+F0{npi0Hs*8D!#U=Juc$0X#`UVAB;cHmg3${P zOR0$U=d&eui1Sp=>g7vUYytejQd7%n%h0eAu=tDjtbV-Oc5)!1F*cM0H3gUSQOaXu zUce*ocKZOAP`H|ej$NSAd%0L8Ad7-{x9+eG7P9ntDc8t;$&9+lbXg5r5!DwwfAgF> zAIYW((73SE6}cF2oEOmuXne?i8g*)-&z|t3)fyMsK*+B<_8fyxbfhLDTT0`^G3jK) zJj9Co@${rlhGq<*UI$VN>$>gS_edvA^J&)-KR{GvP*eAVZPR+*t~xjeud;%)skPzE z@yj8K0S4!$?a|5A%j;R2Q+LOa&8{__w!+0Ch=zk|Yrf@4U;W|Yk5WDWQ$aFpzq*0r0|57 zeTv3$?j!lZD*0eSqK+InZH2QirYlfo_Jz3%_~C8kaebxm#?ZCkF{t%)Yeuq=Vo|n4 z#mSJQnnU%c`bC+~g2?l262$D_NIVotQI%N3>wOMUn?gj|E-!G%t3bI{RY5bk%trWUl)TVhi2OvhPsB=N|6Dh7HoEnGSE1(O-M%QVP?4b*kwa7)1G7)F8f{T zt}?8MLt!)r2#NHPS5SO((LOmQop|!eI2cLhBQ(|tQi}}FjDFtglA{tT)JznsI5O-& zxWIi>=uDM{^x{jrn~2$X65}}aKj!U?GI7-xl{c#4?3Od;rNFpfFNgez1>wTgP9VwV zZ@8*q_OLdQDpM236Za#>9RqoK-kP3QBO56lTeMedXIpWxRzg*fEm-?nha(My_3P93 zT6Ku97t#8bzcLoCuK&-ysBBuN8-zh`0PbWdu6Kei9I9 zVax`H5CTM1OikhjM1#VE@K%RyBUq;}=>C}7vaUwRn&neXjHAH`7vh(KOt9>(9vjMM z?{l?0HPZ1@;>prNCP-u2$^=Rk%Hr8}mok|$)Rlw~M}p%_TR9)I=MS}~-#tG2NNLY? zP0jwSX3LP6tkgF%W1`J0_NAIHtJ`2D!bVkgg+K%P))4;K$SCT@LWRB;W?@D(W*^BG z?uE2hh0&;?=arMdD?7EfS#Djfx@(h7e|Z=#-mtCnM2Z$zxV-ZSh_iYxSP?@qD79rj zM$Ky@u1(^052KmjR11G}g3r{~kV5T`4+0Hn)Kxcu;mZ|kI`MC$!{$w!y)`{3dWar> zmJ}+nL2qjn+mDKI-|~Fcz}Tq@b%_Ywm5$EgziCObsHUukk=*R9zv-}R`^$XXb9kGj zJL&!jjcRrnI<~4#^LMD~jvYW4#qa&PHVC!%+WzJGG+C2|L44_ldov|GH2Tb3EP2aJ zOzG{>FCM)tN)u=gimYZN5!`LY6O}?$ZVi0E;GvBAU2>b;j~DCsVm9-;GSPJw%ZfNG z8C+xZIB~_KX~J!7Y~%dZ8NQ9t?8269vQ-aAFyGd^f{BCg-$DxK)IH)+4MZoN=e8VvgnP2qf}pT9Yfc zk|@h_lgn!-unl~F2`xxUBAaFN{qu7qnvm7fkX>0>T11 zZg4HeLbQIz|FE+~qRr0VbjnpVcYIvDbGu5^gcdy-J>$wDWiZ_27aiz^d{?u28$3HLm2Py}Kq!;Y7wx?;mHpIKBp%-~47_Xc6 zxtX=M3w?m@xy5n>uE3|#j;(m>>n~~DiVQGmf$+KvS&%oT+#XCRT>ZFd`Q7s{*jy4Q z)>L@t!`_)+y^tMZ{Ie^k*|dhVm?YTjvNj(N`;P^FZ9{r!(1^M(bMZ(x{{%7OqyH8d z13?67eK7`OVN)vKk26EZWoz%2v1;?vJGr|}NE-(DG=zyNR6^`mP@i|-j zF#1VfeDG~;Z0meNriQYz7qjavOShwle2q0oDkd->H_Q|3hPr^auUJX2YKO!xW* z-rB6AlMoroHicp(Uucyh6Kc9pkn(3exvGTnXEv)P;0R=^oMMfct?iVc?QJ<34xKSR z1j@G;9g$jFu(_!8`~-=ms{!1SmE_LR|L+qQ_Z?cEque&jftJ+`l+y&_EjHVP+7m5E zX8R`tu6S}_Le=ZnvOoQ3!I;K}s_vKiV}G3+J>p zLcf`E2s304w>>fbaiQ$lCpp#ek=8HX!5~3A&na3}{;tyvsWE5_*eU+WDDemP5MNii z(|mEvPN)Mx=x4b>x9fZvi^zFFs6vN8mq)&Clt|8!;{_ow_e~P+o`dDqXn|D(oe(qF z!Y0uv+H)D?%ptrDfbMfe;PRWY7M)CtL92x`OOqHtXa>>H;01YU3orBf#DKY2==6`qrV!J2&%*!S*mp`3TxEoHtm~GLB!doI8O#xa%$Q-9 zw=i4SlHNI50m>0cD!b1!H>j*7#NHiNG>$rkH{C(b)oHt3Th0=-)z@3X#WYs=_ujQi zlc&U7Zu6p)PW7Pf(?3w1eqTd$m;O;x-P2=umyXt?GYUcZz{2ye%8?U`Ym310Ltwf{ zosbT=w>kg6(0k$DN`dSa0fWpvSRy*jM%|VssrS1tPkIErh*>@0qNGG-BMZ*f()j+p z6lma R`BSl&No9y?wh%7DqswS!rzAc`;)%a;Z^4!$r=lr5UT0J}ThmS(p-=&S|w1~2W z<6Z)6G~BUApUXwVncYgzrtCuKEGUtx@(rUvH}Zy=NOETPhvGD}wm3ZtMr-a60xu&H z(ZjiT^?4&D{#&p)#(|G1PKQ(Gv^fOSSU#YKYo${l z+WUT3^L6c#{A|TbIMYE{PnQPhze`7{@S!Wn*Kd!RVcgXJ7nKs>;McDL?O-Mm+9NZ%Qw{T=V^+Ok`GZ*R#b`mJE21W#p;BM>|t(;Q&H3wYuWzKviTLE zna1wkqAV_F_;Kz&R%&VM_<2i3)pV)9P!D5uR7M-WKM`&I5h4ouff{QG#t85U@B(TV z_C8Ip^&_;}cWj#wD(^>IAf$$EQ*C-;8K7I#(?ec{eJr8-P90jDmKHS}ths#D17wd9 za)xqJZ*zrT{jn*C&HL8lOJ{~i#J+AZF6P_|JffV!`ZgKDG)%uL4#=ALJWbpOu$m$# z^Jr!yiG{vyA>`6?sf@}(Hy}XBm<$|`=#e{T77y=BK>r=mWN;7Zc_-h{I@{eJ#FIC$ zy9xdR6wk1>Q_pX7+R&d=!OKeKmpcR(+kCXJ zHv2MIFG|zpmwH{uQjW(3c$&z%xU+hVGwQC$mC}I>+}Fc+iwqRdSB|JLe-ETF)-e`K zd7Vl$1V_B|<@0^r06V9T8-CKXuH+9qHDgCI6v+&1)Ux)onh+G~$f}q{|1x1hG;=(e zFc&6j$_O`0loLboU}Sz&iUi&{^gr_vh3?4LL%JKg+o6I!-G=At8&M^P|3;`u*gY zu19B{g8TZuUT;G}uaAr{+MLo_$K+$3>!wbe_snH&1@a%vFe!pDs@B|$)ee5FSRyJG zle@f~)qGgfLiUWwN-mqkOAkj^W~!2vu(*^)Kb=ao-b04Fi!2tn=1_~7Wn0iC?{5LI z-VJIUFdvR#3TjR+08zwp4AWfwPn8g-yAAg(d|;@_%ebh; zpSBHaU}?VNl;yPN1p1Ob?DYT%sWoKwt@70yYVU{Os5?QY$;_4Ow~Z4f{T30LNFn~s zN(H~pVX1nS&X0{!99?*kPRU6e0swDQSSLfSJtVZ3nYUAZdnR_2i zf0zC(Gp0jWrmCSZn^^$Z;@`*nIaK|L>251@lqn@sIukH| zMVz<}17sa%?CM_z;-}qFN%8Fz1=Xh0#exPGE8lrsv9T%e2e+ZCY#9y~&3X+!ik7h} z9@cRN^A`#|s)JTThUKoW1h1<902d0-I8_IUm}COSDB3{{w>!+D2+r|W8iTsbFRoz4 z+F@-$`EYU|VdE)TQuxD$n$$wF3$KxA;-K44fcDSP8*EE@-a*arZdM9-+-aEGzz@AL zOUxYLXFAcm#5hIW0t4l4xSOv~-2E2Ea>|O<$D+pb6>nVEL8uETIoNC@7#n$BsxNFU zg>ZCcC}DBgz%!cEG%CJDUUP1$RXW2whtO%6&Lz25f^9W{MP}6s$^_?uj1s z)vKyrrdL~5u!K-zZOGisUIV9fw@6(=laO54`#P}>X$(i)-yqjGsx4OKs^KKYV>*@^ zQL}`P9@Eu6_b6vdDa-tkv2GEP9F!aOzHY3GQeRuBNr6bQ@apw+epJ}%IArT{5-#74 zf3&>o^cLc4Tau6uN1yzv@LX1{oQrFX{hKw22*|xz|01u3$8-m<&4w<8JF;D=%IS?H z-vy|t{Uc>xHq0>WTKdcrqqaKDL%6R-RHo30IvS?2^uTq{;f@nc;=Vdnh3i`ObjmHU z-{{xb>hpYc{`(cXEe4axE$T|dyh?S9tT$8|_#dQKW@uNu2P$JE+YBE<^=zfTT~Fma zIoR(mH^OT}@N@6pqGwp`P|VQ7_~S`j-6AE41j2|S=a8Wt(-80k9=v}GE>IzAkAp!! zrn0H3OvEYq7^Bl+8g%mFX}7UDBv}FoKpa&r;}9Uh5>gYLC_WjqM$CnUU3)nvianD{t1ld z+`2@p(PzF^em*rBpLX1^cA{K9^mOpEY@THpE$iiIXLocqwzB$DW&cT#66)q4t<4lc zisQP%a(_Q<3vxfdU&-#qY~6t|x+4S^AA|XN{Jr@AG>t4x(7VWaxj*tQUAItslZuc* z6N5tSQKesyCa+HQHY6P5{l%4buOm2-WL^>fx?`{KHksV{Vub3{sUgY*ZQPa(Sy#A7 zcY6^AXtG0URE6040W~aKa5PVA)Wbof?IexqilbGb;0G5Mx-6PN7NuI?_W<(K;dVU~ zx@5pM8@C7r7$%0VUTU@^ooUr*KDHpH+4n?b8KrmsbZdP-f6J}kyFXKR5zyE%Pk|Km!L#bL=FTxvI(oXg>rEsgE&CcAlv}`W_oLv$2xfdA zL+^Q?&SaGelO&x6>3K!m_%wwKUFheTVfS$-S)1_d5ppp%!U)_L;Rl+R3< zdx#^`7xc~@1xyn9eck zty9n4T3>~Wy~a*WExX_5ZI4m1&v@#gt^$_gKYuM#XPV_FPn0 ze%Tq=G80;qy!?;l_uxTjH#2^|DMN2-QSpHhz3B`nSR&bo@gnFi)rkvv20v=FgE(8q z{}uEn>wL6RnFa3rgTGmlQAVMC*2;v1mb15wU)udgOIwqwjz1rGcC#CvJ)p>wa`=*R{&gWy@aQr+ZNYR zt*f7z?SdzszH8C!=4=Zk!3>;Tl;hM7*7K02_>Vu)dEu|W>+o=*_!bCyAr1kZq@d9Y zviU9%%P%QAfLMg>P>Uh)i9lNN_^i21#?DqboTxPa3nfT2#DiJEe`O~ykT|cOO2QLc z*E44v?)Ma0#NK32RA_kvvyyf>O}PbC6JYr};7@9L1$aOF3$H`5`<%ZTDr)@;sVUuT zf5D{kT$!vBXI@Czeaa5mFAwJj3Qnja{<9bJGo;E?0aNr3bNJ(4j5TE?nM5YH43~y6 zc0LJp8x+;hYdwJ>qo@SI5I+*O>(*>shx{d+F_WoFPS(>l(aR){XKyxU)Xhx=w=L?= zwAmXB^Hbyk+2?%N8s`Q^!j)@0d>qsfOdPyaIG3O;?V_;Cwir(`J<~c0{g+u#zQ)oY zX2xcNjS$)dsTq)ZgrABsAQI6tWrjDPe?^1QRsjmn0{QdGw9B9Q9K4) z&Afw0b6Jmo-I$ylMUt4)FLTqy9%w%{xpFdBr7_Px&AYcU(Rgy9K0K%>M$9oWp#rNM zD&#G#&P-k9guO(EmE_}5{%YK{wz;w1LG-O3gz_|`@uhzB@=Bi@lkOZR$xWxrl40UW zJVUY|{7Hn)u+Ns+vdxS~pTF}zm(|Pz=9b9IK#44Cs9aEA%gD#xik_-8V<=a`RWvIf zm66k?hTf#g2BaXR1o89c+9gRX|K#n{OOrYJ#rl1gKKs-(*S6o7{E)%2G!L;fVr`_! z#E#NI|4_IGawUi6vkC*_qUA8?P3%9ohO&&U_)cvJ+|S+uBk8-A9?OhY?vo)g=)3al zW^~CFse*IuXu|Ah(19(vb}wu}W5JeQLvom{;?@}pho*H)gxHJ4q>FrMQ(pnSkZ{=4 zI@0>h+k=wSI^S>O2EhxZ$wz^(f_8&V<2Plxftw?DX94f}2OT;*{sweyUEaG-)K)bh zsaR1<>IR_B32Z<=Y^yNR%Gnt5rGB=PfO z;rPO%o%pYL_+x}hfWDh&4z+dk&r;2mrTm+Y@_Sgd+}IbVAOxM$L^cu?%4BZE;rBA( z!JDawp&^}jt3^QZTtGSZcx%##$Mv(iO7-A84DMdr^vUoNVx3`9fpHLvv&vBP7*+U= z5mfrTw9Mo<>#sr)A!GY;Eo_iZ5O)JCwvb>DOR(oG)VY@3*_aR_F1=e$Jz(R~xb)Wk z1)5LJHL-^e&?uDHHcFAv4cSPCSxwMUut=j)`j`>Zfclv<5xPKue9&l&N=8-5xc<6* zvh}9j*Hdo4^UWWua<6WM@opHb;>x31Ubx^w>WPl@!!_vK@X=j_;(^0D_X1 zfN1PHwsrl#V%yX_w=NarPI9%eH7H+(`~l_n2Xfd{xq)S0vj z)fmnLtH9^g5@6P(+}+2YgIc?jk4YIDjnx-~hRUYb*$t?qGNEJ>;xXFrF~#mFdp2?w zQ%$5;6WsBC=CLN2egD)OJkixn43l<>X75DnyMDM-AaRutKb$P}e57(ypRPpSMR&}Y~-h2#pHMMx3 zu>mWG=1P&CNY?zUq5l!=)e(f~2V5YeFO&>g9A>}LNep`3Xm^_L=O&qD+n%Ob(l&}* zsF$SID5Tb~xV=Ohekx(u=pLn=o6i3r#wR{|Dbzr&1*5BGmBB_%dJ^`lAR26vvH;#t zPt&PDM=seHMU>7+jdMV8`z98FOPV0IkGRI!T#8Dk7d8GzhB;?hWp zUb~3~Sq=f+3q12$3ix%IWxjsgJGXou$du8dz|ys(p_GM(Et-E-bV>>-dw!``GR_Lz z#MTW$zxQXL*eQ^i9LafaUjSnP28H;KI{KHn2Z452HCB-rN47sb2YAg3j}Xd#Iq+#W z1){-9lT*iyi;!9r^!;a3kfTFdS-#fOW_UJA)S0O})PQ)Uc+>uMW{COEZ14+zs6H1F zdG$J1(I1M>e40*MIgIrx?Gbbt$$%w)!TuR@bSq6 z^yp}5I3u*sAozobE1DqDMmaduA+5AXOP!`Sz{z`C+i7W{vWUs|A2;sDKfHn(43*=` zAW7ZqhH45{6DzmmFppap8z}VU0o2tyV0htH=99s@tK$O?PqyRW|FUWyl^pg$`kThA zS5Du{D0Tn}FG6VuCd`Q=ij*R02r1Kwls|q`R!2GWE_m5Dv>oYwd9)|Iv@RB?pu4QE zw)e~Er&*_R7L41;gp2HXh@4R)e=*epb;*PvFvh0q5f7LX#}w%^>U1dO*37=kpR#Mt za-j1=zCiN*g5BE~Z67st^$b1lZy2u{@VoeDrOWBgrO_n%iy;*(9G7^a@oHVVLAun< zawk3sPxvtg-RjlFOH1Yx1;MK1KQRAHZ ztlI&6rrDc!@&34_cjsa%aRRNkgY6I9h_B3xMrQZ>qu^w_*e`fqv?B$4wop`xcglYa=loj< zF;k0OWY_;1;b!2%YeTEtfIFl&1>Ra8J^K8I$IN}$#Cqlg0r?Mg`M-Hg`od4iZ$R_E z7t!}B_5UY3`d@5xF z`M(q?rz&Ilf6n!v`+uLB_8+X&e~ASb;$MtYwssOF zR0t$!FNiX8 zqHvRzN82|b_mZt+o1)E=Wdi>gtOp|>9aVVXBX(dtFxlXQ-W~Uz%JK2I+4?!R6BE&D zrQho6`vQ-^hC>JvR<;r_8EsI*?{H>kJZ1PwEhF0qLv%Jm04aVx+=Ee_f>k8^Y(XfLLMkH60(Z7LA^L@=+)?e`+?mDIyABxjCot!ai?~PnO+oy_->CUT06fQ)?Z4FG)zBbn@Y)pg0`MVRxcj1B`F_4mvm- z-oAI`hE~b^A^7c}uYTaSfvPjl+^B#^p46RpExm`I6JEGt*YDSE%0)hjE@e1gJb8>da!;0;2oQcQVX932WkFYsq!j4>zXa5VYZ}Wpy8MU5wu5Fy6^I zlikb%nGcGdBSXTXqc~5F4Wu>D%_rJ@zOBL(3J5gD%X;6t$j8@7q3Ek8km8}2ts4dT zhMRMJkiFi>yNt#sGYncdp8)UZU{Cj+YErT@wr5X*NfxnWbi!I`ThNbd*rOGiDAvAU zm9Sg_-OQuw1y+eai~+oV-x1xU{^*ogU4tB(amLu>@NiDd>Vt1C@&CA8E5j7Qvz8+E zG3Y#)l$?~I{jF`J^TsxL2bI*8+yVh6qzCA8<3BNezOg{Jz1HL6WN@8j6GpPB0lVnt zWq8J|ya3KTQw)ALpW3=?tu+movkCSjs<+#xOPem|gw-&I=`=I3H}>s+Niyt1Y@J2l zLDO`~$;Du}34NJww{yOmxCy_4Y>QXLy3jCmGL>C|Ulj)4NemK3P_~288tCBI=`nL3 zd+&U=69;vp?DS5rwUj+qZhky(+GM6=Ax9&on=~V36IBVs*y02S0h%Fi`)hEHlB^C+ z7}B=pK|dIg+|KXr1oo&Nzx#{>FX*~9rCo$I$Y53Bcj<5&icGNHWRYh*Tlb6hkG7}s zF?paa9tEO%pgvIl=92US($Fuv?2~62>6@PPpR!;db%A$B&bA74L8p(# z>%2%u449Y!U1rVmevbimpW*rW?%VZ)LXinsBwZ2~k6oQRN(nR|D1f` z0p~JH!5zFvv)f!m({8QvMXiu|q>KHU45dD-KnD8|iMV@o2@AoD$2n%Qd4W43_$Dpt zGm%zcHf4~HuH=f6#7U{m7;WH}%AYozOr9#1{6A83qVDJgR&>s&fr>wli?`oJc-Qb2 z2-rdxy$isPh$QHXf$l6X2J2j)-x@|U55JsWI&-twhwCV-#MY4fouqyoD#T<REHt#-I|jEuGD(ms$qw8c6D|k zaIl-BAC%KExE3?6eXoMs$G%VJ>JJt+4d`fN}z6e zDt>pMnw50FS@Q*T4Z-g0h!1|eHDPlI5g3glzQkI!dO9&L`&9Y^`OO7^h?>nHk2DcZ zu}!Hw&A1(BJ{Oz5{|0dGgRcT>je7}0N%gE7`34l2{pEEPYfQiZS5x2Pct50#o@6h?2X z_bU@X9>Q?P??yz*ZF=BJub6D~BkpMCuy@?)vjmvr{oWqtB}E0YEE!T6q8W3FpBR5Z z3Ow7y0I8aDCZDz6epX_3-?<@9nr+bhPD$v*?{3b<*w-iQAc#u^b*fGSpF9eOaE9Yl zy!OJsd=to{@#%V7e1x!T_WAfz-;5%QG;pTZEI$c-w{i1%3~>l~06Xb3<4q8u&GQ7i z=PbpkKP4n2vk&rpS2sfA}%uh!Qn6mX*I+NFYD0k=zYMhrb-KGCzHS0RhOYHbX!1tu)vzmbPA3DTJMTZB2lua}qyQ5zPDuz1=!4MI&v> zoj&ASDOW`fuC{%ocip};XeaiOtoAB>MP?f0Lk8J-PLzD#K}!<9fsadC$h)XAX?Zkd zNz+8H-Q>Buf~fl54~=T-nrIWIt=uINY%un7GO*YsepZ3s4qz1?Sa$0iFFA@YYS@IZ zueepV8M{>C1KM4_PE&Y?0&RyX7pJO6;;|vuI)nTQEWFHQpr<16LYWSp*V|E7>K-7g zAxHibwh3M$(yF389z9PRq&30X8%da%b<`3hPuy(*E#%_xd+c@stGBZZLF_JHjIM+l z`au5j+-mKs_#hzFG7|QNe$2pQjh{mxs*XalY)t<`7>3`gCQ-IX6I6EQiOz}-#9on| zo}E=tvTVz}-w{*rozdF9UWCr7$#nDs$m9!#=(~1ZvYEg!_*lV^DV;cEtfE4&Z&zlBCsjgGcyYdpi0uOs@!Z|d+;OX;?Z#J zIu8#apI#@8NsFc>lO?Gd{j;7|Y5v=6Ig1Unk{<*H1f*XfH(3)2V+QL{2D(kQ&JH

    4|%##xrB{x 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 WK-;>YQy3%+ilqdB0x%KL`~LtG6z4Gj diff --git a/legacy/src/androidTest/assets/org.fdroid.permissions.sdk14.apk b/legacy/src/androidTest/assets/org.fdroid.permissions.sdk14.apk deleted file mode 100644 index 046b8ddf453d05241f46d6d8c668f001c28681db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8929 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 diff --git a/legacy/src/androidTest/assets/simpleIndex.jar b/legacy/src/androidTest/assets/simpleIndex.jar deleted file mode 100644 index e69de29bb..000000000 diff --git a/legacy/src/androidTest/java/org/fdroid/database/PrimaryConstructorTest.kt b/legacy/src/androidTest/java/org/fdroid/database/PrimaryConstructorTest.kt deleted file mode 100644 index f3e9d7292..000000000 --- a/legacy/src/androidTest/java/org/fdroid/database/PrimaryConstructorTest.kt +++ /dev/null @@ -1,31 +0,0 @@ -package org.fdroid.database - -import androidx.test.ext.junit.runners.AndroidJUnit4 -import org.junit.Test -import org.junit.runner.RunWith -import kotlin.reflect.full.primaryConstructor -import kotlin.test.assertNotNull - -@RunWith(AndroidJUnit4::class) -internal class PrimaryConstructorTest { - - private val classes = listOf( - AntiFeature::class, - Category::class, - ReleaseChannel::class, - // recent minification removes the primary constructor of CoreRepository - // so we need to ensure it is still there for our reflection diffing - Class.forName("org.fdroid.database.CoreRepository").kotlin, - ) - - @Test - fun testPrimaryConstructor() { - classes.forEach { - assertNotNull( - actual = it.primaryConstructor, - message = "${it.simpleName} has no primary constructor", - ) - } - } - -} diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/AssetUtils.java b/legacy/src/androidTest/java/org/fdroid/fdroid/AssetUtils.java deleted file mode 100644 index db94bcfdb..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/AssetUtils.java +++ /dev/null @@ -1,43 +0,0 @@ -package org.fdroid.fdroid; - -import static org.junit.Assert.fail; - -import android.content.Context; -import android.util.Log; - -import androidx.annotation.Nullable; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; - -public class AssetUtils { - - private static final String TAG = "Utils"; - - /** - * This requires {@link Context} from {@link android.app.Instrumentation#getContext()} - */ - @Nullable - public static File copyAssetToDir(Context context, String assetName, File directory) { - File tempFile = null; - InputStream input = null; - OutputStream output = null; - try { - tempFile = File.createTempFile(assetName, ".testasset", directory); - Log.i(TAG, "Copying asset file " + assetName + " to directory " + directory); - input = context.getAssets().open(assetName); - output = new FileOutputStream(tempFile); - Utils.copy(input, output); - } catch (IOException e) { - Log.e(TAG, "Check the context is from Instrumentation.getContext()"); - fail(e.getMessage()); - } finally { - Utils.closeQuietly(output); - Utils.closeQuietly(input); - } - return tempFile; - } -} diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/LocalizationTest.java b/legacy/src/androidTest/java/org/fdroid/fdroid/LocalizationTest.java deleted file mode 100644 index 094bd5dd3..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/LocalizationTest.java +++ /dev/null @@ -1,224 +0,0 @@ -package org.fdroid.fdroid; - -import android.app.Instrumentation; -import android.content.Context; -import android.content.res.AssetManager; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.text.TextUtils; -import android.util.DisplayMetrics; -import android.util.Log; - -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.platform.app.InstrumentationRegistry; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.HashSet; -import java.util.IllegalFormatException; -import java.util.Locale; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Runs through all of the translated strings and tests them with the same format - * values that the source strings expect. This is to ensure that the formats in - * the translations are correct in number and in type (e.g. {@code s} or {@code s}. - * It reads the source formats and then builds {@code formats} to represent the - * position and type of the formats. Then it runs through all of the translations - * with formats of the correct number and type. - */ -@RunWith(AndroidJUnit4.class) -public class LocalizationTest { - public static final String TAG = "LocalizationTest"; - - private final Pattern androidFormat = Pattern.compile("(%[a-z0-9]\\$?[a-z]?)"); - private final Locale[] locales = Locale.getAvailableLocales(); - private final HashSet localeNames = new HashSet<>(locales.length); - - private AssetManager assets; - private Configuration config; - private Resources resources; - - @Before - public void setUp() { - for (Locale locale : Languages.LOCALES_TO_TEST) { - localeNames.add(locale.toString()); - } - for (Locale locale : locales) { - localeNames.add(locale.toString()); - } - - Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); - Context context = instrumentation.getTargetContext(); - assets = context.getAssets(); - config = context.getResources().getConfiguration(); - config.locale = Locale.ENGLISH; - // Resources() requires DisplayMetrics, but they are only needed for drawables - resources = new Resources(assets, new DisplayMetrics(), config); - } - - @Test - public void testLoadAllPlural() throws IllegalAccessException { - Field[] fields = R.plurals.class.getDeclaredFields(); - - HashMap haveFormats = new HashMap<>(); - for (Field field : fields) { - //Log.i(TAG, field.getName()); - int resId = field.getInt(int.class); - CharSequence string = resources.getQuantityText(resId, 4); - //Log.i(TAG, field.getName() + ": '" + string + "'"); - Matcher matcher = androidFormat.matcher(string); - int matches = 0; - char[] formats = new char[5]; - while (matcher.find()) { - String match = matcher.group(0); - char formatType = match.charAt(match.length() - 1); - switch (match.length()) { - case 2: - formats[matches] = formatType; - matches++; - break; - case 4: - formats[Integer.parseInt(match.substring(1, 2)) - 1] = formatType; - break; - case 5: - formats[Integer.parseInt(match.substring(1, 3)) - 1] = formatType; - break; - default: - throw new IllegalStateException(field.getName() + " has bad format: " + match); - } - } - haveFormats.put(field.getName(), new String(formats).trim()); - } - - for (Locale locale : locales) { - config.locale = locale; - // Resources() requires DisplayMetrics, but they are only needed for drawables - resources = new Resources(assets, new DisplayMetrics(), config); - for (Field field : fields) { - String formats = null; - try { - int resId = field.getInt(int.class); - for (int quantity = 0; quantity < 567; quantity++) { - resources.getQuantityString(resId, quantity); - } - - formats = haveFormats.get(field.getName()); - switch (formats) { - case "d": - resources.getQuantityString(resId, 1, 1); - break; - case "s": - resources.getQuantityString(resId, 1, "ONE"); - break; - case "ds": - resources.getQuantityString(resId, 2, 1, "TWO"); - break; - default: - if (!TextUtils.isEmpty(formats)) { - throw new IllegalStateException("Pattern not included in tests: " + formats); - } - } - } catch (IllegalFormatException | Resources.NotFoundException e) { - Log.i(TAG, locale + " " + field.getName()); - throw new IllegalArgumentException("Bad '" + formats + "' format in " + locale + " " - + field.getName() + ": " + e.getMessage()); - } - } - } - } - - @Test - public void testLoadAllStrings() throws IllegalAccessException { - Field[] fields = R.string.class.getDeclaredFields(); - - HashMap haveFormats = new HashMap<>(); - for (Field field : fields) { - String string = resources.getString(field.getInt(int.class)); - Matcher matcher = androidFormat.matcher(string); - int matches = 0; - char[] formats = new char[5]; - while (matcher.find()) { - String match = matcher.group(0); - char formatType = match.charAt(match.length() - 1); - switch (match.length()) { - case 2: - formats[matches] = formatType; - matches++; - break; - case 4: - formats[Integer.parseInt(match.substring(1, 2)) - 1] = formatType; - break; - case 5: - formats[Integer.parseInt(match.substring(1, 3)) - 1] = formatType; - break; - default: - throw new IllegalStateException(field.getName() + " has bad format: " + match); - } - } - haveFormats.put(field.getName(), new String(formats).trim()); - } - - for (Locale locale : locales) { - config.locale = locale; - // Resources() requires DisplayMetrics, but they are only needed for drawables - resources = new Resources(assets, new DisplayMetrics(), config); - for (Field field : fields) { - int resId = field.getInt(int.class); - resources.getString(resId); - - String formats = haveFormats.get(field.getName()); - try { - switch (formats) { - case "d": - resources.getString(resId, 1); - break; - case "dd": - resources.getString(resId, 1, 2); - break; - case "ds": - resources.getString(resId, 1, "TWO"); - break; - case "dds": - resources.getString(resId, 1, 2, "THREE"); - break; - case "sds": - resources.getString(resId, "ONE", 2, "THREE"); - break; - case "s": - resources.getString(resId, "ONE"); - break; - case "ss": - resources.getString(resId, "ONE", "TWO"); - break; - case "sss": - resources.getString(resId, "ONE", "TWO", "THREE"); - break; - case "ssss": - resources.getString(resId, "ONE", "TWO", "THREE", "FOUR"); - break; - case "ssd": - resources.getString(resId, "ONE", "TWO", 3); - break; - case "sssd": - resources.getString(resId, "ONE", "TWO", "THREE", 4); - break; - default: - if (!TextUtils.isEmpty(formats)) { - throw new IllegalStateException("Pattern not included in tests: " + formats); - } - } - } catch (Exception e) { - Log.i(TAG, locale + " " + field.getName()); - throw new IllegalArgumentException("Bad format in '" + locale + "' '" + field.getName() + "': " - + e.getMessage()); - } - } - } - } -} diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/MainActivityEspressoTest.java b/legacy/src/androidTest/java/org/fdroid/fdroid/MainActivityEspressoTest.java deleted file mode 100644 index 0d9097ebd..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/MainActivityEspressoTest.java +++ /dev/null @@ -1,278 +0,0 @@ -package org.fdroid.fdroid; - -import static androidx.test.espresso.Espresso.onView; -import static androidx.test.espresso.action.ViewActions.click; -import static androidx.test.espresso.action.ViewActions.swipeDown; -import static androidx.test.espresso.action.ViewActions.swipeLeft; -import static androidx.test.espresso.action.ViewActions.swipeRight; -import static androidx.test.espresso.action.ViewActions.swipeUp; -import static androidx.test.espresso.action.ViewActions.typeText; -import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist; -import static androidx.test.espresso.assertion.ViewAssertions.matches; -import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; -import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription; -import static androidx.test.espresso.matcher.ViewMatchers.withId; -import static androidx.test.espresso.matcher.ViewMatchers.withText; -import static org.hamcrest.CoreMatchers.allOf; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeTrue; - -import android.Manifest; -import android.app.ActivityManager; -import android.app.Instrumentation; -import android.content.Context; -import android.os.Build; -import android.util.Log; - -import androidx.core.content.ContextCompat; -import androidx.test.core.app.ApplicationProvider; -import androidx.test.espresso.IdlingPolicies; -import androidx.test.espresso.ViewInteraction; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.filters.LargeTest; -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.rule.ActivityTestRule; -import androidx.test.rule.GrantPermissionRule; -import androidx.test.uiautomator.UiDevice; -import androidx.test.uiautomator.UiObject; -import androidx.test.uiautomator.UiObjectNotFoundException; -import androidx.test.uiautomator.UiSelector; - -import org.fdroid.fdroid.views.StatusBanner; -import org.fdroid.fdroid.views.main.MainActivity; -import org.hamcrest.Matchers; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.io.IOException; -import java.util.concurrent.TimeUnit; - -@LargeTest -@RunWith(AndroidJUnit4.class) -public class MainActivityEspressoTest { - public static final String TAG = "MainActivityEspressoTest"; - - /** - * Emulators older than {@code android-25} seem to fail at running Espresso tests. - *

    - * ARM emulators are too slow to run these tests in a useful way. The sad - * thing is that it would probably work if Android didn't put up the ANR - * "Process system isn't responding" on boot each time. There seems to be no - * way to increase the ANR timeout. - */ - private static boolean canRunEspresso() { - if (Build.VERSION.SDK_INT < 25 - || Build.SUPPORTED_ABIS[0].startsWith("arm") && isEmulator()) { - Log.e(TAG, "SKIPPING TEST: ARM emulators are too slow to run these tests in a useful way"); - return false; - } - return true; - } - - @BeforeClass - public static void classSetUp() { - IdlingPolicies.setIdlingResourceTimeout(10, TimeUnit.MINUTES); - IdlingPolicies.setMasterPolicyTimeout(10, TimeUnit.MINUTES); - if (!canRunEspresso()) { - return; - } - Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); - try { - UiDevice.getInstance(instrumentation) - .executeShellCommand("pm grant " - + instrumentation.getTargetContext().getPackageName() - + " android.permission.SET_ANIMATION_SCALE"); - } catch (IOException e) { - e.printStackTrace(); - } - SystemAnimations.disableAll(ApplicationProvider.getApplicationContext()); - - // dismiss the ANR or any other system dialogs that might be there - UiObject button = new UiObject(new UiSelector().text("Wait").enabled(true)); - try { - button.click(); - } catch (UiObjectNotFoundException e) { - Log.d(TAG, e.getLocalizedMessage()); - } - new UiWatchers().registerAnrAndCrashWatchers(); - - Context context = instrumentation.getTargetContext(); - ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); - ActivityManager activityManager = ContextCompat.getSystemService(context, ActivityManager.class); - activityManager.getMemoryInfo(mi); - long percentAvail = mi.availMem / mi.totalMem; - Log.i(TAG, "RAM: " + mi.availMem + " / " + mi.totalMem + " = " + percentAvail); - } - - @AfterClass - public static void classTearDown() { - SystemAnimations.enableAll(ApplicationProvider.getApplicationContext()); - } - - public static boolean isEmulator() { - return Build.FINGERPRINT.startsWith("generic") - || Build.FINGERPRINT.startsWith("unknown") - || Build.MODEL.contains("google_sdk") - || Build.MODEL.contains("Emulator") - || Build.MODEL.contains("Android SDK built for x86") - || Build.MANUFACTURER.contains("Genymotion") - || Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic") - || "google_sdk".equals(Build.PRODUCT); - } - - @Before - public void setUp() { - assumeTrue(canRunEspresso()); - } - - /** - * Placate {@link android.os.StrictMode} - * - * @see Run finalizers before counting for StrictMode - */ - @After - public void tearDown() { - System.gc(); - System.runFinalization(); - System.gc(); - } - - @Rule - public ActivityTestRule activityTestRule = - new ActivityTestRule<>(MainActivity.class); - - @Rule - public GrantPermissionRule accessCoarseLocationPermissionRule = GrantPermissionRule.grant( - Manifest.permission.ACCESS_COARSE_LOCATION); - - @Rule - public GrantPermissionRule readExternalStoragePermissionRule = GrantPermissionRule.grant( - Manifest.permission.READ_EXTERNAL_STORAGE); - - @Test - public void bottomNavFlavorCheck() { - onView(withText(R.string.main_menu__updates)).check(matches(isDisplayed())); - onView(withText(R.string.menu_settings)).check(matches(isDisplayed())); - onView(withText("THIS SHOULD NOT SHOW UP ANYWHERE!!!")).check(doesNotExist()); - - assertTrue(BuildConfig.FLAVOR.startsWith("full") || BuildConfig.FLAVOR.startsWith("basic")); - - if (BuildConfig.FLAVOR.startsWith("basic")) { - onView(withText(R.string.main_menu__latest_apps)).check(matches(isDisplayed())); - onView(withText(R.string.main_menu__categories)).check(doesNotExist()); - onView(withText(R.string.main_menu__swap_nearby)).check(doesNotExist()); - } - - if (BuildConfig.FLAVOR.startsWith("full")) { - onView(withText(R.string.main_menu__latest_apps)).check(matches(isDisplayed())); - onView(withText(R.string.main_menu__categories)).check(matches(isDisplayed())); - onView(withText(R.string.main_menu__swap_nearby)).check(matches(isDisplayed())); - } - } - - @LargeTest - @Test - public void showSettings() { - ViewInteraction settingsBottonNavButton = onView( - allOf(withText(R.string.menu_settings), isDisplayed())); - settingsBottonNavButton.perform(click()); - onView(withText(R.string.preference_manage_installed_apps)).check(matches(isDisplayed())); - if (BuildConfig.FLAVOR.startsWith("basic") && BuildConfig.APPLICATION_ID.endsWith(".debug")) { - // TODO fix me by sorting out the flavor applicationId for debug builds in app/build.gradle - Log.i(TAG, "Skipping the remainder of showSettings test because it just crashes on basic .debug builds"); - return; - } - ViewInteraction manageInstalledAppsButton = onView( - allOf(withText(R.string.preference_manage_installed_apps), isDisplayed())); - manageInstalledAppsButton.perform(click()); - onView(withText(R.string.installed_apps__activity_title)).check(matches(isDisplayed())); - onView(withContentDescription(androidx.appcompat.R.string.abc_action_bar_up_description)).perform(click()); - - onView(withText(R.string.menu_manage)).perform(click()); - onView(withContentDescription(androidx.appcompat.R.string.abc_action_bar_up_description)).perform(click()); - - manageInstalledAppsButton.perform(click()); - onView(withText(R.string.installed_apps__activity_title)).check(matches(isDisplayed())); - onView(withContentDescription(androidx.appcompat.R.string.abc_action_bar_up_description)).perform(click()); - - onView(withText(R.string.menu_manage)).perform(click()); - onView(withContentDescription(androidx.appcompat.R.string.abc_action_bar_up_description)).perform(click()); - - onView(withText(R.string.about_title)).perform(click()); - onView(withId(R.id.version)).check(matches(isDisplayed())); - onView(withId(R.id.ok_button)).perform(click()); - - onView(withId(android.R.id.list_container)).perform(swipeUp()).perform(swipeUp()).perform(swipeUp()); - } - - @LargeTest - @Test - public void showUpdates() { - ViewInteraction updatesBottonNavButton = onView(allOf(withText(R.string.main_menu__updates), isDisplayed())); - updatesBottonNavButton.perform(click()); - onView(withText(R.string.main_menu__updates)).check(matches(isDisplayed())); - } - - @LargeTest - @Test - public void showCategories() { - onView(allOf(withText(R.string.menu_settings), isDisplayed())).perform(click()); - onView(allOf(withText(R.string.main_menu__categories), isDisplayed())).perform(click()); - onView(allOf(withId(R.id.swipe_to_refresh), isDisplayed())) - .perform(swipeDown()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeDown()) - .perform(swipeDown()) - .perform(swipeRight()) - .perform(swipeLeft()) - .perform(swipeLeft()) - .perform(swipeLeft()) - .perform(swipeLeft()) - .perform(click()); - } - - @LargeTest - @Test - public void showLatest() { - onView(Matchers.instanceOf(StatusBanner.class)).check(matches(not(isDisplayed()))); - onView(allOf(withText(R.string.menu_settings), isDisplayed())).perform(click()); - onView(allOf(withText(R.string.main_menu__latest_apps), isDisplayed())).perform(click()); - onView(allOf(withId(R.id.swipe_to_refresh), isDisplayed())) - .perform(swipeDown()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeDown()) - .perform(swipeUp()) - .perform(swipeDown()) - .perform(swipeDown()) - .perform(swipeDown()) - .perform(swipeDown()) - .perform(click()); - } - - @LargeTest - @Test - public void showSearch() { - onView(allOf(withText(R.string.menu_settings), isDisplayed())).perform(click()); - onView(withId(R.id.fab_search)).check(doesNotExist()); - onView(allOf(withText(R.string.main_menu__latest_apps), isDisplayed())).perform(click()); - onView(allOf(withId(R.id.fab_search), isDisplayed())).perform(click()); - onView(withId(R.id.sort)).check(matches(isDisplayed())); - onView(allOf(withId(R.id.search), isDisplayed())) - .perform(click()) - .perform(typeText("test")); - onView(allOf(withId(R.id.sort), isDisplayed())).perform(click()); - } -} diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/Netstat.java b/legacy/src/androidTest/java/org/fdroid/fdroid/Netstat.java deleted file mode 100644 index 26416afc4..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/Netstat.java +++ /dev/null @@ -1,373 +0,0 @@ -package org.fdroid.fdroid; - -import androidx.annotation.NonNull; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Replacer for the netstat utility, by reading the /proc filesystem it can find out the - * open connections of the system - * From http://www.ussg.iu.edu/hypermail/linux/kernel/0409.1/2166.html : - * It will first list all listening TCP sockets, and next list all established - * TCP connections. A typical entry of /proc/net/tcp would look like this (split - * up into 3 parts because of the length of the line): - *

    - * 46: 010310AC:9C4C 030310AC:1770 01 - * | | | | | |--> connection state - * | | | | |------> remote TCP port number - * | | | |-------------> remote IPv4 address - * | | |--------------------> local TCP port number - * | |---------------------------> local IPv4 address - * |----------------------------------> number of entry - *

    - * 00000150:00000000 01:00000019 00000000 - * | | | | |--> number of unrecovered RTO timeouts - * | | | |----------> number of jiffies until timer expires - * | | |----------------> timer_active (see below) - * | |----------------------> receive-queue - * |-------------------------------> transmit-queue - *

    - * 1000 0 54165785 4 cd1e6040 25 4 27 3 -1 - * | | | | | | | | | |--> slow start size threshold, - * | | | | | | | | | or -1 if the threshold - * | | | | | | | | | is >= 0xFFFF - * | | | | | | | | |----> sending congestion window - * | | | | | | | |-------> (ack.quick<<1)|ack.pingpong - * | | | | | | |---------> Predicted tick of soft clock - * | | | | | | (delayed ACK control data) - * | | | | | |------------> retransmit timeout - * | | | | |------------------> location of socket in memory - * | | | |-----------------------> socket reference count - * | | |-----------------------------> inode - * | |----------------------------------> unanswered 0-window probes - * |---------------------------------------------> uid - * - * @author Ciprian Dobre - */ -public class Netstat { - - /** - * Possible values for states in /proc/net/tcp - */ - private static final String[] STATES = { - "ESTBLSH", "SYNSENT", "SYNRECV", "FWAIT1", "FWAIT2", "TMEWAIT", - "CLOSED", "CLSWAIT", "LASTACK", "LISTEN", "CLOSING", "UNKNOWN", - }; - /** - * Pattern used when parsing through /proc/net/tcp - */ - private static final Pattern NET_PATTERN = Pattern.compile( - "\\d+:\\s+([\\dA-F]+):([\\dA-F]+)\\s+([\\dA-F]+):([\\dA-F]+)\\s+([\\dA-F]+)\\s+" + - "[\\dA-F]+:[\\dA-F]+\\s+[\\dA-F]+:[\\dA-F]+\\s+[\\dA-F]+\\s+([\\d]+)\\s+[\\d]+\\s+([\\d]+)"); - - /** - * Utility method that converts an address from a hex representation as founded in /proc to String representation - */ - private static String getAddress(final String hexa) { - try { - // first let's convert the address to Integer - final long v = Long.parseLong(hexa, 16); - // in /proc the order is little endian and java uses big endian order we also need to invert the order - final long adr = (v >>> 24) | (v << 24) | - ((v << 8) & 0x00FF0000) | ((v >> 8) & 0x0000FF00); - // and now it's time to output the result - return ((adr >> 24) & 0xff) + "." + ((adr >> 16) & 0xff) + "." + ((adr >> 8) & 0xff) + "." + (adr & 0xff); - } catch (Exception ex) { - ex.printStackTrace(); - return "0.0.0.0"; // NOPMD - } - } - - private static int getInt16(final String hexa) { - try { - return Integer.parseInt(hexa, 16); - } catch (Exception ex) { - ex.printStackTrace(); - return -1; - } - } - - /* - private static String getPName(final int pid) { - final Pattern pattern = Pattern.compile("Name:\\s*(\\S+)"); - try { - BufferedReader in = new BufferedReader(new FileReader("/proc/" + pid + "/status")); - String line; - while ((line = in.readLine()) != null) { - final Matcher matcher = pattern.matcher(line); - if (matcher.find()) { - return matcher.group(1); - } - } - in.close(); - } catch (Throwable t) { - // ignored - } - return "UNKNOWN"; - } - */ - - /** - * Method used to question for the connections currently opened - * - * @return The list of connections (as Connection objects) - */ - public static List getConnections() { - - final ArrayList net = new ArrayList<>(); - - // read from /proc/net/tcp the list of currently opened socket connections - try { - BufferedReader in = new BufferedReader(new FileReader("/proc/net/tcp")); - String line; - while ((line = in.readLine()) != null) { // NOPMD - Matcher matcher = NET_PATTERN.matcher(line); - if (matcher.find()) { - final Connection c = new Connection(); - c.setProtocol(Connection.TCP_CONNECTION); - net.add(c); - final String localPortHexa = matcher.group(2); - final String remoteAddressHexa = matcher.group(3); - final String remotePortHexa = matcher.group(4); - final String statusHexa = matcher.group(5); - //final String uid = matcher.group(6); - //final String inode = matcher.group(7); - c.setLocalPort(getInt16(localPortHexa)); - c.setRemoteAddress(getAddress(remoteAddressHexa)); - c.setRemotePort(getInt16(remotePortHexa)); - try { - c.setStatus(STATES[Integer.parseInt(statusHexa, 16) - 1]); - } catch (Exception ex) { - c.setStatus(STATES[11]); // unknown - } - c.setPID(-1); // unknown - c.setPName("UNKNOWN"); - } - } - in.close(); - } catch (Throwable t) { // NOPMD - // ignored - } - - // read from /proc/net/udp the list of currently opened socket connections - try { - BufferedReader in = new BufferedReader(new FileReader("/proc/net/udp")); - String line; - while ((line = in.readLine()) != null) { // NOPMD - Matcher matcher = NET_PATTERN.matcher(line); - if (matcher.find()) { - final Connection c = new Connection(); - c.setProtocol(Connection.UDP_CONNECTION); - net.add(c); - final String localPortHexa = matcher.group(2); - final String remoteAddressHexa = matcher.group(3); - final String remotePortHexa = matcher.group(4); - final String statusHexa = matcher.group(5); - //final String uid = matcher.group(6); - //final String inode = matcher.group(7); - c.setLocalPort(getInt16(localPortHexa)); - c.setRemoteAddress(getAddress(remoteAddressHexa)); - c.setRemotePort(getInt16(remotePortHexa)); - try { - c.setStatus(STATES[Integer.parseInt(statusHexa, 16) - 1]); - } catch (Exception ex) { - c.setStatus(STATES[11]); // unknown - } - c.setPID(-1); // unknown - c.setPName("UNKNOWN"); - } - } - in.close(); - } catch (Throwable t) { // NOPMD - // ignored - } - - // read from /proc/net/raw the list of currently opened socket connections - try { - BufferedReader in = new BufferedReader(new FileReader("/proc/net/raw")); - String line; - while ((line = in.readLine()) != null) { // NOPMD - Matcher matcher = NET_PATTERN.matcher(line); - if (matcher.find()) { - final Connection c = new Connection(); - c.setProtocol(Connection.RAW_CONNECTION); - net.add(c); - //final String localAddressHexa = matcher.group(1); - final String localPortHexa = matcher.group(2); - final String remoteAddressHexa = matcher.group(3); - final String remotePortHexa = matcher.group(4); - final String statusHexa = matcher.group(5); - //final String uid = matcher.group(6); - //final String inode = matcher.group(7); - c.setLocalPort(getInt16(localPortHexa)); - c.setRemoteAddress(getAddress(remoteAddressHexa)); - c.setRemotePort(getInt16(remotePortHexa)); - try { - c.setStatus(STATES[Integer.parseInt(statusHexa, 16) - 1]); - } catch (Exception ex) { - c.setStatus(STATES[11]); // unknown - } - c.setPID(-1); // unknown - c.setPName("UNKNOWN"); - } - } - in.close(); - } catch (Throwable t) { // NOPMD - // ignored - } - return net; - } - - /** - * Information about a given connection - * - * @author Ciprian Dobre - */ - public static class Connection { - - /** - * Types of connection protocol - ***/ - static final byte TCP_CONNECTION = 0; - static final byte UDP_CONNECTION = 1; - static final byte RAW_CONNECTION = 2; - /** - * serialVersionUID - */ - private static final long serialVersionUID = 1988671591829311032L; - /** - * The protocol of the connection (can be tcp, udp or raw) - */ - protected byte protocol; - - /** - * The owner of the connection (username) - */ - protected String powner; - - /** - * The pid of the owner process - */ - protected int pid; - - /** - * The name of the program owning the connection - */ - protected String pname; - - /** - * Local port - */ - protected int localPort; - - /** - * Remote address of the connection - */ - protected String remoteAddress; - - /** - * Remote port - */ - protected int remotePort; - - /** - * Status of the connection - */ - protected String status; - - public final byte getProtocol() { - return protocol; - } - - final void setProtocol(final byte protocol) { - this.protocol = protocol; - } - - final String getProtocolAsString() { - switch (protocol) { - case TCP_CONNECTION: - return "TCP"; - case UDP_CONNECTION: - return "UDP"; - case RAW_CONNECTION: - return "RAW"; - } - return "UNKNOWN"; - } - - public final String getPOwner() { - return powner; - } - - public final void setPOwner(final String owner) { - this.powner = owner; - } - - public final int getPID() { - return pid; - } - - final void setPID(final int pid) { - this.pid = pid; - } - - public final String getPName() { - return pname; - } - - final void setPName(final String pname) { - this.pname = pname; - } - - public final int getLocalPort() { - return localPort; - } - - final void setLocalPort(final int localPort) { - this.localPort = localPort; - } - - public final String getRemoteAddress() { - return remoteAddress; - } - - final void setRemoteAddress(final String remoteAddress) { - this.remoteAddress = remoteAddress; - } - - public final int getRemotePort() { - return remotePort; - } - - final void setRemotePort(final int remotePort) { - this.remotePort = remotePort; - } - - public final String getStatus() { - return status; - } - - final void setStatus(final String status) { - this.status = status; - } - - @NonNull - @Override - public String toString() { - return "[Prot=" + getProtocolAsString() + - ",POwner=" + powner + - ",PID=" + pid + - ",PName=" + pname + - ",LPort=" + localPort + - ",RAddress=" + remoteAddress + - ",RPort=" + remotePort + - ",Status=" + status + - "]"; - } - } -} \ No newline at end of file diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/SystemAnimations.java b/legacy/src/androidTest/java/org/fdroid/fdroid/SystemAnimations.java deleted file mode 100644 index f46d5495a..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/SystemAnimations.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.fdroid.fdroid; - -import android.Manifest; -import android.content.Context; -import android.content.pm.PackageManager; -import android.os.IBinder; -import android.util.Log; - -import java.lang.reflect.Method; - -/** - * @see Disable animations for Espresso tests - */ -class SystemAnimations { - public static final String TAG = "SystemAnimations"; - - private static final float DISABLED = 0.0f; - private static final float DEFAULT = 1.0f; - - static void disableAll(Context context) { - int permStatus = context.checkCallingOrSelfPermission(Manifest.permission.SET_ANIMATION_SCALE); - if (permStatus == PackageManager.PERMISSION_GRANTED) { - Log.i(TAG, "Manifest.permission.SET_ANIMATION_SCALE PERMISSION_GRANTED"); - setSystemAnimationsScale(DISABLED); - } else { - Log.i(TAG, "Disabling Manifest.permission.SET_ANIMATION_SCALE failed: " + permStatus); - } - } - - static void enableAll(Context context) { - int permStatus = context.checkCallingOrSelfPermission(Manifest.permission.SET_ANIMATION_SCALE); - if (permStatus == PackageManager.PERMISSION_GRANTED) { - Log.i(TAG, "Manifest.permission.SET_ANIMATION_SCALE PERMISSION_GRANTED"); - setSystemAnimationsScale(DEFAULT); - } else { - Log.i(TAG, "Enabling Manifest.permission.SET_ANIMATION_SCALE failed: " + permStatus); - } - } - - private static void setSystemAnimationsScale(float animationScale) { - try { - Class windowManagerStubClazz = Class.forName("android.view.IWindowManager$Stub"); - Method asInterface = windowManagerStubClazz.getDeclaredMethod("asInterface", IBinder.class); - Class serviceManagerClazz = Class.forName("android.os.ServiceManager"); - Method getService = serviceManagerClazz.getDeclaredMethod("getService", String.class); - Class windowManagerClazz = Class.forName("android.view.IWindowManager"); - Method setAnimationScales = windowManagerClazz.getDeclaredMethod("setAnimationScales", float[].class); - Method getAnimationScales = windowManagerClazz.getDeclaredMethod("getAnimationScales"); - - IBinder windowManagerBinder = (IBinder) getService.invoke(null, "window"); - Object windowManagerObj = asInterface.invoke(null, windowManagerBinder); - float[] currentScales = (float[]) getAnimationScales.invoke(windowManagerObj); - for (int i = 0; i < currentScales.length; i++) { - currentScales[i] = animationScale; - } - setAnimationScales.invoke(windowManagerObj, new Object[]{currentScales}); - } catch (Exception e) { - Log.e(TAG, "Could not change animation scale to " + animationScale + " :'("); - } - } -} diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/UiWatchers.java b/legacy/src/androidTest/java/org/fdroid/fdroid/UiWatchers.java deleted file mode 100644 index 002dc235a..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/UiWatchers.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.fdroid.fdroid; - -import android.util.Log; - -import androidx.test.uiautomator.UiDevice; -import androidx.test.uiautomator.UiObject; -import androidx.test.uiautomator.UiObjectNotFoundException; -import androidx.test.uiautomator.UiSelector; - -import java.util.ArrayList; -import java.util.List; - -@SuppressWarnings("MemberName") -class UiWatchers { - private static final String LOG_TAG = UiWatchers.class.getSimpleName(); - private final List mErrors = new ArrayList<>(); - - /** - * We can use the UiDevice registerWatcher to register a small script to be executed when the - * framework is waiting for a control to appear. Waiting may be the cause of an unexpected - * dialog on the screen and it is the time when the framework runs the registered watchers. - * This is a sample watcher looking for ANR and crashes. it closes it and moves on. You should - * create your own watchers and handle error logging properly for your type of tests. - */ - void registerAnrAndCrashWatchers() { - UiDevice.getInstance().registerWatcher("ANR", () -> { - UiObject window = new UiObject(new UiSelector().className( - "com.android.server.am.AppNotRespondingDialog")); - String errorText = null; - if (window.exists()) { - try { - errorText = window.getText(); - } catch (UiObjectNotFoundException e) { - Log.e(LOG_TAG, "dialog gone?", e); - } - onAnrDetected(errorText); - postHandler("Wait"); - return true; // triggered - } - return false; // no trigger - }); - // class names may have changed - UiDevice.getInstance().registerWatcher("ANR2", () -> { - UiObject window = new UiObject(new UiSelector().packageName("android") - .textContains("isn't responding.")); - if (window.exists()) { - String errorText = null; - try { - errorText = window.getText(); - } catch (UiObjectNotFoundException e) { - Log.e(LOG_TAG, "dialog gone?", e); - } - onAnrDetected(errorText); - postHandler("Wait"); - return true; // triggered - } - return false; // no trigger - }); - UiDevice.getInstance().registerWatcher("CRASH", () -> { - UiObject window = new UiObject(new UiSelector().className( - "com.android.server.am.AppErrorDialog")); - if (window.exists()) { - String errorText = null; - try { - errorText = window.getText(); - } catch (UiObjectNotFoundException e) { - Log.e(LOG_TAG, "dialog gone?", e); - } - onCrashDetected(errorText); - postHandler("OK"); - return true; // triggered - } - return false; // no trigger - }); - UiDevice.getInstance().registerWatcher("CRASH2", () -> { - UiObject window = new UiObject(new UiSelector().packageName("android") - .textContains("has stopped")); - if (window.exists()) { - String errorText = null; - try { - errorText = window.getText(); - } catch (UiObjectNotFoundException e) { - Log.e(LOG_TAG, "dialog gone?", e); - } - onCrashDetected(errorText); - postHandler("OK"); - return true; // triggered - } - return false; // no trigger - }); - Log.i(LOG_TAG, "Registered GUI Exception watchers"); - } - - private void onAnrDetected(String errorText) { - mErrors.add(errorText); - } - - private void onCrashDetected(String errorText) { - mErrors.add(errorText); - } - - /** - * Current implementation ignores the exception and continues. - */ - private void postHandler(String buttonText) { - // TODO: Add custom error logging here - String formatedOutput = String.format("UI Exception Message: %-20s\n", UiDevice - .getInstance().getCurrentPackageName()); - Log.e(LOG_TAG, formatedOutput); - UiObject buttonOK = new UiObject(new UiSelector().text(buttonText).enabled(true)); - // sometimes it takes a while for the OK button to become enabled - buttonOK.waitForExists(5000); - try { - buttonOK.click(); - } catch (UiObjectNotFoundException e) { - e.printStackTrace(); - } - } -} \ No newline at end of file diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/compat/FileCompatTest.java b/legacy/src/androidTest/java/org/fdroid/fdroid/compat/FileCompatTest.java deleted file mode 100644 index c629173d2..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/compat/FileCompatTest.java +++ /dev/null @@ -1,115 +0,0 @@ -package org.fdroid.fdroid.compat; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeTrue; - -import android.app.Instrumentation; -import android.content.Context; -import android.os.Build; -import android.os.Environment; -import android.util.Log; - -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.platform.app.InstrumentationRegistry; - -import org.fdroid.fdroid.AssetUtils; -import org.fdroid.fdroid.data.SanitizedFile; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.io.File; -import java.util.UUID; - - -/** - * This test needs to run on the emulator, even though it technically could - * run as a plain JUnit test, because it is testing the specifics of - * Android's symlink handling. - */ -@RunWith(AndroidJUnit4.class) -public class FileCompatTest { - - private static final String TAG = "FileCompatTest"; - - private SanitizedFile sourceFile; - private SanitizedFile destFile; - - @Before - public void setUp() { - Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); - File dir = getWriteableDir(instrumentation); - sourceFile = SanitizedFile.knownSanitized( - AssetUtils.copyAssetToDir(instrumentation.getContext(), "simpleIndex.jar", dir)); - destFile = new SanitizedFile(dir, "dest-" + UUID.randomUUID() + ".testproduct"); - assertFalse(destFile.exists()); - assertTrue(sourceFile.getAbsolutePath() + " should exist.", sourceFile.exists()); - } - - @After - public void tearDown() { - if (!sourceFile.delete()) { - Log.w(TAG, "Can't delete " + sourceFile.getAbsolutePath() + "."); - } - - if (!destFile.delete()) { - Log.w(TAG, "Can't delete " + destFile.getAbsolutePath() + "."); - } - } - - @Test - public void testSymlinkRuntime() { - FileCompat.symlinkRuntime(sourceFile, destFile); - assertTrue(destFile.getAbsolutePath() + " should exist after symlinking", destFile.exists()); - } - - @Test - public void testSymlinkLibcore() { - assumeTrue(Build.VERSION.SDK_INT >= 19); - FileCompat.symlinkLibcore(sourceFile, destFile); - assertTrue(destFile.getAbsolutePath() + " should exist after symlinking", destFile.exists()); - } - - @Test - public void testSymlinkOs() { - assumeTrue(Build.VERSION.SDK_INT >= 21); - FileCompat.symlinkOs(sourceFile, destFile); - assertTrue(destFile.getAbsolutePath() + " should exist after symlinking", destFile.exists()); - } - - /** - * Prefer internal over external storage, because external tends to be FAT filesystems, - * which don't support symlinks (which we test using this method). - */ - public static File getWriteableDir(Instrumentation instrumentation) { - Context context = instrumentation.getContext(); - Context targetContext = instrumentation.getTargetContext(); - - File[] dirsToTry = new File[]{ - context.getCacheDir(), - context.getFilesDir(), - targetContext.getCacheDir(), - targetContext.getFilesDir(), - context.getExternalCacheDir(), - context.getExternalFilesDir(null), - targetContext.getExternalCacheDir(), - targetContext.getExternalFilesDir(null), - Environment.getExternalStorageDirectory(), - }; - - return getWriteableDir(dirsToTry); - } - - private static File getWriteableDir(File[] dirsToTry) { - - for (File dir : dirsToTry) { - if (dir != null && dir.canWrite()) { - return dir; - } - } - - return null; - } -} diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/installer/ApkVerifierTest.java b/legacy/src/androidTest/java/org/fdroid/fdroid/installer/ApkVerifierTest.java deleted file mode 100644 index 2f93ecae5..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/installer/ApkVerifierTest.java +++ /dev/null @@ -1,449 +0,0 @@ -/* - * Copyright (C) 2016 Dominik Schürmann - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.installer; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import android.app.Instrumentation; -import android.net.Uri; -import android.os.Build; -import android.util.Log; - -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.platform.app.InstrumentationRegistry; - -import org.fdroid.fdroid.AssetUtils; -import org.fdroid.fdroid.compat.FileCompatTest; -import org.fdroid.fdroid.data.Apk; -import org.fdroid.index.v2.PermissionV2; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.TreeSet; - -/** - * This test checks the ApkVerifier by parsing a repo from permissionsRepo.xml - * and checking the listed permissions against the ones specified in apks' AndroidManifest, - * which have been specifically generated for this test. - *

    - * NOTE: This androidTest cannot run as a Robolectric test because the - * required methods from PackageManger are not included in Robolectric's Android API. - * java.lang.NoClassDefFoundError: java/util/jar/StrictJarFile - * at android.content.pm.PackageManager.getPackageArchiveInfo(PackageManager.java:3545) - */ -@RunWith(AndroidJUnit4.class) -public class ApkVerifierTest { - public static final String TAG = "ApkVerifierTest"; - - private Instrumentation instrumentation; - - private File sdk14Apk; - private File minMaxApk; - private File extendedPermissionsApk; - - @Before - public void setUp() { - instrumentation = InstrumentationRegistry.getInstrumentation(); - File dir = FileCompatTest.getWriteableDir(instrumentation); - assertTrue(dir.isDirectory()); - assertTrue(dir.canWrite()); - sdk14Apk = AssetUtils.copyAssetToDir(instrumentation.getContext(), - "org.fdroid.permissions.sdk14.apk", - dir - ); - minMaxApk = AssetUtils.copyAssetToDir(instrumentation.getContext(), - "org.fdroid.permissions.minmax.apk", - dir - ); - extendedPermissionsApk = AssetUtils.copyAssetToDir(instrumentation.getContext(), - "org.fdroid.extendedpermissionstest.apk", - dir - ); - assertTrue(sdk14Apk.exists()); - assertTrue(minMaxApk.exists()); - assertTrue(extendedPermissionsApk.exists()); - } - - @Test - public void testNulls() { - assertTrue(ApkVerifier.requestedPermissionsEqual(null, null)); - - String[] perms = new String[]{"Blah"}; - assertFalse(ApkVerifier.requestedPermissionsEqual(perms, null)); - assertFalse(ApkVerifier.requestedPermissionsEqual(null, perms)); - } - - @Test - public void testWithMinMax() - throws ApkVerifier.ApkPermissionUnequalException, ApkVerifier.ApkVerificationException { - Apk apk = new Apk(); - apk.packageName = "org.fdroid.permissions.minmax"; - apk.targetSdkVersion = 24; - ArrayList permissionsList = new ArrayList<>(); - permissionsList.add("android.permission.READ_CALENDAR"); - if (Build.VERSION.SDK_INT <= 18) { - permissionsList.add("android.permission.WRITE_EXTERNAL_STORAGE"); - } - if (Build.VERSION.SDK_INT >= 23) { - permissionsList.add("android.permission.ACCESS_FINE_LOCATION"); - } - apk.requestedPermissions = permissionsList.toArray(new String[0]); - - Uri uri = Uri.fromFile(minMaxApk); - ApkVerifier apkVerifier = new ApkVerifier(instrumentation.getContext(), uri, apk); - apkVerifier.verifyApk(); - - // still not throwing, because now we only throw when minMaxApk has more permissions than expected - permissionsList.add("ADDITIONAL_PERMISSION"); - apk.requestedPermissions = permissionsList.toArray(new String[0]); - apkVerifier.verifyApk(); - } - - @Test - public void testWithPrefix() { - Apk apk = new Apk(); - apk.packageName = "org.fdroid.permissions.sdk14"; - apk.targetSdkVersion = 14; - TreeSet expectedSet = new TreeSet<>(Arrays.asList( - "android.permission.AUTHENTICATE_ACCOUNTS", - "android.permission.MANAGE_ACCOUNTS", - "android.permission.READ_PROFILE", - "android.permission.WRITE_PROFILE", - "android.permission.GET_ACCOUNTS", - "android.permission.READ_CONTACTS", - "android.permission.WRITE_CONTACTS", - "android.permission.WRITE_EXTERNAL_STORAGE", - "android.permission.READ_EXTERNAL_STORAGE", - "android.permission.INTERNET", - "android.permission.ACCESS_NETWORK_STATE", - "android.permission.NFC", - "android.permission.READ_SYNC_SETTINGS", - "android.permission.WRITE_SYNC_SETTINGS", - "android.permission.WRITE_CALL_LOG", // implied-permission! - "android.permission.READ_CALL_LOG"// implied-permission! - )); - if (Build.VERSION.SDK_INT >= 29) { - expectedSet.add("android.permission.ACCESS_MEDIA_LOCATION"); - } - apk.requestedPermissions = expectedSet.toArray(new String[0]); - - Uri uri = Uri.fromFile(sdk14Apk); - - ApkVerifier apkVerifier = new ApkVerifier(instrumentation.getContext(), uri, apk); - - try { - apkVerifier.verifyApk(); - } catch (ApkVerifier.ApkVerificationException | - ApkVerifier.ApkPermissionUnequalException e) { - e.printStackTrace(); - fail(e.getMessage()); - } - } - - /** - * Additional permissions are okay. The user is simply - * warned about a permission that is not used inside the apk - */ - @Test - public void testAdditionalPermission() - throws ApkVerifier.ApkPermissionUnequalException, ApkVerifier.ApkVerificationException { - Apk apk = new Apk(); - apk.packageName = "org.fdroid.permissions.sdk14"; - apk.targetSdkVersion = 14; - apk.requestedPermissions = new String[]{ - "android.permission.AUTHENTICATE_ACCOUNTS", - "android.permission.MANAGE_ACCOUNTS", - "android.permission.READ_PROFILE", - "android.permission.WRITE_PROFILE", - "android.permission.GET_ACCOUNTS", - "android.permission.READ_CONTACTS", - "android.permission.WRITE_CONTACTS", - "android.permission.WRITE_EXTERNAL_STORAGE", - "android.permission.READ_EXTERNAL_STORAGE", - "android.permission.INTERNET", - "android.permission.ACCESS_NETWORK_STATE", - "android.permission.NFC", - "android.permission.READ_SYNC_SETTINGS", - "android.permission.WRITE_SYNC_SETTINGS", - "android.permission.WRITE_CALL_LOG", // implied-permission! - "android.permission.READ_CALL_LOG", // implied-permission! - "android.permission.FAKE_NEW_PERMISSION", - }; - - Uri uri = Uri.fromFile(sdk14Apk); - ApkVerifier apkVerifier = new ApkVerifier(instrumentation.getContext(), uri, apk); - apkVerifier.verifyApk(); - } - - /** - * Missing permissions are not okay! - * The user is then not warned about a permission that the apk uses! - */ - @Test - public void testMissingPermission() { - Apk apk = new Apk(); - apk.packageName = "org.fdroid.permissions.sdk14"; - apk.targetSdkVersion = 14; - apk.requestedPermissions = new String[]{ - //"android.permission.AUTHENTICATE_ACCOUNTS", - "android.permission.MANAGE_ACCOUNTS", - "android.permission.READ_PROFILE", - "android.permission.WRITE_PROFILE", - "android.permission.GET_ACCOUNTS", - "android.permission.READ_CONTACTS", - "android.permission.WRITE_CONTACTS", - "android.permission.WRITE_EXTERNAL_STORAGE", - "android.permission.READ_EXTERNAL_STORAGE", - "android.permission.INTERNET", - "android.permission.ACCESS_NETWORK_STATE", - "android.permission.NFC", - "android.permission.READ_SYNC_SETTINGS", - "android.permission.WRITE_SYNC_SETTINGS", - "android.permission.WRITE_CALL_LOG", // implied-permission! - "android.permission.READ_CALL_LOG", // implied-permission! - }; - - Uri uri = Uri.fromFile(sdk14Apk); - - ApkVerifier apkVerifier = new ApkVerifier(instrumentation.getContext(), uri, apk); - - try { - apkVerifier.verifyApk(); - fail(); - } catch (ApkVerifier.ApkVerificationException e) { - e.printStackTrace(); - fail(e.getMessage()); - } catch (ApkVerifier.ApkPermissionUnequalException e) { - e.printStackTrace(); - } - } - - @Test - public void testExtendedPerms() - throws ApkVerifier.ApkPermissionUnequalException, ApkVerifier.ApkVerificationException { - HashSet expectedSet = new HashSet<>(Arrays.asList( - "android.permission.ACCESS_NETWORK_STATE", - "android.permission.ACCESS_WIFI_STATE", - "android.permission.INTERNET", - "android.permission.READ_SYNC_STATS", - "android.permission.READ_SYNC_SETTINGS", - "android.permission.WRITE_SYNC_SETTINGS", - "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS", - "android.permission.READ_CONTACTS", - "android.permission.WRITE_CONTACTS", - "android.permission.READ_CALENDAR", - "android.permission.WRITE_CALENDAR" - )); - if (Build.VERSION.SDK_INT <= 18) { - expectedSet.add("android.permission.READ_EXTERNAL_STORAGE"); - expectedSet.add("android.permission.WRITE_EXTERNAL_STORAGE"); - } - if (Build.VERSION.SDK_INT <= 22) { - expectedSet.add("android.permission.GET_ACCOUNTS"); - expectedSet.add("android.permission.AUTHENTICATE_ACCOUNTS"); - expectedSet.add("android.permission.MANAGE_ACCOUNTS"); - } - if (Build.VERSION.SDK_INT >= 23) { - expectedSet.add("android.permission.CAMERA"); - if (Build.VERSION.SDK_INT <= 23) { - expectedSet.add("android.permission.CALL_PHONE"); - } - } - Apk apk = new Apk(); - apk.packageName = "urzip.at.or.at.urzip"; - ArrayList perms = new ArrayList<>(); - perms.add(new PermissionV2("android.permission.READ_EXTERNAL_STORAGE", 18)); - perms.add(new PermissionV2("android.permission.WRITE_SYNC_SETTINGS", null)); - perms.add(new PermissionV2("android.permission.ACCESS_NETWORK_STATE", null)); - perms.add(new PermissionV2("android.permission.WRITE_EXTERNAL_STORAGE", 18)); - perms.add(new PermissionV2("android.permission.WRITE_CONTACTS", null)); - perms.add(new PermissionV2("android.permission.ACCESS_WIFI_STATE", null)); - perms.add(new PermissionV2("android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS", null)); - perms.add(new PermissionV2("android.permission.WRITE_CALENDAR", null)); - perms.add(new PermissionV2("android.permission.READ_CONTACTS", null)); - perms.add(new PermissionV2("android.permission.READ_SYNC_SETTINGS", null)); - perms.add(new PermissionV2("android.permission.MANAGE_ACCOUNTS", 22)); - perms.add(new PermissionV2("android.permission.INTERNET", null)); - perms.add(new PermissionV2("android.permission.AUTHENTICATE_ACCOUNTS", 22)); - perms.add(new PermissionV2("android.permission.GET_ACCOUNTS", 22)); - perms.add(new PermissionV2("android.permission.READ_CALENDAR", null)); - perms.add(new PermissionV2("android.permission.READ_SYNC_STATS", null)); - apk.setRequestedPermissions(perms, 0); - ArrayList perms23 = new ArrayList<>(); - perms23.add(new PermissionV2("android.permission.CAMERA", null)); - perms23.add(new PermissionV2("android.permission.CALL_PHONE", 23)); - apk.setRequestedPermissions(perms23, 23); - HashSet actualSet = new HashSet<>(Arrays.asList(apk.requestedPermissions)); - for (String permission : expectedSet) { - if (!actualSet.contains(permission)) { - Log.i(TAG, permission + " in expected but not actual! (android-" - + Build.VERSION.SDK_INT + ")"); - } - } - for (String permission : actualSet) { - if (!expectedSet.contains(permission)) { - Log.i(TAG, permission + " in actual but not expected! (android-" - + Build.VERSION.SDK_INT + ")"); - } - } - String[] expectedPermissions = expectedSet.toArray(new String[0]); - assertTrue(ApkVerifier.requestedPermissionsEqual(expectedPermissions, apk.requestedPermissions)); - - String[] badPermissions = Arrays.copyOf(expectedPermissions, expectedPermissions.length + 1); - assertFalse(ApkVerifier.requestedPermissionsEqual(badPermissions, apk.requestedPermissions)); - badPermissions[badPermissions.length - 1] = "notarealpermission"; - assertFalse(ApkVerifier.requestedPermissionsEqual(badPermissions, apk.requestedPermissions)); - - Uri uri = Uri.fromFile(extendedPermissionsApk); - ApkVerifier apkVerifier = new ApkVerifier(instrumentation.getContext(), uri, apk); - apkVerifier.verifyApk(); - } - - @Test - public void testImpliedPerms() { - TreeSet expectedSet = new TreeSet<>(Arrays.asList( - "android.permission.ACCESS_NETWORK_STATE", - "android.permission.ACCESS_WIFI_STATE", - "android.permission.INTERNET", - "android.permission.READ_CALENDAR", - "android.permission.READ_CONTACTS", - "android.permission.READ_EXTERNAL_STORAGE", - "android.permission.READ_SYNC_SETTINGS", - "android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS", - "android.permission.WRITE_CALENDAR", - "android.permission.WRITE_CONTACTS", - "android.permission.WRITE_EXTERNAL_STORAGE", - "android.permission.WRITE_SYNC_SETTINGS", - "org.dmfs.permission.READ_TASKS", - "org.dmfs.permission.WRITE_TASKS" - )); - if (Build.VERSION.SDK_INT <= 22) { // maxSdkVersion="22" - expectedSet.addAll(Arrays.asList( - "android.permission.AUTHENTICATE_ACCOUNTS", - "android.permission.GET_ACCOUNTS", - "android.permission.MANAGE_ACCOUNTS" - )); - } - if (Build.VERSION.SDK_INT >= 29) { - expectedSet.add("android.permission.ACCESS_MEDIA_LOCATION"); - } - Apk apk = new Apk(); - apk.packageName = "urzip.at.or.at.urzip"; - apk.targetSdkVersion = 24; - ArrayList perms = new ArrayList<>(); - perms.add(new PermissionV2("android.permission.READ_EXTERNAL_STORAGE", 18)); - perms.add(new PermissionV2("android.permission.WRITE_SYNC_SETTINGS", null)); - perms.add(new PermissionV2("android.permission.ACCESS_NETWORK_STATE", null)); - perms.add(new PermissionV2("android.permission.WRITE_EXTERNAL_STORAGE", null)); - perms.add(new PermissionV2("android.permission.WRITE_CONTACTS", null)); - perms.add(new PermissionV2("android.permission.ACCESS_WIFI_STATE", null)); - perms.add(new PermissionV2("android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS", null)); - perms.add(new PermissionV2("android.permission.WRITE_CALENDAR", null)); - perms.add(new PermissionV2("android.permission.READ_CONTACTS", null)); - perms.add(new PermissionV2("android.permission.READ_SYNC_SETTINGS", null)); - perms.add(new PermissionV2("android.permission.MANAGE_ACCOUNTS", 22)); - perms.add(new PermissionV2("android.permission.INTERNET", null)); - perms.add(new PermissionV2("android.permission.AUTHENTICATE_ACCOUNTS", 22)); - perms.add(new PermissionV2("android.permission.GET_ACCOUNTS", 22)); - perms.add(new PermissionV2("android.permission.READ_CALENDAR", null)); - perms.add(new PermissionV2("org.dmfs.permission.READ_TASKS", null)); - perms.add(new PermissionV2("org.dmfs.permission.WRITE_TASKS", null)); - apk.setRequestedPermissions(perms, 0); - HashSet actualSet = new HashSet<>(Arrays.asList(apk.requestedPermissions)); - for (String permission : expectedSet) { - if (!actualSet.contains(permission)) { - Log.i(TAG, permission + " in expected but not actual! (android-" - + Build.VERSION.SDK_INT + ")"); - } - } - for (String permission : actualSet) { - if (!expectedSet.contains(permission)) { - Log.i(TAG, permission + " in actual but not expected! (android-" - + Build.VERSION.SDK_INT + ")"); - } - } - String[] expectedPermissions = expectedSet.toArray(new String[0]); - assertTrue(ApkVerifier.requestedPermissionsEqual(expectedPermissions, apk.requestedPermissions)); - - expectedSet = new TreeSet<>(Arrays.asList( - "android.permission.ACCESS_NETWORK_STATE", - "android.permission.ACCESS_WIFI_STATE", - "android.permission.AUTHENTICATE_ACCOUNTS", - "android.permission.GET_ACCOUNTS", - "android.permission.INTERNET", - "android.permission.MANAGE_ACCOUNTS", - "android.permission.READ_CALENDAR", - "android.permission.READ_CONTACTS", - "android.permission.READ_EXTERNAL_STORAGE", - "android.permission.READ_SYNC_SETTINGS", - "android.permission.WRITE_CALENDAR", - "android.permission.WRITE_CONTACTS", - "android.permission.WRITE_EXTERNAL_STORAGE", - "android.permission.WRITE_SYNC_SETTINGS", - "org.dmfs.permission.READ_TASKS", - "org.dmfs.permission.WRITE_TASKS" - )); - if (Build.VERSION.SDK_INT >= 29) { - expectedSet.add("android.permission.ACCESS_MEDIA_LOCATION"); - } - expectedPermissions = expectedSet.toArray(new String[expectedSet.size()]); - apk = new Apk(); - apk.packageName = "urzip.at.or.at.urzip"; - apk.targetSdkVersion = 23; - perms = new ArrayList<>(); - perms.add(new PermissionV2("android.permission.WRITE_SYNC_SETTINGS", null)); - perms.add(new PermissionV2("android.permission.ACCESS_NETWORK_STATE", null)); - perms.add(new PermissionV2("android.permission.WRITE_EXTERNAL_STORAGE", null)); - perms.add(new PermissionV2("android.permission.WRITE_CONTACTS", null)); - perms.add(new PermissionV2("android.permission.ACCESS_WIFI_STATE", null)); - perms.add(new PermissionV2("android.permission.WRITE_CALENDAR", null)); - perms.add(new PermissionV2("android.permission.READ_CONTACTS", null)); - perms.add(new PermissionV2("android.permission.READ_SYNC_SETTINGS", null)); - perms.add(new PermissionV2("android.permission.MANAGE_ACCOUNTS", null)); - perms.add(new PermissionV2("android.permission.INTERNET", null)); - perms.add(new PermissionV2("android.permission.AUTHENTICATE_ACCOUNTS", null)); - perms.add(new PermissionV2("android.permission.GET_ACCOUNTS", null)); - perms.add(new PermissionV2("android.permission.READ_CALENDAR", null)); - perms.add(new PermissionV2("org.dmfs.permission.READ_TASKS", null)); - perms.add(new PermissionV2("org.dmfs.permission.WRITE_TASKS", null)); - apk.setRequestedPermissions(perms, 0); - actualSet = new HashSet<>(Arrays.asList(apk.requestedPermissions)); - for (String permission : expectedSet) { - if (!actualSet.contains(permission)) { - Log.i(TAG, permission + " in expected but not actual! (android-" - + Build.VERSION.SDK_INT + ")"); - } - } - for (String permission : actualSet) { - if (!expectedSet.contains(permission)) { - Log.i(TAG, permission + " in actual but not expected! (android-" - + Build.VERSION.SDK_INT + ")"); - } - } - assertTrue(ApkVerifier.requestedPermissionsEqual(expectedPermissions, apk.requestedPermissions)); - } -} diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/net/DnsCacheTest.kt b/legacy/src/androidTest/java/org/fdroid/fdroid/net/DnsCacheTest.kt deleted file mode 100644 index 22c2e3bbd..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/net/DnsCacheTest.kt +++ /dev/null @@ -1,93 +0,0 @@ -package org.fdroid.fdroid.net - -import java.net.InetAddress -import java.util.Arrays -import org.fdroid.fdroid.Preferences -import org.junit.Assert -import org.junit.Test - -class DnsCacheTest { - - private val url1: String = "locaihost" - private val url2: String = "fdroid.org" - private val url3: String = "fdroid.net" - - private val ip1: InetAddress = InetAddress.getByName("127.0.0.1") - private val ip2: InetAddress = InetAddress.getByName("127.0.0.2") - private val ip3: InetAddress = InetAddress.getByName("127.0.0.3") - - private val list1: MutableList = Arrays.asList(ip1, ip2, ip3) - private val list2: MutableList = Arrays.asList(ip2) - private val list3: MutableList = Arrays.asList(ip3) - - @Test - fun basicCacheTest() { - // test setup - val prefs = Preferences.get() - prefs.setDnsCacheEnabledValue(true) - val testObject = DnsCache.get() - - // populate cache - testObject.insert(url1, list1) - testObject.insert(url2, list2) - testObject.insert(url3, list3) - - // check for cached lookup results - val testList1 = testObject.lookup(url1) - Assert.assertEquals(3, testList1.size.toLong()) - Assert.assertEquals(ip1.hostAddress, testList1[0]!!.hostAddress) - Assert.assertEquals(ip2.hostAddress, testList1[1]!!.hostAddress) - Assert.assertEquals(ip3.hostAddress, testList1[2]!!.hostAddress) - - // toggle preference (false) - prefs.setDnsCacheEnabledValue(false) - - // attempt non-cached lookup - val testList2 = testObject.lookup(url1) - Assert.assertNull(testList2) - - // toggle preference (true) - prefs.setDnsCacheEnabledValue(true) - - // confirm lookup results remain in cache - val testList3 = testObject.lookup(url2) - Assert.assertEquals(1, testList3.size.toLong()) - Assert.assertEquals(ip2.hostAddress, testList3[0].hostAddress) - - // test removal - val testList4 = testObject.remove(url2) - Assert.assertEquals(1, testList4.size.toLong()) - Assert.assertEquals(ip2.hostAddress, testList4[0].hostAddress) - val testList5 = testObject.lookup(url2) - Assert.assertNull(testList5) - } - - @Test - fun dnsRetryTest() { - // test setup - val prefs = Preferences.get() - prefs.setDnsCacheEnabledValue(true) - val testObject = DnsWithCache.get() - val testCache = DnsCache.get() - - // insert dummy value into cache - testCache.insert(url2, list2) - - // check initial status - val testList1 = testObject.lookup(url2) - Assert.assertEquals(1, testList1.size.toLong()) - Assert.assertEquals(ip2.hostAddress, testList1[0].hostAddress) - - // mismatch with dummy value should require retry and clear cache - val testFlag = testObject.shouldRetryRequest(url2) - Assert.assertTrue(testFlag) - val testList2 = testCache.lookup(url2) - Assert.assertNull(testList2) - - // subsequent lookup should cache actual dns result (not testing actual values) - val testList3 = testObject.lookup(url2) - Assert.assertNotNull(testList3) - val testList4 = testCache.lookup(url2) - Assert.assertNotNull(testList4) - } -} diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/net/HttpDownloaderTest.java b/legacy/src/androidTest/java/org/fdroid/fdroid/net/HttpDownloaderTest.java deleted file mode 100644 index 377eda97a..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/net/HttpDownloaderTest.java +++ /dev/null @@ -1,189 +0,0 @@ -package org.fdroid.fdroid.net; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import android.os.Build; -import android.util.Log; - -import androidx.core.util.Pair; -import androidx.test.filters.FlakyTest; - -import org.fdroid.download.DownloadRequest; -import org.fdroid.download.HttpDownloader; -import org.fdroid.download.HttpManager; -import org.fdroid.download.Mirror; -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.Utils; -import org.fdroid.index.v1.IndexV1UpdaterKt; -import org.fdroid.index.v2.IndexV2UpdaterKt; -import org.junit.Test; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -@FlakyTest -public class HttpDownloaderTest { - private static final String TAG = "HttpDownloaderTest"; - - private final HttpManager httpManager = new HttpManager( - Utils.getUserAgent(), - FDroidApp.queryString, - null, - null, - null, - true - ); - private static final Collection> URLS; - - // https://developer.android.com/reference/javax/net/ssl/SSLContext - static { - ArrayList> tempUrls = new ArrayList<>(Arrays.asList( - new Pair<>("https://f-droid.org/repo", IndexV2UpdaterKt.SIGNED_FILE_NAME), - // sites that use SNI for HTTPS - new Pair<>("https://mirrors.edge.kernel.org/", "debian/dists/stable/Release"), - new Pair<>("https://fdroid.tetaneutral.net/fdroid/repo/", IndexV1UpdaterKt.SIGNED_FILE_NAME), - new Pair<>("https://opencolo.mm.fcix.net/fdroid/repo/", "dev.lonami.klooni/en-US/phoneScreenshots/1-game.jpg"), - //new Pair<>("https://microg.org/fdroid/repo/index-v1.jar"), - //new Pair<>("https://grobox.de/fdroid/repo/index.jar"), - new Pair<>("https://guardianproject.info/fdroid/repo", IndexV2UpdaterKt.SIGNED_FILE_NAME), - new Pair<>("https://en.wikipedia.org", "/wiki/Index.html"), // no SNI but weird ipv6 lookup issues - new Pair<>("https://mirror.cyberbits.eu/fdroid/repo/", IndexV2UpdaterKt.SIGNED_FILE_NAME) // TLSv1.2 only and SNI - )); - if (Build.VERSION.SDK_INT < 26) { - // domains that use Let's Encrypt won't work on Android 7.1 and older - // https://gitlab.com/fdroid/fdroidclient/-/issues/2102 - tempUrls = new ArrayList<>(Arrays.asList( - new Pair<>("https://cloudflare.f-droid.org/repo", "dev.lonami.klooni/en-US/phoneScreenshots/1-game.jpg") - )); - } - URLS = tempUrls; - } - - private boolean receivedProgress; - - @Test - public void downloadUninterruptedTest() throws IOException, InterruptedException { - for (Pair pair : URLS) { - Log.i(TAG, "URL: " + pair.first + pair.second); - File destFile = File.createTempFile("dl-", ""); - List mirrors = Mirror.fromStrings(Collections.singletonList(pair.first)); - DownloadRequest request = new DownloadRequest(pair.second, mirrors, null, null, null); - HttpDownloader httpDownloader = new HttpDownloader(httpManager, request, destFile); - httpDownloader.download(); - assertTrue(destFile.exists()); - assertTrue(destFile.canRead()); - destFile.deleteOnExit(); - } - } - - @Test - public void downloadUninterruptedTestWithProgress() throws IOException, InterruptedException { - final CountDownLatch latch = new CountDownLatch(1); - String path = "index.jar"; - List mirrors = Mirror.fromStrings(Collections.singletonList("https://cloudflare.f-droid.org/repo/")); - receivedProgress = false; - File destFile = File.createTempFile("dl-", ""); - final DownloadRequest request = new DownloadRequest(path, mirrors, null, null, null); - final HttpDownloader httpDownloader = new HttpDownloader(httpManager, request, destFile); - httpDownloader.setListener((bytesRead, totalBytes) -> { - receivedProgress = true; - }); - new Thread() { - @Override - public void run() { - try { - httpDownloader.download(); - latch.countDown(); - } catch (IOException | InterruptedException e) { - e.printStackTrace(); - fail(); - } - } - }.start(); - latch.await(100, TimeUnit.SECONDS); // either 2 progress reports or 100 seconds - assertTrue(destFile.exists()); - assertTrue(destFile.canRead()); - assertTrue(receivedProgress); - destFile.deleteOnExit(); - } - - @Test - public void downloadHttpBasicAuth() throws IOException, InterruptedException { - String path = "myusername/supersecretpassword"; - List mirrors = Mirror.fromStrings(Collections.singletonList("https://httpbin.org/basic-auth/")); - File destFile = File.createTempFile("dl-", ""); - final DownloadRequest request = new DownloadRequest(path, mirrors, null, "myusername", "supersecretpassword"); - HttpDownloader httpDownloader = new HttpDownloader(httpManager, request, destFile); - httpDownloader.download(); - assertTrue(destFile.exists()); - assertTrue(destFile.canRead()); - destFile.deleteOnExit(); - } - - @Test(expected = IOException.class) - public void downloadHttpBasicAuthWrongPassword() throws IOException, InterruptedException { - String path = "myusername/supersecretpassword"; - List mirrors = Mirror.fromStrings(Collections.singletonList("https://httpbin.org/basic-auth/")); - File destFile = File.createTempFile("dl-", ""); - final DownloadRequest request = - new DownloadRequest(path, mirrors, null, "myusername", "wrongpassword"); - HttpDownloader httpDownloader = new HttpDownloader(httpManager, request, destFile); - httpDownloader.download(); - assertFalse(destFile.exists()); - destFile.deleteOnExit(); - } - - @Test(expected = IOException.class) - public void downloadHttpBasicAuthWrongUsername() throws IOException, InterruptedException { - String path = "myusername/supersecretpassword"; - List mirrors = Mirror.fromStrings(Collections.singletonList("https://httpbin.org/basic-auth/")); - File destFile = File.createTempFile("dl-", ""); - final DownloadRequest request = - new DownloadRequest(path, mirrors, null, "wrongusername", "supersecretpassword"); - HttpDownloader httpDownloader = new HttpDownloader(httpManager, request, destFile); - httpDownloader.download(); - assertFalse(destFile.exists()); - destFile.deleteOnExit(); - } - - @Test - public void downloadThenCancel() throws IOException, InterruptedException { - final CountDownLatch latch = new CountDownLatch(2); - String path = "index.jar"; - List mirrors = Mirror.fromStrings(Collections.singletonList("https://cloudflare.f-droid.org/repo/")); - File destFile = File.createTempFile("dl-", ""); - final DownloadRequest request = new DownloadRequest(path, mirrors, null, null, null); - final HttpDownloader httpDownloader = new HttpDownloader(httpManager, request, destFile); - httpDownloader.setListener((bytesRead, totalBytes) -> { - receivedProgress = true; - latch.countDown(); - }); - new Thread() { - @Override - public void run() { - try { - httpDownloader.download(); - fail(); - } catch (IOException e) { - Log.e(TAG, "Error downloading: ", e); - fail(); - } catch (InterruptedException e) { - // success! - } - } - }.start(); - latch.await(100, TimeUnit.SECONDS); // either 2 progress reports or 100 seconds - httpDownloader.cancelDownload(); - assertTrue(receivedProgress); - destFile.deleteOnExit(); - } -} diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/work/AppUpdateWorkerTest.kt b/legacy/src/androidTest/java/org/fdroid/fdroid/work/AppUpdateWorkerTest.kt deleted file mode 100644 index 7667b7a79..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/work/AppUpdateWorkerTest.kt +++ /dev/null @@ -1,183 +0,0 @@ -package org.fdroid.fdroid.work - -import android.os.Build.VERSION.SDK_INT -import android.text.format.DateUtils -import android.util.Log -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation -import androidx.work.Configuration -import androidx.work.ListenableWorker.Result -import androidx.work.WorkInfo.Companion.STOP_REASON_NOT_STOPPED -import androidx.work.WorkInfo.State.ENQUEUED -import androidx.work.WorkInfo.State.SUCCEEDED -import androidx.work.WorkManager -import androidx.work.testing.SynchronousExecutor -import androidx.work.testing.TestListenableWorkerBuilder -import androidx.work.testing.WorkManagerTestInitHelper -import io.mockk.every -import io.mockk.mockk -import io.mockk.mockkStatic -import io.mockk.verify -import java.io.IOException -import kotlin.test.assertEquals -import kotlin.test.assertTrue -import kotlin.test.fail -import kotlinx.coroutines.runBlocking -import org.fdroid.fdroid.AppUpdateManager -import org.fdroid.fdroid.FDroidApp -import org.fdroid.fdroid.Preferences -import org.fdroid.fdroid.Preferences.OVER_NETWORK_ALWAYS -import org.fdroid.fdroid.net.ConnectivityMonitorService -import org.fdroid.fdroid.net.ConnectivityMonitorService.FLAG_NET_METERED -import org.fdroid.fdroid.net.ConnectivityMonitorService.FLAG_NET_NO_LIMIT -import org.fdroid.fdroid.net.ConnectivityMonitorService.FLAG_NET_UNAVAILABLE -import org.fdroid.fdroid.work.AppUpdateWorker.Companion.UNIQUE_WORK_NAME_APP_UPDATE -import org.fdroid.fdroid.work.AppUpdateWorker.Companion.UNIQUE_WORK_NAME_AUTO_APP_UPDATE -import org.junit.Assume.assumeTrue -import org.junit.Before -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class AppUpdateWorkerTest { - - private val context get() = getInstrumentation().targetContext - private val workManager get() = WorkManager.getInstance(context) - private val preferences: Preferences by lazy { mockk() } - private val updateManager: AppUpdateManager by lazy { mockk() } - - @Before - fun setup() { - // MockKAgentException: Mocking static is supported starting from Android P - assumeTrue(SDK_INT >= 28) - - val config = Configuration.Builder() - .setMinimumLoggingLevel(Log.DEBUG) - .setExecutor(SynchronousExecutor()) - .build() - WorkManagerTestInitHelper.initializeTestWorkManager(context, config) - - mockkStatic(FDroidApp::getAppUpdateManager) - every { FDroidApp.getAppUpdateManager(any()) } returns updateManager - mockkStatic(Preferences::get) - every { Preferences.get() } returns preferences - every { preferences.isLocalRepoHttpsEnabled } returns false - every { preferences.isOnDemandDownloadAllowed } returns true - every { preferences.mirrorErrorData } returns emptyMap() - } - - @Test - @Throws(Exception::class) - fun testHappyPath() { - FDroidApp.networkState = FLAG_NET_NO_LIMIT - every { updateManager.updateApps() } returns true - - AppUpdateWorker.updateAppsNow(context) - - verify { updateManager.updateApps() } - - val workInfo = workManager.getWorkInfosForUniqueWork(UNIQUE_WORK_NAME_APP_UPDATE).get() - - assertEquals(1, workInfo.size) - assertEquals(SUCCEEDED, workInfo[0].state) - } - - @Test - @Throws(Exception::class) - fun testException() { - every { updateManager.updateApps() } throws IOException("foo bar") - - AppUpdateWorker.updateAppsNow(context) - - val workInfo = workManager.getWorkInfosForUniqueWork(UNIQUE_WORK_NAME_APP_UPDATE).get() - - assertEquals(1, workInfo.size) - assertEquals(ENQUEUED, workInfo[0].state) - assertEquals(STOP_REASON_NOT_STOPPED, workInfo[0].stopReason) - - verify(exactly = 1) { updateManager.updateApps() } - - // build the worker manually, so we can see what result it returns - runBlocking { - val worker = TestListenableWorkerBuilder(context, runAttemptCount = 3) - .build() - assertEquals(Result.retry(), worker.doWork()) - } - verify(exactly = 2) { updateManager.updateApps() } - - // now build the worker with a higher runAttemptCount - runBlocking { - val worker = TestListenableWorkerBuilder(context, runAttemptCount = 4) - .build() - assertEquals(Result.failure(), worker.doWork()) // now it fails - } - verify(exactly = 3) { updateManager.updateApps() } - } - - @Test - @Throws(Exception::class) - fun testNotRunningWhenNoNetwork() { - mockkStatic(ConnectivityMonitorService::getNetworkState) - every { ConnectivityMonitorService.getNetworkState(any()) } returns FLAG_NET_UNAVAILABLE - FDroidApp.networkState = FLAG_NET_UNAVAILABLE - - try { - AppUpdateWorker.updateAppsNow(context) - fail() - } catch (e: NullPointerException) { - // can't send toast from these tests - assertTrue(e.message?.contains("toast") == true) - } - - val workInfo = workManager.getWorkInfosForUniqueWork(UNIQUE_WORK_NAME_APP_UPDATE).get() - assertEquals(0, workInfo.size) - } - - @Test - @Throws(Exception::class) - fun testNotRunningOnMeteredNetwork() { - FDroidApp.networkState = FLAG_NET_METERED - every { preferences.isOnDemandDownloadAllowed } returns false - - try { - AppUpdateWorker.updateAppsNow(context) - fail() - } catch (e: NullPointerException) { - // can't send toast from these tests - assertTrue(e.message?.contains("toast") == true) - } - - val workInfo = workManager.getWorkInfosForUniqueWork(UNIQUE_WORK_NAME_APP_UPDATE).get() - assertEquals(0, workInfo.size) - } - - @Test - @Throws(Exception::class) - fun testPeriodicWork() { - every { preferences.isAutoDownloadEnabled } returns true - every { preferences.updateInterval } returns DateUtils.HOUR_IN_MILLIS * 4 - every { preferences.overWifi } returns OVER_NETWORK_ALWAYS - every { preferences.overData } returns OVER_NETWORK_ALWAYS - - AppUpdateWorker.scheduleOrCancel(context) - - val workInfo = workManager.getWorkInfosForUniqueWork(UNIQUE_WORK_NAME_AUTO_APP_UPDATE).get() - assertEquals(1, workInfo.size) - assertEquals(ENQUEUED, workInfo[0].state) - val id = workInfo[0].id - - every { updateManager.updateApps() } returns true - - val testDriver = WorkManagerTestInitHelper.getTestDriver(context) ?: fail() - testDriver.setPeriodDelayMet(id) - testDriver.setAllConstraintsMet(id) - - verify { updateManager.updateApps() } - - val workInfo2 = workManager.getWorkInfosForUniqueWork(UNIQUE_WORK_NAME_AUTO_APP_UPDATE) - .get() - assertEquals(1, workInfo2.size) - assertEquals(ENQUEUED, workInfo2[0].state) // stays enqueued for next time - } - -} diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/work/CleanCacheWorkerTest.java b/legacy/src/androidTest/java/org/fdroid/fdroid/work/CleanCacheWorkerTest.java deleted file mode 100644 index 4e0a03ae6..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/work/CleanCacheWorkerTest.java +++ /dev/null @@ -1,113 +0,0 @@ -package org.fdroid.fdroid.work; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import android.app.Instrumentation; - -import androidx.arch.core.executor.testing.InstantTaskExecutorRule; -import androidx.test.filters.LargeTest; -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.work.OneTimeWorkRequest; -import androidx.work.WorkInfo; - -import com.google.common.util.concurrent.ListenableFuture; - -import org.apache.commons.io.FileUtils; -import org.fdroid.fdroid.compat.FileCompatTest; -import org.junit.Rule; -import org.junit.Test; - -import java.io.File; -import java.io.IOException; -import java.util.concurrent.ExecutionException; - -/** - * This test cannot run on Robolectric unfortunately since it does not support - * getting the timestamps from the files completely. - *

    - * This is marked with {@link LargeTest} because it always fails on the emulator - * tests on GitLab CI. That excludes it from the test run there. - */ -@LargeTest -public class CleanCacheWorkerTest { - public static final String TAG = "CleanCacheWorkerEmulatorTest"; - - @Rule - public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule(); - - @Rule - public WorkManagerTestRule workManagerTestRule = new WorkManagerTestRule(); - - @Test - public void testWorkRequest() throws ExecutionException, InterruptedException { - OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(CleanCacheWorker.class).build(); - workManagerTestRule.workManager.enqueue(request).getResult(); - ListenableFuture workInfo = workManagerTestRule.workManager.getWorkInfoById(request.getId()); - assertEquals(WorkInfo.State.SUCCEEDED, workInfo.get().getState()); - } - - @Test - public void testClearOldFiles() throws IOException, InterruptedException { - Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); - File tempDir = FileCompatTest.getWriteableDir(instrumentation); - assertTrue(tempDir.isDirectory()); - assertTrue(tempDir.canWrite()); - - File dir = new File(tempDir, "F-Droid-test.clearOldFiles"); - FileUtils.deleteQuietly(dir); - assertTrue(dir.mkdirs()); - assertTrue(dir.isDirectory()); - - File first = new File(dir, "first"); - first.deleteOnExit(); - - File second = new File(dir, "second"); - second.deleteOnExit(); - - assertFalse(first.exists()); - assertFalse(second.exists()); - - assertTrue(first.createNewFile()); - assertTrue(first.exists()); - - Thread.sleep(7000); - assertTrue(second.createNewFile()); - assertTrue(second.exists()); - - CleanCacheWorker.clearOldFiles(dir, 3000); // check all in dir - assertFalse(first.exists()); - assertTrue(second.exists()); - - Thread.sleep(7000); - CleanCacheWorker.clearOldFiles(second, 3000); // check just second file - assertFalse(first.exists()); - assertFalse(second.exists()); - - // make sure it doesn't freak out on a non-existent file - File nonexistent = new File(tempDir, "nonexistent"); - CleanCacheWorker.clearOldFiles(nonexistent, 1); - CleanCacheWorker.clearOldFiles(null, 1); - } - - /* - // TODO enable this once getImageCacheDir() can be mocked or provide a writable dir in the test - @Test - public void testDeleteOldIcons() throws IOException { - Context context = InstrumentationRegistry.getInstrumentation().getContext(); - File imageCacheDir = Utils.getImageCacheDir(context); - imageCacheDir.mkdirs(); - assertTrue(imageCacheDir.isDirectory()); - File oldIcon = new File(imageCacheDir, "old.png"); - assertTrue(oldIcon.createNewFile()); - Assume.assumeTrue("test environment must be able to set LastModified time", - oldIcon.setLastModified(System.currentTimeMillis() - (DateUtils.DAY_IN_MILLIS * 370))); - File currentIcon = new File(imageCacheDir, "current.png"); - assertTrue(currentIcon.createNewFile()); - CleanCacheWorker.deleteOldIcons(context); - assertTrue(currentIcon.exists()); - assertFalse(oldIcon.exists()); - } - */ -} diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/work/FDroidMetricsWorkerTest.java b/legacy/src/androidTest/java/org/fdroid/fdroid/work/FDroidMetricsWorkerTest.java deleted file mode 100644 index 19f6a8c46..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/work/FDroidMetricsWorkerTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2021 Hans-Christoph Steiner - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.work; - -import static org.junit.Assert.assertEquals; - -import androidx.arch.core.executor.testing.InstantTaskExecutorRule; -import androidx.test.filters.LargeTest; -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.work.OneTimeWorkRequest; -import androidx.work.WorkInfo; - -import com.google.common.util.concurrent.ListenableFuture; - -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; - -import java.io.IOException; -import java.util.concurrent.ExecutionException; - -/** - * This actually runs {@link FDroidMetricsWorker} on a device/emulator and - * submits a report to https://metrics.cleaninsights.org - *

    - * This is marked with {@link LargeTest} to exclude it from running on GitLab CI - * because it always fails on the emulator tests there. Also, it actually submits - * a report. - */ -@LargeTest -public class FDroidMetricsWorkerTest { - public static final String TAG = "FDroidMetricsWorkerTest"; - - @Rule - public InstantTaskExecutorRule instantTaskExecutorRule = new InstantTaskExecutorRule(); - - @Rule - public WorkManagerTestRule workManagerTestRule = new WorkManagerTestRule(); - - /** - * A test for easy manual testing. - */ - @Ignore - @Test - public void testGenerateReport() throws IOException { - String json = FDroidMetricsWorker.generateReport( - InstrumentationRegistry.getInstrumentation().getTargetContext()); - System.out.println(json); - } - - @Test - public void testWorkRequest() throws ExecutionException, InterruptedException { - OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(FDroidMetricsWorker.class).build(); - workManagerTestRule.workManager.enqueue(request).getResult(); - ListenableFuture workInfo = workManagerTestRule.workManager.getWorkInfoById(request.getId()); - assertEquals(WorkInfo.State.SUCCEEDED, workInfo.get().getState()); - } -} diff --git a/legacy/src/androidTest/java/org/fdroid/fdroid/work/WorkManagerTestRule.java b/legacy/src/androidTest/java/org/fdroid/fdroid/work/WorkManagerTestRule.java deleted file mode 100644 index c6a03d1b6..000000000 --- a/legacy/src/androidTest/java/org/fdroid/fdroid/work/WorkManagerTestRule.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.fdroid.fdroid.work; - -import android.app.Instrumentation; -import android.content.Context; -import android.util.Log; - -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.work.Configuration; -import androidx.work.WorkManager; -import androidx.work.testing.SynchronousExecutor; -import androidx.work.testing.WorkManagerTestInitHelper; - -import org.junit.rules.TestWatcher; -import org.junit.runner.Description; - -public class WorkManagerTestRule extends TestWatcher { - WorkManager workManager; - - @Override - protected void starting(Description description) { - final Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); - Context targetContext = instrumentation.getTargetContext(); - Configuration configuration = new Configuration.Builder() - .setMinimumLoggingLevel(Log.DEBUG) - .setExecutor(new SynchronousExecutor()) - .build(); - - WorkManagerTestInitHelper.initializeTestWorkManager(targetContext, configuration); - workManager = WorkManager.getInstance(targetContext); - } -} diff --git a/legacy/src/androidTest/java/org/fdroid/repo/RepoManagerAddAllIntegrationTest.kt b/legacy/src/androidTest/java/org/fdroid/repo/RepoManagerAddAllIntegrationTest.kt deleted file mode 100644 index 15adaec8c..000000000 --- a/legacy/src/androidTest/java/org/fdroid/repo/RepoManagerAddAllIntegrationTest.kt +++ /dev/null @@ -1,169 +0,0 @@ -package org.fdroid.repo - -import android.app.Application -import androidx.test.core.app.ApplicationProvider -import androidx.test.ext.junit.runners.AndroidJUnit4 -import app.cash.turbine.TurbineTestContext -import app.cash.turbine.test -import kotlinx.coroutines.runBlocking -import org.fdroid.fdroid.data.DBHelper -import org.fdroid.fdroid.net.DownloaderFactory -import org.fdroid.index.RepoManager -import org.junit.Assume.assumeTrue -import org.junit.Before -import org.junit.Rule -import org.junit.Test -import org.junit.rules.TemporaryFolder -import org.junit.runner.RunWith -import org.slf4j.LoggerFactory.getLogger -import kotlin.test.assertIs -import kotlin.time.Duration.Companion.seconds - -@RunWith(AndroidJUnit4::class) -internal class RepoManagerAddAllIntegrationTest { - - @get:Rule - var folder: TemporaryFolder = TemporaryFolder() - - private val repos = listOf( - "https://raw.githubusercontent.com/2br-2b/Fdroid-repo/master/fdroid/repo", - "https://anonymousmessenger.ly/fdroid/repo", - "https://fdroid.beocode.eu/fdroid/repo", - "https://mobileapp.bitwarden.com/fdroid/repo", - "https://briarproject.org/fdroid/repo", - "https://fdroid.bromite.org/fdroid/repo", - "https://fdroid.gitlab.io/ccc/fdroid/repo", - "https://www.collaboraoffice.com/downloads/fdroid/repo", - "https://bubu1.eu/cctg/fdroid/repo", - "https://static.cryptomator.org/android/fdroid/repo", - "https://lucaapp.gitlab.io/fdroid-repository/fdroid/repo", - "https://divestos.org/apks/official/fdroid/repo", - "https://divestos.org/apks/unofficial/fdroid/repo", - "https://raw.githubusercontent.com/efreak/auto-daily-fdroid/main/fdroid/repo", - "https://bubu1.eu/fdroidclassic/fdroid/repo", - "https://f5a.typed.icu/fdroid/repo", - "https://fdroid.fedilab.app/repo", - "https://raw.githubusercontent.com/Tobi823/ffupdaterrepo/master/fdroid/repo", - "https://rfc2822.gitlab.io/fdroid-firefox/fdroid/repo", - "https://raw.githubusercontent.com/Five-Prayers/fdroid-repo-stable/main/fdroid/repo", - "https://codeberg.org/florian-obernberger/fdroid-repo/raw/branch/main/repo", - "https://fdroid.frostnerd.com/fdroid/repo", - "https://pili.qi0.de/fdroid/repo", - "https://gitjournal.io/fdroid/repo", - "https://guardianproject.info/fdroid/repo", - "https://s3.amazonaws.com/guardianproject/fdroid/repo", - "https://guardianproject.info/fdroid/repo", - "https://f-droid.i2p.io/repo", - "https://iitc.app/fdroid/repo", - "https://jhass.github.io/insporation/fdroid/repo", - "https://raw.githubusercontent.com/iodeOS/fdroid/master/fdroid/repo", - "https://apt.izzysoft.de/fdroid/repo", - "https://android.izzysoft.de/repo", - "https://jak-linux.org/fdroid/repo", - "https://julianfairfax.gitlab.io/fdroid-repo/fdroid/repo", - "https://kaffeemitkoffein.de/fdroid/repo", - "https://store.nethunter.com/repo", - "https://cdn.kde.org/android/stable-releases/fdroid/repo", - "https://repo.kuschku.de/fdroid/repo", - "https://fdroid.libretro.com/repo", - "https://fdroid.ltheinrich.de/fdroid/repo", - "https://ltt.rs/fdroid/repo", - "https://pili.qi0.de/fdroid/repo", - "https://fdroid.metatransapps.com/fdroid/repo", - "https://microg.org/fdroid/repo", - "https://fdroid.mm20.de/repo", - "https://repo.mobilsicher.de/fdroid/repo", - "https://molly.im/fdroid/repo", - "https://molly.im/fdroid/foss/fdroid/repo", - "https://f-droid.monerujo.io/fdroid/repo", - "https://releases.nailyk.fr/repo", - "https://nanolx.org/fdroid/repo", - "https://www.nanolx.org/fdroid/repo", - "https://repo.netsyms.com/fdroid/repo", - "https://archive.newpipe.net/fdroid/repo", - "https://repo.nononsenseapps.com/fdroid/repo", - "https://fdroid.novy.software/repo", - "https://raw.githubusercontent.com/nucleus-ffm/Nucleus-F-Droid-Repo/master/fdroid/repo", - "https://obfusk.ch/fdroid/repo", - "https://ouchadam.github.io/fdroid-repository/repo", - "https://fdroid.partidopirata.com.ar/fdroid/repo", - "https://thecapslock.gitlab.io/fdroid-patched-apps/fdroid/repo", - "https://fdroid.i2pd.xyz/fdroid/repo", - "https://fdroid.rami.io/fdroid/repo", - "https://thedoc.eu.org/fdroid/repo", - "https://repo.samourai.io/fdroid/repo", - "https://fdroid.a3.pm/seabear/repo", - "https://raw.githubusercontent.com/jackbonadies/seekerandroid/fdroid/fdroid/repo", - "https://fdroid.getsession.org/fdroid/repo", - "https://raw.githubusercontent.com/simlar/simlar-fdroid-repo/master/fdroid/repo", - "https://s2.spiritcroc.de/fdroid/repo", - "https://haagch.frickel.club/files/fdroid/repo", - "https://submarine.strangled.net/fdroid/repo", - "https://service.tagesschau.de/app/repo", - "https://fdroid-repo.calyxinstitute.org/fdroid/repo", - "https://releases.threema.ch/fdroid/repo", - "https://raw.githubusercontent.com/chrisgch/tca/master/fdroid/repo", - "https://fdroid.twinhelix.com/fdroid/repo", - "https://secfirst.org/fdroid/repo", - "https://fdroid.videlibri.de/repo", - "https://guardianproject-wind.s3.amazonaws.com/fdroid/repo", - "https://raw.githubusercontent.com/xarantolus/fdroid/main/fdroid/repo", - "https://zimbelstern.eu/fdroid/repo", - ) - - private val log = getLogger(this::class.java.simpleName) - private val context = ApplicationProvider.getApplicationContext() - private val db = DBHelper.getDb(context) // real DB - private val httpManager = DownloaderFactory.HTTP_MANAGER - private val downloaderFactory = DownloaderFactory.INSTANCE - - private val repoManager = RepoManager(context, db, downloaderFactory, httpManager) - - @Before - fun optIn() { - // Careful! This will add lots of repos to your live DB - assumeTrue(false) // don't run integration tests with real repos all the time - } - - @Test - fun addAllTheThings() = runBlocking { - repos.forEach { addRepo(it) } - } - - private suspend fun addRepo(url: String) { - log.info("Fetching $url") - repoManager.fetchRepositoryPreview(url = url, proxy = null) - repoManager.addRepoState.test(timeout = 15.seconds) { - val fetchState = awaitFinalFetchState() - if (fetchState is Fetching && fetchState.fetchResult != null) { - repoManager.addFetchedRepository() - val item = awaitItem() - if (item is Adding) { - // await final state - assertIs(awaitItem()) - } else { - // was already final state - assertIs(item) - } - log.info(" Added") - } else if (fetchState is AddRepoError) { - log.error(" $fetchState $url") - } - repoManager.abortAddingRepository() - assertIs(awaitItem()) - cancelAndIgnoreRemainingEvents() - } - log.info("End $url") - } - - private suspend fun TurbineTestContext.awaitFinalFetchState(): AddRepoState { - var item = awaitItem() - log.info(" $item") - while (item is None || (item is Fetching && !item.done)) { - item = awaitItem() - log.info(" $item") - } - log.info(" final: $item") - return item - } -} diff --git a/legacy/src/androidTest/proguard-rules.pro b/legacy/src/androidTest/proguard-rules.pro deleted file mode 100644 index ce7d3875f..000000000 --- a/legacy/src/androidTest/proguard-rules.pro +++ /dev/null @@ -1,35 +0,0 @@ --dontoptimize --dontwarn --dontobfuscate - --dontwarn android.test.** --dontwarn android.support.test.** --dontnote junit.framework.** --dontnote junit.runner.** - -# Uncomment this if you use Mockito -#-dontwarn org.mockito.** - --keep class org.hamcrest.** { *; } --dontwarn org.hamcrest.** - --keep class org.junit.** { *; } --dontwarn org.junit.** - --keep class junit.** { *; } --dontwarn junit.** - --keep class kotlin.reflect.** { *; } --keep class io.mockk.** { *; } --keep class kotlin.io.** { *; } --keep class kotlin.collections.** { *; } --keep class java.util.concurrent.Executor { *; } - --keep class androidx.arch.core.executor.ArchTaskExecutor {*;} - --keep class org.fdroid.download.Mirror { - public static *** fromStrings(***); -} - -# This is necessary so that RemoteWorkManager can be initialized (also marked with @Keep) --keep class androidx.work.** { *; } diff --git a/legacy/src/androidTestFull/java/org/fdroid/fdroid/MainActivityEspressoTestFull.java b/legacy/src/androidTestFull/java/org/fdroid/fdroid/MainActivityEspressoTestFull.java deleted file mode 100644 index 56ab7e5f4..000000000 --- a/legacy/src/androidTestFull/java/org/fdroid/fdroid/MainActivityEspressoTestFull.java +++ /dev/null @@ -1,303 +0,0 @@ -package org.fdroid.fdroid; - -import static androidx.test.espresso.Espresso.onView; -import static androidx.test.espresso.action.ViewActions.click; -import static androidx.test.espresso.action.ViewActions.swipeDown; -import static androidx.test.espresso.action.ViewActions.swipeLeft; -import static androidx.test.espresso.action.ViewActions.swipeRight; -import static androidx.test.espresso.action.ViewActions.swipeUp; -import static androidx.test.espresso.action.ViewActions.typeText; -import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist; -import static androidx.test.espresso.assertion.ViewAssertions.matches; -import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; -import static androidx.test.espresso.matcher.ViewMatchers.withContentDescription; -import static androidx.test.espresso.matcher.ViewMatchers.withId; -import static androidx.test.espresso.matcher.ViewMatchers.withText; -import static org.hamcrest.CoreMatchers.allOf; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertTrue; -import static org.junit.Assume.assumeTrue; - -import android.Manifest; -import android.app.ActivityManager; -import android.app.Instrumentation; -import android.content.Context; -import android.os.Build; -import android.util.Log; - -import androidx.core.content.ContextCompat; -import androidx.test.core.app.ApplicationProvider; -import androidx.test.espresso.IdlingPolicies; -import androidx.test.espresso.ViewInteraction; -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.filters.LargeTest; -import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.rule.ActivityTestRule; -import androidx.test.rule.GrantPermissionRule; -import androidx.test.uiautomator.UiDevice; -import androidx.test.uiautomator.UiObject; -import androidx.test.uiautomator.UiObjectNotFoundException; -import androidx.test.uiautomator.UiSelector; - -import org.fdroid.fdroid.views.StatusBanner; -import org.fdroid.fdroid.views.main.MainActivity; -import org.hamcrest.Matchers; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.io.IOException; -import java.util.concurrent.TimeUnit; - -@LargeTest -@RunWith(AndroidJUnit4.class) -public class MainActivityEspressoTestFull { - public static final String TAG = "MainActivityEspressoTestFull"; - - /** - * Emulators older than {@code android-25} seem to fail at running Espresso tests. - *

    - * ARM emulators are too slow to run these tests in a useful way. The sad - * thing is that it would probably work if Android didn't put up the ANR - * "Process system isn't responding" on boot each time. There seems to be no - * way to increase the ANR timeout. - */ - private static boolean canRunEspresso() { - if (Build.VERSION.SDK_INT < 25 - || Build.SUPPORTED_ABIS[0].startsWith("arm") && isEmulator()) { - Log.e(TAG, "SKIPPING TEST: ARM emulators are too slow to run these tests in a useful way"); - return false; - } - return true; - } - - @BeforeClass - public static void classSetUp() { - IdlingPolicies.setIdlingResourceTimeout(10, TimeUnit.MINUTES); - IdlingPolicies.setMasterPolicyTimeout(10, TimeUnit.MINUTES); - if (!canRunEspresso()) { - return; - } - Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); - try { - UiDevice.getInstance(instrumentation) - .executeShellCommand("pm grant " - + instrumentation.getTargetContext().getPackageName() - + " android.permission.SET_ANIMATION_SCALE"); - } catch (IOException e) { - e.printStackTrace(); - } - SystemAnimations.disableAll(ApplicationProvider.getApplicationContext()); - - // dismiss the ANR or any other system dialogs that might be there - UiObject button = new UiObject(new UiSelector().text("Wait").enabled(true)); - try { - button.click(); - } catch (UiObjectNotFoundException e) { - Log.d(TAG, e.getLocalizedMessage()); - } - new UiWatchers().registerAnrAndCrashWatchers(); - - Context context = instrumentation.getTargetContext(); - ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo(); - ActivityManager activityManager = ContextCompat.getSystemService(context, ActivityManager.class); - activityManager.getMemoryInfo(mi); - long percentAvail = mi.availMem / mi.totalMem; - Log.i(TAG, "RAM: " + mi.availMem + " / " + mi.totalMem + " = " + percentAvail); - } - - @AfterClass - public static void classTearDown() { - SystemAnimations.enableAll(ApplicationProvider.getApplicationContext()); - } - - public static boolean isEmulator() { - return Build.FINGERPRINT.startsWith("generic") - || Build.FINGERPRINT.startsWith("unknown") - || Build.MODEL.contains("google_sdk") - || Build.MODEL.contains("Emulator") - || Build.MODEL.contains("Android SDK built for x86") - || Build.MANUFACTURER.contains("Genymotion") - || Build.BRAND.startsWith("generic") && Build.DEVICE.startsWith("generic") - || "google_sdk".equals(Build.PRODUCT); - } - - @Before - public void setUp() { - assumeTrue(canRunEspresso()); - } - - /** - * Placate {@link android.os.StrictMode} - * - * @see Run finalizers before counting for StrictMode - */ - @After - public void tearDown() { - System.gc(); - System.runFinalization(); - System.gc(); - } - - @Rule - public ActivityTestRule activityTestRule = - new ActivityTestRule<>(MainActivity.class); - - @Rule - public GrantPermissionRule accessCoarseLocationPermissionRule = GrantPermissionRule.grant( - Manifest.permission.ACCESS_COARSE_LOCATION); - - @Rule - public GrantPermissionRule readExternalStoragePermissionRule = GrantPermissionRule.grant( - Manifest.permission.READ_EXTERNAL_STORAGE); - - @Test - public void bottomNavFlavorCheck() { - onView(withText(R.string.main_menu__updates)).check(matches(isDisplayed())); - onView(withText(R.string.menu_settings)).check(matches(isDisplayed())); - onView(withText("THIS SHOULD NOT SHOW UP ANYWHERE!!!")).check(doesNotExist()); - - assertTrue(BuildConfig.FLAVOR.startsWith("full") || BuildConfig.FLAVOR.startsWith("basic")); - - if (BuildConfig.FLAVOR.startsWith("basic")) { - onView(withText(R.string.main_menu__latest_apps)).check(matches(isDisplayed())); - onView(withText(R.string.main_menu__categories)).check(doesNotExist()); - onView(withText(R.string.main_menu__swap_nearby)).check(doesNotExist()); - } - - if (BuildConfig.FLAVOR.startsWith("full")) { - onView(withText(R.string.main_menu__latest_apps)).check(matches(isDisplayed())); - onView(withText(R.string.main_menu__categories)).check(matches(isDisplayed())); - onView(withText(R.string.main_menu__swap_nearby)).check(matches(isDisplayed())); - } - } - - @LargeTest - @Test - public void showSettings() { - ViewInteraction settingsBottonNavButton = onView( - allOf(withText(R.string.menu_settings), isDisplayed())); - settingsBottonNavButton.perform(click()); - onView(withText(R.string.preference_manage_installed_apps)).check(matches(isDisplayed())); - if (BuildConfig.FLAVOR.startsWith("basic") && BuildConfig.APPLICATION_ID.endsWith(".debug")) { - // TODO fix me by sorting out the flavor applicationId for debug builds in app/build.gradle - Log.i(TAG, "Skipping the remainder of showSettings test because it just crashes on basic .debug builds"); - return; - } - ViewInteraction manageInstalledAppsButton = onView( - allOf(withText(R.string.preference_manage_installed_apps), isDisplayed())); - manageInstalledAppsButton.perform(click()); - onView(withText(R.string.installed_apps__activity_title)).check(matches(isDisplayed())); - onView(withContentDescription(androidx.appcompat.R.string.abc_action_bar_up_description)).perform(click()); - - onView(withText(R.string.menu_manage)).perform(click()); - onView(withContentDescription(androidx.appcompat.R.string.abc_action_bar_up_description)).perform(click()); - - manageInstalledAppsButton.perform(click()); - onView(withText(R.string.installed_apps__activity_title)).check(matches(isDisplayed())); - onView(withContentDescription(androidx.appcompat.R.string.abc_action_bar_up_description)).perform(click()); - - onView(withText(R.string.menu_manage)).perform(click()); - onView(withContentDescription(androidx.appcompat.R.string.abc_action_bar_up_description)).perform(click()); - - onView(withText(R.string.about_title)).perform(click()); - onView(withId(R.id.version)).check(matches(isDisplayed())); - onView(withId(R.id.ok_button)).perform(click()); - - onView(withId(android.R.id.list_container)).perform(swipeUp()).perform(swipeUp()).perform(swipeUp()); - } - - @LargeTest - @Test - public void showUpdates() { - ViewInteraction updatesBottonNavButton = onView(allOf(withText(R.string.main_menu__updates), isDisplayed())); - updatesBottonNavButton.perform(click()); - onView(withText(R.string.main_menu__updates)).check(matches(isDisplayed())); - } - - @LargeTest - @Test - public void startSwap() { - if (!BuildConfig.FLAVOR.startsWith("full")) { - return; - } - ViewInteraction nearbyBottonNavButton = onView( - allOf(withText(R.string.main_menu__swap_nearby), isDisplayed())); - nearbyBottonNavButton.perform(click()); - ViewInteraction findPeopleButton = onView( - allOf(withId(R.id.find_people_button), withText(R.string.nearby_splash__find_people_button), - isDisplayed())); - findPeopleButton.perform(click()); - onView(withText(R.string.swap_send_fdroid)).check(matches(isDisplayed())); - } - - @LargeTest - @Test - public void showCategories() { - if (!BuildConfig.FLAVOR.startsWith("full")) { - return; - } - onView(allOf(withText(R.string.menu_settings), isDisplayed())).perform(click()); - onView(allOf(withText(R.string.main_menu__categories), isDisplayed())).perform(click()); - onView(allOf(withId(R.id.swipe_to_refresh), isDisplayed())) - .perform(swipeDown()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeDown()) - .perform(swipeDown()) - .perform(swipeRight()) - .perform(swipeLeft()) - .perform(swipeLeft()) - .perform(swipeLeft()) - .perform(swipeLeft()) - .perform(click()); - } - - @LargeTest - @Test - public void showLatest() { - if (!BuildConfig.FLAVOR.startsWith("full")) { - return; - } - onView(Matchers.instanceOf(StatusBanner.class)).check(matches(not(isDisplayed()))); - onView(allOf(withText(R.string.menu_settings), isDisplayed())).perform(click()); - onView(allOf(withText(R.string.main_menu__latest_apps), isDisplayed())).perform(click()); - onView(allOf(withId(R.id.swipe_to_refresh), isDisplayed())) - .perform(swipeDown()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeUp()) - .perform(swipeDown()) - .perform(swipeUp()) - .perform(swipeDown()) - .perform(swipeDown()) - .perform(swipeDown()) - .perform(swipeDown()) - .perform(click()); - } - - @LargeTest - @Test - public void showSearch() { - onView(allOf(withText(R.string.menu_settings), isDisplayed())).perform(click()); - onView(withId(R.id.fab_search)).check(doesNotExist()); - if (!BuildConfig.FLAVOR.startsWith("full")) { - return; - } - onView(allOf(withText(R.string.main_menu__latest_apps), isDisplayed())).perform(click()); - onView(allOf(withId(R.id.fab_search), isDisplayed())).perform(click()); - onView(withId(R.id.sort)).check(matches(isDisplayed())); - onView(allOf(withId(R.id.search), isDisplayed())) - .perform(click()) - .perform(typeText("test")); - onView(allOf(withId(R.id.sort), isDisplayed())).perform(click()); - } -} diff --git a/legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/BonjourManagerTest.java b/legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/BonjourManagerTest.java deleted file mode 100644 index 918e7f3c7..000000000 --- a/legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/BonjourManagerTest.java +++ /dev/null @@ -1,128 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import static org.junit.Assert.assertTrue; - -import android.content.Context; - -import androidx.test.core.app.ApplicationProvider; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.fdroid.fdroid.FDroidApp; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -import javax.jmdns.ServiceEvent; -import javax.jmdns.ServiceListener; - -@RunWith(AndroidJUnit4.class) -public class BonjourManagerTest { - - private static final String NAME = "Robolectric-test"; - private static final String LOCALHOST = "localhost"; - private static final int PORT = 8888; - - @Test - public void testStartStop() throws InterruptedException { - Context context = ApplicationProvider.getApplicationContext(); - - FDroidApp.ipAddressString = LOCALHOST; - FDroidApp.port = PORT; - - final CountDownLatch addedLatch = new CountDownLatch(1); - final CountDownLatch resolvedLatch = new CountDownLatch(1); - final CountDownLatch removedLatch = new CountDownLatch(1); - BonjourManager.start(context, NAME, false, - new ServiceListener() { - @Override - public void serviceAdded(ServiceEvent serviceEvent) { - System.out.println("Service added: " + serviceEvent.getInfo()); - if (NAME.equals(serviceEvent.getName())) { - addedLatch.countDown(); - } - } - - @Override - public void serviceRemoved(ServiceEvent serviceEvent) { - System.out.println("Service removed: " + serviceEvent.getInfo()); - removedLatch.countDown(); - } - - @Override - public void serviceResolved(ServiceEvent serviceEvent) { - System.out.println("Service resolved: " + serviceEvent.getInfo()); - if (NAME.equals(serviceEvent.getName())) { - resolvedLatch.countDown(); - } - } - }, getBlankServiceListener()); - BonjourManager.setVisible(context, true); - assertTrue(addedLatch.await(30, TimeUnit.SECONDS)); - assertTrue(resolvedLatch.await(30, TimeUnit.SECONDS)); - BonjourManager.setVisible(context, false); - assertTrue(removedLatch.await(30, TimeUnit.SECONDS)); - BonjourManager.stop(context); - } - - @Test - public void testRestart() throws InterruptedException { - Context context = ApplicationProvider.getApplicationContext(); - - FDroidApp.ipAddressString = LOCALHOST; - FDroidApp.port = PORT; - - BonjourManager.start(context, NAME, false, getBlankServiceListener(), getBlankServiceListener()); - - final CountDownLatch addedLatch = new CountDownLatch(1); - final CountDownLatch resolvedLatch = new CountDownLatch(1); - final CountDownLatch removedLatch = new CountDownLatch(1); - BonjourManager.restart(context, NAME, false, - new ServiceListener() { - @Override - public void serviceAdded(ServiceEvent serviceEvent) { - System.out.println("Service added: " + serviceEvent.getInfo()); - if (NAME.equals(serviceEvent.getName())) { - addedLatch.countDown(); - } - } - - @Override - public void serviceRemoved(ServiceEvent serviceEvent) { - System.out.println("Service removed: " + serviceEvent.getInfo()); - removedLatch.countDown(); - } - - @Override - public void serviceResolved(ServiceEvent serviceEvent) { - System.out.println("Service resolved: " + serviceEvent.getInfo()); - if (NAME.equals(serviceEvent.getName())) { - resolvedLatch.countDown(); - } - } - }, getBlankServiceListener()); - BonjourManager.setVisible(context, true); - assertTrue(addedLatch.await(30, TimeUnit.SECONDS)); - assertTrue(resolvedLatch.await(30, TimeUnit.SECONDS)); - BonjourManager.setVisible(context, false); - assertTrue(removedLatch.await(30, TimeUnit.SECONDS)); - BonjourManager.stop(context); - } - - private ServiceListener getBlankServiceListener() { - return new ServiceListener() { - @Override - public void serviceAdded(ServiceEvent serviceEvent) { - } - - @Override - public void serviceRemoved(ServiceEvent serviceEvent) { - } - - @Override - public void serviceResolved(ServiceEvent serviceEvent) { - } - }; - } -} diff --git a/legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/CopyUtils.kt b/legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/CopyUtils.kt deleted file mode 100644 index a185ed728..000000000 --- a/legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/CopyUtils.kt +++ /dev/null @@ -1,12 +0,0 @@ -package org.fdroid.fdroid.nearby - -import java.io.File -import java.io.InputStream - -object CopyUtils { - - @JvmStatic - fun copyInputStreamToFile(inputStream: InputStream, file: File) { - inputStream.use { input -> file.outputStream().use { output -> input.copyTo(output) } } - } -} diff --git a/legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/LocalHTTPDManagerTest.java b/legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/LocalHTTPDManagerTest.java deleted file mode 100644 index d3d31747f..000000000 --- a/legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/LocalHTTPDManagerTest.java +++ /dev/null @@ -1,195 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.util.Log; - -import androidx.localbroadcastmanager.content.LocalBroadcastManager; -import androidx.test.core.app.ApplicationProvider; -import androidx.test.ext.junit.runners.AndroidJUnit4; - -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.Netstat; -import org.fdroid.fdroid.Utils; -import org.junit.After; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.io.IOException; -import java.net.ServerSocket; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -/** - * Test the nearby webserver in the emulator. - */ -@Ignore // TODO this test has worked in the past, but needs work. -@RunWith(AndroidJUnit4.class) -public class LocalHTTPDManagerTest { - private static final String TAG = "LocalHTTPDManagerTest"; - - private Context context; - private LocalBroadcastManager lbm; - - private static final String LOCALHOST = "localhost"; - private static final int PORT = 8888; - - @Before - public void setUp() { - context = ApplicationProvider.getApplicationContext(); - lbm = LocalBroadcastManager.getInstance(context); - - FDroidApp.ipAddressString = LOCALHOST; - FDroidApp.port = PORT; - - for (Netstat.Connection connection : Netstat.getConnections()) { // NOPMD - Log.i("LocalHTTPDManagerTest", "connection: " + connection.toString()); - } - assertFalse(Utils.isServerSocketInUse(PORT)); - LocalHTTPDManager.stop(context); - - for (Netstat.Connection connection : Netstat.getConnections()) { // NOPMD - Log.i("LocalHTTPDManagerTest", "connection: " + connection.toString()); - } - } - - @After - public void tearDown() { - lbm.unregisterReceiver(startedReceiver); - lbm.unregisterReceiver(stoppedReceiver); - lbm.unregisterReceiver(errorReceiver); - } - - @Ignore - @Test - public void testStartStop() throws InterruptedException { - Log.i(TAG, "testStartStop"); - - final CountDownLatch startLatch = new CountDownLatch(1); - BroadcastReceiver latchReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - startLatch.countDown(); - } - }; - lbm.registerReceiver(latchReceiver, new IntentFilter(LocalHTTPDManager.ACTION_STARTED)); - lbm.registerReceiver(stoppedReceiver, new IntentFilter(LocalHTTPDManager.ACTION_STOPPED)); - lbm.registerReceiver(errorReceiver, new IntentFilter(LocalHTTPDManager.ACTION_ERROR)); - LocalHTTPDManager.start(context, false); - assertTrue(startLatch.await(30, TimeUnit.SECONDS)); - assertTrue(Utils.isServerSocketInUse(PORT)); - assertTrue(Utils.canConnectToSocket(LOCALHOST, PORT)); - lbm.unregisterReceiver(latchReceiver); - lbm.unregisterReceiver(stoppedReceiver); - lbm.unregisterReceiver(errorReceiver); - - final CountDownLatch stopLatch = new CountDownLatch(1); - latchReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - stopLatch.countDown(); - } - }; - lbm.registerReceiver(startedReceiver, new IntentFilter(LocalHTTPDManager.ACTION_STARTED)); - lbm.registerReceiver(latchReceiver, new IntentFilter(LocalHTTPDManager.ACTION_STOPPED)); - lbm.registerReceiver(errorReceiver, new IntentFilter(LocalHTTPDManager.ACTION_ERROR)); - LocalHTTPDManager.stop(context); - assertTrue(stopLatch.await(30, TimeUnit.SECONDS)); - assertFalse(Utils.isServerSocketInUse(PORT)); - assertFalse(Utils.canConnectToSocket(LOCALHOST, PORT)); // if this is flaky, just remove it - lbm.unregisterReceiver(latchReceiver); - } - - @Test - public void testError() throws InterruptedException, IOException { - Log.i("LocalHTTPDManagerTest", "testError"); - ServerSocket blockerSocket = new ServerSocket(PORT); - - final CountDownLatch latch = new CountDownLatch(1); - BroadcastReceiver latchReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - latch.countDown(); - } - }; - lbm.registerReceiver(startedReceiver, new IntentFilter(LocalHTTPDManager.ACTION_STARTED)); - lbm.registerReceiver(stoppedReceiver, new IntentFilter(LocalHTTPDManager.ACTION_STOPPED)); - lbm.registerReceiver(latchReceiver, new IntentFilter(LocalHTTPDManager.ACTION_ERROR)); - LocalHTTPDManager.start(context, false); - assertTrue(latch.await(30, TimeUnit.SECONDS)); - assertTrue(Utils.isServerSocketInUse(PORT)); - assertNotEquals(PORT, FDroidApp.port); - assertFalse(Utils.isServerSocketInUse(FDroidApp.port)); - lbm.unregisterReceiver(latchReceiver); - blockerSocket.close(); - } - - @Test - public void testRestart() throws InterruptedException, IOException { - Log.i("LocalHTTPDManagerTest", "testRestart"); - assertFalse(Utils.isServerSocketInUse(PORT)); - final CountDownLatch startLatch = new CountDownLatch(1); - BroadcastReceiver latchReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - startLatch.countDown(); - } - }; - lbm.registerReceiver(latchReceiver, new IntentFilter(LocalHTTPDManager.ACTION_STARTED)); - lbm.registerReceiver(stoppedReceiver, new IntentFilter(LocalHTTPDManager.ACTION_STOPPED)); - lbm.registerReceiver(errorReceiver, new IntentFilter(LocalHTTPDManager.ACTION_ERROR)); - LocalHTTPDManager.start(context, false); - assertTrue(startLatch.await(30, TimeUnit.SECONDS)); - assertTrue(Utils.isServerSocketInUse(PORT)); - lbm.unregisterReceiver(latchReceiver); - lbm.unregisterReceiver(stoppedReceiver); - - final CountDownLatch restartLatch = new CountDownLatch(1); - latchReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - restartLatch.countDown(); - } - }; - lbm.registerReceiver(latchReceiver, new IntentFilter(LocalHTTPDManager.ACTION_STARTED)); - LocalHTTPDManager.restart(context, false); - assertTrue(restartLatch.await(30, TimeUnit.SECONDS)); - lbm.unregisterReceiver(latchReceiver); - } - - private final BroadcastReceiver startedReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String message = intent.getStringExtra(Intent.EXTRA_TEXT); - Log.i(TAG, "startedReceiver: " + message); - fail(); - } - }; - - private final BroadcastReceiver stoppedReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String message = intent.getStringExtra(Intent.EXTRA_TEXT); - Log.i(TAG, "stoppedReceiver: " + message); - fail(); - } - }; - - private final BroadcastReceiver errorReceiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - String message = intent.getStringExtra(Intent.EXTRA_TEXT); - Log.i(TAG, "errorReceiver: " + message); - fail(); - } - }; -} diff --git a/legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/PublicSourceDirProviderTest.java b/legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/PublicSourceDirProviderTest.java deleted file mode 100644 index 93c29bfe6..000000000 --- a/legacy/src/androidTestFull/java/org/fdroid/fdroid/nearby/PublicSourceDirProviderTest.java +++ /dev/null @@ -1,98 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import static org.fdroid.fdroid.nearby.CopyUtils.copyInputStreamToFile; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; - -import android.content.Context; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.database.Cursor; -import android.net.Uri; -import android.provider.MediaStore; - -import androidx.test.ext.junit.runners.AndroidJUnit4; -import androidx.test.platform.app.InstrumentationRegistry; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.List; - -@RunWith(AndroidJUnit4.class) -public class PublicSourceDirProviderTest { - public static final String TAG = "DataApkProviderTest"; - - Context context; - List packageInfoList; - - @Before - public void setUp() { - context = InstrumentationRegistry.getInstrumentation().getTargetContext(); - packageInfoList = null; - } - - /** - * Test whether reading installed APKs via our custom {@link android.content.ContentProvider} - * works. This skips system apps just to make the test easier to manage. It also only - * copies max 3 apps so it doesn't take a long time to run. - */ - @Test - public void testCopyFromGetUri() throws IOException { - int copyTotal = 3; - PackageManager pm = context.getPackageManager(); - List packageInfoList = pm.getInstalledPackages(0); - for (PackageInfo packageInfo : packageInfoList) { - File apk = new File(packageInfo.applicationInfo.publicSourceDir); - if (apk.getCanonicalPath().startsWith("/system")) { - continue; - } - Uri uri = PublicSourceDirProvider.getUri(context, packageInfo.packageName); - InputStream is = null; - File f = null; - is = context.getContentResolver().openInputStream(uri); - f = File.createTempFile("received", ".apk"); - assertNotNull(is); - copyInputStreamToFile(is, f); - assertTrue("dest file " + f + " should exist", f.exists()); - assertEquals(f + " should equal " + apk, apk.length(), f.length()); - f.delete(); - - copyTotal--; - if (copyTotal < 0) { - break; - } - } - } - - /** - * Test whether querying the custom {@link android.content.ContentProvider} - * for installed APKs returns the right kind of data. - */ - @Test - public void testQuery() throws IOException { - PackageManager pm = context.getPackageManager(); - List packageInfoList = pm.getInstalledPackages(0); - for (PackageInfo packageInfo : packageInfoList) { - File apk = new File(packageInfo.applicationInfo.publicSourceDir); - if (apk.getCanonicalPath().startsWith("/system")) { - continue; - } - Uri uri = PublicSourceDirProvider.getUri(context, packageInfo.packageName); - Cursor cursor = context.getContentResolver().query(uri, null, null, null, null); - assertNotNull(cursor); - - cursor.moveToFirst(); - while (!cursor.isAfterLast()) { - assertNotNull(cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME))); - cursor.moveToNext(); - } - cursor.close(); - } - } -} diff --git a/legacy/src/androidTestFull/java/org/fdroid/fdroid/updater/SwapRepoEmulatorTest.java b/legacy/src/androidTestFull/java/org/fdroid/fdroid/updater/SwapRepoEmulatorTest.java deleted file mode 100644 index 6e4879fb8..000000000 --- a/legacy/src/androidTestFull/java/org/fdroid/fdroid/updater/SwapRepoEmulatorTest.java +++ /dev/null @@ -1,153 +0,0 @@ -package org.fdroid.fdroid.updater; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import android.content.Context; -import android.content.Intent; -import android.content.pm.ApplicationInfo; -import android.content.pm.ResolveInfo; -import android.os.Looper; -import android.text.TextUtils; -import android.util.Log; - -import androidx.test.filters.LargeTest; -import androidx.test.platform.app.InstrumentationRegistry; - -import org.fdroid.fdroid.BuildConfig; -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.Hasher; -import org.fdroid.fdroid.Preferences; -import org.fdroid.fdroid.Utils; -import org.fdroid.fdroid.nearby.LocalHTTPD; -import org.fdroid.fdroid.nearby.LocalRepoKeyStore; -import org.fdroid.fdroid.nearby.LocalRepoManager; -import org.fdroid.fdroid.nearby.LocalRepoService; -import org.fdroid.fdroid.nearby.SwapService; -import org.fdroid.index.v1.IndexV1; -import org.fdroid.index.v1.PackageV1; -import org.junit.Test; - -import java.io.File; -import java.security.cert.Certificate; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -@LargeTest -public class SwapRepoEmulatorTest { - public static final String TAG = "SwapRepoEmulatorTest"; - - /** - * @see org.fdroid.fdroid.nearby.WifiStateChangeService.WifiInfoThread#run() - */ - @Test - public void testSwap() throws Exception { - Looper.prepare(); - LocalHTTPD localHttpd = null; - try { - Log.i(TAG, "REPO: " + FDroidApp.repo); - final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); - Preferences.setupForTests(context); - - FDroidApp.initWifiSettings(); - assertNull(FDroidApp.repo); - - final CountDownLatch latch = new CountDownLatch(1); - new Thread() { - @Override - public void run() { - while (FDroidApp.repo == null) { - try { - String address = FDroidApp.repo == null ? null : FDroidApp.repo.getAddress(); - Log.i(TAG, "Waiting for IP address... " + address); - Thread.sleep(1000); - } catch (InterruptedException e) { - // ignored - } - } - latch.countDown(); - } - }.start(); - latch.await(10, TimeUnit.MINUTES); - assertNotNull(FDroidApp.repo.getAddress()); - - LocalRepoService.runProcess(context, new String[]{context.getPackageName()}); - Log.i(TAG, "REPO: " + FDroidApp.repo); - File indexJarFile = LocalRepoManager.get(context).getIndexJar(); - assertTrue(indexJarFile.isFile()); - - localHttpd = new LocalHTTPD( - context, - FDroidApp.ipAddressString, - FDroidApp.port, - LocalRepoManager.get(context).getWebRoot(), - false); - localHttpd.start(); - Thread.sleep(100); // give the server some tine to start. - assertTrue(localHttpd.isAlive()); - - LocalRepoKeyStore localRepoKeyStore = LocalRepoKeyStore.get(context); - Certificate localCert = localRepoKeyStore.getCertificate(); - String fingerprint = Utils.calcFingerprint(localCert).toLowerCase(Locale.ROOT); - String signingCert = Hasher.hex(localCert); - assertFalse(TextUtils.isEmpty(signingCert)); - assertFalse(TextUtils.isEmpty(fingerprint)); - - assertTrue(Utils.isPortInUse(FDroidApp.ipAddressString, FDroidApp.port)); - Thread.sleep(100); - - File swapJarFile = File.createTempFile("swap", "", context.getCacheDir()); - IndexV1 indexV1 = SwapService.getVerifiedRepoIndex(FDroidApp.repo, fingerprint, swapJarFile); - assertEquals(1, indexV1.getApps().size()); - assertEquals(context.getPackageName(), indexV1.getApps().get(0).getPackageName()); - long firstTimestamp = indexV1.getRepo().getTimestamp(); - - assertEquals(1, indexV1.getPackages().size()); - List apks = indexV1.getPackages().get(context.getPackageName()); - assertNotNull(apks); - assertEquals(1, apks.size()); - for (PackageV1 apk : apks) { - Log.i(TAG, "Apk: " + apk); - assertNotNull(apk.getVersionCode()); - long versionCode = apk.getVersionCode(); - assertEquals(context.getPackageName(), apk.getPackageName()); - assertEquals(BuildConfig.VERSION_NAME, apk.getVersionName()); - assertEquals(BuildConfig.VERSION_CODE, versionCode); - } - - Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); - mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); - List resolveInfoList = context.getPackageManager().queryIntentActivities(mainIntent, 0); - HashSet packageNames = new HashSet<>(); - for (ResolveInfo resolveInfo : resolveInfoList) { - if (!isSystemPackage(resolveInfo)) { - Log.i(TAG, "resolveInfo: " + resolveInfo); - packageNames.add(resolveInfo.activityInfo.packageName); - } - } - LocalRepoService.runProcess(context, packageNames.toArray(new String[0])); - - swapJarFile = File.createTempFile("swap", "", context.getCacheDir()); - indexV1 = SwapService.getVerifiedRepoIndex(FDroidApp.repo, fingerprint, swapJarFile); - assertTrue(firstTimestamp < indexV1.getRepo().getTimestamp()); - for (String packageName : packageNames) { - assertNotNull(indexV1.getPackages().get(packageName)); - } - } finally { - if (localHttpd != null) { - localHttpd.stop(); - } - } - assertFalse(localHttpd.isAlive()); - } - - private boolean isSystemPackage(ResolveInfo resolveInfo) { - return (resolveInfo.activityInfo.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0; - } -} diff --git a/legacy/src/basic/java/org/fdroid/fdroid/nearby/BluetoothClient.java b/legacy/src/basic/java/org/fdroid/fdroid/nearby/BluetoothClient.java deleted file mode 100644 index 70fd65be9..000000000 --- a/legacy/src/basic/java/org/fdroid/fdroid/nearby/BluetoothClient.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2018 Senecto Limited - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.nearby; - -/** - * Dummy version for basic app flavor. - */ - -public class BluetoothClient { - - public BluetoothClient(String ignored) { - } - - public BluetoothConnection openConnection() { - return null; - } -} diff --git a/legacy/src/basic/java/org/fdroid/fdroid/nearby/LocalRepoManager.java b/legacy/src/basic/java/org/fdroid/fdroid/nearby/LocalRepoManager.java deleted file mode 100644 index b1cb50b71..000000000 --- a/legacy/src/basic/java/org/fdroid/fdroid/nearby/LocalRepoManager.java +++ /dev/null @@ -1,5 +0,0 @@ -package org.fdroid.fdroid.nearby; - -public class LocalRepoManager { - public static final String[] WEB_ROOT_ASSET_FILES = {}; -} diff --git a/legacy/src/basic/java/org/fdroid/fdroid/nearby/SDCardScannerService.java b/legacy/src/basic/java/org/fdroid/fdroid/nearby/SDCardScannerService.java deleted file mode 100644 index c1d7d5ba1..000000000 --- a/legacy/src/basic/java/org/fdroid/fdroid/nearby/SDCardScannerService.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2018 Hans-Christoph Steiner - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.nearby; - -import android.content.Context; - -/** - * Dummy version for basic app flavor. - */ -public class SDCardScannerService { - public static void scan(Context context) { - } -} diff --git a/legacy/src/basic/java/org/fdroid/fdroid/nearby/SwapService.java b/legacy/src/basic/java/org/fdroid/fdroid/nearby/SwapService.java deleted file mode 100644 index 35b645e8a..000000000 --- a/legacy/src/basic/java/org/fdroid/fdroid/nearby/SwapService.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2018 Hans-Christoph Steiner - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.nearby; - -import android.content.Context; - -/** - * Dummy version for basic app flavor. - */ -public class SwapService { - public static void start(Context context) { - } -} diff --git a/legacy/src/basic/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java b/legacy/src/basic/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java deleted file mode 100644 index dc9993e55..000000000 --- a/legacy/src/basic/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (C) 2018 Senecto Limited - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.nearby; - -import android.content.Context; -import android.net.Uri; - -/** - * Dummy version for basic app flavor. - */ -public class SwapWorkflowActivity { - - public static final String EXTRA_PREVENT_FURTHER_SWAP_REQUESTS = "preventFurtherSwap"; - - public static void requestSwap(Context context, Uri uri) { - } -} diff --git a/legacy/src/basic/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java b/legacy/src/basic/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java deleted file mode 100644 index 497073038..000000000 --- a/legacy/src/basic/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2018 Senecto Limited - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.nearby; - -import android.content.Intent; - -import androidx.appcompat.app.AppCompatActivity; - -/** - * Dummy version for basic app flavor. - */ -public class TreeUriScannerIntentService { - public static void onActivityResult(AppCompatActivity activity, Intent intent) { - throw new IllegalStateException("unimplemented"); - } -} diff --git a/legacy/src/basic/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java b/legacy/src/basic/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java deleted file mode 100644 index 40506dcdd..000000000 --- a/legacy/src/basic/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright (C) 2018 Senecto Limited - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.nearby; - -import android.content.Context; -import android.content.Intent; - -import androidx.annotation.Nullable; - -/** - * Dummy version for basic app flavor. - */ -public class WifiStateChangeService { - - public static void registerReceiver(Context context) { - } - - public static void start(Context context, @Nullable Intent intent) { - } - - public class WifiInfoThread extends Thread { - } -} diff --git a/legacy/src/basic/java/org/fdroid/fdroid/panic/HidingManager.java b/legacy/src/basic/java/org/fdroid/fdroid/panic/HidingManager.java deleted file mode 100644 index 76b55de66..000000000 --- a/legacy/src/basic/java/org/fdroid/fdroid/panic/HidingManager.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2018 Senecto Limited - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.panic; - -import android.content.Context; - -/** - * Dummy version for basic app flavor. - */ -public class HidingManager { - - public static boolean isHidden(Context context) { - return false; - } - - public static void showHideDialog(final Context context) { - throw new IllegalStateException("unimplemented"); - } -} diff --git a/legacy/src/basic/java/org/fdroid/fdroid/views/main/LatestLayoutPolicy.java b/legacy/src/basic/java/org/fdroid/fdroid/views/main/LatestLayoutPolicy.java deleted file mode 100644 index b2fa28ee6..000000000 --- a/legacy/src/basic/java/org/fdroid/fdroid/views/main/LatestLayoutPolicy.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.fdroid.fdroid.views.main; - -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Rect; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import org.fdroid.fdroid.R; - -class LatestLayoutPolicy { - private final Context context; - - LatestLayoutPolicy(Context context) { - this.context = context.getApplicationContext(); - } - - RecyclerView.ItemDecoration getItemDecoration() { - return new RecyclerView.ItemDecoration() { - @Override - public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, - @NonNull RecyclerView.State state) { - super.getItemOffsets(outRect, view, parent, state); - Resources resources = context.getResources(); - int padding = (int) resources.getDimension(R.dimen.latest__padding__app_card__normal); - outRect.set(padding, padding, padding, 0); - } - }; - } - - /** @noinspection unused*/ - int getItemViewType(int position) { - return R.id.latest_regular_list; - } - - /** @noinspection unused*/ - int getSpanSize(int position) { - return 2; - } -} diff --git a/legacy/src/basic/java/org/fdroid/fdroid/views/main/MainViewController.java b/legacy/src/basic/java/org/fdroid/fdroid/views/main/MainViewController.java deleted file mode 100644 index b9c8dd18b..000000000 --- a/legacy/src/basic/java/org/fdroid/fdroid/views/main/MainViewController.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2018 Senecto Limited - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.views.main; - -import android.widget.FrameLayout; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.RecyclerView; - -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.views.PreferencesFragment; -import org.fdroid.fdroid.views.updates.UpdatesViewBinder; - -/** - * Decides which view on the main screen to attach to a given {@link FrameLayout}. This class - * doesn't know which view it will be rendering at the time it is constructed. Rather, at some - * point in the future the {@link MainViewAdapter} will have information about which view we - * are required to render, and will invoke the relevant "bind*()" method on this class. - */ -class MainViewController extends RecyclerView.ViewHolder { - - private final AppCompatActivity activity; - private final FrameLayout frame; - - @Nullable - private UpdatesViewBinder updatesView = null; - - MainViewController(AppCompatActivity activity, FrameLayout frame) { - super(frame); - this.activity = activity; - this.frame = frame; - } - - /** - * @see LatestViewBinder - */ - void bindLatestView() { - new LatestViewBinder(activity, frame); - } - - /** - * @see UpdatesViewBinder - */ - void bindUpdates() { - if (updatesView == null) { - updatesView = new UpdatesViewBinder(activity, frame); - } - - updatesView.bind(); - } - - void unbindUpdates() { - if (updatesView != null) { - updatesView.unbind(); - } - } - - /** - * @see CategoriesViewBinder - */ - void bindCategoriesView() { - new CategoriesViewBinder(activity, frame); - } - - void bindSwapView() { - throw new IllegalStateException("unimplemented"); - } - - /** - * Attaches a {@link PreferencesFragment} to the view. Everything else is managed by the - * fragment itself, so no further work needs to be done by this view binder. - *

    - * Note: It is tricky to attach a {@link Fragment} to a view from this view holder. This is due - * to the way in which the {@link RecyclerView} will reuse existing views and ask us to - * put a settings fragment in there at arbitrary times. Usually it won't be the same view we - * attached the fragment to last time, which causes weirdness. The solution is to use code from - * the com.lsjwzh.widget.recyclerviewpager.FragmentStatePagerAdapter which manages this. - * The code has been ported to {@link SettingsView}. - * - * @see SettingsView - */ - void bindSettingsView() { - activity.getLayoutInflater().inflate(R.layout.main_tab_settings, frame, true); - } -} diff --git a/legacy/src/basic/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java b/legacy/src/basic/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java deleted file mode 100644 index 8446e2255..000000000 --- a/legacy/src/basic/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.fdroid.fdroid.views.main; - -import android.content.Context; - -class NearbyViewBinder { - static void updateUsbOtg(Context context) { - throw new IllegalStateException("unimplemented"); - } - static void updateExternalStorageViews(Context context) { - } -} diff --git a/legacy/src/basic/res/drawable-anydpi-v26/ic_launcher_foreground.xml b/legacy/src/basic/res/drawable-anydpi-v26/ic_launcher_foreground.xml deleted file mode 100644 index 06e9368a8..000000000 --- a/legacy/src/basic/res/drawable-anydpi-v26/ic_launcher_foreground.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/legacy/src/basic/res/drawable-hdpi/ic_launcher.png b/legacy/src/basic/res/drawable-hdpi/ic_launcher.png deleted file mode 100644 index df5c1af7d70c441784b9933f9a8bc9f5bc25cd44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2841 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 diff --git a/legacy/src/basic/res/drawable-xhdpi/ic_launcher.png b/legacy/src/basic/res/drawable-xhdpi/ic_launcher.png deleted file mode 100644 index ba65e7d87f9e168fe3da980a54410fb193295e21..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4327 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 Vfsufyv+n=^002ovPDHLkV1m$Wc>n+a diff --git a/legacy/src/basic/res/drawable-xxhdpi/ic_launcher.png b/legacy/src/basic/res/drawable-xxhdpi/ic_launcher.png deleted file mode 100644 index a0b5fbc8175d9acfcb11372c475ff7757a62307b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7529 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 diff --git a/legacy/src/basic/res/drawable-xxxhdpi/ic_launcher.png b/legacy/src/basic/res/drawable-xxxhdpi/ic_launcher.png deleted file mode 100644 index 712af58d2ddc393d86e4e41570bc61771a7f21a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10211 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 O03|tf*(Pc8u>S`Xa1_V@ diff --git a/legacy/src/basic/res/drawable/ic_launcher_monochrome.xml b/legacy/src/basic/res/drawable/ic_launcher_monochrome.xml deleted file mode 100644 index 63d62f05b..000000000 --- a/legacy/src/basic/res/drawable/ic_launcher_monochrome.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - diff --git a/legacy/src/basic/res/values/attrs.xml b/legacy/src/basic/res/values/attrs.xml deleted file mode 100644 index ffc7c9504..000000000 --- a/legacy/src/basic/res/values/attrs.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - false - diff --git a/legacy/src/basic/res/values/strings.xml b/legacy/src/basic/res/values/strings.xml deleted file mode 100644 index 52aeffdac..000000000 --- a/legacy/src/basic/res/values/strings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - @string/app_name_basic - F-Droid Basic Debug - @string/about_title_basic - diff --git a/legacy/src/debug/AndroidManifest.xml b/legacy/src/debug/AndroidManifest.xml deleted file mode 100644 index 7387a300a..000000000 --- a/legacy/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/legacy/src/full/AndroidManifest.xml b/legacy/src/full/AndroidManifest.xml deleted file mode 100644 index 53afeb558..000000000 --- a/legacy/src/full/AndroidManifest.xml +++ /dev/null @@ -1,192 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/legacy/src/full/java/cc/mvdan/accesspoint/WifiApControl.java b/legacy/src/full/java/cc/mvdan/accesspoint/WifiApControl.java deleted file mode 100644 index b77fbced7..000000000 --- a/legacy/src/full/java/cc/mvdan/accesspoint/WifiApControl.java +++ /dev/null @@ -1,417 +0,0 @@ -/** - * Copyright 2015 Daniel Martí - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package cc.mvdan.accesspoint; - -import android.content.Context; -import android.net.wifi.WifiConfiguration; -import android.net.wifi.WifiManager; -import android.provider.Settings; -import android.util.Log; - -import androidx.annotation.Nullable; - -import org.fdroid.fdroid.BuildConfig; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.net.Inet4Address; -import java.net.Inet6Address; -import java.net.InetAddress; -import java.net.NetworkInterface; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.regex.Pattern; - -/** - * WifiApControl provides control over Wi-Fi APs using the singleton pattern. - * Even though isSupported should be reliable, the underlying hidden APIs that - * are obtained via reflection to provide the main features may not work as - * expected. - *

    - * TODO Note that this project is **abandoned** since its method doesn't work on Android - * 7.1 or later. Have a look at these newer alternatives that have been tested to - * work on Android 8.0: - * - * @see shinilms/direct-net-share - * @see geekywoman/direct-net-share - * @see aegis1980/WifiHotSpot - */ -final public class WifiApControl { - - private static final String TAG = "WifiApControl"; - - private static Method getWifiApConfigurationMethod; - private static Method getWifiApStateMethod; - private static Method isWifiApEnabledMethod; - private static Method setWifiApEnabledMethod; - - public static final int WIFI_AP_STATE_DISABLING = 10; - public static final int WIFI_AP_STATE_DISABLED = 11; - public static final int WIFI_AP_STATE_ENABLING = 12; - public static final int WIFI_AP_STATE_ENABLED = 13; - public static final int WIFI_AP_STATE_FAILED = 14; - - public static final int STATE_DISABLING = WIFI_AP_STATE_DISABLING; - public static final int STATE_DISABLED = WIFI_AP_STATE_DISABLED; - public static final int STATE_ENABLING = WIFI_AP_STATE_ENABLING; - public static final int STATE_ENABLED = WIFI_AP_STATE_ENABLED; - public static final int STATE_FAILED = WIFI_AP_STATE_FAILED; - - private static boolean isSoftwareSupported() { - return (getWifiApStateMethod != null - && isWifiApEnabledMethod != null - && setWifiApEnabledMethod != null - && getWifiApConfigurationMethod != null); - } - - private static boolean isHardwareSupported() { - // TODO: implement via native code - return true; - } - - // isSupported reports whether Wi-Fi APs are supported by this device. - public static boolean isSupported() { - return isSoftwareSupported() && isHardwareSupported(); - } - - private static final String FALLBACK_DEVICE = "wlan0"; - - private final WifiManager wm; - private final String deviceName; - - private static WifiApControl instance = null; - - private WifiApControl(Context context) { - wm = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); - deviceName = getDeviceName(wm); - } - - // getInstance is a standard singleton instance getter, constructing - // the actual class when first called. - @Nullable - public static WifiApControl getInstance(Context context) { - if (instance == null) { - if (!Settings.System.canWrite(context)) { - Log.e(TAG, "6.0 or later, but haven't been granted WRITE_SETTINGS!"); - return null; - } - try { - for (Method method : WifiManager.class.getDeclaredMethods()) { - switch (method.getName()) { - case "getWifiApConfiguration": - getWifiApConfigurationMethod = method; - break; - case "getWifiApState": - getWifiApStateMethod = method; - break; - case "isWifiApEnabled": - isWifiApEnabledMethod = method; - break; - case "setWifiApEnabled": - setWifiApEnabledMethod = method; - break; - } - } - instance = new WifiApControl(context); - instance.isEnabled(); // make sure this instance works - } catch (Throwable e) { - if (BuildConfig.DEBUG) { - throw e; - } - Log.e(TAG, "WifiManager failed to init", e); - return null; - } - } - return instance; - } - - private static String getDeviceName(WifiManager wifiManager) { - Log.w(TAG, "6.0 or later, unaccessible MAC - falling back to the default device name: " + FALLBACK_DEVICE); - return FALLBACK_DEVICE; - } - - private static Object invokeQuietly(Method method, Object receiver, Object... args) { - try { - return method.invoke(receiver, args); - } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { - Log.e(TAG, "", e); - } - return null; - } - - // isWifiApEnabled returns whether the Wi-Fi AP is currently enabled. - // If an error occurred invoking the method via reflection, false is - // returned. - public boolean isWifiApEnabled() { - Object result = invokeQuietly(isWifiApEnabledMethod, wm); - if (result == null) { - return false; - } - return (Boolean) result; - } - - // isEnabled is a commodity function alias for isWifiApEnabled. - public boolean isEnabled() { - return isWifiApEnabled(); - } - - // newStateNumber adapts the state constants to the current values in - // the SDK. They were changed on 4.0 to have higher integer values. - public static int newStateNumber(int state) { - if (state < 10) { - return state + 10; - } - return state; - } - - // getWifiApState returns the current Wi-Fi AP state. - // If an error occurred invoking the method via reflection, -1 is - // returned. - public int getWifiApState() { - Object result = invokeQuietly(getWifiApStateMethod, wm); - if (result == null) { - return -1; - } - return newStateNumber((Integer) result); - } - - // getState is a commodity function alias for getWifiApState. - public int getState() { - return getWifiApState(); - } - - // getWifiApConfiguration returns the current Wi-Fi AP configuration. - // If an error occurred invoking the method via reflection, null is - // returned. - public WifiConfiguration getWifiApConfiguration() { - Object result = invokeQuietly(getWifiApConfigurationMethod, wm); - if (result == null) { - return null; - } - return (WifiConfiguration) result; - } - - // getConfiguration is a commodity function alias for - // getWifiApConfiguration. - public WifiConfiguration getConfiguration() { - return getWifiApConfiguration(); - } - - // setWifiApEnabled starts a Wi-Fi AP with the specified - // configuration. If one is already running, start using the new - // configuration. You should call WifiManager.setWifiEnabled(false) - // yourself before calling this method. - // If an error occurred invoking the method via reflection, false is - // returned. - public boolean setWifiApEnabled(WifiConfiguration config, boolean enabled) { - Object result = invokeQuietly(setWifiApEnabledMethod, wm, config, enabled); - if (result == null) { - return false; - } - return (Boolean) result; - } - - // setEnabled is a commodity function alias for setWifiApEnabled. - public boolean setEnabled(WifiConfiguration config, boolean enabled) { - return setWifiApEnabled(config, enabled); - } - - // enable starts the currently configured Wi-Fi AP. - public boolean enable() { - return setEnabled(getConfiguration(), true); - } - - // disable stops any currently running Wi-Fi AP. - public boolean disable() { - return setEnabled(null, false); - } - - // getInet6Address returns the IPv6 address that the device has in its - // own Wi-Fi AP local network. Will return null if no Wi-Fi AP is - // currently enabled. - public Inet6Address getInet6Address() { - if (!isEnabled()) { - return null; - } - return getInetAddress(Inet6Address.class); - } - - // getInet4Address returns the IPv4 address that the device has in its - // own Wi-Fi AP local network. Will return null if no Wi-Fi AP is - // currently enabled. - public Inet4Address getInet4Address() { - if (!isEnabled()) { - return null; - } - return getInetAddress(Inet4Address.class); - } - - - private T getInetAddress(Class addressType) { - try { - Enumeration ifaces = NetworkInterface.getNetworkInterfaces(); - while (ifaces.hasMoreElements()) { - NetworkInterface iface = ifaces.nextElement(); - - if (!iface.getName().equals(deviceName)) { - continue; - } - - Enumeration addrs = iface.getInetAddresses(); - while (addrs.hasMoreElements()) { - InetAddress addr = addrs.nextElement(); - - if (addressType.isInstance(addr)) { - return addressType.cast(addr); - } - } - } - } catch (IOException e) { - Log.e(TAG, "", e); - } - return null; - } - - // Client describes a Wi-Fi AP device connected to the network. - public static class Client { - - // ipAddr is the raw string of the IP Address client - public String ipAddr; - - // hwAddr is the raw string of the MAC of the client - public String hwAddr; - - public Client(String ipAddr, String hwAddr) { - this.ipAddr = ipAddr; - this.hwAddr = hwAddr; - } - } - - // getClients returns a list of all clients connected to the network. - // Since the information is pulled from ARP, which is cached for up to - // five minutes, this method may yield clients that disconnected - // minutes ago. - public List getClients() { - if (!isEnabled()) { - return null; - } - List result = new ArrayList<>(); - - // Basic sanity checks - Pattern macPattern = Pattern.compile("..:..:..:..:..:.."); - - BufferedReader br = null; - try { - br = new BufferedReader(new FileReader("/proc/net/arp")); - String line; - while ((line = br.readLine()) != null) { - String[] parts = line.split(" +"); - if (parts.length < 6) { - continue; - } - - String ipAddr = parts[0]; - String hwAddr = parts[3]; - String device = parts[5]; - - if (!device.equals(deviceName)) { - continue; - } - - if (!macPattern.matcher(parts[3]).find()) { - continue; - } - - result.add(new Client(ipAddr, hwAddr)); - } - } catch (IOException e) { - Log.e(TAG, "", e); - } finally { - try { - if (br != null) { - br.close(); - } - } catch (IOException e) { - Log.e(TAG, "", e); - } - } - - return result; - } - - // ReachableClientListener is an interface to collect the results - // provided by getReachableClients via callbacks. - public interface ReachableClientListener { - - // onReachableClient is called each time a reachable client is - // found. - void onReachableClient(Client c); - - // onComplete is called when we are done looking for reachable - // clients - void onComplete(); - } - - // getReachableClients fetches the clients connected to the network - // much like getClients, but only those which are reachable. Since - // checking for reachability requires network I/O, the reachable - // clients are returned via callbacks. All the clients are returned - // like in getClients so that the callback returns a subset of the - // same objects. - public List getReachableClients(final int timeout, - final ReachableClientListener listener) { - List clients = getClients(); - if (clients == null) { - return null; - } - final CountDownLatch latch = new CountDownLatch(clients.size()); - ExecutorService es = Executors.newCachedThreadPool(); - for (final Client c : clients) { - es.submit(new Runnable() { - public void run() { - try { - InetAddress ip = InetAddress.getByName(c.ipAddr); - if (ip.isReachable(timeout)) { - listener.onReachableClient(c); - } - } catch (IOException e) { - Log.e(TAG, "", e); - } - latch.countDown(); - } - }); - } - new Thread() { - public void run() { - try { - latch.await(); - } catch (InterruptedException e) { - Log.e(TAG, "", e); - } - listener.onComplete(); - } - }.start(); - return clients; - } -} diff --git a/legacy/src/full/java/javax/jmdns/impl/FDroidServiceInfo.java b/legacy/src/full/java/javax/jmdns/impl/FDroidServiceInfo.java deleted file mode 100644 index 37eee53f1..000000000 --- a/legacy/src/full/java/javax/jmdns/impl/FDroidServiceInfo.java +++ /dev/null @@ -1,122 +0,0 @@ -package javax.jmdns.impl; - -import android.os.Parcel; -import android.os.Parcelable; -import android.text.TextUtils; - -import java.net.Inet4Address; -import java.net.Inet6Address; -import java.net.UnknownHostException; - -import javax.jmdns.ServiceInfo; -import javax.jmdns.impl.util.ByteWrangler; - -/** - * The ServiceInfo class needs to be serialized in order to be sent as an Android broadcast. - * In order to make it Parcelable (or Serializable for that matter), there are some package-scope - * methods which needed to be used. Thus, this class is in the javax.jmdns.impl package so that - * it can access those methods. This is as an alternative to modifying the source code of JmDNS. - */ -public class FDroidServiceInfo extends ServiceInfoImpl implements Parcelable { - - public FDroidServiceInfo(ServiceInfo info) { - super(info); - } - - /** - * Return the fingerprint of the signing key, or {@code null} if it is not set. - */ - public String getFingerprint() { - // getPropertyString() will return "true" if the value is a zero-length byte array - // so we just do a custom version using getPropertyBytes() - byte[] data = getPropertyBytes("fingerprint"); - if (data == null || data.length == 0) { - return null; - } - String fingerprint = ByteWrangler.readUTF(data, 0, data.length); - if (TextUtils.isEmpty(fingerprint)) { - return null; - } - return fingerprint; - } - - public String getRepoAddress() { - return getURL(); // Automatically appends the "path" property if present, so no need to do it ourselves. - } - - private static byte[] readBytes(Parcel in) { - byte[] bytes = new byte[in.readInt()]; - in.readByteArray(bytes); - return bytes; - } - - public FDroidServiceInfo(Parcel in) { - super( - in.readString(), - in.readString(), - in.readString(), - in.readInt(), - in.readInt(), - in.readInt(), - in.readByte() != 0, - readBytes(in)); - - int addressCount = in.readInt(); - for (int i = 0; i < addressCount; i++) { - try { - addAddress((Inet4Address) Inet4Address.getByAddress(readBytes(in))); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - } - - addressCount = in.readInt(); - for (int i = 0; i < addressCount; i++) { - try { - addAddress((Inet6Address) Inet6Address.getByAddress(readBytes(in))); - } catch (UnknownHostException e) { - e.printStackTrace(); - } - } - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(getType()); - dest.writeString(getName()); - dest.writeString(getSubtype()); - dest.writeInt(getPort()); - dest.writeInt(getWeight()); - dest.writeInt(getPriority()); - dest.writeByte(isPersistent() ? (byte) 1 : (byte) 0); - dest.writeInt(getTextBytes().length); - dest.writeByteArray(getTextBytes()); - dest.writeInt(getInet4Addresses().length); - for (int i = 0; i < getInet4Addresses().length; i++) { - Inet4Address address = getInet4Addresses()[i]; - dest.writeInt(address.getAddress().length); - dest.writeByteArray(address.getAddress()); - } - dest.writeInt(getInet6Addresses().length); - for (int i = 0; i < getInet6Addresses().length; i++) { - Inet6Address address = getInet6Addresses()[i]; - dest.writeInt(address.getAddress().length); - dest.writeByteArray(address.getAddress()); - } - } - - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { - public FDroidServiceInfo createFromParcel(Parcel source) { - return new FDroidServiceInfo(source); - } - - public FDroidServiceInfo[] newArray(int size) { - return new FDroidServiceInfo[size]; - } - }; -} diff --git a/legacy/src/full/java/kellinwood/logging/AbstractLogger.java b/legacy/src/full/java/kellinwood/logging/AbstractLogger.java deleted file mode 100644 index c2c3e4e0c..000000000 --- a/legacy/src/full/java/kellinwood/logging/AbstractLogger.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.logging; - -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; - -public abstract class AbstractLogger implements LoggerInterface { - - protected String category; - - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.ENGLISH); - - public AbstractLogger(String category) { - this.category = category; - } - - protected String format(String level, String message) { - return String.format("%s %s %s: %s\n", dateFormat.format(new Date()), level, category, message); - } - - protected abstract void write(String level, String message, Throwable t); - - protected void writeFixNullMessage(String level, String message, Throwable t) { - if (message == null) { - if (t != null) message = t.getClass().getName(); - else message = "null"; - } - write(level, message, t); - } - - public void debug(String message, Throwable t) { - writeFixNullMessage(DEBUG, message, t); - } - - public void debug(String message) { - writeFixNullMessage(DEBUG, message, null); - } - - public void error(String message, Throwable t) { - writeFixNullMessage(ERROR, message, t); - } - - public void error(String message) { - writeFixNullMessage(ERROR, message, null); - } - - public void info(String message, Throwable t) { - writeFixNullMessage(INFO, message, t); - } - - public void info(String message) { - writeFixNullMessage(INFO, message, null); - } - - public void warning(String message, Throwable t) { - writeFixNullMessage(WARNING, message, t); - } - - public void warning(String message) { - writeFixNullMessage(WARNING, message, null); - } - - public boolean isDebugEnabled() { - return true; - } - - public boolean isErrorEnabled() { - return true; - } - - public boolean isInfoEnabled() { - return true; - } - - public boolean isWarningEnabled() { - return true; - } -} diff --git a/legacy/src/full/java/kellinwood/logging/ConsoleLoggerFactory.java b/legacy/src/full/java/kellinwood/logging/ConsoleLoggerFactory.java deleted file mode 100644 index 1d4b31aa2..000000000 --- a/legacy/src/full/java/kellinwood/logging/ConsoleLoggerFactory.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.logging; - -public class ConsoleLoggerFactory implements LoggerFactory { - - public LoggerInterface getLogger(String category) { - return new StreamLogger(category, System.out); - } -} diff --git a/legacy/src/full/java/kellinwood/logging/LoggerFactory.java b/legacy/src/full/java/kellinwood/logging/LoggerFactory.java deleted file mode 100644 index fe15cab94..000000000 --- a/legacy/src/full/java/kellinwood/logging/LoggerFactory.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.logging; - -public interface LoggerFactory { - - public LoggerInterface getLogger(String category); -} diff --git a/legacy/src/full/java/kellinwood/logging/LoggerInterface.java b/legacy/src/full/java/kellinwood/logging/LoggerInterface.java deleted file mode 100644 index 0c7d86f60..000000000 --- a/legacy/src/full/java/kellinwood/logging/LoggerInterface.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.logging; - -public interface LoggerInterface { - - public static final String ERROR = "ERROR"; - public static final String WARNING = "WARNING"; - public static final String INFO = "INFO"; - public static final String DEBUG = "DEBUG"; - - public boolean isErrorEnabled(); - - public void error(String message); - - public void error(String message, Throwable t); - - public boolean isWarningEnabled(); - - public void warning(String message); - - public void warning(String message, Throwable t); - - public boolean isInfoEnabled(); - - public void info(String message); - - public void info(String message, Throwable t); - - public boolean isDebugEnabled(); - - public void debug(String message); - - public void debug(String message, Throwable t); -} diff --git a/legacy/src/full/java/kellinwood/logging/LoggerManager.java b/legacy/src/full/java/kellinwood/logging/LoggerManager.java deleted file mode 100644 index c71987cde..000000000 --- a/legacy/src/full/java/kellinwood/logging/LoggerManager.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.logging; - -import java.util.Map; -import java.util.TreeMap; - -public class LoggerManager { - - static LoggerFactory factory = new NullLoggerFactory(); - - static Map loggers = new TreeMap(); - - public static void setLoggerFactory(LoggerFactory f) { - factory = f; - } - - public static LoggerInterface getLogger(String category) { - - LoggerInterface logger = loggers.get(category); - if (logger == null) { - logger = factory.getLogger(category); - loggers.put(category, logger); - } - return logger; - } -} diff --git a/legacy/src/full/java/kellinwood/logging/NullLoggerFactory.java b/legacy/src/full/java/kellinwood/logging/NullLoggerFactory.java deleted file mode 100644 index d056a402a..000000000 --- a/legacy/src/full/java/kellinwood/logging/NullLoggerFactory.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.logging; - -public class NullLoggerFactory implements LoggerFactory { - - static LoggerInterface logger = new LoggerInterface() { - - public void debug(String message) { - } - - public void debug(String message, Throwable t) { - } - - public void error(String message) { - } - - public void error(String message, Throwable t) { - } - - public void info(String message) { - } - - public void info(String message, Throwable t) { - } - - public boolean isDebugEnabled() { - return false; - } - - public boolean isErrorEnabled() { - return false; - } - - public boolean isInfoEnabled() { - return false; - } - - public boolean isWarningEnabled() { - return false; - } - - public void warning(String message) { - } - - public void warning(String message, Throwable t) { - } - - }; - - - public LoggerInterface getLogger(String category) { - return logger; - } -} diff --git a/legacy/src/full/java/kellinwood/logging/StreamLogger.java b/legacy/src/full/java/kellinwood/logging/StreamLogger.java deleted file mode 100644 index e5c02257f..000000000 --- a/legacy/src/full/java/kellinwood/logging/StreamLogger.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.logging; - -import java.io.PrintStream; - -public class StreamLogger extends AbstractLogger { - - PrintStream out; - - public StreamLogger(String category, PrintStream out) { - super(category); - this.out = out; - } - - @Override - protected void write(String level, String message, Throwable t) { - out.print(format(level, message)); - if (t != null) t.printStackTrace(out); - } -} diff --git a/legacy/src/full/java/kellinwood/security/zipsigner/AutoKeyException.java b/legacy/src/full/java/kellinwood/security/zipsigner/AutoKeyException.java deleted file mode 100644 index b3107843e..000000000 --- a/legacy/src/full/java/kellinwood/security/zipsigner/AutoKeyException.java +++ /dev/null @@ -1,14 +0,0 @@ -package kellinwood.security.zipsigner; - -public class AutoKeyException extends RuntimeException { - - private static final long serialVersionUID = 1L; - - public AutoKeyException(String message) { - super(message); - } - - public AutoKeyException(String message, Throwable cause) { - super(message, cause); - } -} diff --git a/legacy/src/full/java/kellinwood/security/zipsigner/DefaultResourceAdapter.java b/legacy/src/full/java/kellinwood/security/zipsigner/DefaultResourceAdapter.java deleted file mode 100644 index aa77dc6f4..000000000 --- a/legacy/src/full/java/kellinwood/security/zipsigner/DefaultResourceAdapter.java +++ /dev/null @@ -1,34 +0,0 @@ -package kellinwood.security.zipsigner; - -import java.util.Locale; - -/** - * Default resource adapter. - */ -public class DefaultResourceAdapter implements ResourceAdapter { - - @Override - public String getString(Item item, Object... args) { - - switch (item) { - case INPUT_SAME_AS_OUTPUT_ERROR: - return "Input and output files are the same. Specify a different name for the output."; - case AUTO_KEY_SELECTION_ERROR: - return "Unable to auto-select key for signing " + args[0]; - case LOADING_CERTIFICATE_AND_KEY: - return "Loading certificate and private key"; - case PARSING_CENTRAL_DIRECTORY: - return "Parsing the input's central directory"; - case GENERATING_MANIFEST: - return "Generating manifest"; - case GENERATING_SIGNATURE_FILE: - return "Generating signature file"; - case GENERATING_SIGNATURE_BLOCK: - return "Generating signature block file"; - case COPYING_ZIP_ENTRY: - return String.format(Locale.ENGLISH, "Copying zip entry %d of %d", args[0], args[1]); - default: - throw new IllegalArgumentException("Unknown item " + item); - } - } -} diff --git a/legacy/src/full/java/kellinwood/security/zipsigner/HexDumpEncoder.java b/legacy/src/full/java/kellinwood/security/zipsigner/HexDumpEncoder.java deleted file mode 100644 index 79e5495ae..000000000 --- a/legacy/src/full/java/kellinwood/security/zipsigner/HexDumpEncoder.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.security.zipsigner; - -import org.bouncycastle.util.encoders.HexEncoder; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; - -/** - * Produces the classic hex dump with an address column, hex data - * section (16 bytes per row) and right-column printable character display. - */ -public class HexDumpEncoder { - - static HexEncoder encoder = new HexEncoder(); - - public static String encode(byte[] data) { - - try { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - encoder.encode(data, 0, data.length, baos); - byte[] hex = baos.toByteArray(); - - StringBuilder hexDumpOut = new StringBuilder(); - for (int i = 0; i < hex.length; i += 32) { - - int max = Math.min(i + 32, hex.length); - - StringBuilder hexOut = new StringBuilder(); - StringBuilder chrOut = new StringBuilder(); - - hexOut.append(String.format("%08x: ", (i / 2))); - - for (int j = i; j < max; j += 2) { - hexOut.append(Character.valueOf((char) hex[j])); - hexOut.append(Character.valueOf((char) hex[j + 1])); - if ((j + 2) % 4 == 0) hexOut.append(' '); - - int dataChar = data[j / 2]; - if (dataChar >= 32 && dataChar < 127) { - chrOut.append(Character.valueOf((char) dataChar)); - } else chrOut.append('.'); - } - - hexDumpOut.append(hexOut.toString()); - for (int k = hexOut.length(); k < 50; k++) hexDumpOut.append(' '); - hexDumpOut.append(" "); - hexDumpOut.append(chrOut); - hexDumpOut.append("\n"); - } - - return hexDumpOut.toString(); - } catch (IOException x) { - throw new IllegalStateException(x.getClass().getName() + ": " + x.getMessage()); - } - } -} \ No newline at end of file diff --git a/legacy/src/full/java/kellinwood/security/zipsigner/KeySet.java b/legacy/src/full/java/kellinwood/security/zipsigner/KeySet.java deleted file mode 100644 index cfdeb180f..000000000 --- a/legacy/src/full/java/kellinwood/security/zipsigner/KeySet.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.security.zipsigner; - -import java.security.PrivateKey; -import java.security.cert.X509Certificate; - -public class KeySet { - - String name; - - // certificate - X509Certificate publicKey = null; - - // private key - PrivateKey privateKey = null; - - // signature block template - byte[] sigBlockTemplate = null; - - String signatureAlgorithm = "SHA1withRSA"; - - public KeySet() { - } - - public KeySet(String name, X509Certificate publicKey, PrivateKey privateKey, byte[] sigBlockTemplate) { - this.name = name; - this.publicKey = publicKey; - this.privateKey = privateKey; - this.sigBlockTemplate = sigBlockTemplate; - } - - public KeySet(String name, X509Certificate publicKey, PrivateKey privateKey, String signatureAlgorithm, byte[] sigBlockTemplate) { - this.name = name; - this.publicKey = publicKey; - this.privateKey = privateKey; - if (signatureAlgorithm != null) this.signatureAlgorithm = signatureAlgorithm; - this.sigBlockTemplate = sigBlockTemplate; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public X509Certificate getPublicKey() { - return publicKey; - } - - public void setPublicKey(X509Certificate publicKey) { - this.publicKey = publicKey; - } - - public PrivateKey getPrivateKey() { - return privateKey; - } - - public void setPrivateKey(PrivateKey privateKey) { - this.privateKey = privateKey; - } - - public byte[] getSigBlockTemplate() { - return sigBlockTemplate; - } - - public void setSigBlockTemplate(byte[] sigBlockTemplate) { - this.sigBlockTemplate = sigBlockTemplate; - } - - public String getSignatureAlgorithm() { - return signatureAlgorithm; - } - - public void setSignatureAlgorithm(String signatureAlgorithm) { - if (signatureAlgorithm == null) signatureAlgorithm = "SHA1withRSA"; - else this.signatureAlgorithm = signatureAlgorithm; - } -} diff --git a/legacy/src/full/java/kellinwood/security/zipsigner/ProgressEvent.java b/legacy/src/full/java/kellinwood/security/zipsigner/ProgressEvent.java deleted file mode 100644 index eb29ec3e9..000000000 --- a/legacy/src/full/java/kellinwood/security/zipsigner/ProgressEvent.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.security.zipsigner; - -public class ProgressEvent { - - public static final int PRORITY_NORMAL = 0; - public static final int PRORITY_IMPORTANT = 1; - - private String message; - private int percentDone; - private int priority; - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public int getPercentDone() { - return percentDone; - } - - public void setPercentDone(int percentDone) { - this.percentDone = percentDone; - } - - public int getPriority() { - return priority; - } - - public void setPriority(int priority) { - this.priority = priority; - } -} diff --git a/legacy/src/full/java/kellinwood/security/zipsigner/ProgressHelper.java b/legacy/src/full/java/kellinwood/security/zipsigner/ProgressHelper.java deleted file mode 100644 index 41b09f264..000000000 --- a/legacy/src/full/java/kellinwood/security/zipsigner/ProgressHelper.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.security.zipsigner; - -import java.util.ArrayList; - -public class ProgressHelper { - - private int progressTotalItems = 0; - private int progressCurrentItem = 0; - private ProgressEvent progressEvent = new ProgressEvent(); - - public void initProgress() { - progressTotalItems = 10000; - progressCurrentItem = 0; - } - - public int getProgressTotalItems() { - return progressTotalItems; - } - - public void setProgressTotalItems(int progressTotalItems) { - this.progressTotalItems = progressTotalItems; - } - - public int getProgressCurrentItem() { - return progressCurrentItem; - } - - public void setProgressCurrentItem(int progressCurrentItem) { - this.progressCurrentItem = progressCurrentItem; - } - - public void progress(int priority, String message) { - - progressCurrentItem += 1; - - int percentDone; - if (progressTotalItems == 0) percentDone = 0; - else percentDone = (100 * progressCurrentItem) / progressTotalItems; - - // Notify listeners here - for (ProgressListener listener : listeners) { - progressEvent.setMessage(message); - progressEvent.setPercentDone(percentDone); - progressEvent.setPriority(priority); - listener.onProgress(progressEvent); - } - } - - private ArrayList listeners = new ArrayList(); - - @SuppressWarnings("unchecked") - public synchronized void addProgressListener(ProgressListener l) { - ArrayList list = (ArrayList) listeners.clone(); - list.add(l); - listeners = list; - } - - @SuppressWarnings("unchecked") - public synchronized void removeProgressListener(ProgressListener l) { - ArrayList list = (ArrayList) listeners.clone(); - list.remove(l); - listeners = list; - } -} diff --git a/legacy/src/full/java/kellinwood/security/zipsigner/ProgressListener.java b/legacy/src/full/java/kellinwood/security/zipsigner/ProgressListener.java deleted file mode 100644 index 3cb62060a..000000000 --- a/legacy/src/full/java/kellinwood/security/zipsigner/ProgressListener.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.security.zipsigner; - -public interface ProgressListener { - - /** - * Called to notify the listener that progress has been made during - * the zip signing operation. - */ - public void onProgress(ProgressEvent event); -} \ No newline at end of file diff --git a/legacy/src/full/java/kellinwood/security/zipsigner/ResourceAdapter.java b/legacy/src/full/java/kellinwood/security/zipsigner/ResourceAdapter.java deleted file mode 100644 index 993749ed3..000000000 --- a/legacy/src/full/java/kellinwood/security/zipsigner/ResourceAdapter.java +++ /dev/null @@ -1,20 +0,0 @@ -package kellinwood.security.zipsigner; - -/** - * Interface to obtain internationalized strings for the progress events. - */ -public interface ResourceAdapter { - - public enum Item { - INPUT_SAME_AS_OUTPUT_ERROR, - AUTO_KEY_SELECTION_ERROR, - LOADING_CERTIFICATE_AND_KEY, - PARSING_CENTRAL_DIRECTORY, - GENERATING_MANIFEST, - GENERATING_SIGNATURE_FILE, - GENERATING_SIGNATURE_BLOCK, - COPYING_ZIP_ENTRY - } - - public String getString(Item item, Object... args); -} diff --git a/legacy/src/full/java/kellinwood/security/zipsigner/ZipSigner.java b/legacy/src/full/java/kellinwood/security/zipsigner/ZipSigner.java deleted file mode 100644 index 53668efd8..000000000 --- a/legacy/src/full/java/kellinwood/security/zipsigner/ZipSigner.java +++ /dev/null @@ -1,780 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood - * Copyright (C) 2008 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* This file is a heavily modified version of com.android.signapk.SignApk.java. - * The changes include: - * - addition of the signZip() convenience methods - * - addition of a progress listener interface - * - removal of main() - * - switch to a signature generation method that verifies - * in Android recovery - * - eliminated dependency on sun.security and sun.misc APIs by - * using signature block template files. - */ - -package kellinwood.security.zipsigner; - -import android.util.Base64; - -import java.io.ByteArrayOutputStream; -import java.io.DataInputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.PrintStream; -import java.lang.reflect.Method; -import java.net.URL; -import java.security.DigestOutputStream; -import java.security.GeneralSecurityException; -import java.security.Key; -import java.security.KeyFactory; -import java.security.KeyStore; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.security.PrivateKey; -import java.security.Provider; -import java.security.Security; -import java.security.Signature; -import java.security.cert.Certificate; -import java.security.cert.CertificateFactory; -import java.security.cert.X509Certificate; -import java.security.spec.InvalidKeySpecException; -import java.security.spec.KeySpec; -import java.security.spec.PKCS8EncodedKeySpec; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Observable; -import java.util.Observer; -import java.util.TreeMap; -import java.util.jar.Attributes; -import java.util.jar.JarFile; -import java.util.jar.Manifest; -import java.util.regex.Pattern; - -import javax.crypto.Cipher; -import javax.crypto.EncryptedPrivateKeyInfo; -import javax.crypto.SecretKeyFactory; -import javax.crypto.spec.PBEKeySpec; - -import kellinwood.logging.LoggerInterface; -import kellinwood.logging.LoggerManager; -import kellinwood.zipio.ZioEntry; -import kellinwood.zipio.ZipInput; -import kellinwood.zipio.ZipOutput; - -/** - * This is a modified copy of com.android.signapk.SignApk.java. It provides an - * API to sign JAR files (including APKs and Zip/OTA updates) in - * a way compatible with the mincrypt verifier, using SHA1 and RSA keys. - *

    - * Please see the README.txt file in the root of this project for usage instructions. - */ -public class ZipSigner { - - private boolean canceled = false; - - private ProgressHelper progressHelper = new ProgressHelper(); - private ResourceAdapter resourceAdapter = new DefaultResourceAdapter(); - - static LoggerInterface log = null; - - private static final String CERT_SF_NAME = "META-INF/CERT.SF"; - private static final String CERT_RSA_NAME = "META-INF/CERT.RSA"; - - // Files matching this pattern are not copied to the output. - private static Pattern stripPattern = - Pattern.compile("^META-INF/(.*)[.](SF|RSA|DSA)$"); - - Map loadedKeys = new HashMap(); - KeySet keySet = null; - - public static LoggerInterface getLogger() { - if (log == null) log = LoggerManager.getLogger(ZipSigner.class.getName()); - return log; - } - - public static final String MODE_AUTO_TESTKEY = "auto-testkey"; - public static final String MODE_AUTO_NONE = "auto-none"; - public static final String MODE_AUTO = "auto"; - public static final String KEY_NONE = "none"; - public static final String KEY_TESTKEY = "testkey"; - - // Allowable key modes. - public static final String[] SUPPORTED_KEY_MODES = - new String[]{MODE_AUTO_TESTKEY, MODE_AUTO, MODE_AUTO_NONE, "media", "platform", "shared", KEY_TESTKEY, KEY_NONE}; - - String keymode = KEY_TESTKEY; // backwards compatible with versions that only signed with this key - - Map autoKeyDetect = new HashMap(); - - AutoKeyObservable autoKeyObservable = new AutoKeyObservable(); - - public ZipSigner() throws ClassNotFoundException, IllegalAccessException, InstantiationException { - // MD5 of the first 1458 bytes of the signature block generated by the key, mapped to the key name - autoKeyDetect.put("aa9852bc5a53272ac8031d49b65e4b0e", "media"); - autoKeyDetect.put("e60418c4b638f20d0721e115674ca11f", "platform"); - autoKeyDetect.put("3e24e49741b60c215c010dc6048fca7d", "shared"); - autoKeyDetect.put("dab2cead827ef5313f28e22b6fa8479f", "testkey"); - } - - public ResourceAdapter getResourceAdapter() { - return resourceAdapter; - } - - public void setResourceAdapter(ResourceAdapter resourceAdapter) { - this.resourceAdapter = resourceAdapter; - } - - // when the key mode is automatic, the observers are called when the key is determined - public void addAutoKeyObserver(Observer o) { - autoKeyObservable.addObserver(o); - } - - public String getKeymode() { - return keymode; - } - - public void setKeymode(String km) throws IOException, GeneralSecurityException { - if (getLogger().isDebugEnabled()) getLogger().debug("setKeymode: " + km); - keymode = km; - if (keymode.startsWith(MODE_AUTO)) { - keySet = null; - } else { - progressHelper.initProgress(); - loadKeys(keymode); - } - } - - public static String[] getSupportedKeyModes() { - return SUPPORTED_KEY_MODES; - } - - protected String autoDetectKey(String mode, Map zioEntries) - throws NoSuchAlgorithmException, IOException { - boolean debug = getLogger().isDebugEnabled(); - - if (!mode.startsWith(MODE_AUTO)) return mode; - - // Auto-determine which keys to use - String keyName = null; - // Start by finding the signature block file in the input. - for (Map.Entry entry : zioEntries.entrySet()) { - String entryName = entry.getKey(); - if (entryName.startsWith("META-INF/") && entryName.endsWith(".RSA")) { - - // Compute MD5 of the first 1458 bytes, which is the size of our signature block templates -- - // e.g., the portion of the sig block file that is the same for a given certificate. - MessageDigest md5 = MessageDigest.getInstance("MD5"); - byte[] entryData = entry.getValue().getData(); - if (entryData.length < 1458) break; // sig block too short to be a supported key - md5.update(entryData, 0, 1458); - byte[] rawDigest = md5.digest(); - - // Create the hex representation of the digest value - StringBuilder builder = new StringBuilder(); - for (byte b : rawDigest) { - builder.append(String.format("%02x", b)); - } - - String md5String = builder.toString(); - // Lookup the key name - keyName = autoKeyDetect.get(md5String); - - if (debug) { - if (keyName != null) { - getLogger().debug(String.format("Auto-determined key=%s using md5=%s", keyName, md5String)); - } else { - getLogger().debug(String.format("Auto key determination failed for md5=%s", md5String)); - } - } - if (keyName != null) return keyName; - } - } - - if (mode.equals(MODE_AUTO_TESTKEY)) { - // in auto-testkey mode, fallback to the testkey if it couldn't be determined - if (debug) getLogger().debug("Falling back to key=" + keyName); - return KEY_TESTKEY; - - } else if (mode.equals(MODE_AUTO_NONE)) { - // in auto-node mode, simply copy the input to the output when the key can't be determined. - if (debug) getLogger().debug("Unable to determine key, returning: " + KEY_NONE); - return KEY_NONE; - } - - return null; - } - - public void issueLoadingCertAndKeysProgressEvent() { - progressHelper.progress(ProgressEvent.PRORITY_IMPORTANT, resourceAdapter.getString(ResourceAdapter.Item.LOADING_CERTIFICATE_AND_KEY)); - } - - // Loads one of the built-in keys (media, platform, shared, testkey) - public void loadKeys(String name) - throws IOException, GeneralSecurityException { - - keySet = loadedKeys.get(name); - if (keySet != null) return; - - keySet = new KeySet(); - keySet.setName(name); - loadedKeys.put(name, keySet); - - if (KEY_NONE.equals(name)) return; - - issueLoadingCertAndKeysProgressEvent(); - - // load the private key - URL privateKeyUrl = getClass().getResource("/keys/" + name + ".pk8"); - keySet.setPrivateKey(readPrivateKey(privateKeyUrl, null)); - - // load the certificate - URL publicKeyUrl = getClass().getResource("/keys/" + name + ".x509.pem"); - keySet.setPublicKey(readPublicKey(publicKeyUrl)); - - // load the signature block template - URL sigBlockTemplateUrl = getClass().getResource("/keys/" + name + ".sbt"); - if (sigBlockTemplateUrl != null) { - keySet.setSigBlockTemplate(readContentAsBytes(sigBlockTemplateUrl)); - } - } - - public void setKeys(String name, X509Certificate publicKey, PrivateKey privateKey, byte[] signatureBlockTemplate) { - keySet = new KeySet(name, publicKey, privateKey, signatureBlockTemplate); - } - - public void setKeys(String name, X509Certificate publicKey, PrivateKey privateKey, String signatureAlgorithm, byte[] signatureBlockTemplate) { - keySet = new KeySet(name, publicKey, privateKey, signatureAlgorithm, signatureBlockTemplate); - } - - public KeySet getKeySet() { - return keySet; - } - - // Allow the operation to be canceled. - public void cancel() { - canceled = true; - } - - // Allow the instance to sign again if previously canceled. - public void resetCanceled() { - canceled = false; - } - - public boolean isCanceled() { - return canceled; - } - - @SuppressWarnings("unchecked") - public void loadProvider(String providerClassName) - throws ClassNotFoundException, IllegalAccessException, InstantiationException { - Class providerClass = Class.forName(providerClassName); - Provider provider = (Provider) providerClass.newInstance(); - Security.insertProviderAt(provider, 1); - } - - - public X509Certificate readPublicKey(URL publicKeyUrl) - throws IOException, GeneralSecurityException { - InputStream input = publicKeyUrl.openStream(); - try { - CertificateFactory cf = CertificateFactory.getInstance("X.509"); - return (X509Certificate) cf.generateCertificate(input); - } finally { - input.close(); - } - } - - /** - * Decrypt an encrypted PKCS 8 format private key. - *

    - * Based on ghstark's post on Aug 6, 2006 at - * http://forums.sun.com/thread.jspa?threadID=758133&messageID=4330949 - * - * @param encryptedPrivateKey The raw data of the private key - * @param keyPassword the key password - */ - private KeySpec decryptPrivateKey(byte[] encryptedPrivateKey, String keyPassword) - throws GeneralSecurityException { - EncryptedPrivateKeyInfo epkInfo; - try { - epkInfo = new EncryptedPrivateKeyInfo(encryptedPrivateKey); - } catch (IOException ex) { - // Probably not an encrypted key. - return null; - } - - char[] keyPasswd = keyPassword.toCharArray(); - - SecretKeyFactory skFactory = SecretKeyFactory.getInstance(epkInfo.getAlgName()); - Key key = skFactory.generateSecret(new PBEKeySpec(keyPasswd)); - - Cipher cipher = Cipher.getInstance(epkInfo.getAlgName()); - cipher.init(Cipher.DECRYPT_MODE, key, epkInfo.getAlgParameters()); - - try { - return epkInfo.getKeySpec(cipher); - } catch (InvalidKeySpecException ex) { - getLogger().error("signapk: Password for private key may be bad."); - throw ex; - } - } - - /** - * Fetch the content at the specified URL and return it as a byte array. - */ - public byte[] readContentAsBytes(URL contentUrl) throws IOException { - return readContentAsBytes(contentUrl.openStream()); - } - - /** - * Fetch the content from the given stream and return it as a byte array. - */ - public byte[] readContentAsBytes(InputStream input) throws IOException { - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - byte[] buffer = new byte[2048]; - - int numRead = input.read(buffer); - while (numRead != -1) { - baos.write(buffer, 0, numRead); - numRead = input.read(buffer); - } - - byte[] bytes = baos.toByteArray(); - return bytes; - } - - /** - * Read a PKCS 8 format private key. - */ - public PrivateKey readPrivateKey(URL privateKeyUrl, String keyPassword) - throws IOException, GeneralSecurityException { - DataInputStream input = new DataInputStream(privateKeyUrl.openStream()); - try { - byte[] bytes = readContentAsBytes(input); - - KeySpec spec = decryptPrivateKey(bytes, keyPassword); - if (spec == null) { - spec = new PKCS8EncodedKeySpec(bytes); - } - - try { - return KeyFactory.getInstance("RSA").generatePrivate(spec); - } catch (InvalidKeySpecException ex) { - return KeyFactory.getInstance("DSA").generatePrivate(spec); - } - } finally { - input.close(); - } - } - - /** - * Add the SHA1 of every file to the manifest, creating it if necessary. - */ - private Manifest addDigestsToManifest(Map entries) - throws IOException, GeneralSecurityException { - Manifest input = null; - ZioEntry manifestEntry = entries.get(JarFile.MANIFEST_NAME); - if (manifestEntry != null) { - input = new Manifest(); - input.read(manifestEntry.getInputStream()); - } - Manifest output = new Manifest(); - Attributes main = output.getMainAttributes(); - if (input != null) { - main.putAll(input.getMainAttributes()); - } else { - main.putValue("Manifest-Version", "1.0"); - main.putValue("Created-By", "1.0 (Android SignApk)"); - } - - // BASE64Encoder base64 = new BASE64Encoder(); - MessageDigest md = MessageDigest.getInstance("SHA1"); - byte[] buffer = new byte[512]; - int num; - - // We sort the input entries by name, and add them to the - // output manifest in sorted order. We expect that the output - // map will be deterministic. - - TreeMap byName = new TreeMap(); - byName.putAll(entries); - - boolean debug = getLogger().isDebugEnabled(); - if (debug) getLogger().debug("Manifest entries:"); - for (ZioEntry entry : byName.values()) { - if (canceled) break; - String name = entry.getName(); - if (debug) getLogger().debug(name); - if (!entry.isDirectory() && !name.equals(JarFile.MANIFEST_NAME) && - !name.equals(CERT_SF_NAME) && !name.equals(CERT_RSA_NAME) && - (stripPattern == null || - !stripPattern.matcher(name).matches())) { - - progressHelper.progress(ProgressEvent.PRORITY_NORMAL, resourceAdapter.getString(ResourceAdapter.Item.GENERATING_MANIFEST)); - InputStream data = entry.getInputStream(); - while ((num = data.read(buffer)) > 0) { - md.update(buffer, 0, num); - } - - Attributes attr = null; - if (input != null) { - Attributes inAttr = input.getAttributes(name); - if (inAttr != null) attr = new Attributes(inAttr); - } - if (attr == null) attr = new Attributes(); - attr.putValue("SHA1-Digest", Base64.encodeToString(md.digest(), Base64.NO_WRAP)); - output.getEntries().put(name, attr); - } - } - - return output; - } - - - /** - * Write the signature file to the given output stream. - */ - private void generateSignatureFile(Manifest manifest, OutputStream out) - throws IOException, GeneralSecurityException { - out.write(("Signature-Version: 1.0\r\n").getBytes()); - out.write(("Created-By: 1.0 (Android SignApk)\r\n").getBytes()); - - - // BASE64Encoder base64 = new BASE64Encoder(); - MessageDigest md = MessageDigest.getInstance("SHA1"); - PrintStream print = new PrintStream( - new DigestOutputStream(new ByteArrayOutputStream(), md), - true, "UTF-8"); - - // Digest of the entire manifest - manifest.write(print); - print.flush(); - - out.write(("SHA1-Digest-Manifest: " + Base64.encodeToString(md.digest(), Base64.NO_WRAP) + "\r\n\r\n").getBytes()); - - Map entries = manifest.getEntries(); - for (Map.Entry entry : entries.entrySet()) { - if (canceled) break; - progressHelper.progress(ProgressEvent.PRORITY_NORMAL, resourceAdapter.getString(ResourceAdapter.Item.GENERATING_SIGNATURE_FILE)); - // Digest of the manifest stanza for this entry. - String nameEntry = "Name: " + entry.getKey() + "\r\n"; - print.print(nameEntry); - for (Map.Entry att : entry.getValue().entrySet()) { - print.print(att.getKey() + ": " + att.getValue() + "\r\n"); - } - print.print("\r\n"); - print.flush(); - - out.write(nameEntry.getBytes()); - out.write(("SHA1-Digest: " + Base64.encodeToString(md.digest(), Base64.NO_WRAP) + "\r\n\r\n").getBytes()); - } - } - - /** - * Write a .RSA file with a digital signature. - */ - @SuppressWarnings("unchecked") - private void writeSignatureBlock(KeySet keySet, byte[] signatureFileBytes, OutputStream out) - throws IOException, GeneralSecurityException { - if (keySet.getSigBlockTemplate() != null) { - Signature signature = Signature.getInstance("SHA1withRSA"); - signature.initSign(keySet.getPrivateKey()); - signature.update(signatureFileBytes); - byte[] signatureBytes = signature.sign(); - - out.write(keySet.getSigBlockTemplate()); - out.write(signatureBytes); - - if (getLogger().isDebugEnabled()) { - - MessageDigest md = MessageDigest.getInstance("SHA1"); - md.update(signatureFileBytes); - byte[] sfDigest = md.digest(); - getLogger().debug("Sig File SHA1: \n" + HexDumpEncoder.encode(sfDigest)); - - getLogger().debug("Signature: \n" + HexDumpEncoder.encode(signatureBytes)); - - Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding"); - cipher.init(Cipher.DECRYPT_MODE, keySet.getPublicKey()); - - byte[] tmpData = cipher.doFinal(signatureBytes); - getLogger().debug("Signature Decrypted: \n" + HexDumpEncoder.encode(tmpData)); - } - } else { - try { - byte[] sigBlock = null; - // Use reflection to call the optional generator. - Class generatorClass = Class.forName("kellinwood.security.zipsigner.optional.SignatureBlockGenerator"); - Method generatorMethod = generatorClass.getMethod("generate", KeySet.class, (new byte[1]).getClass()); - sigBlock = (byte[]) generatorMethod.invoke(null, keySet, signatureFileBytes); - out.write(sigBlock); - } catch (Exception x) { - throw new RuntimeException(x.getMessage(), x); - } - } - } - - /** - * Copy all the files in a manifest from input to output. We set - * the modification times in the output to a fixed time, so as to - * reduce variation in the output file and make incremental OTAs - * more efficient. - */ - private void copyFiles(Manifest manifest, Map input, ZipOutput output, long timestamp) - throws IOException { - Map entries = manifest.getEntries(); - List names = new ArrayList(entries.keySet()); - Collections.sort(names); - int i = 1; - for (String name : names) { - if (canceled) break; - progressHelper.progress(ProgressEvent.PRORITY_NORMAL, resourceAdapter.getString(ResourceAdapter.Item.COPYING_ZIP_ENTRY, i, names.size())); - i += 1; - ZioEntry inEntry = input.get(name); - inEntry.setTime(timestamp); - output.write(inEntry); - } - } - - /** - * Copy all the files from input to output. - */ - private void copyFiles(Map input, ZipOutput output) - throws IOException { - int i = 1; - for (ZioEntry inEntry : input.values()) { - if (canceled) break; - progressHelper.progress(ProgressEvent.PRORITY_NORMAL, resourceAdapter.getString(ResourceAdapter.Item.COPYING_ZIP_ENTRY, i, input.size())); - i += 1; - output.write(inEntry); - } - } - - /** - * @deprecated - use the version that takes the passwords as char[] - */ - public void signZip(URL keystoreURL, - String keystoreType, - String keystorePw, - String certAlias, - String certPw, - String inputZipFilename, - String outputZipFilename) - throws ClassNotFoundException, IllegalAccessException, InstantiationException, - IOException, GeneralSecurityException { - signZip(keystoreURL, keystoreType, keystorePw.toCharArray(), certAlias, certPw.toCharArray(), "SHA1withRSA", inputZipFilename, outputZipFilename); - } - - public void signZip(URL keystoreURL, - String keystoreType, - char[] keystorePw, - String certAlias, - char[] certPw, - String signatureAlgorithm, - String inputZipFilename, - String outputZipFilename) - throws ClassNotFoundException, IllegalAccessException, InstantiationException, - IOException, GeneralSecurityException { - InputStream keystoreStream = null; - - try { - KeyStore keystore = null; - if (keystoreType == null) keystoreType = KeyStore.getDefaultType(); - keystore = KeyStore.getInstance(keystoreType); - - keystoreStream = keystoreURL.openStream(); - keystore.load(keystoreStream, keystorePw); - Certificate cert = keystore.getCertificate(certAlias); - X509Certificate publicKey = (X509Certificate) cert; - Key key = keystore.getKey(certAlias, certPw); - PrivateKey privateKey = (PrivateKey) key; - - setKeys("custom", publicKey, privateKey, signatureAlgorithm, null); - - signZip(inputZipFilename, outputZipFilename); - } finally { - if (keystoreStream != null) keystoreStream.close(); - } - } - - /** - * Sign the input with the default test key and certificate. - * Save result to output file. - */ - public void signZip(Map zioEntries, String outputZipFilename) - throws IOException, GeneralSecurityException { - progressHelper.initProgress(); - signZip(zioEntries, new FileOutputStream(outputZipFilename), outputZipFilename); - } - - /** - * Sign the file using the given public key cert, private key, - * and signature block template. The signature block template - * parameter may be null, but if so - * android-sun-jarsign-support.jar must be in the classpath. - */ - public void signZip(String inputZipFilename, String outputZipFilename) - throws IOException, GeneralSecurityException { - File inFile = new File(inputZipFilename).getCanonicalFile(); - File outFile = new File(outputZipFilename).getCanonicalFile(); - - if (inFile.equals(outFile)) { - throw new IllegalArgumentException(resourceAdapter.getString(ResourceAdapter.Item.INPUT_SAME_AS_OUTPUT_ERROR)); - } - - progressHelper.initProgress(); - progressHelper.progress(ProgressEvent.PRORITY_IMPORTANT, resourceAdapter.getString(ResourceAdapter.Item.PARSING_CENTRAL_DIRECTORY)); - - ZipInput input = null; - OutputStream outStream = null; - try { - input = ZipInput.read(inputZipFilename); - outStream = new FileOutputStream(outputZipFilename); - signZip(input.getEntries(), outStream, outputZipFilename); - } finally { - if (input != null) input.close(); - if (outStream != null) outStream.close(); - } - } - - /** - * Sign the - * and signature block template. The signature block template - * parameter may be null, but if so - * android-sun-jarsign-support.jar must be in the classpath. - */ - public void signZip(Map zioEntries, OutputStream outputStream, String outputZipFilename) - throws IOException, GeneralSecurityException { - boolean debug = getLogger().isDebugEnabled(); - - progressHelper.initProgress(); - if (keySet == null) { - if (!keymode.startsWith(MODE_AUTO)) - throw new IllegalStateException("No keys configured for signing the file!"); - - // Auto-determine which keys to use - String keyName = this.autoDetectKey(keymode, zioEntries); - if (keyName == null) - throw new AutoKeyException(resourceAdapter.getString(ResourceAdapter.Item.AUTO_KEY_SELECTION_ERROR, new File(outputZipFilename).getName())); - - autoKeyObservable.notifyObservers(keyName); - - loadKeys(keyName); - } - - ZipOutput zipOutput = null; - - try { - - zipOutput = new ZipOutput(outputStream); - - if (KEY_NONE.equals(keySet.getName())) { - progressHelper.setProgressTotalItems(zioEntries.size()); - progressHelper.setProgressCurrentItem(0); - copyFiles(zioEntries, zipOutput); - return; - } - - // Calculate total steps to complete for accurate progress percentages. - int progressTotalItems = 0; - for (ZioEntry entry : zioEntries.values()) { - String name = entry.getName(); - if (!entry.isDirectory() && !name.equals(JarFile.MANIFEST_NAME) && - !name.equals(CERT_SF_NAME) && !name.equals(CERT_RSA_NAME) && - (stripPattern == null || - !stripPattern.matcher(name).matches())) { - progressTotalItems += 3; // digest for manifest, digest in sig file, copy data - } - } - progressTotalItems += 1; // CERT.RSA generation - progressHelper.setProgressTotalItems(progressTotalItems); - progressHelper.setProgressCurrentItem(0); - - // Assume the certificate is valid for at least an hour. - long timestamp = keySet.getPublicKey().getNotBefore().getTime() + 3600L * 1000; - - // MANIFEST.MF - // progress(ProgressEvent.PRORITY_NORMAL, JarFile.MANIFEST_NAME); - Manifest manifest = addDigestsToManifest(zioEntries); - if (canceled) return; - ZioEntry ze = new ZioEntry(JarFile.MANIFEST_NAME); - ze.setTime(timestamp); - manifest.write(ze.getOutputStream()); - zipOutput.write(ze); - - // CERT.SF - ze = new ZioEntry(CERT_SF_NAME); - ze.setTime(timestamp); - - ByteArrayOutputStream out = new ByteArrayOutputStream(); - generateSignatureFile(manifest, out); - if (canceled) return; - byte[] sfBytes = out.toByteArray(); - if (debug) { - getLogger().debug("Signature File: \n" + new String(sfBytes) + "\n" + - HexDumpEncoder.encode(sfBytes)); - } - ze.getOutputStream().write(sfBytes); - zipOutput.write(ze); - - // CERT.RSA - progressHelper.progress(ProgressEvent.PRORITY_NORMAL, resourceAdapter.getString(ResourceAdapter.Item.GENERATING_SIGNATURE_BLOCK)); - ze = new ZioEntry(CERT_RSA_NAME); - ze.setTime(timestamp); - writeSignatureBlock(keySet, sfBytes, ze.getOutputStream()); - zipOutput.write(ze); - if (canceled) return; - - // Everything else - copyFiles(manifest, zioEntries, zipOutput, timestamp); - if (canceled) return; - - } finally { - if (zipOutput != null) zipOutput.close(); - if (canceled) { - try { - if (outputZipFilename != null) new File(outputZipFilename).delete(); - } catch (Throwable t) { - getLogger().warning(t.getClass().getName() + ":" + t.getMessage()); - } - } - } - } - - public void addProgressListener(ProgressListener l) { - progressHelper.addProgressListener(l); - } - - public synchronized void removeProgressListener(ProgressListener l) { - progressHelper.removeProgressListener(l); - } - - public static class AutoKeyObservable extends Observable { - @Override - public void notifyObservers(Object arg) { - super.setChanged(); - super.notifyObservers(arg); - } - } -} \ No newline at end of file diff --git a/legacy/src/full/java/kellinwood/security/zipsigner/optional/SignatureBlockGenerator.java b/legacy/src/full/java/kellinwood/security/zipsigner/optional/SignatureBlockGenerator.java deleted file mode 100644 index 63d19424d..000000000 --- a/legacy/src/full/java/kellinwood/security/zipsigner/optional/SignatureBlockGenerator.java +++ /dev/null @@ -1,60 +0,0 @@ -package kellinwood.security.zipsigner.optional; - -import org.bouncycastle.cert.jcajce.JcaCertStore; -import org.bouncycastle.cms.CMSProcessableByteArray; -import org.bouncycastle.cms.CMSSignedData; -import org.bouncycastle.cms.CMSSignedDataGenerator; -import org.bouncycastle.cms.CMSTypedData; -import org.bouncycastle.cms.SignerInfoGenerator; -import org.bouncycastle.cms.jcajce.JcaSignerInfoGeneratorBuilder; -import org.bouncycastle.jce.provider.BouncyCastleProvider; -import org.bouncycastle.operator.ContentSigner; -import org.bouncycastle.operator.DigestCalculatorProvider; -import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; -import org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder; -import org.bouncycastle.util.Store; - -import java.util.Collections; - -import kellinwood.security.zipsigner.KeySet; - -/** - * - */ -public class SignatureBlockGenerator { - - /** - * Sign the given content using the private and public keys from the keySet, and return the encoded CMS (PKCS#7) data. - * Use of direct signature and DER encoding produces a block that is verifiable by Android recovery programs. - */ - public static byte[] generate(KeySet keySet, byte[] content) { - try { - BouncyCastleProvider bcp = new BouncyCastleProvider(); - CMSTypedData msg = new CMSProcessableByteArray(content); - - Store certs = new JcaCertStore(Collections.singletonList(keySet.getPublicKey())); - - CMSSignedDataGenerator gen = new CMSSignedDataGenerator(); - - JcaContentSignerBuilder jcaContentSignerBuilder = new JcaContentSignerBuilder(keySet.getSignatureAlgorithm()).setProvider(bcp); - ContentSigner sha1Signer = jcaContentSignerBuilder.build(keySet.getPrivateKey()); - - JcaDigestCalculatorProviderBuilder jcaDigestCalculatorProviderBuilder = new JcaDigestCalculatorProviderBuilder().setProvider(bcp); - DigestCalculatorProvider digestCalculatorProvider = jcaDigestCalculatorProviderBuilder.build(); - - JcaSignerInfoGeneratorBuilder jcaSignerInfoGeneratorBuilder = new JcaSignerInfoGeneratorBuilder(digestCalculatorProvider); - jcaSignerInfoGeneratorBuilder.setDirectSignature(true); - SignerInfoGenerator signerInfoGenerator = jcaSignerInfoGeneratorBuilder.build(sha1Signer, keySet.getPublicKey()); - - gen.addSignerInfoGenerator(signerInfoGenerator); - - gen.addCertificates(certs); - - CMSSignedData sigData = gen.generate(msg, false); - return sigData.toASN1Structure().getEncoded("DER"); - - } catch (Exception x) { - throw new RuntimeException(x.getMessage(), x); - } - } -} diff --git a/legacy/src/full/java/kellinwood/zipio/CentralEnd.java b/legacy/src/full/java/kellinwood/zipio/CentralEnd.java deleted file mode 100644 index 590e0dd2b..000000000 --- a/legacy/src/full/java/kellinwood/zipio/CentralEnd.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.zipio; - -import java.io.IOException; - -import kellinwood.logging.LoggerInterface; -import kellinwood.logging.LoggerManager; - -public class CentralEnd { - public int signature = 0x06054b50; // end of central dir signature 4 bytes - public short numberThisDisk = 0; // number of this disk 2 bytes - public short centralStartDisk = 0; // number of the disk with the start of the central directory 2 bytes - public short numCentralEntries; // total number of entries in the central directory on this disk 2 bytes - public short totalCentralEntries; // total number of entries in the central directory 2 bytes - - public int centralDirectorySize; // size of the central directory 4 bytes - public int centralStartOffset; // offset of start of central directory with respect to the starting disk number 4 bytes - public String fileComment; // .ZIP file comment (variable size) - - private static LoggerInterface log; - - public static CentralEnd read(ZipInput input) throws IOException { - - int signature = input.readInt(); - if (signature != 0x06054b50) { - // back up to the signature - input.seek(input.getFilePointer() - 4); - return null; - } - - CentralEnd entry = new CentralEnd(); - - entry.doRead(input); - return entry; - } - - public static LoggerInterface getLogger() { - if (log == null) log = LoggerManager.getLogger(CentralEnd.class.getName()); - return log; - } - - private void doRead(ZipInput input) throws IOException { - - boolean debug = getLogger().isDebugEnabled(); - - numberThisDisk = input.readShort(); - if (debug) log.debug(String.format("This disk number: 0x%04x", numberThisDisk)); - - centralStartDisk = input.readShort(); - if (debug) { - log.debug(String.format("Central dir start disk number: 0x%04x", centralStartDisk)); - } - - numCentralEntries = input.readShort(); - if (debug) { - log.debug(String.format("Central entries on this disk: 0x%04x", numCentralEntries)); - } - - totalCentralEntries = input.readShort(); - if (debug) { - log.debug(String.format("Total number of central entries: 0x%04x", totalCentralEntries)); - } - - centralDirectorySize = input.readInt(); - if (debug) log.debug(String.format("Central directory size: 0x%08x", centralDirectorySize)); - - centralStartOffset = input.readInt(); - if (debug) log.debug(String.format("Central directory offset: 0x%08x", centralStartOffset)); - - short zipFileCommentLen = input.readShort(); - fileComment = input.readString(zipFileCommentLen); - if (debug) log.debug(".ZIP file comment: " + fileComment); - } - - public void write(ZipOutput output) throws IOException { - - boolean debug = getLogger().isDebugEnabled(); - - output.writeInt(signature); - output.writeShort(numberThisDisk); - output.writeShort(centralStartDisk); - output.writeShort(numCentralEntries); - output.writeShort(totalCentralEntries); - output.writeInt(centralDirectorySize); - output.writeInt(centralStartOffset); - output.writeShort((short) fileComment.length()); - output.writeString(fileComment); - } -} diff --git a/legacy/src/full/java/kellinwood/zipio/ZioEntry.java b/legacy/src/full/java/kellinwood/zipio/ZioEntry.java deleted file mode 100644 index c3246bab3..000000000 --- a/legacy/src/full/java/kellinwood/zipio/ZioEntry.java +++ /dev/null @@ -1,639 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.zipio; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.SequenceInputStream; -import java.util.Date; -import java.util.Locale; -import java.util.zip.CRC32; -import java.util.zip.Inflater; -import java.util.zip.InflaterInputStream; - -import kellinwood.logging.LoggerInterface; -import kellinwood.logging.LoggerManager; - -public class ZioEntry implements Cloneable { - - private ZipInput zipInput; - - // public int signature = 0x02014b50; - private short versionMadeBy; - private short versionRequired; - private short generalPurposeBits; - private short compression; - private short modificationTime; - private short modificationDate; - private int crc32; - private int compressedSize; - private int size; - private String filename; - private byte[] extraData; - private short numAlignBytes = 0; - private String fileComment; - private short diskNumberStart; - private short internalAttributes; - private int externalAttributes; - - private int localHeaderOffset; - private long dataPosition = -1; - private byte[] data = null; - private ZioEntryOutputStream entryOut = null; - - private static byte[] alignBytes = new byte[4]; - - private static LoggerInterface log; - - public ZioEntry(ZipInput input) { - zipInput = input; - } - - public static LoggerInterface getLogger() { - if (log == null) log = LoggerManager.getLogger(ZioEntry.class.getName()); - return log; - } - - public ZioEntry(String name) { - filename = name; - fileComment = ""; - compression = 8; - extraData = new byte[0]; - setTime(System.currentTimeMillis()); - } - - public ZioEntry(String name, String sourceDataFile) - throws IOException { - zipInput = new ZipInput(sourceDataFile); - filename = name; - fileComment = ""; - this.compression = 0; - this.size = (int) zipInput.getFileLength(); - this.compressedSize = this.size; - - if (getLogger().isDebugEnabled()) - getLogger().debug(String.format(Locale.ENGLISH, "Computing CRC for %s, size=%d", sourceDataFile, size)); - - // compute CRC - CRC32 crc = new CRC32(); - - byte[] buffer = new byte[8096]; - - int numRead = 0; - while (numRead != size) { - int count = zipInput.read(buffer, 0, Math.min(buffer.length, (this.size - numRead))); - if (count > 0) { - crc.update(buffer, 0, count); - numRead += count; - } - } - - this.crc32 = (int) crc.getValue(); - - zipInput.seek(0); - this.dataPosition = 0; - extraData = new byte[0]; - setTime(new File(sourceDataFile).lastModified()); - } - - - public ZioEntry(String name, String sourceDataFile, short compression, int crc32, int compressedSize, int size) - throws IOException { - zipInput = new ZipInput(sourceDataFile); - filename = name; - fileComment = ""; - this.compression = compression; - this.crc32 = crc32; - this.compressedSize = compressedSize; - this.size = size; - this.dataPosition = 0; - extraData = new byte[0]; - setTime(new File(sourceDataFile).lastModified()); - } - - // Return a copy with a new name - public ZioEntry getClonedEntry(String newName) { - - ZioEntry clone; - try { - clone = (ZioEntry) this.clone(); - } catch (CloneNotSupportedException e) { - throw new IllegalStateException("clone() failed!"); - } - clone.setName(newName); - return clone; - } - - public void readLocalHeader() throws IOException { - ZipInput input = zipInput; - int tmp; - boolean debug = getLogger().isDebugEnabled(); - - input.seek(localHeaderOffset); - - if (debug) { - getLogger().debug(String.format("FILE POSITION: 0x%08x", input.getFilePointer())); - } - - // 0 4 Local file header signature = 0x04034b50 - int signature = input.readInt(); - if (signature != 0x04034b50) { - throw new IllegalStateException(String.format("Local header not found at pos=0x%08x, file=%s", input.getFilePointer(), filename)); - } - - // This method is usually called just before the data read, so - // its only purpose currently is to position the file pointer - // for the data read. The entry's attributes might also have - // been changed since the central dir entry was read (e.g., - // filename), so throw away the values here. - - int tmpInt; - short tmpShort; - - // 4 2 Version needed to extract (minimum) - /* versionRequired */ - tmpShort = input.readShort(); - if (debug) { - log.debug(String.format("Version required: 0x%04x", tmpShort /*versionRequired*/)); - } - - // 6 2 General purpose bit flag - /* generalPurposeBits */ - tmpShort = input.readShort(); - if (debug) { - log.debug(String.format("General purpose bits: 0x%04x", tmpShort /* generalPurposeBits */)); - } - - // 8 2 Compression method - /* compression */ - tmpShort = input.readShort(); - if (debug) log.debug(String.format("Compression: 0x%04x", tmpShort /* compression */)); - - // 10 2 File last modification time - /* modificationTime */ - tmpShort = input.readShort(); - if (debug) { - log.debug(String.format("Modification time: 0x%04x", tmpShort /* modificationTime */)); - } - - // 12 2 File last modification date - /* modificationDate */ - tmpShort = input.readShort(); - if (debug) { - log.debug(String.format("Modification date: 0x%04x", tmpShort /* modificationDate */)); - } - - // 14 4 CRC-32 - /* crc32 */ - tmpInt = input.readInt(); - if (debug) log.debug(String.format("CRC-32: 0x%04x", tmpInt /*crc32*/)); - - // 18 4 Compressed size - /* compressedSize*/ - tmpInt = input.readInt(); - if (debug) log.debug(String.format("Compressed size: 0x%04x", tmpInt /*compressedSize*/)); - - // 22 4 Uncompressed size - /* size */ - tmpInt = input.readInt(); - if (debug) log.debug(String.format("Size: 0x%04x", tmpInt /*size*/)); - - // 26 2 File name length (n) - short fileNameLen = input.readShort(); - if (debug) log.debug(String.format("File name length: 0x%04x", fileNameLen)); - - // 28 2 Extra field length (m) - short extraLen = input.readShort(); - if (debug) log.debug(String.format("Extra length: 0x%04x", extraLen)); - - // 30 n File name - String filename = input.readString(fileNameLen); - if (debug) log.debug("Filename: " + filename); - - // Extra data - byte[] extra = input.readBytes(extraLen); - - // Record the file position of this entry's data. - dataPosition = input.getFilePointer(); - if (debug) log.debug(String.format("Data position: 0x%08x", dataPosition)); - } - - public void writeLocalEntry(ZipOutput output) throws IOException { - if (data == null && dataPosition < 0 && zipInput != null) { - readLocalHeader(); - } - - localHeaderOffset = (int) output.getFilePointer(); - - boolean debug = getLogger().isDebugEnabled(); - - if (debug) { - getLogger().debug(String.format("Writing local header at 0x%08x - %s", localHeaderOffset, filename)); - } - - if (entryOut != null) { - entryOut.close(); - size = entryOut.getSize(); - data = ((ByteArrayOutputStream) entryOut.getWrappedStream()).toByteArray(); - compressedSize = data.length; - crc32 = entryOut.getCRC(); - } - - output.writeInt(0x04034b50); - output.writeShort(versionRequired); - output.writeShort(generalPurposeBits); - output.writeShort(compression); - output.writeShort(modificationTime); - output.writeShort(modificationDate); - output.writeInt(crc32); - output.writeInt(compressedSize); - output.writeInt(size); - output.writeShort((short) filename.length()); - - numAlignBytes = 0; - - // Zipalign if the file is uncompressed, i.e., "Stored", and file size is not zero. - if (compression == 0) { - - long dataPos = output.getFilePointer() + // current position - 2 + // plus size of extra data length - filename.length() + // plus filename - extraData.length; // plus extra data - - short dataPosMod4 = (short) (dataPos % 4); - - if (dataPosMod4 > 0) { - numAlignBytes = (short) (4 - dataPosMod4); - } - } - - // 28 2 Extra field length (m) - output.writeShort((short) (extraData.length + numAlignBytes)); - - // 30 n File name - output.writeString(filename); - - // Extra data - output.writeBytes(extraData); - - // Zipalign bytes - if (numAlignBytes > 0) { - output.writeBytes(alignBytes, 0, numAlignBytes); - } - - if (debug) { - getLogger().debug(String.format(Locale.ENGLISH, "Data position 0x%08x", output.getFilePointer())); - } - if (data != null) { - output.writeBytes(data); - if (debug) { - getLogger().debug(String.format(Locale.ENGLISH, "Wrote %d bytes", data.length)); - } - } else { - - if (debug) getLogger().debug(String.format("Seeking to position 0x%08x", dataPosition)); - zipInput.seek(dataPosition); - - int bufferSize = Math.min(compressedSize, 8096); - byte[] buffer = new byte[bufferSize]; - long totalCount = 0; - - while (totalCount != compressedSize) { - int numRead = zipInput.in.read(buffer, 0, (int) Math.min(compressedSize - totalCount, bufferSize)); - if (numRead > 0) { - output.writeBytes(buffer, 0, numRead); - if (debug) { - getLogger().debug(String.format(Locale.ENGLISH, "Wrote %d bytes", numRead)); - } - totalCount += numRead; - } else - throw new IllegalStateException(String.format(Locale.ENGLISH, "EOF reached while copying %s with %d bytes left to go", filename, compressedSize - totalCount)); - } - } - } - - public static ZioEntry read(ZipInput input) throws IOException { - - // 0 4 Central directory header signature = 0x02014b50 - int signature = input.readInt(); - if (signature != 0x02014b50) { - // back up to the signature - input.seek(input.getFilePointer() - 4); - return null; - } - - ZioEntry entry = new ZioEntry(input); - - entry.doRead(input); - return entry; - } - - private void doRead(ZipInput input) throws IOException { - - boolean debug = getLogger().isDebugEnabled(); - - // 4 2 Version needed to extract (minimum) - versionMadeBy = input.readShort(); - if (debug) log.debug(String.format("Version made by: 0x%04x", versionMadeBy)); - - // 4 2 Version required - versionRequired = input.readShort(); - if (debug) log.debug(String.format("Version required: 0x%04x", versionRequired)); - - // 6 2 General purpose bit flag - generalPurposeBits = input.readShort(); - if (debug) log.debug(String.format("General purpose bits: 0x%04x", generalPurposeBits)); - // Bits 1, 2, 3, and 11 are allowed to be set (first bit is bit zero). Any others are a problem. - if ((generalPurposeBits & 0xF7F1) != 0x0000) { - throw new IllegalStateException("Can't handle general purpose bits == " + String.format("0x%04x", generalPurposeBits)); - } - - // 8 2 Compression method - compression = input.readShort(); - if (debug) log.debug(String.format("Compression: 0x%04x", compression)); - - // 10 2 File last modification time - modificationTime = input.readShort(); - if (debug) log.debug(String.format("Modification time: 0x%04x", modificationTime)); - - // 12 2 File last modification date - modificationDate = input.readShort(); - if (debug) log.debug(String.format("Modification date: 0x%04x", modificationDate)); - - // 14 4 CRC-32 - crc32 = input.readInt(); - if (debug) log.debug(String.format("CRC-32: 0x%04x", crc32)); - - // 18 4 Compressed size - compressedSize = input.readInt(); - if (debug) log.debug(String.format("Compressed size: 0x%04x", compressedSize)); - - // 22 4 Uncompressed size - size = input.readInt(); - if (debug) log.debug(String.format("Size: 0x%04x", size)); - - // 26 2 File name length (n) - short fileNameLen = input.readShort(); - if (debug) log.debug(String.format("File name length: 0x%04x", fileNameLen)); - - // 28 2 Extra field length (m) - short extraLen = input.readShort(); - if (debug) log.debug(String.format("Extra length: 0x%04x", extraLen)); - - short fileCommentLen = input.readShort(); - if (debug) log.debug(String.format("File comment length: 0x%04x", fileCommentLen)); - - diskNumberStart = input.readShort(); - if (debug) log.debug(String.format("Disk number start: 0x%04x", diskNumberStart)); - - internalAttributes = input.readShort(); - if (debug) log.debug(String.format("Internal attributes: 0x%04x", internalAttributes)); - - externalAttributes = input.readInt(); - if (debug) log.debug(String.format("External attributes: 0x%08x", externalAttributes)); - - localHeaderOffset = input.readInt(); - if (debug) log.debug(String.format("Local header offset: 0x%08x", localHeaderOffset)); - - // 30 n File name - filename = input.readString(fileNameLen); - if (debug) log.debug("Filename: " + filename); - - extraData = input.readBytes(extraLen); - - fileComment = input.readString(fileCommentLen); - if (debug) log.debug("File comment: " + fileComment); - - generalPurposeBits = (short) (generalPurposeBits & 0x0800); // Don't write a data descriptor, preserve UTF-8 encoded filename bit - - // Don't write zero-length entries with compression. - if (size == 0) { - compressedSize = 0; - compression = 0; - crc32 = 0; - } - } - - /** - * Returns the entry's data. - */ - public byte[] getData() throws IOException { - if (data != null) return data; - - byte[] tmpdata = new byte[size]; - - InputStream din = getInputStream(); - int count = 0; - - while (count != size) { - int numRead = din.read(tmpdata, count, size - count); - if (numRead < 0) - throw new IllegalStateException(String.format(Locale.ENGLISH, "Read failed, expecting %d bytes, got %d instead", size, count)); - count += numRead; - } - return tmpdata; - } - - // Returns an input stream for reading the entry's data. - public InputStream getInputStream() throws IOException { - return getInputStream(null); - } - - // Returns an input stream for reading the entry's data. - public InputStream getInputStream(OutputStream monitorStream) throws IOException { - - if (entryOut != null) { - entryOut.close(); - size = entryOut.getSize(); - data = ((ByteArrayOutputStream) entryOut.getWrappedStream()).toByteArray(); - compressedSize = data.length; - crc32 = entryOut.getCRC(); - entryOut = null; - InputStream rawis = new ByteArrayInputStream(data); - if (compression == 0) return rawis; - else { - // Hacky, inflate using a sequence of input streams that returns 1 byte more than the actual length of the data. - // This extra dummy byte is required by InflaterInputStream when the data doesn't have the header and crc fields (as it is in zip files). - return new InflaterInputStream(new SequenceInputStream(rawis, new ByteArrayInputStream(new byte[1])), new Inflater(true)); - } - } - - ZioEntryInputStream dataStream; - dataStream = new ZioEntryInputStream(this); - if (monitorStream != null) dataStream.setMonitorStream(monitorStream); - if (compression != 0) { - // Note: When using nowrap=true with Inflater it is also necessary to provide - // an extra "dummy" byte as input. This is required by the ZLIB native library - // in order to support certain optimizations. - dataStream.setReturnDummyByte(true); - return new InflaterInputStream(dataStream, new Inflater(true)); - } else return dataStream; - } - - // Returns an output stream for writing an entry's data. - public OutputStream getOutputStream() { - entryOut = new ZioEntryOutputStream(compression, new ByteArrayOutputStream()); - return entryOut; - } - - public void write(ZipOutput output) throws IOException { - boolean debug = getLogger().isDebugEnabled(); - - output.writeInt(0x02014b50); - output.writeShort(versionMadeBy); - output.writeShort(versionRequired); - output.writeShort(generalPurposeBits); - output.writeShort(compression); - output.writeShort(modificationTime); - output.writeShort(modificationDate); - output.writeInt(crc32); - output.writeInt(compressedSize); - output.writeInt(size); - output.writeShort((short) filename.length()); - output.writeShort((short) (extraData.length + numAlignBytes)); - output.writeShort((short) fileComment.length()); - output.writeShort(diskNumberStart); - output.writeShort(internalAttributes); - output.writeInt(externalAttributes); - output.writeInt(localHeaderOffset); - - output.writeString(filename); - output.writeBytes(extraData); - if (numAlignBytes > 0) output.writeBytes(alignBytes, 0, numAlignBytes); - output.writeString(fileComment); - } - - /* - * Returns timestamp in Java format - */ - public long getTime() { - int year = (int) (((modificationDate >> 9) & 0x007f) + 80); - int month = (int) (((modificationDate >> 5) & 0x000f) - 1); - int day = (int) (modificationDate & 0x001f); - int hour = (int) ((modificationTime >> 11) & 0x001f); - int minute = (int) ((modificationTime >> 5) & 0x003f); - int seconds = (int) ((modificationTime << 1) & 0x003e); - Date d = new Date(year, month, day, hour, minute, seconds); - return d.getTime(); - } - - /* - * Set the file timestamp (using a Java time value). - */ - public void setTime(long time) { - Date d = new Date(time); - long dtime; - int year = d.getYear() + 1900; - if (year < 1980) { - dtime = (1 << 21) | (1 << 16); - } else { - dtime = (year - 1980) << 25 | (d.getMonth() + 1) << 21 | - d.getDate() << 16 | d.getHours() << 11 | d.getMinutes() << 5 | - d.getSeconds() >> 1; - } - - modificationDate = (short) (dtime >> 16); - modificationTime = (short) (dtime & 0xFFFF); - } - - public boolean isDirectory() { - return filename.endsWith("/"); - } - - public String getName() { - return filename; - } - - public void setName(String filename) { - this.filename = filename; - } - - /** - * Use 0 (STORED), or 8 (DEFLATE). - */ - public void setCompression(int compression) { - this.compression = (short) compression; - } - - public short getVersionMadeBy() { - return versionMadeBy; - } - - public short getVersionRequired() { - return versionRequired; - } - - public short getGeneralPurposeBits() { - return generalPurposeBits; - } - - public short getCompression() { - return compression; - } - - public int getCrc32() { - return crc32; - } - - public int getCompressedSize() { - return compressedSize; - } - - public int getSize() { - return size; - } - - public byte[] getExtraData() { - return extraData; - } - - public String getFileComment() { - return fileComment; - } - - public short getDiskNumberStart() { - return diskNumberStart; - } - - public short getInternalAttributes() { - return internalAttributes; - } - - public int getExternalAttributes() { - return externalAttributes; - } - - public int getLocalHeaderOffset() { - return localHeaderOffset; - } - - public long getDataPosition() { - return dataPosition; - } - - public ZioEntryOutputStream getEntryOut() { - return entryOut; - } - - public ZipInput getZipInput() { - return zipInput; - } -} diff --git a/legacy/src/full/java/kellinwood/zipio/ZioEntryInputStream.java b/legacy/src/full/java/kellinwood/zipio/ZioEntryInputStream.java deleted file mode 100644 index e0567ad7e..000000000 --- a/legacy/src/full/java/kellinwood/zipio/ZioEntryInputStream.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.zipio; - -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.RandomAccessFile; -import java.util.Locale; - -import kellinwood.logging.LoggerInterface; -import kellinwood.logging.LoggerManager; - -/** - * Input stream used to read just the data from a zip file entry. - */ -public class ZioEntryInputStream extends InputStream { - - RandomAccessFile raf; - int size; - int offset; - LoggerInterface log; - boolean debug; - boolean returnDummyByte = false; - OutputStream monitor = null; - - public ZioEntryInputStream(ZioEntry entry) throws IOException { - - log = LoggerManager.getLogger(this.getClass().getName()); - debug = log.isDebugEnabled(); - offset = 0; - size = entry.getCompressedSize(); - raf = entry.getZipInput().in; - long dpos = entry.getDataPosition(); - if (dpos >= 0) { - if (debug) { - log.debug(String.format(Locale.ENGLISH, "Seeking to %d", entry.getDataPosition())); - } - raf.seek(entry.getDataPosition()); - } else { - // seeks to, then reads, the local header, causing the - // file pointer to be positioned at the start of the data. - entry.readLocalHeader(); - } - } - - public void setReturnDummyByte(boolean returnExtraByte) { - returnDummyByte = returnExtraByte; - } - - // For debugging, if the monitor is set we write all data read to the monitor. - public void setMonitorStream(OutputStream monitorStream) { - monitor = monitorStream; - } - - @Override - public void close() throws IOException { - } - - @Override - public boolean markSupported() { - return false; - } - - @Override - public int available() throws IOException { - int available = size - offset; - if (debug) log.debug(String.format(Locale.ENGLISH, "Available = %d", available)); - if (available == 0 && returnDummyByte) return 1; - else return available; - } - - @Override - public int read() throws IOException { - if ((size - offset) == 0) { - if (returnDummyByte) { - returnDummyByte = false; - return 0; - } else return -1; - } - int b = raf.read(); - if (b >= 0) { - if (monitor != null) monitor.write(b); - if (debug) log.debug("Read 1 byte"); - offset += 1; - } else if (debug) log.debug("Read 0 bytes"); - return b; - } - - @Override - public int read(byte[] b, int off, int len) throws IOException { - return readBytes(b, off, len); - } - - private int readBytes(byte[] b, int off, int len) throws IOException { - if ((size - offset) == 0) { - if (returnDummyByte) { - returnDummyByte = false; - b[off] = 0; - return 1; - } else return -1; - } - int numToRead = Math.min(len, available()); - int numRead = raf.read(b, off, numToRead); - if (numRead > 0) { - if (monitor != null) monitor.write(b, off, numRead); - offset += numRead; - } - if (debug) { - log.debug(String.format(Locale.ENGLISH, "Read %d bytes for read(b,%d,%d)", numRead, off, len)); - } - return numRead; - } - - @Override - public int read(byte[] b) throws IOException { - return readBytes(b, 0, b.length); - } - - @Override - public long skip(long n) throws IOException { - long numToSkip = Math.min(n, available()); - raf.seek(raf.getFilePointer() + numToSkip); - if (debug) log.debug(String.format(Locale.ENGLISH, "Skipped %d bytes", numToSkip)); - return numToSkip; - } -} diff --git a/legacy/src/full/java/kellinwood/zipio/ZioEntryOutputStream.java b/legacy/src/full/java/kellinwood/zipio/ZioEntryOutputStream.java deleted file mode 100644 index e9625d730..000000000 --- a/legacy/src/full/java/kellinwood/zipio/ZioEntryOutputStream.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.zipio; - -import java.io.IOException; -import java.io.OutputStream; -import java.util.zip.CRC32; -import java.util.zip.Deflater; -import java.util.zip.DeflaterOutputStream; - -public class ZioEntryOutputStream extends OutputStream { - int size = 0; // tracks uncompressed size of data - CRC32 crc = new CRC32(); - int crcValue = 0; - OutputStream wrapped; - OutputStream downstream; - Deflater deflater; - - public ZioEntryOutputStream(int compression, OutputStream wrapped) { - this.wrapped = wrapped; - if (compression != 0) { - deflater = new Deflater(Deflater.BEST_COMPRESSION, true); - downstream = new DeflaterOutputStream(wrapped, deflater); - } else { - downstream = wrapped; - } - } - - public void close() throws IOException { - downstream.flush(); - downstream.close(); - crcValue = (int) crc.getValue(); - if (deflater != null) { - deflater.end(); - } - } - - public int getCRC() { - return crcValue; - } - - public void flush() throws IOException { - downstream.flush(); - } - - public void write(byte[] b) throws IOException { - downstream.write(b); - crc.update(b); - size += b.length; - } - - public void write(byte[] b, int off, int len) throws IOException { - downstream.write(b, off, len); - crc.update(b, off, len); - size += len; - } - - public void write(int b) throws IOException { - downstream.write(b); - crc.update(b); - size += 1; - } - - public int getSize() { - return size; - } - - public OutputStream getWrappedStream() { - return wrapped; - } -} diff --git a/legacy/src/full/java/kellinwood/zipio/ZipInput.java b/legacy/src/full/java/kellinwood/zipio/ZipInput.java deleted file mode 100644 index c74b6fee4..000000000 --- a/legacy/src/full/java/kellinwood/zipio/ZipInput.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.zipio; - -import java.io.Closeable; -import java.io.File; -import java.io.IOException; -import java.io.RandomAccessFile; -import java.util.Collection; -import java.util.LinkedHashMap; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.TreeSet; -import java.util.jar.Manifest; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import kellinwood.logging.LoggerInterface; -import kellinwood.logging.LoggerManager; - -/** - * - */ -public class ZipInput implements Closeable { - static LoggerInterface log; - - public String inputFilename; - RandomAccessFile in = null; - long fileLength; - int scanIterations = 0; - - Map zioEntries = new LinkedHashMap(); - CentralEnd centralEnd; - Manifest manifest; - - public ZipInput(String filename) throws IOException { - this.inputFilename = filename; - in = new RandomAccessFile(new File(inputFilename), "r"); - fileLength = in.length(); - } - - private static LoggerInterface getLogger() { - if (log == null) log = LoggerManager.getLogger(ZipInput.class.getName()); - return log; - } - - public String getFilename() { - return inputFilename; - } - - public long getFileLength() { - return fileLength; - } - - public static ZipInput read(String filename) throws IOException { - ZipInput zipInput = new ZipInput(filename); - zipInput.doRead(); - return zipInput; - } - - public ZioEntry getEntry(String filename) { - return zioEntries.get(filename); - } - - public Map getEntries() { - return zioEntries; - } - - /** - * Returns the names of immediate children in the directory with the given name. - * The path value must end with a "/" character. Use a value of "/" - * to get the root entries. - */ - public Collection list(String path) { - if (!path.endsWith("/")) { - throw new IllegalArgumentException("Invalid path -- does not end with '/'"); - } - - if (path.startsWith("/")) path = path.substring(1); - - Pattern p = Pattern.compile(String.format("^%s([^/]+/?).*", path)); - - Set names = new TreeSet(); - - for (String name : zioEntries.keySet()) { - Matcher m = p.matcher(name); - if (m.matches()) names.add(m.group(1)); - } - return names; - } - - public Manifest getManifest() throws IOException { - if (manifest == null) { - ZioEntry e = zioEntries.get("META-INF/MANIFEST.MF"); - if (e != null) { - manifest = new Manifest(e.getInputStream()); - } - } - return manifest; - } - - /** - * Scan the end of the file for the end of central directory record (EOCDR). - * Returns the file offset of the EOCD signature. The size parameter is an - * initial buffer size (e.g., 256). - */ - public long scanForEOCDR(int size) throws IOException { - if (size > fileLength || size > 65536) - throw new IllegalStateException("End of central directory not found in " + inputFilename); - - int scanSize = (int) Math.min(fileLength, size); - - byte[] scanBuf = new byte[scanSize]; - - in.seek(fileLength - scanSize); - - in.readFully(scanBuf); - - for (int i = scanSize - 22; i >= 0; i--) { - scanIterations += 1; - if (scanBuf[i] == 0x50 && scanBuf[i + 1] == 0x4b && scanBuf[i + 2] == 0x05 && scanBuf[i + 3] == 0x06) { - return fileLength - scanSize + i; - } - } - - return scanForEOCDR(size * 2); - } - - private void doRead() { - try { - int bufferSize = 256; - long fileLength = in.length(); - if (fileLength < bufferSize) { - bufferSize = (int) fileLength; - } - long posEOCDR = scanForEOCDR(bufferSize); - in.seek(posEOCDR); - centralEnd = CentralEnd.read(this); - - boolean debug = getLogger().isDebugEnabled(); - if (debug) { - getLogger().debug(String.format(Locale.ENGLISH, "EOCD found in %d iterations", scanIterations)); - getLogger().debug(String.format(Locale.ENGLISH, "Directory entries=%d, size=%d, offset=%d/0x%08x", centralEnd.totalCentralEntries, - centralEnd.centralDirectorySize, centralEnd.centralStartOffset, centralEnd.centralStartOffset)); - - ZipListingHelper.listHeader(getLogger()); - } - - in.seek(centralEnd.centralStartOffset); - - for (int i = 0; i < centralEnd.totalCentralEntries; i++) { - ZioEntry entry = ZioEntry.read(this); - zioEntries.put(entry.getName(), entry); - if (debug) ZipListingHelper.listEntry(getLogger(), entry); - } - - } catch (Throwable t) { - t.printStackTrace(); - } - } - - @Override - public void close() { - if (in != null) try { - in.close(); - } catch (Throwable t) { - } - } - - public long getFilePointer() throws IOException { - return in.getFilePointer(); - } - - public void seek(long position) throws IOException { - in.seek(position); - } - - public byte readByte() throws IOException { - return in.readByte(); - } - - public int readInt() throws IOException { - int result = 0; - for (int i = 0; i < 4; i++) { - result |= (in.readUnsignedByte() << (8 * i)); - } - return result; - } - - public short readShort() throws IOException { - short result = 0; - for (int i = 0; i < 2; i++) { - result |= (in.readUnsignedByte() << (8 * i)); - } - return result; - } - - public String readString(int length) throws IOException { - - byte[] buffer = new byte[length]; - for (int i = 0; i < length; i++) { - buffer[i] = in.readByte(); - } - return new String(buffer); - } - - public byte[] readBytes(int length) throws IOException { - - byte[] buffer = new byte[length]; - for (int i = 0; i < length; i++) { - buffer[i] = in.readByte(); - } - return buffer; - } - - public int read(byte[] b, int offset, int length) throws IOException { - return in.read(b, offset, length); - } -} diff --git a/legacy/src/full/java/kellinwood/zipio/ZipListingHelper.java b/legacy/src/full/java/kellinwood/zipio/ZipListingHelper.java deleted file mode 100644 index 2b22bf60f..000000000 --- a/legacy/src/full/java/kellinwood/zipio/ZipListingHelper.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.zipio; - -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.Locale; - -import kellinwood.logging.LoggerInterface; - -/** - * - */ -public class ZipListingHelper { - - static DateFormat dateFormat = new SimpleDateFormat("MM-dd-yy HH:mm", Locale.ENGLISH); - - public static void listHeader(LoggerInterface log) { - log.debug(" Length Method Size Ratio Date Time CRC-32 Name"); - log.debug("-------- ------ ------- ----- ---- ---- ------ ----"); - } - - public static void listEntry(LoggerInterface log, ZioEntry entry) { - int ratio = 0; - if (entry.getSize() > 0) { - ratio = (100 * (entry.getSize() - entry.getCompressedSize())) / entry.getSize(); - } - log.debug(String.format(Locale.ENGLISH, "%8d %6s %8d %4d%% %s %08x %s", - entry.getSize(), - entry.getCompression() == 0 ? "Stored" : "Defl:N", - entry.getCompressedSize(), - ratio, - dateFormat.format(new Date(entry.getTime())), - entry.getCrc32(), - entry.getName())); - } -} diff --git a/legacy/src/full/java/kellinwood/zipio/ZipOutput.java b/legacy/src/full/java/kellinwood/zipio/ZipOutput.java deleted file mode 100644 index 71dde51c4..000000000 --- a/legacy/src/full/java/kellinwood/zipio/ZipOutput.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2010 Ken Ellinwood - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package kellinwood.zipio; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.HashSet; -import java.util.LinkedList; -import java.util.List; -import java.util.Set; - -import kellinwood.logging.LoggerInterface; -import kellinwood.logging.LoggerManager; - -public class ZipOutput { - - static LoggerInterface log; - - String outputFilename; - OutputStream out = null; - int filePointer = 0; - - List entriesWritten = new LinkedList(); - Set namesWritten = new HashSet(); - - public ZipOutput(String filename) throws IOException { - this.outputFilename = filename; - File ofile = new File(outputFilename); - init(ofile); - } - - public ZipOutput(File outputFile) throws IOException { - this.outputFilename = outputFile.getAbsolutePath(); - File ofile = outputFile; - init(ofile); - } - - private void init(File ofile) throws IOException { - if (ofile.exists()) ofile.delete(); - out = new FileOutputStream(ofile); - if (getLogger().isDebugEnabled()) ZipListingHelper.listHeader(getLogger()); - } - - public ZipOutput(OutputStream os) throws IOException { - out = os; - } - - private static LoggerInterface getLogger() { - if (log == null) log = LoggerManager.getLogger(ZipOutput.class.getName()); - return log; - } - - public void write(ZioEntry entry) throws IOException { - String entryName = entry.getName(); - if (namesWritten.contains(entryName)) { - getLogger().warning("Skipping duplicate file in output: " + entryName); - return; - } - entry.writeLocalEntry(this); - entriesWritten.add(entry); - namesWritten.add(entryName); - if (getLogger().isDebugEnabled()) ZipListingHelper.listEntry(getLogger(), entry); - } - - public void close() throws IOException { - CentralEnd centralEnd = new CentralEnd(); - - centralEnd.centralStartOffset = (int) getFilePointer(); - centralEnd.numCentralEntries = centralEnd.totalCentralEntries = (short) entriesWritten.size(); - - for (ZioEntry entry : entriesWritten) { - entry.write(this); - } - - centralEnd.centralDirectorySize = (int) (getFilePointer() - centralEnd.centralStartOffset); - centralEnd.fileComment = ""; - - centralEnd.write(this); - - if (out != null) try { - out.close(); - } catch (Throwable t) { - } - } - - public int getFilePointer() throws IOException { - return filePointer; - } - - public void writeInt(int value) throws IOException { - byte[] data = new byte[4]; - for (int i = 0; i < 4; i++) { - data[i] = (byte) (value & 0xFF); - value = value >> 8; - } - out.write(data); - filePointer += 4; - } - - public void writeShort(short value) throws IOException { - byte[] data = new byte[2]; - for (int i = 0; i < 2; i++) { - data[i] = (byte) (value & 0xFF); - value = (short) (value >> 8); - } - out.write(data); - filePointer += 2; - } - - public void writeString(String value) throws IOException { - - byte[] data = value.getBytes(); - out.write(data); - filePointer += data.length; - } - - public void writeBytes(byte[] value) throws IOException { - - out.write(value); - filePointer += value.length; - } - - public void writeBytes(byte[] value, int offset, int length) throws IOException { - - out.write(value, offset, length); - filePointer += length; - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/BluetoothClient.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/BluetoothClient.java deleted file mode 100644 index 565cbd1f7..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/BluetoothClient.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothDevice; -import android.bluetooth.BluetoothSocket; - -import androidx.annotation.RequiresPermission; - -import java.io.IOException; - -public class BluetoothClient { - private static final String TAG = "BluetoothClient"; - - private final BluetoothDevice device; - - public BluetoothClient(String macAddress) { - device = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(macAddress); - } - - @RequiresPermission("android.permission.BLUETOOTH_CONNECT") - public BluetoothConnection openConnection() throws IOException { - - BluetoothConnection connection = null; - try { - BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(BluetoothConstants.fdroidUuid()); - connection = new BluetoothConnection(socket); - connection.open(); - return connection; - } finally { - if (connection != null) { - connection.closeQuietly(); - } - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/BluetoothManager.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/BluetoothManager.java deleted file mode 100644 index 9c26a6150..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/BluetoothManager.java +++ /dev/null @@ -1,187 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.Manifest; -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothDevice; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.PackageManager; -import android.os.Handler; -import android.os.HandlerThread; -import android.os.Message; -import android.os.Process; -import android.text.TextUtils; -import android.util.Log; - -import androidx.core.content.ContextCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.Utils; -import org.fdroid.fdroid.nearby.peers.BluetoothPeer; - -import java.lang.ref.WeakReference; - -/** - * Manage the {@link android.bluetooth.BluetoothAdapter}in a {@link HandlerThread}. - * The start process is in {@link HandlerThread#onLooperPrepared()} so that it is - * always started before any messages get delivered from the queue. - * - * @see BonjourManager - * @see LocalRepoManager - */ -public class BluetoothManager { - private static final String TAG = "BluetoothManager"; - - public static final String ACTION_FOUND = "BluetoothNewPeer"; - public static final String EXTRA_PEER = "extraBluetoothPeer"; - - public static final String ACTION_STATUS = "BluetoothStatus"; - public static final String EXTRA_STATUS = "BluetoothStatusExtra"; - public static final int STATUS_STARTING = 0; - public static final int STATUS_STARTED = 1; - public static final int STATUS_STOPPING = 2; - public static final int STATUS_STOPPED = 3; - public static final int STATUS_ERROR = 0xffff; - - private static final int STOP = 5709; - - private static WeakReference context; - private static Handler handler; - private static volatile HandlerThread handlerThread; - private static BluetoothAdapter bluetoothAdapter; - - /** - * Stops the Bluetooth adapter, triggering a status broadcast via {@link #ACTION_STATUS}. - * {@link #STATUS_STOPPED} can be broadcast multiple times for the same session, - * so make sure {@link android.content.BroadcastReceiver}s handle duplicates. - */ - public static void stop(Context context) { - BluetoothManager.context = new WeakReference<>(context); - if (handler == null || handlerThread == null || !handlerThread.isAlive()) { - Log.w(TAG, "handlerThread is already stopped, doing nothing!"); - sendBroadcast(STATUS_STOPPED, null); - return; - } - sendBroadcast(STATUS_STOPPING, null); - handler.sendEmptyMessage(STOP); - } - - /** - * Starts the service, triggering a status broadcast via {@link #ACTION_STATUS}. - * {@link #STATUS_STARTED} can be broadcast multiple times for the same session, - * so make sure {@link android.content.BroadcastReceiver}s handle duplicates. - */ - public static void start(final Context context) { - if (ContextCompat.checkSelfPermission(context, Manifest.permission.BLUETOOTH_CONNECT) != - PackageManager.PERMISSION_GRANTED) { - // TODO we either throw away that Bluetooth code or properly request permissions - return; - } - BluetoothManager.context = new WeakReference<>(context); - if (handlerThread != null && handlerThread.isAlive()) { - sendBroadcast(STATUS_STARTED, null); - return; - } - sendBroadcast(STATUS_STARTING, null); - - final BluetoothServer bluetoothServer = new BluetoothServer(context.getFilesDir()); - handlerThread = new HandlerThread("BluetoothManager", Process.THREAD_PRIORITY_LESS_FAVORABLE) { - @Override - protected void onLooperPrepared() { - LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(context); - localBroadcastManager.registerReceiver(bluetoothDeviceFound, - new IntentFilter(BluetoothDevice.ACTION_FOUND)); - bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); - String name = bluetoothAdapter.getName(); - if (name != null) { - SwapService.putBluetoothNameBeforeSwap(name); - } - if (!bluetoothAdapter.enable()) { - sendBroadcast(STATUS_ERROR, context.getString(R.string.swap_error_cannot_start_bluetooth)); - return; - } - bluetoothServer.start(); - if (bluetoothAdapter.startDiscovery()) { - sendBroadcast(STATUS_STARTED, null); - } else { - sendBroadcast(STATUS_ERROR, context.getString(R.string.swap_error_cannot_start_bluetooth)); - } - for (BluetoothDevice device : bluetoothAdapter.getBondedDevices()) { - sendFoundBroadcast(context, device); - } - } - }; - handlerThread.start(); - handler = new Handler(handlerThread.getLooper()) { - @Override - public void handleMessage(Message msg) { - LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(context); - localBroadcastManager.unregisterReceiver(bluetoothDeviceFound); - bluetoothServer.close(); - if (bluetoothAdapter != null) { - bluetoothAdapter.cancelDiscovery(); - if (!SwapService.wasBluetoothEnabledBeforeSwap()) { - bluetoothAdapter.disable(); - } - String name = SwapService.getBluetoothNameBeforeSwap(); - if (name != null) { - bluetoothAdapter.setName(name); - } - } - handlerThread.quit(); - handlerThread = null; - sendBroadcast(STATUS_STOPPED, null); - } - }; - } - - public static void restart(Context context) { - stop(context); - try { - handlerThread.join(10000); - } catch (InterruptedException | NullPointerException e) { - // ignored - } - start(context); - } - - public static void setName(Context context, String name) { - // TODO - } - - public static boolean isAlive() { - return handlerThread != null && handlerThread.isAlive(); - } - - private static void sendBroadcast(int status, String message) { - - Intent intent = new Intent(ACTION_STATUS); - intent.putExtra(EXTRA_STATUS, status); - if (!TextUtils.isEmpty(message)) { - intent.putExtra(Intent.EXTRA_TEXT, message); - } - LocalBroadcastManager.getInstance(context.get()).sendBroadcast(intent); - } - - private static final BroadcastReceiver bluetoothDeviceFound = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - sendFoundBroadcast(context, (BluetoothDevice) intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE)); - } - }; - - private static void sendFoundBroadcast(Context context, BluetoothDevice device) { - BluetoothPeer bluetoothPeer = BluetoothPeer.getInstance(device); - if (bluetoothPeer == null) { - Utils.debugLog(TAG, "IGNORING: " + device); - return; - } - Intent intent = new Intent(ACTION_FOUND); - intent.putExtra(EXTRA_PEER, bluetoothPeer); - intent.putExtra(BluetoothDevice.EXTRA_DEVICE, device); - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/BluetoothServer.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/BluetoothServer.java deleted file mode 100644 index 5c1e7da99..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/BluetoothServer.java +++ /dev/null @@ -1,350 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.bluetooth.BluetoothAdapter; -import android.bluetooth.BluetoothServerSocket; -import android.bluetooth.BluetoothSocket; -import android.util.Log; -import android.webkit.MimeTypeMap; - -import androidx.annotation.RequiresPermission; - -import org.fdroid.fdroid.Utils; -import org.fdroid.fdroid.nearby.httpish.Request; -import org.fdroid.fdroid.nearby.httpish.Response; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import fi.iki.elonen.NanoHTTPD; - -/** - * Act as a layer on top of LocalHTTPD server, by forwarding requests served - * over bluetooth to that server. - */ -@SuppressWarnings("LineLength") -public class BluetoothServer extends Thread { - - private static final String TAG = "BluetoothServer"; - - private BluetoothServerSocket serverSocket; - private final List clients = new ArrayList<>(); - - private final File webRoot; - - public BluetoothServer(File webRoot) { - this.webRoot = webRoot; - } - - public void close() { - - for (ClientConnection clientConnection : clients) { - clientConnection.interrupt(); - } - - interrupt(); - - if (serverSocket != null) { - Utils.closeQuietly(serverSocket); - } - } - - @Override - @RequiresPermission("android.permission.BLUETOOTH_CONNECT") - public void run() { - - final BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter(); - - try { - serverSocket = adapter.listenUsingInsecureRfcommWithServiceRecord("FDroid App Swap", BluetoothConstants.fdroidUuid()); - } catch (IOException e) { - Log.e(TAG, "Error starting Bluetooth server socket, will stop the server now", e); - return; - } - - while (true) { - if (isInterrupted()) { - Utils.debugLog(TAG, "Server stopped so will terminate loop looking for client connections."); - break; - } - - if (!adapter.isEnabled()) { - Utils.debugLog(TAG, "User disabled Bluetooth from outside, stopping."); - break; - } - - try { - BluetoothSocket clientSocket = serverSocket.accept(); - if (clientSocket != null) { - if (isInterrupted()) { - Utils.debugLog(TAG, "Server stopped after socket accepted from client, but before initiating connection."); - break; - } - ClientConnection client = new ClientConnection(clientSocket, webRoot); - client.start(); - clients.add(client); - } - } catch (IOException e) { - Log.e(TAG, "Error receiving client connection over Bluetooth server socket, will continue listening for other clients", e); - } - } - } - - private static class ClientConnection extends Thread { - - private final BluetoothSocket socket; - private final File webRoot; - - ClientConnection(BluetoothSocket socket, File webRoot) { - this.socket = socket; - this.webRoot = webRoot; - } - - @Override - @RequiresPermission("android.permission.BLUETOOTH_CONNECT") - public void run() { - - Utils.debugLog(TAG, "Listening for incoming Bluetooth requests from client"); - - BluetoothConnection connection; - try { - connection = new BluetoothConnection(socket); - connection.open(); - } catch (IOException e) { - Log.e(TAG, "Error listening for incoming connections over bluetooth", e); - return; - } - - while (true) { - - try { - Utils.debugLog(TAG, "Listening for new Bluetooth request from client."); - Request incomingRequest = Request.listenForRequest(connection); - handleRequest(incomingRequest).send(connection); - } catch (IOException e) { - Log.e(TAG, "Error receiving incoming connection over bluetooth", e); - break; - } - - if (isInterrupted()) { - break; - } - } - - connection.closeQuietly(); - } - - private Response handleRequest(Request request) { - - Utils.debugLog(TAG, "Received Bluetooth request from client, will process it now."); - - Response.Builder builder = null; - - try { - int statusCode = HttpURLConnection.HTTP_NOT_FOUND; - int totalSize = -1; - - if (request.getMethod().equals(Request.Methods.HEAD)) { - builder = new Response.Builder(); - } else { - HashMap headers = new HashMap<>(); - Response resp = respond(headers, "/" + request.getPath()); - - builder = new Response.Builder(resp.toContentStream()); - statusCode = resp.getStatusCode(); - totalSize = resp.getFileSize(); - } - - // TODO: At this stage, will need to download the file to get this info. - // However, should be able to make totalDownloadSize and getCacheTag work without downloading. - return builder - .setStatusCode(statusCode) - .setFileSize(totalSize) - .build(); - - } catch (Exception e) { - // throw new IOException("Error getting file " + request.getPath() + " from local repo proxy - " + e.getMessage(), e); - - Log.e(TAG, "error processing request; sending 500 response", e); - - if (builder == null) { - builder = new Response.Builder(); - } - - return builder - .setStatusCode(500) - .setFileSize(0) - .build(); - - } - - } - - private Response respond(Map headers, String uri) { - // Remove URL arguments - uri = uri.trim().replace(File.separatorChar, '/'); - if (uri.indexOf('?') >= 0) { - uri = uri.substring(0, uri.indexOf('?')); - } - - // Prohibit getting out of current directory - if (uri.contains("../")) { - return createResponse(NanoHTTPD.Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, - "FORBIDDEN: Won't serve ../ for security reasons."); - } - - File f = new File(webRoot, uri); - if (!f.exists()) { - return createResponse(NanoHTTPD.Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, - "Error 404, file not found."); - } - - // Browsers get confused without '/' after the directory, send a - // redirect. - if (f.isDirectory() && !uri.endsWith("/")) { - uri += "/"; - Response res = createResponse(NanoHTTPD.Response.Status.REDIRECT, NanoHTTPD.MIME_HTML, - "Redirected: " + uri + ""); - res.addHeader("Location", uri); - return res; - } - - if (f.isDirectory()) { - // First look for index files (index.html, index.htm, etc) and if - // none found, list the directory if readable. - String indexFile = findIndexFileInDirectory(f); - if (indexFile == null) { - if (f.canRead()) { - // No index file, list the directory if it is readable - return createResponse(NanoHTTPD.Response.Status.NOT_FOUND, NanoHTTPD.MIME_HTML, ""); - } - return createResponse(NanoHTTPD.Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, - "FORBIDDEN: No directory listing."); - } - return respond(headers, uri + indexFile); - } - - Response response = serveFile(uri, headers, f, getMimeTypeForFile(uri)); - return response != null ? response : - createResponse(NanoHTTPD.Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, - "Error 404, file not found."); - } - - /** - * Serves file from homeDir and its' subdirectories (only). Uses only URI, - * ignores all headers and HTTP parameters. - */ - Response serveFile(String uri, Map header, File file, String mime) { - Response res; - try { - // Calculate etag - String etag = Integer - .toHexString((file.getAbsolutePath() + file.lastModified() + String.valueOf(file.length())) - .hashCode()); - - // Support (simple) skipping: - long startFrom = 0; - long endAt = -1; - String range = header.get("range"); - if (range != null && range.startsWith("bytes=")) { - range = range.substring("bytes=".length()); - int minus = range.indexOf('-'); - try { - if (minus > 0) { - startFrom = Long.parseLong(range.substring(0, minus)); - endAt = Long.parseLong(range.substring(minus + 1)); - } - } catch (NumberFormatException ignored) { - } - } - - // Change return code and add Content-Range header when skipping is - // requested - long fileLen = file.length(); - if (range != null && startFrom >= 0) { - if (startFrom >= fileLen) { - res = createResponse(NanoHTTPD.Response.Status.RANGE_NOT_SATISFIABLE, - NanoHTTPD.MIME_PLAINTEXT, ""); - res.addHeader("Content-Range", "bytes 0-0/" + fileLen); - res.addHeader("ETag", etag); - } else { - if (endAt < 0) { - endAt = fileLen - 1; - } - long newLen = endAt - startFrom + 1; - if (newLen < 0) { - newLen = 0; - } - - final long dataLen = newLen; - FileInputStream fis = new FileInputStream(file) { - @Override - public int available() throws IOException { - return (int) dataLen; - } - }; - long skipped = fis.skip(startFrom); - if (skipped != startFrom) { - throw new IOException("unable to skip the required " + startFrom + " bytes."); - } - - res = createResponse(NanoHTTPD.Response.Status.PARTIAL_CONTENT, mime, fis); - res.addHeader("Content-Length", String.valueOf(dataLen)); - res.addHeader("Content-Range", "bytes " + startFrom + "-" + endAt + "/" - + fileLen); - res.addHeader("ETag", etag); - } - } else { - if (etag.equals(header.get("if-none-match"))) { - res = createResponse(NanoHTTPD.Response.Status.NOT_MODIFIED, mime, ""); - } else { - res = createResponse(NanoHTTPD.Response.Status.OK, mime, new FileInputStream(file)); - res.addHeader("Content-Length", String.valueOf(fileLen)); - res.addHeader("ETag", etag); - } - } - } catch (IOException ioe) { - res = createResponse(NanoHTTPD.Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, - "FORBIDDEN: Reading file failed."); - } - - return res; - } - - // Announce that the file server accepts partial content requests - private Response createResponse(NanoHTTPD.Response.Status status, String mimeType, String content) { - return new Response(status.getRequestStatus(), mimeType, content); - } - - // Announce that the file server accepts partial content requests - private Response createResponse(NanoHTTPD.Response.Status status, String mimeType, InputStream content) { - return new Response(status.getRequestStatus(), mimeType, content); - } - - public static String getMimeTypeForFile(String uri) { - String type = null; - String extension = MimeTypeMap.getFileExtensionFromUrl(uri); - if (extension != null) { - MimeTypeMap mime = MimeTypeMap.getSingleton(); - type = mime.getMimeTypeFromExtension(extension); - } - return type; - } - - private String findIndexFileInDirectory(File directory) { - String indexFileName = "index.html"; - File indexFile = new File(directory, indexFileName); - if (indexFile.exists()) { - return indexFileName; - } - return null; - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/BonjourManager.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/BonjourManager.java deleted file mode 100644 index 77162bdf7..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/BonjourManager.java +++ /dev/null @@ -1,322 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.content.Context; -import android.content.Intent; -import android.net.ConnectivityManager; -import android.net.Network; -import android.net.NetworkCapabilities; -import android.net.wifi.WifiManager; -import android.os.Build; -import android.os.Handler; -import android.os.HandlerThread; -import android.os.Message; -import android.os.Process; -import android.text.TextUtils; -import android.util.Log; - -import androidx.core.content.ContextCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.Preferences; -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.Utils; -import org.fdroid.fdroid.nearby.peers.BonjourPeer; - -import java.io.IOException; -import java.lang.ref.WeakReference; -import java.net.InetAddress; -import java.util.HashMap; - -import javax.jmdns.JmDNS; -import javax.jmdns.ServiceEvent; -import javax.jmdns.ServiceInfo; -import javax.jmdns.ServiceListener; - -/** - * Manage {@link JmDNS} in a {@link HandlerThread}. The start process is in - * {@link HandlerThread#onLooperPrepared()} so that it is always started before - * any messages get delivered from the queue. - */ -public class BonjourManager { - private static final String TAG = "BonjourManager"; - - public static final String ACTION_FOUND = "BonjourNewPeer"; - public static final String ACTION_REMOVED = "BonjourPeerRemoved"; - public static final String EXTRA_BONJOUR_PEER = "extraBonjourPeer"; - - public static final String ACTION_STATUS = "BonjourStatus"; - public static final String EXTRA_STATUS = "BonjourStatusExtra"; - public static final int STATUS_STARTING = 0; - public static final int STATUS_STARTED = 1; - public static final int STATUS_STOPPING = 2; - public static final int STATUS_STOPPED = 3; - public static final int STATUS_VISIBLE = 4; - public static final int STATUS_NOT_VISIBLE = 5; - public static final int STATUS_VPN_CONFLICT = 6; - public static final int STATUS_ERROR = 0xffff; - - public static final String HTTP_SERVICE_TYPE = "_http._tcp.local."; - public static final String HTTPS_SERVICE_TYPE = "_https._tcp.local."; - - private static final int STOP = 5709; - private static final int VISIBLE = 4151873; - private static final int NOT_VISIBLE = 144151873; - private static final int VPN_CONFLICT = 72346752; - - private static WeakReference context; - private static Handler handler; - private static volatile HandlerThread handlerThread; - private static ServiceInfo pairService; - private static JmDNS jmdns; - private static WifiManager.MulticastLock multicastLock; - - public static boolean isAlive() { - return handlerThread != null && handlerThread.isAlive(); - } - - /** - * Stops the Bonjour/mDNS, triggering a status broadcast via {@link #ACTION_STATUS}. - * {@link #STATUS_STOPPED} can be broadcast multiple times for the same session, - * so make sure {@link android.content.BroadcastReceiver}s handle duplicates. - */ - public static void stop(Context context) { - BonjourManager.context = new WeakReference<>(context); - if (handler == null || handlerThread == null || !handlerThread.isAlive()) { - sendBroadcast(STATUS_STOPPED, null); - return; - } - sendBroadcast(STATUS_STOPPING, null); - handler.sendEmptyMessage(STOP); - } - - public static void setVisible(Context context, boolean visible) { - BonjourManager.context = new WeakReference<>(context); - if (handler == null || handlerThread == null || !handlerThread.isAlive()) { - Log.e(TAG, "handlerThread is stopped, not changing visibility!"); - return; - } - if (isVpnActive(context)) { - handler.sendEmptyMessage(VPN_CONFLICT); - } else if (visible) { - handler.sendEmptyMessage(VISIBLE); - } else { - handler.sendEmptyMessage(NOT_VISIBLE); - } - } - - /** - * Starts the service, triggering a status broadcast via {@link #ACTION_STATUS}. - * {@link #STATUS_STARTED} can be broadcast multiple times for the same session, - * so make sure {@link android.content.BroadcastReceiver}s handle duplicates. - */ - public static void start(Context context) { - start(context, - Preferences.get().getLocalRepoName(), - Preferences.get().isLocalRepoHttpsEnabled(), - httpServiceListener, httpsServiceListener); - } - - /** - * Testable version, not for regular use. - * - * @see #start(Context) - */ - static void start(final Context context, - final String localRepoName, final boolean useHttps, - final ServiceListener httpServiceListener, final ServiceListener httpsServiceListener) { - BonjourManager.context = new WeakReference<>(context); - if (handlerThread != null && handlerThread.isAlive()) { - sendBroadcast(STATUS_STARTED, null); - return; - } - sendBroadcast(STATUS_STARTING, null); - - final WifiManager wifiManager = ContextCompat.getSystemService(context, WifiManager.class); - handlerThread = new HandlerThread("BonjourManager", Process.THREAD_PRIORITY_LESS_FAVORABLE) { - @Override - protected void onLooperPrepared() { - try { - InetAddress address = InetAddress.getByName(FDroidApp.ipAddressString); - jmdns = JmDNS.create(address); - jmdns.addServiceListener(HTTP_SERVICE_TYPE, httpServiceListener); - jmdns.addServiceListener(HTTPS_SERVICE_TYPE, httpsServiceListener); - - multicastLock = wifiManager.createMulticastLock(context.getPackageName()); - multicastLock.setReferenceCounted(false); - multicastLock.acquire(); - - sendBroadcast(STATUS_STARTED, null); - } catch (IOException e) { - if (handler != null) { - handler.removeMessages(VISIBLE); - handler.sendMessageAtFrontOfQueue(handler.obtainMessage(STOP)); - } - Log.e(TAG, "Error while registering jmdns service", e); - sendBroadcast(STATUS_ERROR, e.getLocalizedMessage()); - } - } - }; - handlerThread.start(); - handler = new Handler(handlerThread.getLooper()) { - - @Override - public void handleMessage(Message msg) { - switch (msg.what) { - case VISIBLE: - handleVisible(localRepoName, useHttps); - break; - case NOT_VISIBLE: - handleNotVisible(); - break; - case VPN_CONFLICT: - handleVpnConflict(); - break; - case STOP: - handleStop(); - break; - } - } - - private void handleVisible(String localRepoName, boolean useHttps) { - if (FDroidApp.repo == null) { - sendBroadcast(STATUS_ERROR, context.getString(R.string.swap_no_wifi_network)); - return; - } - HashMap values = new HashMap<>(); - values.put(BonjourPeer.PATH, "/fdroid/repo"); - values.put(BonjourPeer.NAME, localRepoName); - values.put(BonjourPeer.FINGERPRINT, FDroidApp.repo.getFingerprint()); - String type; - if (useHttps) { - values.put(BonjourPeer.TYPE, "fdroidrepos"); - type = HTTPS_SERVICE_TYPE; - } else { - values.put(BonjourPeer.TYPE, "fdroidrepo"); - type = HTTP_SERVICE_TYPE; - } - ServiceInfo newPairService = ServiceInfo.create(type, localRepoName, FDroidApp.port, 0, 0, values); - if (!newPairService.equals(pairService)) try { - if (pairService != null) { - jmdns.unregisterService(pairService); - } - jmdns.registerService(newPairService); - pairService = newPairService; - } catch (IOException e) { - e.printStackTrace(); - sendBroadcast(STATUS_ERROR, e.getLocalizedMessage()); - return; - } - sendBroadcast(STATUS_VISIBLE, null); - } - - private void handleNotVisible() { - if (pairService != null) { - jmdns.unregisterService(pairService); - pairService = null; - } - sendBroadcast(STATUS_NOT_VISIBLE, null); - } - - private void handleVpnConflict() { - sendBroadcast(STATUS_VPN_CONFLICT, null); - } - - private void handleStop() { - if (multicastLock != null) { - multicastLock.release(); - } - if (jmdns != null) { - jmdns.unregisterAllServices(); - Utils.closeQuietly(jmdns); - pairService = null; - jmdns = null; - } - handlerThread.quit(); - handlerThread = null; - sendBroadcast(STATUS_STOPPED, null); - } - - }; - } - - public static void restart(Context context) { - restart(context, - Preferences.get().getLocalRepoName(), - Preferences.get().isLocalRepoHttpsEnabled(), - httpServiceListener, httpsServiceListener); - } - - /** - * Testable version, not for regular use. - * - * @see #restart(Context) - */ - static void restart(final Context context, - final String localRepoName, final boolean useHttps, - final ServiceListener httpServiceListener, final ServiceListener httpsServiceListener) { - stop(context); - try { - handlerThread.join(10000); - } catch (InterruptedException | NullPointerException e) { - // ignored - } - start(context, localRepoName, useHttps, httpServiceListener, httpsServiceListener); - } - - private static void sendBroadcast(String action, ServiceInfo serviceInfo) { - BonjourPeer bonjourPeer = BonjourPeer.getInstance(serviceInfo); - if (bonjourPeer == null) { - Utils.debugLog(TAG, "IGNORING: " + serviceInfo); - return; - } - Intent intent = new Intent(action); - intent.putExtra(EXTRA_BONJOUR_PEER, bonjourPeer); - LocalBroadcastManager.getInstance(context.get()).sendBroadcast(intent); - } - - private static void sendBroadcast(int status, String message) { - - Intent intent = new Intent(ACTION_STATUS); - intent.putExtra(EXTRA_STATUS, status); - if (!TextUtils.isEmpty(message)) { - intent.putExtra(Intent.EXTRA_TEXT, message); - } - LocalBroadcastManager.getInstance(context.get()).sendBroadcast(intent); - } - - private static final ServiceListener httpServiceListener = new SwapServiceListener(); - private static final ServiceListener httpsServiceListener = new SwapServiceListener(); - - private static class SwapServiceListener implements ServiceListener { - @Override - public void serviceAdded(ServiceEvent serviceEvent) { - // ignored, we only need resolved info - } - - @Override - public void serviceRemoved(ServiceEvent serviceEvent) { - sendBroadcast(ACTION_REMOVED, serviceEvent.getInfo()); - } - - @Override - public void serviceResolved(ServiceEvent serviceEvent) { - sendBroadcast(ACTION_FOUND, serviceEvent.getInfo()); - } - } - - /** - * {@link ConnectivityManager#getActiveNetwork()} is only available - * starting on {@link Build.VERSION_CODES#M}, so for now, just return false - * if the device is too old. - */ - public static boolean isVpnActive(Context context) { - ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - Network activeNetwork = cm.getActiveNetwork(); - NetworkCapabilities caps = cm.getNetworkCapabilities(activeNetwork); - if (caps == null) { - return false; - } - return caps.hasTransport(NetworkCapabilities.TRANSPORT_VPN); - } -} \ No newline at end of file diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPD.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPD.java deleted file mode 100644 index 23be4ae4a..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPD.java +++ /dev/null @@ -1,504 +0,0 @@ -package org.fdroid.fdroid.nearby; - -/* - * #%L - * NanoHttpd-Webserver - * %% - * Copyright (C) 2012 - 2015 nanohttpd - * %% - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * 3. Neither the name of the nanohttpd nor the names of its contributors - * may be used to endorse or promote products derived from this software without - * specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * #L% - */ - -import android.content.Context; -import android.net.Uri; - -import org.fdroid.fdroid.BuildConfig; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.UnsupportedEncodingException; -import java.lang.ref.WeakReference; -import java.net.URLEncoder; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.StringTokenizer; -import java.util.TimeZone; - -import javax.net.ssl.SSLServerSocketFactory; - -import fi.iki.elonen.NanoHTTPD; -import fi.iki.elonen.NanoHTTPD.Response.IStatus; - -/** - * A HTTP server for serving the files that are being swapped via WiFi, etc. - * The only changes were to remove unneeded extras like {@code main()}, the - * plugin interface, and custom CORS header manipulation. - *

    - * This is mostly just synced from {@code SimpleWebServer.java} from NanoHTTPD. - * - * @see webserver/src/main/java/fi/iki/elonen/SimpleWebServer.java - */ -public class LocalHTTPD extends NanoHTTPD { - private static final String TAG = "LocalHTTPD"; - - /** - * Default Index file names. - */ - public static final String[] INDEX_FILE_NAMES = {"index.html"}; - - private final WeakReference context; - - protected List rootDirs; - - // Date format specified by RFC 7231 section 7.1.1.1. - private static final DateFormat RFC_1123 = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss 'GMT'", Locale.US); - - static { - RFC_1123.setLenient(false); - RFC_1123.setTimeZone(TimeZone.getTimeZone("GMT")); - } - - /** - * Configure and start the webserver. This also sets the MIME Types only - * for files that should be downloadable when a browser is used to display - * the swap repo, rather than the F-Droid client. The other file types - * should not be added because it could expose exploits to the browser. - */ - public LocalHTTPD(Context context, String hostname, int port, File webRoot, boolean useHttps) { - super(hostname, port); - rootDirs = Collections.singletonList(webRoot); - this.context = new WeakReference<>(context.getApplicationContext()); - if (useHttps) { - enableHTTPS(); - } - MIME_TYPES = new HashMap<>(); // ignore nanohttpd's list - MIME_TYPES.put("apk", "application/vnd.android.package-archive"); - MIME_TYPES.put("html", "text/html"); - MIME_TYPES.put("png", "image/png"); - MIME_TYPES.put("xml", "application/xml"); - } - - private boolean canServeUri(String uri, File homeDir) { - boolean canServeUri; - File f = new File(homeDir, uri); - canServeUri = f.exists(); - return canServeUri; - } - - /** - * URL-encodes everything between "/"-characters. Encodes spaces as '%20' - * instead of '+'. - */ - private String encodeUri(String uri) { - String newUri = ""; - StringTokenizer st = new StringTokenizer(uri, "/ ", true); - while (st.hasMoreTokens()) { - String tok = st.nextToken(); - if ("/".equals(tok)) { - newUri += "/"; - } else if (" ".equals(tok)) { - newUri += "%20"; - } else { - try { - newUri += URLEncoder.encode(tok, "UTF-8"); - } catch (UnsupportedEncodingException ignored) { - } - } - } - return newUri; - } - - private String findIndexFileInDirectory(File directory) { - for (String fileName : LocalHTTPD.INDEX_FILE_NAMES) { - File indexFile = new File(directory, fileName); - if (indexFile.isFile()) { - return fileName; - } - } - return null; - } - - protected Response getForbiddenResponse(String s) { - return newFixedLengthResponse(Response.Status.FORBIDDEN, NanoHTTPD.MIME_PLAINTEXT, "FORBIDDEN: " + s); - } - - protected Response getInternalErrorResponse(String s) { - return newFixedLengthResponse(Response.Status.INTERNAL_ERROR, NanoHTTPD.MIME_PLAINTEXT, - "INTERNAL ERROR: " + s); - } - - protected Response getNotFoundResponse() { - return newFixedLengthResponse(Response.Status.NOT_FOUND, NanoHTTPD.MIME_PLAINTEXT, "Error 404, file not " + - "found."); - } - - protected String listDirectory(String uri, File f) { - String heading = "Directory " + uri; - StringBuilder msg = - new StringBuilder("" + heading + "" + "

    " + heading + "

    "); - - String up = null; - if (uri.length() > 1) { - String u = uri.substring(0, uri.length() - 1); - int slash = u.lastIndexOf('/'); - if (slash >= 0 && slash < u.length()) { - up = uri.substring(0, slash + 1); - } - } - - List files = - Arrays.asList(Objects.requireNonNull(f.list((dir, name) -> new File(dir, name).isFile()))); - Collections.sort(files); - List directories = - Arrays.asList(Objects.requireNonNull(f.list((dir, name) -> new File(dir, name).isDirectory()))); - Collections.sort(directories); - if (up != null || directories.size() + files.size() > 0) { - msg.append("
      "); - if (up != null || directories.size() > 0) { - msg.append("
      "); - if (up != null) { - msg.append("
    • ." + - ".
    • "); - } - for (String directory : directories) { - String dir = directory + "/"; - msg.append("
    • ").append(dir).append("
    • "); - } - msg.append("
      "); - } - if (files.size() > 0) { - msg.append("
      "); - for (String file : files) { - msg.append("
    • ").append(file).append(""); - File curFile = new File(f, file); - long len = curFile.length(); - msg.append(" ("); - if (len < 1024) { - msg.append(len).append(" bytes"); - } else if (len < 1024 * 1024) { - msg.append(len / 1024).append(".").append(len % 1024 / 10 % 100).append(" KB"); - } else { - msg.append(len / (1024 * 1024)).append(".").append(len % (1024 * 1024) / 10000 % 100).append(" MB"); - } - msg.append(")
    • "); - } - msg.append("
      "); - } - msg.append("
    "); - } - msg.append(""); - return msg.toString(); - } - - /** - * {@link Response#setKeepAlive(boolean)} alone does not seem to stop - * setting the {@code Connection} header to {@code keep-alive}, so also - * just directly set that header. - */ - public static Response addResponseHeaders(Response response) { - response.setKeepAlive(false); - response.setGzipEncoding(false); - response.addHeader("Connection", "close"); - response.addHeader("Content-Security-Policy", - "default-src 'none'; img-src 'self'; style-src 'self' 'unsafe-inline';"); - return response; - } - - public static Response newFixedLengthResponse(String msg) { - return addResponseHeaders(NanoHTTPD.newFixedLengthResponse(msg)); - } - - public static Response newFixedLengthResponse(Response.IStatus status, String mimeType, - InputStream data, long totalBytes) { - return addResponseHeaders(NanoHTTPD.newFixedLengthResponse(status, mimeType, data, totalBytes)); - } - - public static Response newFixedLengthResponse(IStatus status, String mimeType, String message) { - Response response = NanoHTTPD.newFixedLengthResponse(status, mimeType, message); - addResponseHeaders(response); - response.addHeader("Accept-Ranges", "bytes"); - return response; - } - - private Response respond(Map headers, IHTTPSession session, String uri) { - return defaultRespond(headers, session, uri); - } - - private Response defaultRespond(Map headers, IHTTPSession session, String uri) { - // Remove URL arguments - uri = uri.trim().replace(File.separatorChar, '/'); - if (uri.indexOf('?') >= 0) { - uri = uri.substring(0, uri.indexOf('?')); - } - - // Prohibit getting out of current directory - if (uri.contains("../")) { - return getForbiddenResponse("Won't serve ../ for security reasons."); - } - - boolean canServeUri = false; - File homeDir = null; - for (int i = 0; !canServeUri && i < this.rootDirs.size(); i++) { - homeDir = this.rootDirs.get(i); - canServeUri = canServeUri(uri, homeDir); - } - if (!canServeUri) { - return getNotFoundResponse(); - } - - // Browsers get confused without '/' after the directory, send a - // redirect. - File f = new File(homeDir, uri); - if (f.isDirectory() && !uri.endsWith("/")) { - uri += "/"; - Response res = - newFixedLengthResponse(Response.Status.REDIRECT, NanoHTTPD.MIME_HTML, "Redirected: " + - "" + uri + ""); - res.addHeader("Location", uri); - return res; - } - - if (f.isDirectory()) { - // First look for index files (index.html, index.htm, etc) and if - // none found, list the directory if readable. - String indexFile = findIndexFileInDirectory(f); - if (indexFile == null) { - if (f.canRead()) { - // No index file, list the directory if it is readable - return newFixedLengthResponse(Response.Status.OK, NanoHTTPD.MIME_HTML, listDirectory(uri, f)); - } else { - return getForbiddenResponse("No directory listing."); - } - } else { - return respond(headers, session, uri + indexFile); - } - } - String mimeTypeForFile = getMimeTypeForFile(uri); - Response response = serveFile(uri, headers, f, mimeTypeForFile); - return response != null ? response : getNotFoundResponse(); - } - - @Override - public Response serve(IHTTPSession session) { - Map header = session.getHeaders(); - Map parms = session.getParms(); - String uri = session.getUri(); - - if (BuildConfig.DEBUG) { - System.out.println(session.getMethod() + " '" + uri + "' "); - - Iterator e = header.keySet().iterator(); - while (e.hasNext()) { - String value = e.next(); - System.out.println(" HDR: '" + value + "' = '" + header.get(value) + "'"); - } - e = parms.keySet().iterator(); - while (e.hasNext()) { - String value = e.next(); - System.out.println(" PRM: '" + value + "' = '" + parms.get(value) + "'"); - } - } - - if (session.getMethod() == Method.POST) { - try { - session.parseBody(new HashMap<>()); - } catch (IOException e) { - return newFixedLengthResponse(Response.Status.INTERNAL_ERROR, MIME_PLAINTEXT, - "Internal server error, check logcat on server for details."); - } catch (ResponseException re) { - return newFixedLengthResponse(re.getStatus(), MIME_PLAINTEXT, re.getMessage()); - } - - return handlePost(session); - } - - for (File homeDir : this.rootDirs) { - // Make sure we won't die of an exception later - if (!homeDir.isDirectory()) { - return getInternalErrorResponse("given path is not a directory (" + homeDir + ")."); - } - } - return respond(Collections.unmodifiableMap(header), session, uri); - } - - private Response handlePost(IHTTPSession session) { - Uri uri = Uri.parse(session.getUri()); - switch (uri.getPath()) { - case "/request-swap": - if (!session.getParms().containsKey("repo")) { - return newFixedLengthResponse(Response.Status.BAD_REQUEST, MIME_PLAINTEXT, - "Requires 'repo' parameter to be posted."); - } - SwapWorkflowActivity.requestSwap(context.get(), session.getParms().get("repo")); - return newFixedLengthResponse(Response.Status.OK, MIME_PLAINTEXT, "Swap request received."); - } - return newFixedLengthResponse(""); - } - - /** - * Serves file from homeDir and its' subdirectories (only). Uses only URI, - * ignores all headers and HTTP parameters. - */ - Response serveFile(String uri, Map header, File file, String mime) { - Response res; - try { - // Calculate etag - String etag = - Integer.toHexString((file.getAbsolutePath() + file.lastModified() + "" + file.length()).hashCode()); - - // Support (simple) skipping: - long startFrom = 0; - long endAt = -1; - String range = header.get("range"); - if (range != null) { - if (range.startsWith("bytes=")) { - range = range.substring("bytes=".length()); - int minus = range.indexOf('-'); - try { - if (minus > 0) { - startFrom = Long.parseLong(range.substring(0, minus)); - endAt = Long.parseLong(range.substring(minus + 1)); - } - } catch (NumberFormatException ignored) { - } - } - } - - // get if-range header. If present, it must match etag or else we - // should ignore the range request - String ifRange = header.get("if-range"); - boolean headerIfRangeMissingOrMatching = (ifRange == null || etag.equals(ifRange)); - - String ifNoneMatch = header.get("if-none-match"); - boolean headerIfNoneMatchPresentAndMatching = - ifNoneMatch != null && ("*".equals(ifNoneMatch) || ifNoneMatch.equals(etag)); - - // Change return code and add Content-Range header when skipping is - // requested - long fileLen = file.length(); - - if (headerIfRangeMissingOrMatching && range != null && startFrom >= 0 && startFrom < fileLen) { - // range request that matches current etag - // and the startFrom of the range is satisfiable - if (headerIfNoneMatchPresentAndMatching) { - // range request that matches current etag - // and the startFrom of the range is satisfiable - // would return range from file - // respond with not-modified - res = newFixedLengthResponse(Response.Status.NOT_MODIFIED, mime, ""); - res.addHeader("ETag", etag); - } else { - if (endAt < 0) { - endAt = fileLen - 1; - } - long newLen = endAt - startFrom + 1; - if (newLen < 0) { - newLen = 0; - } - - FileInputStream fis = new FileInputStream(file); - fis.skip(startFrom); - - res = newFixedLengthResponse(Response.Status.PARTIAL_CONTENT, mime, fis, newLen); - res.addHeader("Accept-Ranges", "bytes"); - res.addHeader("Content-Length", "" + newLen); - res.addHeader("Content-Range", "bytes " + startFrom + "-" + endAt + "/" + fileLen); - res.addHeader("ETag", etag); - res.addHeader("Last-Modified", RFC_1123.format(new Date(file.lastModified()))); - } - } else { - - if (headerIfRangeMissingOrMatching && range != null && startFrom >= fileLen) { - // return the size of the file - // 4xx responses are not trumped by if-none-match - res = newFixedLengthResponse(Response.Status.RANGE_NOT_SATISFIABLE, NanoHTTPD.MIME_PLAINTEXT, ""); - res.addHeader("Content-Range", "bytes */" + fileLen); - res.addHeader("ETag", etag); - } else if (range == null && headerIfNoneMatchPresentAndMatching) { - // full-file-fetch request - // would return entire file - // respond with not-modified - res = newFixedLengthResponse(Response.Status.NOT_MODIFIED, mime, ""); - res.addHeader("ETag", etag); - } else if (!headerIfRangeMissingOrMatching && headerIfNoneMatchPresentAndMatching) { - // range request that doesn't match current etag - // would return entire (different) file - // respond with not-modified - - res = newFixedLengthResponse(Response.Status.NOT_MODIFIED, mime, ""); - res.addHeader("ETag", etag); - } else { - // supply the file - res = newFixedFileResponse(file, mime); - res.addHeader("Content-Length", "" + fileLen); - res.addHeader("ETag", etag); - res.addHeader("Last-Modified", RFC_1123.format(new Date(file.lastModified()))); - } - } - } catch (IOException ioe) { - res = getForbiddenResponse("Reading file failed."); - } - - return addResponseHeaders(res); - } - - private Response newFixedFileResponse(File file, String mime) throws FileNotFoundException { - Response res; - res = newFixedLengthResponse(Response.Status.OK, mime, new FileInputStream(file), (int) file.length()); - addResponseHeaders(res); - res.addHeader("Accept-Ranges", "bytes"); - return res; - } - - private void enableHTTPS() { - try { - LocalRepoKeyStore localRepoKeyStore = LocalRepoKeyStore.get(context.get()); - SSLServerSocketFactory factory = NanoHTTPD.makeSSLSocketFactory( - localRepoKeyStore.getKeyStore(), - localRepoKeyStore.getKeyManagers()); - makeSecure(factory, null); - } catch (LocalRepoKeyStore.InitException | IOException e) { - e.printStackTrace(); - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPDManager.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPDManager.java deleted file mode 100644 index 96ae0d028..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalHTTPDManager.java +++ /dev/null @@ -1,127 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.content.Context; -import android.content.Intent; -import android.os.Handler; -import android.os.HandlerThread; -import android.os.Message; -import android.os.Process; -import android.util.Log; - -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.Preferences; - -import java.io.IOException; -import java.net.BindException; - -/** - * Manage {@link LocalHTTPD} in a {@link HandlerThread}; - */ -public class LocalHTTPDManager { - private static final String TAG = "LocalHTTPDManager"; - - public static final String ACTION_STARTED = "LocalHTTPDStarted"; - public static final String ACTION_STOPPED = "LocalHTTPDStopped"; - public static final String ACTION_ERROR = "LocalHTTPDError"; - - private static final int STOP = 5709; - - private static Handler handler; - private static volatile HandlerThread handlerThread; - private static LocalHTTPD localHttpd; - - public static void start(Context context) { - start(context, Preferences.get().isLocalRepoHttpsEnabled()); - } - - /** - * Testable version, not for regular use. - * - * @see #start(Context) - */ - static void start(final Context context, final boolean useHttps) { - if (handlerThread != null && handlerThread.isAlive()) { - Log.w(TAG, "handlerThread is already running, doing nothing!"); - return; - } - - handlerThread = new HandlerThread("LocalHTTPD", Process.THREAD_PRIORITY_LESS_FAVORABLE) { - @Override - protected void onLooperPrepared() { - localHttpd = new LocalHTTPD( - context, - FDroidApp.ipAddressString, - FDroidApp.port, - context.getFilesDir(), - useHttps); - try { - localHttpd.start(); - Intent intent = new Intent(ACTION_STARTED); - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); - } catch (BindException e) { - FDroidApp.generateNewPort = true; - WifiStateChangeService.start(context, null); - Intent intent = new Intent(ACTION_ERROR); - intent.putExtra(Intent.EXTRA_TEXT, - "port " + FDroidApp.port + " occupied, trying new port: (" - + e.getLocalizedMessage() + ")"); - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); - } catch (IOException e) { - e.printStackTrace(); - Intent intent = new Intent(ACTION_ERROR); - intent.putExtra(Intent.EXTRA_TEXT, e.getLocalizedMessage()); - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); - } - } - }; - handlerThread.start(); - handler = new Handler(handlerThread.getLooper()) { - @Override - public void handleMessage(Message msg) { - localHttpd.stop(); - handlerThread.quit(); - handlerThread = null; - } - }; - } - - public static void stop(Context context) { - if (handler == null || handlerThread == null || !handlerThread.isAlive()) { - Log.w(TAG, "handlerThread is already stopped, doing nothing!"); - handlerThread = null; - return; - } - handler.sendEmptyMessage(STOP); - Intent stoppedIntent = new Intent(ACTION_STOPPED); - LocalBroadcastManager.getInstance(context).sendBroadcast(stoppedIntent); - } - - /** - * Run {@link #stop(Context)}, wait for it to actually stop, then run - * {@link #start(Context)}. - */ - public static void restart(Context context) { - restart(context, Preferences.get().isLocalRepoHttpsEnabled()); - } - - /** - * Testable version, not for regular use. - * - * @see #restart(Context) - */ - static void restart(Context context, boolean useHttps) { - stop(context); - try { - handlerThread.join(10000); - } catch (InterruptedException | NullPointerException e) { - // ignored - } - start(context, useHttps); - } - - public static boolean isAlive() { - return handlerThread != null && handlerThread.isAlive(); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalRepoKeyStore.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalRepoKeyStore.java deleted file mode 100644 index 32c024fd0..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalRepoKeyStore.java +++ /dev/null @@ -1,377 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.content.Context; -import android.util.Log; - -import org.bouncycastle.asn1.ASN1Sequence; -import org.bouncycastle.asn1.x500.X500Name; -import org.bouncycastle.asn1.x509.GeneralName; -import org.bouncycastle.asn1.x509.GeneralNames; -import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo; -import org.bouncycastle.asn1.x509.Time; -import org.bouncycastle.asn1.x509.X509Extension; -import org.bouncycastle.cert.X509CertificateHolder; -import org.bouncycastle.cert.X509v3CertificateBuilder; -import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter; -import org.bouncycastle.operator.ContentSigner; -import org.bouncycastle.operator.OperatorCreationException; -import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder; -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.Utils; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.math.BigInteger; -import java.net.Socket; -import java.security.GeneralSecurityException; -import java.security.Key; -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.security.KeyStore; -import java.security.KeyStoreException; -import java.security.NoSuchAlgorithmException; -import java.security.Principal; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.security.SecureRandom; -import java.security.UnrecoverableKeyException; -import java.security.cert.Certificate; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.util.Calendar; -import java.util.Date; -import java.util.GregorianCalendar; -import java.util.Locale; - -import javax.net.ssl.KeyManager; -import javax.net.ssl.KeyManagerFactory; -import javax.net.ssl.X509KeyManager; - -import kellinwood.security.zipsigner.ZipSigner; - -// TODO Address exception handling in a uniform way throughout - -@SuppressWarnings("LineLength") -public final class LocalRepoKeyStore { - - private static final String TAG = "LocalRepoKeyStore"; - - private static final String INDEX_CERT_ALIAS = "fdroid"; - private static final String HTTP_CERT_ALIAS = "https"; - - public static final String DEFAULT_SIG_ALG = "SHA1withRSA"; - private static final String DEFAULT_KEY_ALGO = "RSA"; - private static final int DEFAULT_KEY_BITS = 2048; - - private static final String DEFAULT_INDEX_CERT_INFO = "O=Kerplapp,OU=GuardianProject"; - - private static LocalRepoKeyStore localRepoKeyStore; - private KeyStore keyStore; - private KeyManager[] keyManagers; - private File keyStoreFile; - - public static LocalRepoKeyStore get(Context context) throws InitException { - if (localRepoKeyStore == null) { - localRepoKeyStore = new LocalRepoKeyStore(context); - } - return localRepoKeyStore; - } - - @SuppressWarnings("serial") - public static class InitException extends Exception { - public InitException(String detailMessage) { - super(detailMessage); - } - } - - private LocalRepoKeyStore(Context context) throws InitException { - try { - File appKeyStoreDir = context.getDir("keystore", Context.MODE_PRIVATE); - - Utils.debugLog(TAG, "Generating LocalRepoKeyStore instance: " + appKeyStoreDir.getAbsolutePath()); - this.keyStoreFile = new File(appKeyStoreDir, "kerplapp.bks"); - - Utils.debugLog(TAG, "Using default KeyStore type: " + KeyStore.getDefaultType()); - this.keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); - - if (keyStoreFile.exists()) { - InputStream in = null; - try { - Utils.debugLog(TAG, "Keystore already exists, loading..."); - in = new FileInputStream(keyStoreFile); - keyStore.load(in, "".toCharArray()); - } catch (IOException e) { - Log.e(TAG, "Error while loading existing keystore. Will delete and create a new one."); - - // NOTE: Could opt to delete and then re-create the keystore here, but that may - // be undesirable. For example - if you were to re-connect to an existing device - // that you have swapped apps with in the past, then you would really want the - // signature to be the same as last time. - throw new InitException("Could not initialize local repo keystore: " + e); - } finally { - Utils.closeQuietly(in); - } - } - - if (!keyStoreFile.exists()) { - // If there isn't a persisted BKS keystore on disk we need to - // create a new empty keystore - // Init a new keystore with a blank passphrase - Utils.debugLog(TAG, "Keystore doesn't exist, creating..."); - keyStore.load(null, "".toCharArray()); - } - - /* - * If the keystore we loaded doesn't have an INDEX_CERT_ALIAS entry - * we need to generate a new random keypair and a self signed - * certificate for this slot. - */ - if (keyStore.getKey(INDEX_CERT_ALIAS, "".toCharArray()) == null) { - /* - * Generate a random key pair to associate with the - * INDEX_CERT_ALIAS certificate in the keystore. This keypair - * will be used for the HTTPS cert as well. - */ - KeyPair rndKeys = generateRandomKeypair(); - - /* - * Generate a self signed certificate for signing the index.jar - * We can't generate the HTTPS certificate until we know what - * the IP address will be to use for the CN field. - */ - X500Name subject = new X500Name(DEFAULT_INDEX_CERT_INFO); - Certificate indexCert = generateSelfSignedCertChain(rndKeys, subject); - - addToStore(INDEX_CERT_ALIAS, rndKeys, indexCert); - } - - /* - * Kerplapp uses its own KeyManager to ensure the correct - * keystore alias is used for the correct purpose. With the default - * key manager it is not possible to specify that HTTP_CERT_ALIAS - * should be used for TLS and INDEX_CERT_ALIAS for signing the - * index.jar. - */ - KeyManagerFactory keyManagerFactory = KeyManagerFactory - .getInstance(KeyManagerFactory.getDefaultAlgorithm()); - - keyManagerFactory.init(keyStore, "".toCharArray()); - KeyManager defaultKeyManager = keyManagerFactory.getKeyManagers()[0]; - KeyManager wrappedKeyManager = new KerplappKeyManager( - (X509KeyManager) defaultKeyManager); - keyManagers = new KeyManager[]{ - wrappedKeyManager, - }; - } catch (UnrecoverableKeyException | KeyStoreException | NoSuchAlgorithmException | - CertificateException | OperatorCreationException | IOException e) { - Log.e(TAG, "Error loading keystore", e); - } - } - - public void setupHTTPSCertificate() { - try { - // Get the existing private/public keypair to use for the HTTPS cert - KeyPair kerplappKeypair = getKerplappKeypair(); - - /* - * Once we have an IP address, that can be used as the hostname. We - * can generate a self signed cert with a valid CN field to stash - * into the keystore in a predictable place. If the IP address - * changes we should run this method again to stomp old - * HTTPS_CERT_ALIAS entries. - */ - X500Name subject = new X500Name("CN=" + FDroidApp.ipAddressString); - Certificate indexCert = generateSelfSignedCertChain(kerplappKeypair, subject, - FDroidApp.ipAddressString); - addToStore(HTTP_CERT_ALIAS, kerplappKeypair, indexCert); - } catch (Exception e) { - Log.e(TAG, "Failed to setup HTTPS certificate", e); - } - } - - public File getKeyStoreFile() { - return keyStoreFile; - } - - public KeyStore getKeyStore() { - return keyStore; - } - - public KeyManager[] getKeyManagers() { - return keyManagers; - } - - public void signZip(File input, File output) { - try { - ZipSigner zipSigner = new ZipSigner(); - - X509Certificate cert = (X509Certificate) keyStore.getCertificate(INDEX_CERT_ALIAS); - - KeyPair kp = getKerplappKeypair(); - PrivateKey priv = kp.getPrivate(); - - zipSigner.setKeys("kerplapp", cert, priv, DEFAULT_SIG_ALG, null); - zipSigner.signZip(input.getAbsolutePath(), output.getAbsolutePath()); - - } catch (ClassNotFoundException | IllegalAccessException | InstantiationException | - GeneralSecurityException | IOException e) { - Log.e(TAG, "Unable to sign local repo index", e); - } - } - - private KeyPair getKerplappKeypair() throws KeyStoreException, UnrecoverableKeyException, - NoSuchAlgorithmException { - /* - * You can't store a keypair without an associated certificate chain so, - * we'll use the INDEX_CERT_ALIAS as the de-facto keypair/certificate - * chain. This cert/key is initialized when the KerplappKeyStore is - * constructed for the first time and should *always* be present. - */ - Key key = keyStore.getKey(INDEX_CERT_ALIAS, "".toCharArray()); - - if (key instanceof PrivateKey) { - Certificate cert = keyStore.getCertificate(INDEX_CERT_ALIAS); - PublicKey publicKey = cert.getPublicKey(); - return new KeyPair(publicKey, (PrivateKey) key); - } - - return null; - } - - public Certificate getCertificate() { - try { - Key key = keyStore.getKey(INDEX_CERT_ALIAS, "".toCharArray()); - if (key instanceof PrivateKey) { - return keyStore.getCertificate(INDEX_CERT_ALIAS); - } - } catch (GeneralSecurityException e) { - Log.e(TAG, "Unable to get certificate for local repo", e); - } - return null; - } - - private void addToStore(String alias, KeyPair kp, Certificate cert) throws KeyStoreException, - NoSuchAlgorithmException, CertificateException, IOException, UnrecoverableKeyException { - Certificate[] chain = { - cert, - }; - keyStore.setKeyEntry(alias, kp.getPrivate(), - "".toCharArray(), chain); - - keyStore.store(new FileOutputStream(keyStoreFile), "".toCharArray()); - - /* - * After adding an entry to the keystore we need to create a fresh - * KeyManager by reinitializing the KeyManagerFactory with the new key - * store content and then rewrapping the default KeyManager with our own - */ - KeyManagerFactory keyManagerFactory = KeyManagerFactory - .getInstance(KeyManagerFactory.getDefaultAlgorithm()); - - keyManagerFactory.init(keyStore, "".toCharArray()); - KeyManager defaultKeyManager = keyManagerFactory.getKeyManagers()[0]; - KeyManager wrappedKeyManager = new KerplappKeyManager((X509KeyManager) defaultKeyManager); - keyManagers = new KeyManager[]{ - wrappedKeyManager, - }; - } - - public static KeyPair generateRandomKeypair() throws NoSuchAlgorithmException { - KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(DEFAULT_KEY_ALGO); - keyPairGenerator.initialize(DEFAULT_KEY_BITS); - return keyPairGenerator.generateKeyPair(); - } - - public static Certificate generateSelfSignedCertChain(KeyPair kp, X500Name subject) - throws CertificateException, OperatorCreationException, IOException { - return generateSelfSignedCertChain(kp, subject, null); - } - - public static Certificate generateSelfSignedCertChain(KeyPair kp, X500Name subject, String hostname) - throws CertificateException, OperatorCreationException, IOException { - SecureRandom rand = new SecureRandom(); - PrivateKey privKey = kp.getPrivate(); - PublicKey pubKey = kp.getPublic(); - ContentSigner sigGen = new JcaContentSignerBuilder(DEFAULT_SIG_ALG).build(privKey); - - SubjectPublicKeyInfo subPubKeyInfo = new SubjectPublicKeyInfo( - ASN1Sequence.getInstance(pubKey.getEncoded())); - - Date now = new Date(); // now - - /* force it to use a English/Gregorian dates for the cert, hardly anyone - ever looks at the cert metadata anyway, and its very likely that they - understand English/Gregorian dates */ - Calendar c = new GregorianCalendar(Locale.ENGLISH); - c.setTime(now); - c.add(Calendar.YEAR, 1); - Time startTime = new Time(now, Locale.ENGLISH); - Time endTime = new Time(c.getTime(), Locale.ENGLISH); - - X509v3CertificateBuilder v3CertGen = new X509v3CertificateBuilder( - subject, - BigInteger.valueOf(rand.nextLong()), - startTime, - endTime, - subject, - subPubKeyInfo); - - if (hostname != null) { - GeneralNames subjectAltName = new GeneralNames( - new GeneralName(GeneralName.iPAddress, hostname)); - v3CertGen.addExtension(X509Extension.subjectAlternativeName, false, subjectAltName); - } - - X509CertificateHolder certHolder = v3CertGen.build(sigGen); - return new JcaX509CertificateConverter().getCertificate(certHolder); - } - - /* - * A X509KeyManager that always returns the KerplappKeyStore.HTTP_CERT_ALIAS - * for it's chosen server alias. All other operations are deferred to the - * wrapped X509KeyManager. - */ - private static final class KerplappKeyManager implements X509KeyManager { - private final X509KeyManager wrapped; - - private KerplappKeyManager(X509KeyManager wrapped) { - this.wrapped = wrapped; - } - - @Override - public String chooseClientAlias(String[] keyType, Principal[] issuers, Socket socket) { - return wrapped.chooseClientAlias(keyType, issuers, socket); - } - - @Override - public String chooseServerAlias(String keyType, Principal[] issuers, Socket socket) { - /* - * Always use the HTTP_CERT_ALIAS for the server alias. - */ - return LocalRepoKeyStore.HTTP_CERT_ALIAS; - } - - @Override - public X509Certificate[] getCertificateChain(String alias) { - return wrapped.getCertificateChain(alias); - } - - @Override - public String[] getClientAliases(String keyType, Principal[] issuers) { - return wrapped.getClientAliases(keyType, issuers); - } - - @Override - public PrivateKey getPrivateKey(String alias) { - return wrapped.getPrivateKey(alias); - } - - @Override - public String[] getServerAliases(String keyType, Principal[] issuers) { - return wrapped.getServerAliases(keyType, issuers); - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalRepoManager.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalRepoManager.java deleted file mode 100644 index 9b5afbc49..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalRepoManager.java +++ /dev/null @@ -1,301 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.content.Context; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.res.AssetManager; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import org.apache.commons.io.FileUtils; -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.Preferences; -import org.fdroid.fdroid.Utils; -import org.fdroid.fdroid.data.Apk; -import org.fdroid.fdroid.data.App; -import org.fdroid.fdroid.data.SanitizedFile; -import org.fdroid.index.v1.AppV1; -import org.fdroid.index.v1.IndexV1; -import org.fdroid.index.v1.IndexV1Creator; -import org.fdroid.index.v1.IndexV1UpdaterKt; -import org.fdroid.index.v1.IndexV1VerifierKt; -import org.fdroid.index.v1.PackageV1; -import org.fdroid.index.v1.RepoV1; - -import java.io.BufferedOutputStream; -import java.io.BufferedReader; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.jar.JarEntry; -import java.util.jar.JarOutputStream; - -/** - * The {@link SwapService} deals with managing the entire workflow from selecting apps to - * swap, to invoking this class to prepare the webroot, to enabling various communication protocols. - * This class deals specifically with the webroot side of things, ensuring we have a valid index.jar - * and the relevant .apk and icon files available. - */ -public final class LocalRepoManager { - private static final String TAG = "LocalRepoManager"; - - private final Context context; - private final PackageManager pm; - private final AssetManager assetManager; - private final String fdroidPackageName; - - public static final String[] WEB_ROOT_ASSET_FILES = { - "swap-icon.png", - "swap-tick-done.png", - "swap-tick-not-done.png", - }; - - private final List apps = new ArrayList<>(); - - private final SanitizedFile indexJar; - private final SanitizedFile indexJarUnsigned; - private final SanitizedFile webRoot; - private final SanitizedFile fdroidDir; - private final SanitizedFile fdroidDirCaps; - private final SanitizedFile repoDir; - private final SanitizedFile repoDirCaps; - - @Nullable - private static LocalRepoManager localRepoManager; - - @NonNull - public static LocalRepoManager get(Context context) { - if (localRepoManager == null) { - localRepoManager = new LocalRepoManager(context); - } - return localRepoManager; - } - - private LocalRepoManager(Context c) { - context = c.getApplicationContext(); - pm = c.getPackageManager(); - assetManager = c.getAssets(); - fdroidPackageName = c.getPackageName(); - - webRoot = SanitizedFile.knownSanitized(c.getFilesDir()); - /* /fdroid/repo is the standard path for user repos */ - fdroidDir = new SanitizedFile(webRoot, "fdroid"); - fdroidDirCaps = new SanitizedFile(webRoot, "FDROID"); - repoDir = new SanitizedFile(fdroidDir, "repo"); - repoDirCaps = new SanitizedFile(fdroidDirCaps, "REPO"); - indexJar = new SanitizedFile(repoDir, IndexV1UpdaterKt.SIGNED_FILE_NAME); - indexJarUnsigned = new SanitizedFile(repoDir, "index-v1.unsigned.jar"); - - if (!fdroidDir.exists() && !fdroidDir.mkdir()) { - Log.e(TAG, "Unable to create empty base: " + fdroidDir); - } - - if (!repoDir.exists() && !repoDir.mkdir()) { - Log.e(TAG, "Unable to create empty repo: " + repoDir); - } - - SanitizedFile iconsDir = new SanitizedFile(repoDir, "icons"); - if (!iconsDir.exists() && !iconsDir.mkdir()) { - Log.e(TAG, "Unable to create icons folder: " + iconsDir); - } - } - - private String writeFdroidApkToWebroot() { - ApplicationInfo appInfo; - String fdroidClientURL = "https://f-droid.org/F-Droid.apk"; - - try { - appInfo = pm.getApplicationInfo(fdroidPackageName, PackageManager.GET_META_DATA); - SanitizedFile apkFile = SanitizedFile.knownSanitized(appInfo.publicSourceDir); - SanitizedFile fdroidApkLink = new SanitizedFile(fdroidDir, "F-Droid.apk"); - attemptToDelete(fdroidApkLink); - if (Utils.symlinkOrCopyFileQuietly(apkFile, fdroidApkLink)) { - fdroidClientURL = "/" + fdroidDir.getName() + "/" + fdroidApkLink.getName(); - } - } catch (PackageManager.NameNotFoundException e) { - Log.e(TAG, "Could not set up F-Droid apk in the webroot", e); - } - return fdroidClientURL; - } - - void writeIndexPage(String repoAddress) { - final String fdroidClientURL = writeFdroidApkToWebroot(); - try { - File indexHtml = new File(webRoot, "index.html"); - BufferedReader in = new BufferedReader( - new InputStreamReader(assetManager.open("index.template.html"), "UTF-8")); - BufferedWriter out = new BufferedWriter(new OutputStreamWriter( - new FileOutputStream(indexHtml))); - - StringBuilder builder = new StringBuilder(); - for (App app : apps) { - builder.append("

    @yB_KFh6*zPmh;B8YYo*7` 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≦gdqH&EErq-fnxAASD7vsx^)B1O*S*&K$69Mt=UTJfvA!JYVSRDv-@SI! zHZ%P@zQ$}{#LlFgYfN9Y2{=Ted&0^iWfr%qmm5$K|=!WNJD#YkH$(B&Stz7@0qI69~-QMWn?h)Tf9Mq zy8l3AuP!DVNr@K1^C52gQ9GOa2SZpy#5rT6m7JpCwn9Vya=l49@Y(x1G&ylc+JuN&d(qBE1m9SvP1*L&$K zyu^V0be>+&OI|e;5rTrd*jbx&P!Guqd{7t)PK0!>{2U_hV0Iexu(lz$Ay4Z@g3OLOE+lQAx8 z$0h8zY8rh@((2XFpN9<#2gtp&!)+=XZ+=M&!F7d?e`0zgGJi0Ko`Bp zO5*87$Y9cy(&f;z@b?P*y$OF?r)Vs_sC!6Vahwzt2~f@)w7aS-_ev$O$MzJdXAxXk zBA!!-URGB$f#^e(fx=5d98-8{inFa0qiKo;mf|yKiX~Qx2u)E$xebo_;Po?#_Z66wdFAA5QQ)x*I1u`7a)}}F{$=nN68vr$;Zp#f&ijT7Hq{0Dzy*s@7`Mgzv9r#` z<`SdHUFTP>yr!$%LoQegh4D2}T%37V$?~X+xzFxGB@w^{9BvY@Z)>Q`E4~*z=zmLFw zO&v~un5?}gcUXG1#!!%L(bvuexH?m5S95Y90Ihzyu@i6{8t@(P8|bt>WIYW6z0Fc%HOIV1N}f`)RX8i zew3WH1upAgHs@oFtz;-Uol?%TinB$}1Z-?!_c6w0yXZMf$Lkn1scoREvRRGa>v4>s z&wEET>OBqPt^#=IKkWNznzoL7lVag(N|?TlPMmOeSsIiT`VirIVbZu3Mlv5neD0qNQpvg!lA)vcsuONpT#~87_*Ms>{|LXN#Ay$HiwkzCHRfzh z_@u+>zrN72(YOm_od-(LCgTLeTG)v;8?A8KfBiQdZoYyRK9H{-?qK)!ZDfKfY!Ge{ z9#Eba-W5Jo{w=B+S>d~@gw4f#>g5~uKuIP;(ez1SwQ#j^tMZWW;tJ*N622eAz8{pd zea)+#<~=277nYwJ9iQa(x&RjbONl1B{l_;ZGvCUqbWJrOb(@YIhv@u1Q!Pl-qVN^Oe`m#` zt=2Cg{0$G=wpu54_H3)Qxs#90nb7z9ZCc}Fe|je$8-RxolsM(PIh}6#VV;`ai=5rb z_59|ky3pB@TdFm2U0|$tMJK!eb?T`;L9H<0izC6ZxWM#Pe>sMKo56W%T95UVF=;(k zuD8nDyRx%qU(*+MGQOA4PKcuJoFVL&&`(4^vR^Wx1%(;<={Iz;d#XASeP8Sc8S6*j z%?abAs9<^jP1DZp8Fey0tRlGw;^$F2qwT^1H7fKX<$^~k6Mu1R!uT~^Y3B=`}P%dF@fQ|Nrxx}b``VJ(+D3ih2uy}7WsGU=D;H?G`& zPIxQY-+Lpwtc6wCZ)A^}|8Zu&Poo}C342K>Jnjz)_xVqB$WU)~a=U{iK&#(C|H-9e zp#M&e7SS<48O0DK1$83(5lKlJN-0`yfl>Ghzl%VI;QjmkQRX07;v6GZhe7K|j}f0+ zxl4LlOAo`GsVK!cvxu&xhalX`3a9yb*^+FU!g39({x(S6Y2=j#Ex)XKVMLRt^qS^% z;U#>&VcPuCOkP;$f)`}L8(naJX(q2eX$haN01s=WY_G;(%`RA>3pT?A(_OInE?7~i z)6U4!B|Yl}{%Q&5v6t3o^1f9z?6NG_Ive(zEZ7w`>~aT;(ZID!_&viF^_nFwWBi}& z_$yuU8}0b@uJ{M+_zm^Wb?B)j+4gKP{c~1)(pXTcIpl`dmN{Fl&b>?7-peqoJR;_q=@%*IEh8rsl?ks`vAvD%@B>t`w5PgS{A^uj zb)8mhb|1>}s8*h(ezefaa!iLDX&!mQ z(w^tzO-tF_>C~p#@{p~|$YI88`+R}JHrcQ?$JqmeJ#N+2X`CI^9DCH~m%8PGE;Y@o zUth}iNL?_3OG-2MNbkDfOKmuB-`1nF?-RRyEm^YG9vgOQ7VLlxn_EyO7Me##FoNxzetO@54tp;f?D{Gxs+qI^o8KtTk-1tNg1zqT}UAG&N=&vM4Ems#tN(UB$VU&vwF@+>;K)Xuje8q9!Q zZNtvVg8jjUt<2i5-nOjgd2pAF$FH*XHk*&qu7~Y z*Rr&7U>Wn{fxcxiznAKTolML*kY7H5-h0)lV+r~Is>^}$=G+TAiVvcL{BW{)_!2jV( z+T07iq;axOjLKes`6TpmD@6QaT}~=BLCk^jawNRN)~qv)L0wM&u}_xf(Dsie=1tiC z5hR+cl4zcnMDw8?1;^4G$~r%^<0gi|J~Gbh_l;BhD&{b6zE>6Q7yc%^Bm8T*cUuLl zk^VwwTH^O@o;3mf4`1r$4){`qRenh2B@=vpAN;ApdVU6m|E6_W`#KHrN$b^e_!(W? zH_P2Fp3>IE&$po8wByU2?+EAr1gx`*>oVMJor&@^)AhS4y;-(|x-9?lI_x7$WvU&F zFKMw4StvxzCTO?z1@1Wnv+-WoUG=4L$;KTOLNlhxA+2Me*J#{!hzspBipmw#Ggh>I zq+IFLy6bUo8v0llLvL}p=+9kjPswOBFHNJy&I*)-S|RMT&u~wdd){nvoV!2V#dRI; zQ`tOZdKOPu@p0)s`^*^sz0}3#G`^a-PfhcIH@cj@6e~$Hd~F3ltM-7(&qe8a+r{+^ zUscM4uX}YE|Dk8R{48ykReqxJpQX&l6RY>jF6Vi@^$wn=HQu7KFvs!7F6$hBU)r9M zcX`^L5|1lb&f3_UtQyVlBN0-(+==5p2ab$K8Ou43>MjjR&a)no3|`J;)(XMY9<(Uv zL7;+NfP7zwdjP(-34~dgv24ZUP^&VWZ>HaH)h_3B3b~B!0z1ED`m7Dhv+plXaZG1VN>MdUn~Y(@`Sx=}@LY zFZ&xr%bzJbZ+Lw<(>ZebipSkve~=~{%Ft`ZUV7S41>t%tjJ%fPux)wI`@N5rbNOX2 z$UkGsGUcBymh=5Oz{6w9ocr}}miH_-9A3`v3iFhNwkDdnzm`|jC=@$O)Km;Q(4ioEZc7dZ{wG^lPb%U;X*EWYgwiYSG}TVS?Bl_ zT-Mo;C2x(kVOKlkJJ!aN0Cs`h#(*`F_0XnRAKa%Oru%t*RvU%*mOZx-QFkjyioa-6F$ct3l7&@@VQy}OI`3Yv+`HE;PbNJLtXH* zvf#s9@cCKwk8;5mWWi5x!53!1C%NE@vf!t=;AdySXSv{sEckpEd~p`M(*^Iyf}i7p zC$r#dT=32;_~kD6k}UXdUGSw@@Ecw5Wm)h$T=1?e_$C*8dDi$o=7O)t%Kw}T{;Mqb z-(B!uXTjfb!OzKpZ*#%V&4PdGg0IYif9-;wmjyrMf}fuS7k=%8ugdD592fk8to%hT z`06ZpxeI<_7JPsUz9tKPoD04-3qIThzbFgd=z_1yf}iYyUz`P>>VjXA1wY*dzcdTp z?t)*I1z+TX|0WB*%mu$Z3x1vpeq|PXoeRD`3%=e3-;f3WoeO?d7W|f9J9+=reKd!R zbhi^0zNU}!&gKyp>{=J>Z_YZyzqQv#`@Y|m_c~YJ4_vV8U9eAFu-{P_UpK#Y*4g;` zKAC5NKe*a?18pZ?Q@!VKJqEs}3fBm*rv9N1Aq5V+OU`lD|3_LsKac9~gtgq*$7o8g zp%Ev{_){N^r12hkjuY>jY`pFJHdmcDyZWQq1-r!so9Tl6*#%qZg5BzZt#H9^bHUcQ zV7I$q>s_!rT(Cd5V0XG;ce-F3U9bmTu)AEaXI!wmU9i_&uzOsvZWrt?Zu)Y;?sd`E zJ}0d4zCKR9qaR)QHo3~oIoAo>?1B}$VE4OVK^N=+3gh&8%(*?&>w_8e+TbeVAy@em zT(E~-uxT#XBQDrn7wl0NtkVU1%mq8&1$*2DyVM1H!Uem|1$)v3yVV7I$~9h_oUq2H zUE}q%E8kyTWxncyJ>!DC?}9z+rX3gTITvi73-&h`?1&5Yyqk7bI{D}eeKPMUdarcy zl^6Rs@00tj?0FyFe2zOM-Q+TahZc6mo@WPw;h!*xU>_?s}u=rGm7eo#qh*EaC| z40@-`C!sI6K8T0vgP`9-QTU5LBs}gPO44}59e9*E@VLl>cFFnh8Z5E|C@O5 zzDumM?6+tlp6HUyvutXgbR|1$N@#@Y8;nAm4%!=0_MJ}ev+N0+x02}#C$#sY3ds=? zM*sSCq)x3OcJkhAa)8ulJ)NXE2p_G1NIeORv_+iW;V@>eu+0=WJC!xK7ao)tK z`SlSKz1ide4E^)+`tG*tJ8acA;AhllVJB^nvEHxn+k>sbx;7PW>Y+Ym)+)ht(f`CKBpllp-xq~57Q=$+|jcMe(8EuCHl5bYG*=k~Z? z2V>6TeehA%8Qe+d@$=j>T)HW-^Ljq(I_*5Jn|OcLedTPso@ZS8hxl(k&qq%$bLkwg z=Z&53ovgd`E*rKr3wE9j+m;2p$cF96f?Z+5_GH1XvtfI)U^m&Yud`rx+OU0DuuV2> ze-`Xf8+ITI_KXetCJXkm4f{R|_D>u3Ll&&thRIpFP&;jyr#|zZ_j67sTCm=E-hSXb zb{B$tDFQqpQ7%$W!So=3Q&2s~as?sIe0k^dd;@-FK6ds#@O+Do!VUG#yJIY~`g~5y z<6QbzqwM$->NS#nXLK@;51aK|2NlzwYNwy&DyQ9!pY4k8u;bfZ@#os{b6oKk+wpT< z@z>b#XS(8Vvg7Bu;_tEJ&vL~-X2*B9;$N`ildkwT?f9jx_-%IlGOOR14D!YK?2R|l z7v81!7FLaZQNU7lTDIumBj2BY6#dFo{9OFrtTS_;4ZF|5V;D?d#c>+!!nJ&rb(bL2 zDG6hU3pT{gGt?D7%+7=FpvJmjW9>YXTzqljs-AgljN`2NvgS_wD0ybsdH$NEPkyEi z`$yIsPS~(Fv-zbB+nLQTZP>1CerdyYXW?>%4a>>m8Nan*xi-vxOUGg1<-hE5CcDOa zpB+EdHQwJJW$efWyxnhS^`&aV-pzt(HtdruScwh$EDL7XFd=IULN=^CONTXl0dH5# z)!q?ye6uTlydB?CuQ|qLDvvj3y85~8f}Z$aP{@Ck5bn8c3Dqn z^~*XN=FjSvD{WXwR=-?l=7VyV`=aJZ$GvEIpxe3%1nzNLD}p zg6Gqo%i<5iZP?$kV54o=Yc83P>g=s%eyiJrzCN_9UMak+bZFl-;H_X^AI2uMe>X6% zA7_&&{8qwmhc-iGc@oB<2HbBXMB=J*rd{WMvhbN_!;WONaj^~aX3^3L8>VK#F0f(6 zS+GlNSeXsWvG!V50qhJa6W>{m_V#ru0japh>JJi-{0pK4`w47!CD5JRVf^*r4okpY z9PH-cS4o_Dl6sSx$RJ4hY*eN?C(q%pSSR+Svx$9|5WTPtq~$sRd-X3Ov&-#+@0V$c zgz>D1Z&SwC%j}iQZerIt$FB32|JUo}y!BGveq*9*ZMoKtkJmeOhi<+wZHE*k$kXfb zjZGyv3HtVr<%Si5y8kTw{dPHvUFAPz$9KBQfB8Z#PcE;|)Omf|9;+4g&bN8nF6?5}kkV$ff_DVVG z!1VJKWa!IG1lUU!jOm4=4QmEF1z<05*e8`_0)(IA;jO$M2CnH@A7khmeoooX*J=E{ zJoAnz;)1_s!+E*UH9hxl!y4YdtFq+i6ONMSmv){D>oeayP6b$f*1N~kpsgR5<2qyb zP{&5M;!lP6omM>R*l-;f6SY@({O4&Mm}ZE7m&b3d6sAG=Gai12<30Zf-(ti0dH6afym4!J<~`HZYxr3*z{A_ho#)Uux?tN~u#GO*j&i3i z*n?|&e$({0P3!NtWWMLu^lb0s6+Winr?d7B?;M2=KCtQF_AGgCr(OTsuKIT$rL3>* zvNmR|>EGF~`?KmfV%PJos~%--rX0w0JoDDFzKn%KzSx+MZ?opN`=Iw)X0N25*e>^z z+T}!8uE^|*^0nE%E%0CET6SiNd-Ioy?j(}*av1-6QS;lf?$EVd)~)ho>Lf3i2LZZOwUx`*AZS*FHl|Lh_Ar5={RAn<)<~gw!X=u z3-RiRFG*@EsE?I!u3!pzu&NY^VW5Bq1x?I>6vsgAe-ntyFI~IchGEc#odU7=D7Ik% z$IU3M&>UmiwU+Cu4ucX;sBn(^${t|cj?NmZPb$d*nCBH0_|p33-pr0vtuJje-w?h-7U){L9N!d63GEn}c?GNkDfT!yLhVK!?`tg@?n}>^-`n`#9Ce<* z{2AhpbG>se6aJ*|cgyHS9$)377kT%a=i3SYjs>ya&wk>~GpE6gYuQ=P;_xl7mxxh( zj|bdMz%~&cA&U-sGY_xLe5=gtYCO4?*(XhC??pXSnx7-%x0iZooFli0$N5@{j`Kx; zKjC+sX!#O35c)ADhJCT3uy1oDbco~BZO@BxrJn>+T=-afUP#th?Oe-j28I*K zFYy5)2oqqK=aaF%N-_gRP^!Syt{y@&A>^f@H4r)*LdVe1S|9fVf&Km^lsSg^Nh{Jt zeSe2>RsCETg&i;og`Ef()*RxDXV<(slW2In#q zr<}pQ&W}%7;EOjWA9NI-dlpDQYQ+@DJf2dA-w}( z+^rSj)$3}*H!(Sr)$Siw(u38exY`3&-K^7Qo!pMoa2P`Bb>D>htRsuO}EK4 zg6KB_NAYz%Z~ETFK4$xd$xz946)+EhrhDsZ?6Grv`jDE9CJ|zF;xL#u_g7p-%*W2f z)pnGR1!s^hy z!rIVdxErj?Q;GTLG+)xlFTV_}G{JYL_H2VnLjPg<%T)G)wwlx~$;}NpNHcS1_=cMe zH0-0{1cZ+#qkPpw=rrdroX~^mC>h!eVcmmRnRM-Fmodhi%Tjq@myc9!!70`;8RmNL zkPmJ7#sHo)?nVzIqF?M56(RJ`*qmnHuoH7gFX5FS#9JX$3==omK?|)Z1 zI&?_2&e(z%TfS+VI(>DLLVr6Oiz}MD%%&v}(+6!$!B?l&LVaM>8dlhtYnHp*N(7c<{Px)}8+q|(FIJ`ag{y(AG^ zBo3%V-x}|OERrL}W8OipX@dQth*mn~>*+SXH&?}WXaaSrbW=9I&@>MD^ zTEd<6g!!e1P>hyyw;gi=#9(Rn*fHZF2FtwJj=|7f^(YC4-r(=7eV1?>GiO#%?=0GU z{1rB932lM(<+p67;Mn>vVLrNb6<0<-aIaB$b1Bz=@BG!V6H@{#M%-`4%SS>NE z<`?MSf*j%1HC@sL^9Y+^`H;T$&GCeWVU|@;yYcOE6y{>=Sm1;O9wG82tb+&6_uZZ^ zdtbafek`mM`5qw-Q1i$szSwagx~_Z)CB=^&;=?yxvB86U!gVnSz4*u5bMnW;7k2o>t&d*QPyy+!MRiPwY7P?g@u>m2Ua7}FB5T8;-spU?uC2!t; ziDeI8jD=_VR)ef8lMz@x@rWa-$CYFS&@+iu&xHNfYKWJqck|-_KB5QTX-{3kd@d!m z-<1O0ib>#E4Xw_`Bkz-K+NJD2*_dp#=tuD*D6e50uPVp_w3i2q$oysEx zXZh|B3v{$HtO|v&zd6gdR9IY5NOB5Re|~$ODs~BHU?_j}cADOQhVM>qfuDyK`0mUt z@WYx|hGDY+IKLlh?ni57=CSnG&-x1J+28H=r>t~xKN(hlhLEqWKt)e64TF5EcVHc{ zNg*pAlNx!x$d8aNCpL+ugW8WP$n%aUI3Cv9-sBFSH;>i1(3jM1!qv*Z`k$f(`y#(z zOBiJXeuOnvSj5}D?v2%{JN$Y67k|Wj*ae*IJRJsEmgvrZ6hg#KTJIu7}hVD-fwDYK{tX6&O(f?(l7D?AhB z1s~D~{N~)hF=1Ra>UvT@ISRz68`L}%c?zc5eEoW_T9Ah1J0YU#x1egLg$s{VawvQTmJN9TZ%>U&e)1Xe=5Rk<|MtW=k%#yz}Tu)Eyd#ZW$#Xyg1ts2zG z+D$3oWkwT};w-;a4gFb{LpwZN=lfD-8%h^&mBClqwbdnf;#|>-?r-0V63V||*I9L( zFDjuYpWjtb8~-WFMgEmOH?F*l>+_vm!SwlXt=m;^&~p~c=GtY&3Cq9Zi` z-_at(=nZL5iVl54!&(5sq0jNVOBV*W(hbph4hQ;ScZ?y3i^NWMNoMtD$9aVTi9@&OsY?louk!4eO<{FqDrk z&FOcz*XS`+Cg)>6_&1h+VQqPRh zo93e4soz?2*Fc?H@cbliEGf!Go4;m7KCGQJZw^Dh#$uA>Bd35BH#ge73n^kViS)XU z)I1G4v+h;Cj_~w~%jG;Zwsu@PEI@eGI8rApCBr}*frXNM}<09NtW*aPdZJ7)zcQ->1< z!IV!lfPCu196tPo`0EMUnSfYt=rjB4g);T=l1d+|$w$g^Dl0JUMw)jY)SZ{(3}abI zV@uuj&_jdC;#5M5*30Poe0|O9SEl}ZujG*9={&fc_R3(g%q{^-i#!ec%#xZbRJ-2> zlR2r#>ku2NxngE2oiCnZI@ox=Tyl8@&;ih7DM+rKmRsid>d?2XJbh!U56_=|PvW(9)S0dpWaxY&-+w0Nh7;sh?7*B(!g%d9aElwD0gYC!zfrb+EnN zsy9`y!XCl6r5;8~SWo;u>qcB0X4DcErZ?iS+d3A)T8?#74)6h1_yr3NyCL0Cg0w*< zk|T$-0T_$2N%(lF7ld|)U*K+4O@*GS%g-g}>`WT3_Q|thp##9-_o>#&+}+T&!Ipn( zbIvKgs0=+T;p*f?&2U(m;g^h1^2zF6vAJjXUN+Z_8{SC$Gk%F)tw$-lQwUi=A+-#$ z6Cr6n^vdPzeAzJO$hebRZ2Yc1(}ywN|GjxRw`C2xQ)+bs_ofp^v$JM)@9+VnIf0(5 zOrJZ~XU<^~kW9U8))5xIl!oi%FyU=Li2~ci;J-n*$i6SfZ>a`Ww@7s_x{?l*a3vi` zOU$)OyaZC|GD62oNiDbBOA6@Pdn(m+$2}SHoSZ8v$is+RnVxI@V4q!*_`bN${2_h5 z7dw*leVCsw!k$N{-3sfb16G?ifCzWQ4mJDm6w?LyTb!i?Ie4Tc2V*Vf#DNg^Zs}H_ zNBxJIR}|_!E%dSQNNAhBx8{{!Sh>m}7kX(&AFUKS|G}E}6ty@y~-JMTTc-jJWR?CCYI+-LLM+*=b#mDDL!^qc^sbWxXTtBUD5Gn(3ReUEa!eqLA?7J&>0 z(vF@NUlj4tcI`LqA2nZt;SUT2WwvfA4QSd@c_B+BY>{%3X0+ZUMOCyx~uC!{_jj_g#r=K$d_G~i z-uG42tNT^et19sSSovgdr#n$Px1qNLsdQZvqaf6c96Aa@KkF!UXe8PPa$o}FKn&mM zUR%~+yw2*+3LT~z&Ih2yzLl`sc=ukm)&aWZfIY66Lp#cQ=DLUM34Ji&HT@oNH|j4| zYtVDu10$Ns&m)1K=jnNdiTeC&T3mbs{&hAAwe-)Bf+dO8K~ABpRg zFr&g-G&7|^3DJPjrChBnPnR7m z>?;(|>!1%VAt}CmAFf$2D*bh^{uQczQjzSvEnVLLFE==PA| zleJjxv!nz#x0{?0drw(Qt&oQh_%YKZL!URp(b9XFLv!pd;VGn48P_EsWmIY$xpW7k zqZ>y!ofz5?O~G(^q~h;N!}VOL_`QAwwI!(ADoY>Jm=;luNd>K8cv}xyORthQw!sex zt>t5Qa5jHiWIW7qQu7GiYi9jd_u2ezOxz#7l(w9Pa9W<`$T06}>NT6&Uex9#zX4J< zTijpdZ~P6I&GzG?gGMO+VDFL+FsF32%^|WoHt1qHUb43^(K_+1GTB%kh!&i#q)XE1 z&^J8%QM1K;N=_eZ(i;W(l_tGe;qN`6Jn`9V-fi3)M@sZGdbcy4dnuD(Opr1pj{|qM zL*L>UQi3bNKeDj_!@GU9vA0cPgIIl%sXo||xmkMXPDpGJjQ^Q1ZinB^jXH1~aF7i4 za_Yx^3GcAxHjhhYGkXjOv&0&v;kJYs^~1P7$PDKT77o|H_CPqzY+nmn!Ap7lNVdZX zeZW%qitEcjBf^r!)$>9}vuCXH4wxg{Rh8+iA9st=sNGb~tR!H9NUbDplkn#8XvyN7 zM(y>^IJ>MH*P>)QT5DQ^GkVvJi-V-MmNWWwN}&V#Jw3ZPlhlv9MsVGPeg-l>m%=xR zuj=5Dmk{uy%lp*(z3@fJFc;4kW~>{Szw z;htHAVXdYXl39lBtqNfrzPbkuJFjJBkJQw(s?=U)`Wv-XFo#ytC|CMzRJJH-R&Zq%d%YHdUrRMjnj)$At>MXV~moEvK4cc}XVJD?O+k>_cM__gf5*V{vQV(vVVXu6G`VGAwJ$An0KT+cO5_I*s zxl=)Rz&(p6q0FO4u2hzJRf22Ipgs8-^@T`Ji5?lNETc9>3-C;Is-N`0l|kJ30Ur(F zzvQKPv37PKetE|2GZxR-GM|7 z*r&9iCYJ`IQBzyO=N>KeF_$3~LjAOj$rd^i*KVTaPzSsidR)83aE}Ey#6)mkhfyFW z2~83Bg?Z)?Hm`)f{>aUWzo54Uvnoovm$u*7Q8urX=sq3pdm}Y^G^+I10tP3xYz%WU zwXsY4oxJEyQri4GTZIWiEAIw_+|$JFb_G5-<@W6>g3^Z$A=Y` zPw*U4Rq0S#niN`rA((zLGXtS_xNAKzHB+Uf>4Bt6(T-iCz(gaG! z)=g>INV}4KJMnuYerx^|91;7bY$X^Q*1)Y)7i$Au6=n7s>BxZ^IG5Hy2OZhRJ4;h% zliD|WQt3*wXOZX|XVCBWec2xKJ0rUx+fSxtd&#uS>@a=d7t>p!sgOrQO?PiCPW&A* zvmG?H63|96vt9JNw{INr=ahQJ5(p!bk$M`gM}%J3z-ha0$nRC1p@@S@=5>#!{JN(K_x>ON|}^^KFjPnSCfF z1!{A&&F=|4=y!*nEOjqx!&pL3l)Arf!xlj~U9RlVm)Y5nHd?|YnF9cc966T#jofa&?`W#UJi8&eL}AQ z)a)GA17t%ku^K$osKHsZtZ8mZm^-0$X@;FA&hIaKFpoTo^QW(3N>$2Ox>}n?SJkh= zUk~mT(>)cfk=lOZid-75$hrDvpHEYBX=2Y;ST95^6Ew?f&rsfXrg;4F=}xr8lbTlD zk89~LHmA&S$SI|cuiNk}Pnd*0mzwY%6+~9;34M)aMY&RZDTh;1WbEN@!JUvJK=B%A z>Kr*Gm2<9Y4gF)X^PD`iDx9R0ru4F;CLwj#-<7)5l$uNU!u*z34XfAGmiJevDXAE8 zQ@CSZiW>UT-+9zm7hw-(^j{r~ek;THEylA4Mjxd-lt=m+c3BEY^1cUVik_}`4}7-d zm&TO@yHUBy66>3uGEXNux+rwFG@C@v4k^*O!U-y3B0e$IQpQiPrV}NLLZsy zBAK}oNza8jR~cwlxn;RN(8?y!Z-x>Q`X~B{kqZ zo5E)Vxn3B1y;2^vkF)YHI_e7dKtESa%t?c5yvQPGVOWt0K18%h9h;_7$xzIt8KR=;bSfMRZ3beI;Zk1YjGYi`TX`zCVM8W&pXi!rEho%}Dk?nXD}>u4iivCqd@8kXh5DJi+#$v;k>IxWi} zEulxnc-NdXYch=FnYo`knBVJ?{CeqFoeNr3fZz(cCX4cB8uDHm;Pq>UDwfS;1y_Re z=xk^r{$@;;CS%@sSxC)EC5>Yni+hDHHxQi>Vk@=D7^EpWt((Hr7oBz*{azXf_*SIl z2L6{^wbl}v0wVi~QJyek95y7cVWpaismcr_%9-ZK$R&Ai6!5mto%l|Qx$H1XXE=4E zZ>~>ULy;YzPdhssx^yD6Pkx&s&CA7kCYN}&sk5+J$>>iYU1;0g$?o4K%QN%x{#%>Q zO}G~%^$u4;2ups$f!#yr#JFE@w#0PxpCvX97C_%NKxTV7=sx@~v$OSU(SqShl?1bN z_@%E9grCaun{UH74gQZGHr7qGST7u%a!9n-aD|N-2k@mC8BZbfEl??)zCHlqWSZgd zb-*tlHqHTRXe)Pr9SW1=* zImB{gxMGeSbe8Cb9&k-w9!WFW^JHW8#Oa|Qnx!VJ<$=<`w{2FxUOG?8Be+YmFS^g5fQaYKTK#gsdk5O8nbB>h2QI|PZ z9ij9xVx^q(>mtUmiF|;`8Ia+90V+`+`KDI8A}L zr0f8R^bDj0DgxD{{hZ36QufvEkp75Fm7ZoPv!hKG8h_tN3dobzu{`iLb@$);Cdkr2 z!}Us8q#;tBH@l-*>YXg1Kn*BW`pB`_U5(f~(N-e^;B`PAMvmlaCGEGXH*+<*LI*kJ z_NVuqm`%ql)Wc8E6(PFvlbN51D?gc}F8y@6GM!if>Pg2nx=v%Pfb<9iI+X-dRRG>o-T#f9`br&HoNjP}p3VhlO7#CmH(s6@4-yOEOW->Frd2WUjh zI}N_O8YK`gavJ(Z7@5#=MJqX!kaml#|oeovfp24E&6>;KcN?wXzIt4LG!O5Jov80E zFCd{``MH~ifo~qO9rgM>vBjXjIV%YM#`UAQcNkwE=Pt&5y~T-BiG3qE%nc>si zLBf1YQDRGPplc;DHzK%Ba^55UAL`({e)$ymy8%M@6U3~Lk{2OY;kzlEl~?3TBV`WA zL2V959Qqcm>frZFELnDk?kA9kXpe)oJ^rRX1>Hz&%&iK0kNm&irCSet$ZNep*JHUs zcZ_j^?)r`axzc6ah5I?DeC_5p=n{GtfZupCoZpXoy7XLnAH(JX%i2AU*_ryKQ3a4| z`X~kW)cqRfM2VJ0BrWs{zc(dg9^13`(|I3q6gbidG2ipao5yTW{3JefNnSxs8okqt ztqGkr&p3Cd`JJ)hP?ipr;4in`sf66bx%F8fO_|qEqQi$Py~m{iPr@>&)Z__$Q{gTq zes?t5s37O6V84DI>gR=E-+tX8HCBIpd+9730G~i$zo?g)#{T)JaCbWE2z_OhqEEj= zZC3Xow*yZ}L%1d5GDz+4Q6P6ZsT(m|!80#-mITiZK9=Vqp(RozbOL866G+3*C-Wve z5}MD?gWPE3OH3Q5)ceO#8ys#wHgg_33*yi0+qW26{`!uE60qRX;PtY4JjMt#Eqmf3X#N{D%XEoA2QzuEhB{**$v&X2H{-p4`3Gm+{ zlisAH8TEtSdp(cM`)~!XF4(N#nlhfMY#91Lp1&8ST{iF8$B=f+<9&| z8Zn2^E?EkPK9%}}K9_ohzNi~FLJ57x>%IF?vtCD58+ASl5S*800(OkBJ!8$V{qxiD zjI9)zcFexv=0M7b-8zjJBIV5UDv6M(C)g^TWt%L(^Pa9cx1TQ!YZxM#?7 zTz&`M`&Q;EGTDWI=rvry(eUe_KO+%`zaZfgXDGmt zdRR%7@dlmjv}pry*WQWe@!DEXwtTqvB%a4QN>p#loR%lhXI#G^ZyMmOCzpDpv?P(_$R%M<}vZb2_<8Dz)+KMz!8ro8%5jCy#s9}{Nz3Y~onbMzS+|A2DZJ(xL6yy?@ zz1jUB$d2o;8jSJhx3&D8B54;e9X)+GwK+Knp)U7HX@;ay3r$@#tyyXLX7}b5s+2}= z>Rp(f);g&5=!~4u?nHfl_EF=W7yWI+KH3fK_*$j6Y_-E@cXOx2LPD8Ga1PNgZf zJ`e9Cza;T1bUc(u3((I% z{y)E49-FL6=@O3Mn>rTCtoH{k(6O;2_Vgw6R>9-dgWxyd7(qBK;Lu7;97X`#hhbyC zUkbfL_*>-C4~XBZvRb@n-xF@$&Sphj>q;>3t94Wg5)?7OVevVhz1( zjgy`yp=XdJ@(&}<8{F^H+Zg}%I5YonoIHQO;^~Zh@PABa*8d!*JfD~8hyUj?&Hf+C zl-b*YUOC@LtA2#;P5$q(=KSHbx{N!Hddz3~NWFiS!rxo|ho?dRr8+|DwY!x1%$W+) zN!eNAs`*Cyi+n@-6}~=w(R|}Q++KIV2>7dUn{Hn0HA{(=%v2h~-_iLI@82&2 zKSON&`!wjE&*_5w^L;}9J{9Og3_AAj{4T}60DS5s93hmy+0 zL&idin<9VeQV`CNIsemjPsJa;s7nDIn;8GE^Vxe0v4IcS>Ivf?+GQZ| z$(o!a<7xwsC-rew9`<;+zhPYp=#ALW!cG!1zAlfSD!!-?AJ2y~A3s$-3>WgP=9K&~ zf&b!D^4ALd*PN1ngup-bl>8S9{12Rx|IY&dvQzTc3H%#Q$v;xyfBlsF^#cFLr{o_+ z`Q65SJwI~(UcbX%dr6mGkqie9-}l6+!oO6IC;ycEmkIKeJaH;{Mho%`Ic4}`gmzkY zD*o_T+D>`+SD!NcaYA};JthBmf&czf@=p->m!6XUa)E#SDfzDu`2TiF{woFkk50*d zm5~4cI%WP}4f&r4-~HsN!oNn4C-;>6*9!bSPRW0rz(4Sm{BeQ5_LTe+1^%l}$=@LG z|K*hYjYj^nyPD=a$?l1*mmXH?u8eOk`%*G2r@C)pjQ zh|3iJten4##d$um@qBLKG433<$?=6C=f7?EaRHYXB;#KSc$y9WO27j){A&U4YQw(~ z@DdyTt$G!usQJ9WIX(Rx$a2#kK6qJVEAYA@|za0JMD12 zl$TSXbi1=5{A8D2FdO(6y#<;heu+^+Kl1oz+2a24DL{;Pn$VZ-GLEB>AhcL@0BHry%TKiF`WfwTUDEad&iTL9 zLf-!8Li?X*>p#+MxY&Pmu;F6=k-yM>|291*u&}*)F&*l~*8f^Bc)EKpOip*3(7#kC z;~J^3){C=k{w11k=KFpN+rRhx;)QI@D-rH7yonI{@EQ-Z9cKA{nVIj8LcTwySksU3 zUvB2xqmXZp;r;YNzD@j{d~06F#t%QiJM#+3U65n@yM$#Ury!qxq-P&_IQK4WzyE%~ zmj2&_di$geKPlkP*l@Q{FJH0Y9wC2sB+13;t?kh9-)lgZ4Etlns*1-T#Z`p(DOy%(GBW$?E&<^U!eSm?V#@&LFM?mo`TaL}Um z>+ZRW*xvM5;EroA6rx>uQ#d_emlAJ2#1`@M@2@!<^c95~?)Dqls6~7ocQLdVEkE&| z0}FrrB7Xn;YtFF}@Psq+aVIr7oVXB<-wcPZB~M<&*OD=e%zW$n4Yw_7|NVwL7xB09 z$~|%YybA04Di1E=@2gx`QIPcB(&HS{E~-d=D`D{>{#L@p71q9C<)ZfcrkBjH&bNiN z-VAGag=TqUW9K5aufbM}8c8+2&qbQ_(tM5Hx&MliSoeArcyny;tIUHs(3RGKwFMN4p^QtznODd$K_fgJzinp~Vpsfwg$2P*_ zyFifVQj0w7uMY6t^bXlVvdHPrXb4{fd2|)osZe(TcW-3wf!zHXb>k~LoU+NFXeMQ| zLD5ahE`t&=DeDc&G?TKypb&{uc5{l%DSJ7^$tim{#mg!CI7Q=>S2;!Jl>M9%;gqeE zk|p6~qny@CY1xuwQnncs*`)lG9U-x~(Xs@g;EqjXT zMLf<}!5dKbms;8t<9n`MzGas7$zpmbNwxzP**2N7y{T*TzHYWhxc4d6mlcv{oksXl zQ|-t31vNMZAa8~#$J;hJ4uBl1Z1TR}F5e3_zK`4Gdp%zxV!!c4Qo0UW()GQWu6J~6 zp0}BKevsyQnz66yUCh>q3q8;A^b+Yd>3-=c>1An`^wtfYPiSwB;dw}ghszpRoGj}> zko84dn)G)0Ub69ZZI^Ggjqi+h`PSI@O4{Xn!^T(IF5lm6d0xF(%=33Fd4A4fp64G6 zc^+HL^ZXsf+MiysnDvWDZ`2MHkfgVd#tHaA8-A65zh%QG3i#U=oQ=Vg0KeKCgL8~A zcrlE*m(wx#CsSuL_NB;EfYllpf8&hndQSsZsvFoR3^Vqp$O^!Ea_lXJWf<6Uz`Aj) zm0`yI6L){@c!lkPKvRT#q_vakb|!%LItlG3nvZWWHie(aXZ9eB?^jzmPa5GcdlA=?Bs{VpU#m&H zFO{)`tve?2X`$KY@VkIJEHUiTGW>Gy2@aAjmARcnDhU0Gx6iuhDRO!Xt+S+t(of(` zzRx>j!%r$@4ljv0PAa92&)NX_7-=!*NhPkYudbo@Exn8Mw-qBjeU`9!T%nWQQS2mR zT_D+HOxdFR3EmV3f1$!p`sx{kzfV!j+@Gj#Rd!gb)hSO_=dj*7hI;PVJp-sTh zp30AT*h`p+JF1(sVR-iy{FV(M^w!2q_%0uSqi>;;#gIi~s3D+%7HvAa@|Bo%*&)U+> z<&l;q%k!LV?DW`pR+>5(--AwFYS%_-^+r(=fK~)ravxIcbiPFm@;vmGi^L;Z9IK#JnMw{AO5RY%E$MUf*w22=6Ag< z@6KMD+)r+3r~hNTf3opz{9WGRwzxOh;;ystY_{=SX5-mne4 zZE1MQ7T#VXybFWL;jOTRw=Z8y(i5LI!o&JoMsGSxr{8gHBfUGzn#Zec;qABO%?2CK zt2Ul(HlEjPJbP?Bf3xwtX5;yXjpt1p&zm-$cWgWdY&;*@cn;clKDF_@W#jqM#`Cs~ z=btv7LpGitZ9MPTcz(0-yldleEKBA&Y~xXEJnz|f(rrBN+s3Z!WS;P+F!nGWt~2E& z^F%%aok@(V+p?rFPCu4!eYdlxO_tA1S-6hZXPKoP2|C^v<{BNByV552ahu$OZE}BU z%FV;MC|U0CSHjr*XB+;tfRC}^-w62CHvC%wzutzQ5b#@U_&)`Fx()wM!0)x;-wS&6 zBg;g+I^X%MGdAb|@clsbYRqoY#;-nZ0-@qveO*73PJE&q)HV2z?tmMtP4{7vZmV0ub&u zuK$wcW8f)#1e_O0>lPwf)>PD zE*B=sMJuxK*vqHd2raJtM|abE_B#=OR-^VXogS1T*O~iu+~373+TVM=Yz1or z`J~j7FZJ=n^+^@h_uL!JZ~@cC2>XDD-y+~+ZF`6_Rv7PzOQnGSrGnWke(4eRvCS}$ zXNE0|quJ=uZzv1bL_<7|vvQBhFC{CSM` zhYlFn6!%0SOse-=(v>e`zP)JMcm20jF8w7F=X-6Ar!9E++gYQ0L zsngo33Trz&X2tY1LR-IswZPu=N5K6tE2fRw7^<1#F;zZ4t1c0=7fI zE)%d_0u~pr-2(O(0eelr?h&xR3)o`<_74GjTEGqn*g64wOTbzM>}>&iTfhzp*k=Ov zt}wp*>)B*GB-WSzZ1oeKLi=)F&wS5W>)Fj_|Htu;0)C6Fe=N4*+P${+6Bh7CZFq%% zuP|{Q|B&a5Hl#mm#?8m+p;o`)=WXNkWzSjjYPFD$*9q9`!q|7S6$`&<s~?D&jf$_1b;sW{`L!F zziVatwr=W5>ll7hyJL88r8O-N*y=)00e{ejmkIbIw!9iF;0x?ynSj4w(;-H#wC2fn zAy2NfV&TI=Ufv-1J0g_(jFs(|`#q*CeLD=)$@64ow~tZX9fHYdz}^V={Ec#0l&+Jj}-8kcKu7h@3HG&0zStU{>=jZ zgkAp<@F(s1mw+!ZaTo2y37P-A(Z7c;hyI(z?KZ65S8%L0Zq5ODn_K(5wau*+`u5$= zTj$QuKJ-ljen`Nf9_pI~{J0SIRss7-z_tmPdzBU2BkE5A_Nsst3fLP07G7nQ73!vb z(7>4vI%rjU_WoO(4cgBIXoKZYx$PLY<=O<;_XdXc{#(KQD|a8~wmTQCVr!wyhI}kw zP5L(l%zoUdChScwUM1RfA;#~<8ncR@W5_T{8|IuA8t0p2q4B-^zpUbW`A#*%s4w{M z_EpyN5{!HHDsH#!QX907gfl@8uVUj;OmjgB)Iyz(OQjyG9`VE~Zl4D{VPB!{;QQcg zEn>M9kE9gpHDcfJ@+y1ZK<)Ea@%4@E&Ia9WoL68nZ!=|f+hpEj%IpT2v)YyUbyFtb z31^!!^Dy2K!pITA;ORPI4I|RQmaeaUCtcr}>Dq;F#~JBj_3=M|m6-LB*SY;r$EFlw z9rKv=G2OuS0yfydxGf{MEo=oWz_CvX$*bVLk-OjHdFg#Ytb<;awGUcPUa+1Y@u*GO zWrcX38b3e6-$v;80=F|}e6bQQ}||t0wHgylTwp zRg>+&`2K0t3w$pVWGX3c;?u6M%d(e#Kv>6jpuP2&!25^J!RvmD@?XWS@8n5M}c~4+M_^SZO0zvd0TiR zZE>!)@zmRRHrRMZ*?6|ucrLN=?6L7&YU6qB1-{S3dBzlKma}aKlJW4^LhC-&`!;-> zfPZGg#|!wkHhhAB|76227jWstWc&&NS8e!}0-kBZuM+UiHvDPuq?WfRDG~O#*(M4ZmK%C)@DmLhC;1)MPv|snEJl zdbiF0Wa^)f&kw%X{+wjqi(Ka}2c7$4n@+x1z(29+{Lc&cr#5`OfPZGgcM140Tl{Yb z_~$nKuz-JI!#@-7uWa%EQ^3Er`TteGzp>$-m#p}=Hry}ZCv5TO3HU#4cu2s%vxVPV zz`wWQ)dK#54L?`F|7F8t0{(9sewl#(Xv41-@SkjJ;*(zDYvTX0t%=`c@!P2VY~~HG z)6-w#b0G}-7hzp{juq2?73N7#3fOM~_MCv76tIl~)+S*41&mZ$v3CVb60k1>Oct=8 z1k52|o|mndQ^0Zr%q3vO0_GL4J_4o)SdDZUOTM@*H@%{dM+ttbW4jm2BOZ z%|njA%-%ou%i>9{f4~eXHK@akMp5yk^#O37Zn*JIWIo6F{$+8Fldh(jXMuiunV-i| zV1CmrNPfo#*|D12St>A|q=UW_3MShtbN$>0ym%(*bjeT8UbWD(S8H?d?A3-GJbSe< z2hU!u$qD^HBq#Nie8!2-7xPzJ&jB5T6jlWJIUqi#>c0B_GN(ESbEPL*z%Q>DY4 zD&01x;^XR&)qGqv@*&(gXdSmNO3tTnUXY#3u;=N;tGS-Z^R!DaSBR~yd*$z`c`4`N&8wqlP0ejmMq-S14?zFtU}g&3Z_uL`bjf-?n4hYTmb1K!2D~X|c)*7D5%5lx$@?)P8;BN^>BNgj}t)-t&Djv0evlfYej z$mKeTx4Fmg7WS;@q)c_W>~t+7UOC#Fsjh%25BeMIbV|s7$Sp~OT`qTQGSJ*^Y0re# zzPn?gS9!W-ud&}ZL)UZHu)C5Hqo{{8>hWL+&6h^KiGGECaT{x#3)|z5ObnL9D1YR7 z`W5+_!{Y1o`!H)CAV$Ea&EO^vGPi- zByo?;K`W+LRN^?v<9hFR;`+$+^MSJ=JSk|6>q{#Zn;f*p^^+CTrvx=)ogT5aHLPE4 z)NiCYinv5?DPSw{$}0vQxq;>&$9=|~h#deQfc>r)rKNAWkcM!ryx1GpM#xSWm9yLv z{f>$iZijou<%eXq6ztl?TmNv5%6>bj{;t6ZUA%s&Z$Tbu$!YC($RoG4Oj$wP9=|&t zxmb2ihynLtkIQ?$$1TOsM+b0u&_!SW_#}JUWIHI)N84bTnV{282kV5 zdC)gYjS{=Tenhk992sv^av5)AOn8OeNu4dX=Pw?;Kn@pW(0lROUdCkL$2ZZl72x;w zR8zc_DzqPO4>d(8SE2pP4gKtQ#@6Mi1@jIOrEQKvoc=)n6@D^XagxIhMMi9}qBwdg zDM|&ve`+jjhe0U(4Jn-W9Uj zLlKwPNq<5ATIQ8pt)bn24!y$ObHsYJ8D!3;x+#{GgX9u2ZDhEMnnT*!MuziMydP*} zxT9KEk_&$U+Fzs@I`2NCoU>I(uXFgCE^04Vio3#vea7%L`S^G&>E&{J%UxcAZiZ$O zpQN~>t95mmOLaxp=<0M&bZsZK z<*vOmkn?Qh91p$5eq!7pPRM7kFr5K{*KijaZkAVEr_Nl<@5|0rt!v@ACOx30TkgWlU(59Rs9vB(3kpIEWHfhNb(Iecus8XezBy>0M@ zK@3a0gW)#vuGd=j_NVD5iseY;I|}`dXsol^7@iv}ajJ4%w3CYY=92JRS4R%bSFLZ- zMAq^t*%|m_u_)8bxue35!Uj%L}mury)-NzrULzPj1y)cLCEoYgAO{=a1eag z2r09J>|G;`x%D~08Uwi>5S-841-}*w=xn#c=z^iB2K@meRId@neGo?I4Te2vgr8zy z51HXV3`ktN1;UDJf58yp_g4Is5RZqK1|1UPe1uBUsHb)wPC|>hKC*l*(>WSR3%>qN zt{_D!>r2^qvl8&-xTo!HYnwVX+cRxIwwnyda=rHI1=ao{qrZ0?aW-f-L-_R%3|0#r zm7sa&SE8#_4c2t=c6E%!9DiV-;TlI>m4<6Pbqz9H6R4}&a9vJaRcigCXQ_?kVSIrI z^71wbZ$HR#kRv+>N3#~^wASn%HzN%0X^+>K?vfTqi!&a6Hdy9t3APl)!_UE&KQpc` z50*iX{!DPDHy&OUtaHV~F9dJ&jCK^k9C8_8nT{Vovwq(ES_xl}BM#o{82=16<_iA( z9{zj$yg&HdXalucf7N=g{t1IVN&>p&9{yiU{)oWuSjYJz0)N^%zV|j*wd$HV>sT9W z&|VBmN&9tO*6}z72yt{Z;}}5W;JQk$bzE1OA0(DLc*@MU&r+@X*#p;cJCG-X+>Vc9 z7n#@-CZ-aJ>K~V^WB1qjU5(_=POPK;K7Nl=mPSnR-imL)dt>*X1*O=dyaif8OPLpB zNi*zAn%1##!0(C89jFd=c-7e4N_8;tstxrEgJmhIyNB29Df7Zu1{{MxcSVkBb+C-T zRXCoi%U#aY9v-)+%A=6w9=8i+>?Wz6(6Omkv|h|zQ>TPJB&H3-OY7KNx(AUQRX|I3 z^dyp8f&E!9^s|(S>pr~SYhB02v;I2p$$d58@rQnu|OF{ zo1}$4>M6NMh4f+D)X~6+Z+1v5E~oL=nXdD=s02Uqd~_{$dlgLc2vvnqb3yPG=%JRm z6(4?I0VC%!+3D!%mR%L@OcI+^s!r|Nr1!6!0Q1zT!$33JlI@;00R0bhtFCmIeaNmV z_it^;iG0P-gN44ftdp;2d-hoG@y$bgyRJX?jKhrDJQrG$L3#INln}BBd?Wo%asH5)a2l;YSnTo3o8Yx$Z>TbC_HUruYxI9Gl zv`lHZ`0?O56I2Pt7K88gGArNfWeL90391~M4tX7(5zLk`wldd_Htbov;Iq`V3BF%~ z@6g%?Z3+IqEY*b8 ztY>rWY{yN5W05N0T_L+1=YtT`l>xdqb>W#Y?&oX4PqpBuI>`@TYx#LSzlRd?R-Yc! zNruER#|A5QC&hR=Qa12(3^da*u$^?|Zm`NUNRVkzl1zMV)fN2UbyxK_oD2HXn=;;E zd^zNDPYAcZ;T+IS)&}R2x|@cmh2&ZiZ5*N=mL$0)BiaOCvMje0Hfpb6y>PVj_7?>Q z=X<+4>AfSavF`K9WX~luoU_#!gcWN%8`4%KYvTBe&vDZC1F;=cZD2M?v9aeut=!2p zANsw8YD0%*h`sPIWLrz`=y;I9>6Bv=&Q(zg7u3#Gv6jKH3FoNsT9@3drakVK!SO#M zmPRyVo?QoVUdQhFt9%ben$5u!lH$P^5`F806yy2toCfdh#GQZzqMGI|<9%2L11H0|BiIcpLTH&bL5p z|A1_OSoAXa81!7PgU>Y3z&>_HF{H@L!5!T&4D=Z${tgDew=taG`4%tt9c>*3Gpm-m zmaDUUq)WWMTAr~Yx^tKskNqQf!Qjx}68+Dj4Sc>bOwa|M-oV@7Fscg}x0RFC8`%1P zVofD6ui)#r>y3IhQTw7&hFUrlTC0!##Iefh5gq zz~4q1s#@R5Ji3ADC2?(25ZCN<$p2E3Zo2cqZR9+`aZHJ1=hD0+U0qk^6-3p{&&jaWwR_M+ScGVm{>z)@)?)y8~Hug z(}X?RS55kDCLP0iYa^e}k5ChDXtH_xdmGtWS1d9D#_Y*VRi*4Z^2P}`?l@*Iz3?rU{h6`Vsvxv|h#&DDGz@Ja%ab2t?;^FoD z`;Gif+J-PGDlq#mOzST^9=RcMT~$pnTjjV+9aVA({9OuvqhOT%+S#E05)702@JMid z1Fqkwt6o@ZN#DeEo=a5rP8-t!0tS7g|1wpR6a2*{|E0owGQ5fFqoY*ozHjL!L+8*& zLMqiF3BKx$uQX#l4%0MX6C1B{ygx|(oKZ_hsj)?j?=-^mYxv^J)cHhq_L7OWLRQJ} zMVF~L&bGE*vg|Aa{XJ7=C3YHwT)XHJwM>S2!=jPud?(N&-lEfDqn2KxhQ8xjw#CaF+PBQ9!qj6W1DfRPP@RCAAG=`ptn_M5`nb>)PR@O@`e&jGJ7yy?GPY_eR5r z*S&~X+Q1!~cwHR>b@hm3UDLXI6JOKPiZsjnJdg15(#L?NH%hu%#jm*5%}6`vd(z4$ zCHO)HAD3a-CT_FvP$f!ooto%JR&C<;>DQ_Ga+EabJ&Sbn{yE08VH2zCv6AaxtOyqk zqVI{+dm6L{p^w0^zDau(B2wi#|E8RJZF5eBrJoue2p*%f`{FXO!J~iq?L-@|}0*9Z}X_JgKNY-lp&C?nl zUZlx&4n(=m;o8jCCmX^u%4=M8C6k~ZxU&dv(~O6GQcS`(a9)yhS(WN~O@f@UO-sfQGJriW#D|LZ8l`o?=tzUc&Ulc6mVY0hHU0~-Hn1?chP39*WDvXM zds-)<*Sj3*RO0^oCpYu^_Qw=i&$;5irA9nKeTdh3j$)X?`y#WBGkMl~I^x3zS7?J$OuTN`%Q*%Qe6NA;D&u=~j^PKsU(87({$ag4eAdQ!4L%{< zNI?n-9pK|+#TNEnt**ITI7cWX4w#vISwvrkD3|aKPFGyNmc9YR({dL0IWs9OIj2sG z{!*EXFbRJ-wS-^rxt2u6Y++?KR@w?RBvtYoFF37~H0;G_j|FUyN;Ro0|NFjR&x{B8K6aHaEEc#ofnw zo0+vmJkz!fMwOIeot|mit|sii9^At1j<%_>g6%NZP>T5-gM98ee+#!eGI(^g*n02b zQ^{fIzT)IN7+2WhNj2l)JTKaK(u$MsJ6xa46G<;lzNc}gO&+Z{aStO4XJ2xfA{oVK zkIviGTU*-ia}RIfHY#?zRwln^(zb>7=XIV2 z{mx43dnWF!)_7+@ynfAkcR;p)-)+H-^XOYyee~!|vcFd1{9|S%wh1z)69-fDe!hrcVG0rmF6Vw{Wr9j!qn4cr$P?!>!0 zS8Q$H4&=J6d~W@Bs3${<`TIHC-{h_Bm*35%tXD!lWmXj=&6Dri+P*E$U$?UL_e2`p zq){JJTmsZa{WACs{mR35bZhclo5}nn&~xd$FRuzl0pkC@cNq6j{f@XEsOkfKOR4lT z^i=;TgPP%(BRgF2a7mR@4t<-DZ^zd5ZPr@1^7&zLm1cQA@6E0J9k(~tdiem1Y29d@ z%rMICFyQy&n0EY4wf1S%SE{P?JND%PwJ|)W_-9{Q!mZz5ydETr9X|kL^$o=;Q9bPY zCj3^|_l@}NO@#3PgpsY10X@}pwNecb{9fToSF_aDUcF$zp7KWWAoO%8KHT-FC#tV? z{ZhB0(y;VN22a`!F=sXM{rcPDT<{Z9Q!%o+P26+yxS4 ztJA7me_o2aT9h`c_&lKfxu*5!Y~PH*v9I2Q5&fa!6r!eNr!I)>eXn)@Qc3k;D&qRn z#R1Zt{H2ZOY1KBKrw1WV-%_n*f&b3h#@;GRv)udoC!kePy*L(r3v%gRkd}SjVtmDV zp{ubNtr;-oFozBwRBIteN};sydz7sDa!4Pj6=zgBCF)zhyBJr~5RLUZNYjA+(Sm1p zLAJagvag^~e;C3FeM8K;e91QBEUbQzt_wU|EYAHe-^O*Iw^eKVLF~G1TnBm^q+M7{ zEOt_ptytu#;&3d@w6U6Q#q<}7!z9g|`^?$K?1=n+zr?I^3P~Jlcq6Wbhrd-VE9~J< z1=nGocf6-ACl2TEJ3do$+-Q5Yw0bh}xnCO}*TzC$raET! z+duxEfeHLY6Canr2Vo3;r{9G(S~V_oMelfDZ5bS${+`+zL;AVx(6e16vNsl;{;t|m z8@&@K6B2yOoD$5?&X;Rsbj7u^AuX}n4}<@YRb0KTAxj;qFWb2wvZuz7)oIA&ibpiL zEQbDKcR;R%J#v{djj(WrK{(yX)V9Q0`SERRoQ~>8ReZZ4R`8Kpknyr+9m`Lcb@fB2 zt4;bWwi`nC0kJ;)2>3{9>-KU@?6z+~!pZVN5}o!n$on-&&@4;N=(I1ubxhqISuPV- zblNA}1r>Lh!!5_AeQKsIf>timKUF=mo81x!&@eJyJhvn|?U0)3Y$JUmT}f=(5#av7 z;AXBv>fZ;qK`HkK3g(GQ?NG+yFXT-F{<;pkTyjfoY{n5aez8kdVhKBeqV0TcdC0Vh z!hfe3^x^tvs%DwHhE4uYguT*!CjD!{wyJWwvHqZc1ns%G825-^ZXj9x4l?~76T&>l zq<E8(JZP#vReK4j+qWc7Q z7E6}3`|G!}{Surlex=rd6m<|I_N!34VMM_HXBA7tx<)v4JD=Pf^N;wliHjs=cT702;0p*ZJRry#7nEWEmG0nBjjQguh}tUxWNiShIZ5 zVijAYZ=w)Vpy*mX{+~tr25TVOpFEZY-jy; zo%9J!5BB$}(Wie5SP0vmn?%qWdM?bXS_+0YL5~GpWLTD+Rk8<0yq>ZoSAZTFZTd#t zJ9cJaqrRlNg!trp^ty(xL7Ek^$N!DW@^O%mkG%f%*unM`u>NCB!ZwGs3EK(Q zs5HwONxvP;ezuSd_B3dvl{hCOzCv=y*`SRLqD%6n5w`zK?KE~6doP&{+8o(Qf?=HL zXUn7w=lS)KpJ4=Jue?C{M7$7ECs%`hWpM;tim!f1iVt_oTsWtTqyn1fiVakJ4f?e( zp4Ugxd@=kR_%oz!22fx=T-*mz_*}8mdS~ViL!S&kQf$2|?TQ_SeU$!0apF!<=BLT@ z^I|cZAFzMZcJQ~YB%k$s)$|>_4QoE@de>if@cIpOiS_B|p1XssU10cgxkl-vHg^N| z#%2y~)R$Gqh|ihpJ~05sz#5csIqh+&9_lo7Q`a7sL2>Vy(E89)+3CXee;P4xC-wv9 z5gxwr>ssb=xPV(i?pdJuv3+k$$##(ILVCyHyy`U2HRIYt)u`(pRlOY#E@>n1s~ucH zf4v8nwUL8&wo%^n1h3<$>gafI0rEJsgNx~}_uwMn?bSx+sKnLsbnCk_o?bQbh^ls+ z<8vx48(I&~*s$ucBR-$DX8jzW>@g@e1I3FJ$!$=sS+hP}_3}H)cJe*hn~Ob=H#12` zxnqyPv0n;uBQPQX&F6e=(BJe%eRZ`4Ie(AkOcb0<)iJ2ZK@ zGeeGtrxo{d4hLVeYKDWKS%c%@nLy$8t{CT8JJ}v~tXCS;@LX3zcx-W4@_!fCdsgb8 zF~;>X;diV|d~v-8d=<(8;2B?B0y^~Rm8ki7eAYdsu{+sbMz$0g(1SRoD#)c}@S817 ztKO@{wJF6ex=M6C{>lxJdBu(b99`}xc9AsWeJon{cQPBRxb|4Fi|$)z$avp!G@9;1 z4S=pKfd+stN}*QNwI&u#^Tos06_16`(&QY=y1Ad{r?KJjJ-bknWymUQyC)+oVMZFM*jxR>RytA((7o^F>7o((nX@DoL zb;nf+XQ>lgQ;2?-Ii19xmF}ePM}6*h;`tF{?AXb5dXQV6T5R3dKO|tc3D{8qYZ0*H z0ydpueBSc?PBzZQbi`)B90I>^W$w;m>lv-zgfM0m>y|OWy^D_tSWayI!sjU3F209{ z{_X*P?CUN%TS<(Wop)KoXEQLqH(CtX5W45;f$&eO#4jvWI^UyTjkJ7Y1Mzz@ovrnN z;iHsf5!^9@IVbqcksp@ zi`m5crI?Om#|vfHwsC$d8+m#+hDyKg;q+*H-jLIu4vmJUl7Sn85}7~*GR6r zdnDKEjby8lf!V&T5zkR)(PZB4I~JL~#9GX4JRSPNGV40&tX=HfZy{l4GYJVuA9?T;BRj47eKl(4 zjoMs1u_$qRKw3%oceEhWho>wV{eppiX*#|pH+vV;5&517`b+F}u(ZzK)!w>X zF{C@v71!Z<`*2;Z2;9|%JFzbJ%&zurW?tCE*X4Tqn)E?kwWRg6wY%E4m)Nw6ughHv zz0d_!3A+d;YwIqiD~WbLr-5weQ`!3Xtad-$fqsrb5B-oxTMwYuar)<(l48)$0Qv|{ zf3HwF9o$2?`v8~y$nT{2n3?82kmmZXTGG1iw*o$@Yw}y&KknkTK7fZW>1wqDl6PCN zODX1q+KaT*-TW+kAD?H8r%Ae9dQe(&gZr|sd=HzAA^L9C?mJ6yPeA^rC))KCP`jRf zzOnF!qo{iT+Fqcg&V5+{`4Jad>J*UBkHoOik)-wM)^hB zfS%GdpqHGG{%MQ!^!%O?p4H~zvfb_1!|}VhZO(|Qkwyc}q5$qlF#=|#P;|+LMk^a81 z@Q0=68=#Y`ou$-WN-_zh%fZ50;8q3N^(Yfkl~34i zrYt>|ekS~tP@627%JewM)E{Na9!JVSqRvbr>H12)KUf&^`W<7PujTy7DLYU$T#3Jm zlz}W|K7R(vrje^%<`0Hya#}{`e@4K?|4zKWhk6m4*m86+>aPHmB-qd9KVwvEhkL-sYxfELbE6{H0 zwTLeUe@)>#x`v&&TQ(4T7N|pgWZZr04}41uzR*{Nq#w8+;OEE&k#&Q@BWyMc!P^TMxMF(hgs9Sa1!}cg*TfyHp z@b?etW9bLk1%BM%$KwaTncz2z$Z9r`eL3WYlsmf;!B(~Zo@DuEbWOg?pvuN`myM^! z#xv8#bFPhNmW}5k8_(S~o?08vJvN?t8_!=&9{z^=m_12lS9@<)+*jmy+=kyr@pKp= zkbd(XwuTU!2Ka4||K@Ax(y<%7v%B)S0UrbYy2sFoM+5&D;5SEsIkZ$#jknh4?=kMQ zXaK%O;A3ZiS4+EZ@Z8^3v1kKc$@RY^%>+}=HG z{|wKc6oUVTa77iK-KO7qIrNR8pZ$=#n7{wn!`ALRvoR)Vp}p=lE7es@<{Zcg90R}F z!^Q{CD(Yw3f3LUAz5!LlT<1agQ(CR^5483D9Rz%k4KEb%8XMk2zz5s#QUO29hSv!A z5EFMAXa6s3wUkZdY})5>Y_x!#LovKH1jB1;W#!^&p!s%NqP{hI&aGm#jrXb3t>MJZ zqv50&@6^m|W%Up(G$0&)#(Z_N`}`_v9eSp<{c(4dkiJM&^4|CcLr&IjHucxutaj$VwsQUQ9O#oy zc1^ZJckZ>~Z8rThMZih7WIRj2B^%yZz@6Qa?c9s@avc`%u&bL@zdcjH+yYiEU>*TG zOTfI{tZ&v0-OFt|&hf>14FX*0rc0K)5CyyjaMi%s8qwv}up_>1SkHO9*9-Bc2r}I& zV5tH&Q^3*$>_Gub@5b-jr}n3N`Cja~zT|oFlD&N0=v>J6%5HkndlJtIc$JCsuwOF6 zKF^oj9@m+E&+|2D72QaZoy+FE?YHBddwDyag6|eoCELEgF5q)*{oK0(KF@}KD&UXW z`iT>J`C7pcSA$;GO(TgrKz=l_vjFQSU?)v%3XDe&Rq^|)>02@Tc)tg6>hlHtK2yM+ z6tIGQ{66z3o_uK%;0px2w}4Lud|{RK9fq^4VTTu0S>Iu(727S&M)N+2$M9z?KwZ*mu$~@o5bxoFE++5v$+p>-`mATZ-23_6d))r|Qkdgk?BllAnE%g98nwQ@)W@x_6MaUP z{mJ&%m-?dmr9K`H=j*XQ+5TF@EA}VbUo)JS_qqG+c2@NKyWy{pjBw#8wTB*=j(mv2D9=}s|XR|Y#%+4m8 z0wI%7GNHLiD7%3`NDzJcRMa@5`H}N|MN`;1SZAl_!&2v4n4{L&dMn;4?X0(ATr%#Gt}sT|!>AJCR6`r&llGTyFE&)8&XOgOs=!x0Z{<0D{mG_l0DVR158GA|I5H ze_;w~QNQegcdr#!Nd$3lbiLMvb+HopD=pu!>-PluhFu` zv@JbnG`0_4&oW|cvD^9W>+Chwxv<7sXsy329ntI9{G_QZ>Q_DR48D>REKY63I0wj#QWa{gPCq1#MLzDng zi4w1+G*>X|Mte_`7r0$Qha|e&W<*z9E~DNjj3K&wnjDrS5(Rs+zM*s`X((+3h)h!w zT>%&?XUWYqkCx87g~q8r0XW7}+*8JTarGq{gYkZ}cT6@uNXjIvV?6kp%G!gMYSZZ4 zB3S-2t^8-aTS(5tdsBJNXv{NmeVK2uJZBI^Dw6754VOd8GJ27)m`|dYPn1Vy-k?1;W~iM%{R&WOG}O>TQ|?aKBg zjqg&3F9})P!Mj~yQ6RHQ;(DJd14{GDL|BvwhF$Yq^z931d0fBJ_{gSa{KDo)>m8tX z**J>&S6fuBr;F;oKs~HY0*tJpMusrGtG~w8S0i}4i}F`-^?rJ*tL?9-+le|>w}biK zZ|#5E-(@oK`YR<;n4CtWHAPYhYNU=p-ZSFrFZlJw)%&nTxHov*i7L-nD2;oo+F_Ji zK(YX5J@WnXL-e79xp!0dP<;@%Rj@OTo&OJSczTd_=-Hjozm?H)UmbDXhj)^6jVM&%>yafZBSkD=$w&i#h_ zJvNu=dc6xNP1SF$Dt5$Y%fMsU%=hebu$eN>^AE$C&}-do(>>>VY#n3j7t&MYj|`Pk zl1YPpz8rzD=o44pFbEwXy#ny*>};1pFzLT;>%!cnF}ixJQra)^+vtN?t``bsrnsN&nL%=Fc%=^{WE0j z9mqp6{FY4GH*O;ejB_H1h^W2CynniE{G_>zgIJf)P9>~$7v*)i2Q>@2Eqb1?2j%T| zqaVLO;N9`@PxF0-$Mu`}r--o`TZW7Al)H_6igliI2c+#;dY?i2FjvIEDBmZpYy9zm z+t7Nx92N(XhU_!th-eVAbtbs`!1oFmWxRlcaZ8k2pp-(*ORtcl4P%Kp9mj>;5jUi- zMSo}%>bz+@cB~ch2zNYb5}}{DWHQ7oBvWH|R<*D6^2iktCRu!n(yO+O^hceSy!!c{KFaNvN?&zd-ZoQLBTLiN2+1*rc?gt__*z&F0pGA06jD@Br( z9#7-?i{-`*aT!CIpU;%rXSH9CDO~xEHzS;}DPeBJ6~}7G6}mr8XxYXGooPfjUJP@v zl!2NWGmt}SV;tNb+s(6deq&JWO6L#C;4-Q+9!(6&;JNCI2NRB5IWa-rb=6s zMAFK=jF^G25(E27XxCb~|KK;fm3tPyZayzScr}kwY9JTMJWvYf7g+A|Eq9IOzSMHV zN;!WH?0WKvhwBNuVCV_*&u?H?H}F=L$%r+KX(EWmplV zr<}7=Zro?3Ghi&UQm+}y1At?^jeSuhim%9rW5<_B+Z%vQN5cnaTB%w{q94SlJ^H~! znJ*w@K~{c2M}Dq`u|-KUg>~fTLrJNSo_vC%FU-LC0L$wL=4bIFXyxc~Ijl?}(Jx^I zo1d4tAU{92sQ~662-{JRtJ(P(uEL0)&(Zu%{Gd_B@NEQBz+$|N#<+sUm`~aXp95*i z&&gbnmzU3zoHX3aDK3wi`U%=rTA}O`4l50i_T0P$o_v3YeCoRQ?)9ba&ihG*nE~fSBO#5<3MG_}1eU4l~E%13N zF&?A;4|hm;{skV%Ydn_Ts?O}xs{Ym~_N-K?S*3z?g!=>4YUwj+duio9i{uj}zbL;R z_DuOevC*PXl!oWb2eZ$T`5w&f0m?jh@InuQ>uR;4b4bL9>pLNCEIGR-*a(cReS5;u z+M$*IH*wImzZLs5+q2|+SV)?{GK0G>qC<_%;O@t74|KyCQ$aU;eL01shPAmuQlVZ3 zC9tNnh+Z`yxIk=DvcW01-LOEE_>$o8^_)XzL5-7wx!RnSPA~D$QYgt359t-`w zh?c+}x@w?vrN79J{WF0pv%)|x52eR*y&!E9C>5Sk@k2>A${Vt>IAe1pe`SKEy2n7y zxUZz}38|o0MgDaD#!-c&v@oLFmPq9{gG7{@5;+Q)6Yv4{^$hzH$;QU@fO3_yw7Ty_~p#UPltC(r6?dg?X7dy~vyy`~wkK7kL@(8QtKXXVtPsYq>>#AOfS7 zCm!lu^?(P*LKoeQZK7*wh6!y!!PUA-hD%rn8XfCkU8{B!6l9Djm<)BnIqKp}d5I{} zoHdX$t(;XPuzq8%nQ|E!m`Kk_!jU@J&Pk1(6XSL#cAC$>(sSvg<0Gt{r{~hR!5P9q z%VW&J_GH|Jy9%@oD$FgcF8n8Lm2|WRScjZfh;8+fPHnZj_UR(DJ?{9wT5^TDE3Gsl zg?}U6x1A^n1UV88Ld(yF5*6nXOa&cfto~Htx|}#^jVSz20!Q*;k7pi*=3|L)&?HB1 zD|)wWg_SIG%eZH!ZO6DK5QGwZ+-gJFIAZ^gwe!hQYiEtsA`8=?FLs}+v7Jivyg$id zWw$vDi>H%6>xmsX&_-zva-8A3SlT?71GUO0SgDke!$WVL@TG;OtR$n(sTpXZIlX__m<1P_@Um1pyp~ ziXbM)DG&R_(3hnukC2Jt`7&#f7t$8l%55NeEBRc<12uWIn#Z zNm4SnyFOxPPzSHV*uwO+=H!xy^bV7+F!4F2X?zzqPYrp7u$_B z5KBvhp892fDkaDO=@dNc-h+DsDklni1NgcdpN9R#GjZA2YOZ2CiCI(+ESGV8f5rnpD21}A>g!Fs@am;67*V5R20q$C0 z_YJfkO<-J_2hW^ld5mSak>->7e(kq{aLsY$$LVKO>#Z{?`|hUwV|GS0HMFj(Sct1@ z>4|&<$_aO;5j+)w`M;89cSV;b?}}`hjKv>Y{P;ZX6jAPEsFqDf-oBKlI}xGhjbkh8 z+*C)vB~>A|7u}VTDSYN*TZZZa*(p2tpO0-_jV-cMo^S2Pw*131D8J83ojL?Q`q<`G z-IBb!!r!JOt?6lTe4B*NNW1&n^)Wjei>t4eQk{-^8>iFnH}n+E#{1={cw5r&5=X_` zTI!Uq^n7BM#jLcuM*k;PzM#K2d6Dvx@Xsh*vF^Q!0NzM-vNkM%dc-$jTzJ-nyH|4w zJM(s1=lo%AI6cY7-D|WI_CNx(%_Z#Y-%ZcyUN2>OgWHBjZ^3i@wJTP)w|Q2#ubJLH z*<1oG^yZnec?*U(6!G9%rDmToeV*4HcCUtBuo*(*=_c%dbBvepM4!bJqcOD&i{1=0 zXRKYm8mJi?k&ly=#uUiIV}$L2bLbxU1Q?fIM|%L*wD8UD$O>eKl{&iP1-BPRMELq! zxfd+F7a5)ac)==Id+#a@;x0Kb1j4M3fZf;1?Z$6rD|ZOLFp|EBUtW`Or3|56Lt_f` zqMYPz*8@AhN--bG+ln{Kc)3f;yn$@vIgRI4Xtjg6LB__gQcL)Nm!9CkjxBoz|Inxa zJ!LqA?f{Q`0bIbIA2PzqAi!s5q7460#P{I&DZ>xYbsmg_?jh?7==yI+Mvx5q0ag_K zG}se}bS;RzPGmdrJCL673Z}yNG@#*lmf~?5`DyAN^`}nvsAE%pHG8akRQp}>lRvfi z(rQ*litFO)0c#9_9$ypJf2Hl)){`*tQ^s$`g<916Fc(~ldOv>oft-)=NQVsiE>Um# zN*Sjc2VqNP&q4Gl3OBKN>{I=C-ltA|6>My~?o*}%DX#7><>{@!-qH|l&-+TLlnS`V zprl;rAdHHs_xW!5)V@zoNxjaMQ*yg^e(L1EcIa|Yuag~GAJnVl)VpOdb)Fp4u9tHN zd9qQx8ozTI)pq=z)TmyA--1SUzRd2Y*%{CipECJ8jW^4$lTlW`h05rOFsBE3(>;ls zOEr#MiFpcT1DxVbaPfVjan;9*RR0v?*?sp@in1&vZS1jjE5H63$^;JGG`FS#G0)Vp1OSvbb+rKFzkKg3=(>~*eU9dOT z#_+)WfG6fUrP09OAV+wG+UxmiWt6fmr&8AIIO{c#Z07eb`3^pt4~id1cPqTu8FrV( zi&wptBiu7)WsnzAluu4lW|%(+NWBWy3_&XwXMkU37p%K8f!>xJK_9bH<%Jx6ZS6`) z@BKh*99`?+F80PcL*mUTv~uK)*iG&i1l zqfFn&8vifZ9DluRPJr6+Lp)LVmOwo9Sfdb+iM0u}W-2`y?<`wy{rDM^H*C-`KLO+l z({GfM?-=R-l3|?;ex`msjE&`0#G$YCfFo?Uo3Pi)8tEL?Uh^hCv-w;X$es0ixz`tx z6X_a%f!w0@G}!(4XvFy4N+>~iyo;tI=DVHN87MoonUD1x8BZchivQmvgMlx zt+(ZtJLDGKFr0GH;bgd*lHpudxY6rvxtE*h-Q1dT46PDdCoG0PVLiLAjByL09W91- zv?xi()^}0Ap4FjQvoKkT(J_nVHh;8sksPgCEI(1vR9iE z!CuaKjlO-=!SMpZHL)e68vzTakmBI`m1`!)^#}Ua(HFT=vA2ity*N8Rk0 zD%mz}fwobc);3;ChPyQx&ek>j)_QgiY?j{&v6dLvlFbTchqVnqyJT(cGT2~Ke`qxv z!-N>dq{$+0THl>~@A-AVc0ee1jDLH>2UE#L47%8nVG#0^_|2;_XlC zhaYVw<)|Shp2ftI0%0YMsek&thbLdqyGeZHvAUrLTWBHW6EA824C~ z%h8UOZ(w`6xVnwXbHqc+D9+KAp4ia6EXXq(YfNLIMs{0ss2%UMUGl}=vRbe)B`0UY z?%3#*onz@+v60QUPMztGZ|o{}_iP%B@qE0pF*R4)cyD)u_fZ-igKgf}b?)EhfH7`P zXfFdECJB4!6S24rqElXJ?66POxI%+gQ6tF5zdmn)QDh zwIo){EA%y1{&A^5I4iqZzYh9lDIbw+SZ|jNi;X)X$Bz4%a>l#px{>Ps>cm5T&zQBi zvm3p-qP?WC_7~LARE1okjkSUjSN}=vZQ%0<_{>ha4$G5xw}O)DeSuP}mQyn6_~W8^ zsI~Hd+_LwK!c$HBO7xA*gYsBG@I1Y+a$#>0trwN27lwsium(9`!7CQ#f@^=$r2>|q zv{ep<3K=PQlP(Ti`05{~eQf}JM+msG`dN~6) zJr*m(jEog7uXnW>y;M-5(*@<w@E}?8|y8^ zT8(cops%-+@AK%p3e3~E?_z7}C7)ZeJRF8VjlqLqLpFj3-(Z$|5Kr9IyoU_pL~bN^ zC^7q77`et7``OtdUGII)_K&#s#5261A!vbOmN>k|O-AyE6SKw|zj1w1_eXC7{vfud z<;>8pFgwy0UcuI)_Zf}yO^1@U-;%c9leU9k>pL2?sqRnO4p_FviiB)@POKJ1$QMVA z>qL%-7!&*cW_^FRz6a$KdHn9Tz6aUz$(H|LgKECZftZjI+{+Urgyq>k~%ZOV- zJk%0gt>lv&_sp?vYgS4`vigIxc6y8YIQ9_t=e%1CxKHQtG@Iy_**12ed# zc<#;P*AKk~zZ$eL{01P83nbCCz|9L`?HJPb*S3GG%usycz+log5$v+!Gk3DS@CW3L z@qA&N9~hahdOghVIm?fovs-@Nw(Hm4(e}vNmsW3XUzeq{4Q#s@DH|WRjRYIeH9kqb zOLEI5wohx(KQZcY@5e#=_oJ@jw`$kIp05$ye(R1D%i`fpHV^FOuDE)C73G1gdEG!= z8IpCj{>&!pJ@0_VPlSb(S@W}Oj@c{6YhE$bDHCgn60O-MSB6{!=deE37|%xjHJcd! zEWVb!#x;L@9>3-m_qa92m!sd+uLn2k+_iP%`K-0~hnv{@e<&w!&e==3lVPNEGy5U5 zOJUhh%sG&bD={5U8|rgj9{pht=Wfx(o+=3|PK;*^^=;TGQVcxsbGA{xi(wzfwsN{1(p`w(9R>gCujkFX`o>-&X5;sr8+1 zeWw+%Z?pAnDe^E%Rg{vs0;pZna{AAsZeD0EKLqYWwtJDe{5Np_X1f=g%YO&=@3wo1 zx%?ow58CdV%;o#Rz29~(FqaOHu=FQ)p#z8^IPz6E?Ov0(-L#NH`;brOzy0X&Ps-G@ro zP>}278?Y~JW@EJ(btwVi2O(<0>LGMvq(VeUw0;ka@qa6*fYB#fe^^G}=9+az-#RZz z`JdIDKi3@k)Npa^tdZTdtWVah=5L;`)~K6;vJ$LZwJ`{(pPYn{Z^jo)k7bK`XFjf+G%{30uG+iM z1+&CG_=VlyQv8bM6o?mQC36bIC%Smlj&1yqY3Z`UJ}~kNR!+zp?IF=Q`(&-SQtc0; z3byoD`>`= zMA}}I!DO9~haF{|;H#jl6Rd$e8@!%GmG?L*>$DP9mkT(J_E~)WeMotjF!yfi9$Fp( zcR;~@%=`_@{ifxw!$|L-Aa=Mp(Gf!IkT_BLkQZSFbNNZD^d>!#!j_=Is5L|UUq*pD_}IxcUb-Ok1qWb z_XH{_C9xrU<;J0VWHW^A`6Z*qg_6U&4I%CAfuF2&n-wsY>l!zd^T8heZKIAujv&aV zmc?)2IL_Fw@yH9LSo5{~r6mWNt+{Z_c@ElC#0{%OGfVu!4ZGlR6@;q+8?TjCP9IFT zG3Jurx#vr#_ z8tHyN!I{Q7ZoKgUH^KPCURCqR{Q$T&){BVsoV}_RI{7|=z7K*~AzOE{^^m7#D%+|_ z(FL$FnA1ee1=tH-V0~tRqjxND^o|9|xgO_a!rX_L+a-{&C{Y;B?=>XsvR$s8;|Xd| z4ZAV`0zIt5p2NfLJS*ncsaB^-ls}>FH<(-SSZ?gK8kD?D!d{rU790U8yb{+}SHW(I z=D|bng0SW%c1-eXdgNZc_|Jt_;BPRdy~P33(#*i@O;8pkFx4`5`cFFUwp~lX>V9S z6!vQP6H)<(Ivj4KEf;f!Wnsc#2(VE&|A6HjkK)()O`1 zQ?KS$aT{7QUdGa)b9IJ8Zu{piZMmgAY4S`5zqIAB_om5hA5P-`l7=sQWy24r!84L@ zL2<&flJI?UmV*Z*=PO&E3aHNml@{fl&>rv3Rpu4^gZA8 z5o|w0vhh8w-PArb`v85hhQf1xN?^O7@SN=lSVL^fwbrR;0j(c+Q}Oy9hOJ1UyhK9xjKDs!kjR4?@nbkEmpT@E}hpPti=| zKk~P7SKwC*P|Tpk8+2Db?2)o?q;H3%0-+o}V9O>ncEsVq5f5!NR9;aT4E8%b?uB+5 z>RyC+I2ADV8)_Cy%|RJcGgb;vca(?5gM;TdoWCnL9_L)r0GxUdX#BMEfXlu!#x!wcR zBLNpmc5}vVJAZQ=`J0o>->HjE~cM#L?2woYo2uUYT_+(GEMytHD`b8C~!*tTNkqv@-iI z^A>Q{D;uFOg&!Zig=b)1UuSLHw?_^Hkb@plNEBLu64a<-1ZJK1(vc>|<^ts{zImTHGR<|d=g#pdFk*16NW zK)2bNt9sBgv|I7(iim8kDxlm?bRNosF*h$cSLJy~9_8d=b5#n5!F$+ql~_Uf=?Ylw zfIpLr%%f6#m1+?m$m2*>9?oSDZxH7)_~r&Er5=ElXU}DR#uEkO8V@tA;Ae9}1xi;! z8_mNq%tc#1u{gFM4scklHJhaoS|z2N4Qb4S`13oZjd!F?rhXnOAK_;$m}gWDQYvFT zd43ie<_2&t&dc+J^R7!UoS&_jEPqJV;{1G%$D+~l_ZW{M%jt~zw+OIq-zocE38K4iH! z()j_}iK=;VcRSSkBC*Txo@7h$+p}X{BoD?sua`;~v(mlCQM&h7rEAAGHZRY=+#Sqw z#z|pPZr*>J+i><}$<{;1{^{Pla9*5fMd7TA>Ffxzps&3NDJ{@^dCockXujQ#vgzuF z$G0o+bhW}OTQg{8dov9i$V?C0oE|n{g?$FYD(N-PaPTBtrSn90e$Sy_PB_C&sx$ng za#I!w=YTy&CY3ug=zNIp1^SO@S;nGdslzbwd9J`T+yNpNO@9ax;j-f6-K6U1nvBiF~8_yH8pBrJ! zY>sX+>iaQimT37tsx`_i-z%ebAdQQGEi1_@u5V%dftqR-@0BY95{VY?kt@gGo*^v2 zuC^FYCtfwmsdga`Y3#EH+-r;q(bxk!j@|ZofB6JX30;<54OZt1KekNGFx_1@CGp5>djbmga@?}u&adXK(ri}OC4;XSq` zUH>iqp6&+rLK5ar!d~qLZ%sF_ce_c;$6K8D;|y=p7Uw-WyMzB`OV@k;AG?WTUpKHr z-Nc(ni^Do^-OA)DG%^U{VA@gMhSkB2oM!zux;jYl5Bj%SZ#4@x){hRX6wMx8@II5A zcy@aFZtcorFsK{Y&~9MW-N26R26j?6u!e46XLbXdvb8J!#Kl{kZGn~crCV+O5Wmt{ z_v{tmr_=KcztW;!U&i=fJ(l~1GQ?%}f0Z#_*h2}Ydz!v1qC?+Tt@j12wk!!LP`>vm2d?MxGyA{X-(ueX+y^uA?(n&)5$=1$#KV`wz`)Met zKL63yuJ37JIe)&D-I-3}4OmkTgY~Y0@`C!KC;^vziyZF-n0C|MTiLxp#4V8$_YJTX zzNc(DF(>s^!h8vdtEDg^Dd6s-Xo2394IWLzHyAubah>E6M0|sR7n=A}Nk9mYVHJ4J zhuod0308;t_Pc#t0e>G~AUx%232g~iaQMas_6eQl{gJGJly5|&Y03GvkksM*ZKrhf zcci0lG94#*?D#vUE+Z{!tr|*?HgDv-J>JD@L(%da-50Rs7-UT`B zDcYewp}v}C)}ia;GRof@62)QxYqF<^vR(}HeJh?E%l&~Bk1x$_$78Hx&<{I>`lwT= zkJ3Xu0dwzTHvjhYZ*BhVK}w82Mu`c7mGrk=2$}sY8&l2DAfWbH8PkhZri_q(o`#{+7vl$9h*OvC@%B z%ow3G*IYHSc1m1*8Wv@cy5cIu^hcFx`a2w~ExE?xh{9keJ78fLFEXrIG~>HMn01i% zHJeAN{J8#Nq#xD4b*dDNMj+IOoI(5T-$&}ijE+>MsUN`F%PU09F!;X59S=L(%4|2m z^j1KrYaE^{OIE&1zGJ*YW(ZP2PEySB5m1(Im*H7Gj6XHUMbv(Z^@=#w%i!^J_Dii7TE1g z%TRZb`+TWk=_yK>ixP9`aY}?61MO;&%e;3StsBHPADEy>OQ%auK-rl~{|2}c{Z7+g zC_5W=5bpw3bm>^7MSriX2l$);80U}@Zi%Zow5n_=zM@zi1o%WNdpil}muM{@PPrO0!l=y6G{(pA&lk5m(4ENxNO(XhrAb7`%DI}h`o zTE$pgLT-048WWV}`d7=;TH`u%X(M1fkSO79b~V>LSGM#SmJ{Q4R$?m>S}~>_AoqH# zyTBb#?n|&91+(dRXd!11{KoaIWsvixdWGtNgl}BmMj=h~rdQizp53IFlg?7&_1~09 z#b#3jgMV$F-2iYi2|ta&KQPZe4dACH;S=a-mDvO}2w zoBm26_>Jq|Qpkw_S&+bQT;EtG(f5 zMv!Q2jL@-wH+D0e5oDTL1YO?PMxgc&ClU$KI*$~sHCE7)Wy7(&Vw<&wGEW@I-alb$ z+cDeN+V;wjn%qbH#e(7OScbI^K4qJA-z{RVc9Dr@htg=yQD8?rVJ6rvRZ6%UVI{My zYyyc*h%2#EXDPAM{-MN9UkE<8;oF2|E#UJ{MdK#%C;FR&r+sl#;er*or~E7IDWBt1 z*aJ6CxL9f8PI9=XgZmVRdoH-gJKXKyp5SoL2lvSicbm0GMNO%f4ajxu8E0*??>lEG z&il@}N%&=H@avNBd5Tj{^}=not_Of~Dg3*(+4r4u)9yi+CE@L9@JEyI`DyTHlJGXg z`9|=|$#^fa;$`r+w%KRGGnFhydOk^}e`;F3HYefDY4C58@M&rAok{p5Y4H6?_&?I% ze?n`{YfE@SUESa0lpZ{uG>@ok+T1>alqx~2)RO0IHIEuzR7t(zqh zauRSA#&6PuB984_P&sZU{R!h+z~7SM!5sNL+qY@88W$FQ zFq$F9i(pAFaw^kz5Oyi34Lj-Mp?VN<@Qgw?e&ULaL$++-`0p8SSVT~XKBljP=Q~AW zUr3v0gb2GQd}pFW@S}P$TfAW&c}Cx=DkV7cpbh&~nD>$|#0(BK%rak%N8LOC<84?j zYDMLt6uIpQskfw>ldn?3VlJfN8l}Xw0OqF^Wm5#$&Gj=aSO>r!q_92!Gu|~P&$B|z z1K*p#_hITAsx~dyLV!KSLIBKoDlD)x4u{%$G=Vl4tykh+jP;n$pd4;SSr*9y^BuG< zT^pl`*{*!LcD%c)5!y|W%ameQ%}`7H3(9!Suag~mRi1tK)ppH*FsvkFc1 z<>3D}8j_`QD0!xj@i0qMOVV$u?I#*9u^3yEe$#BfY~wv#!?Ux={2vO*xmbQ~C_k6B z-<$^RN4S!~xcBC!}Br#iRe z`r9xTAZCf6OUQ!)x(o)Ir`RBaey;wIFD}nDefO)^{v1 zuY@nGS~U&#);OxL_n={QF>j#~4-FY%y22=DJ`ej+liin~UpGl5B8zphJ07}gq$)Pd z>rimKiO#!GiC%S+61{qX5^evN56uo*1G}?@S14hj z0M@#?r0vtb#nhFH2*q-#Qq6^s3-KTNYX{)j(6g}ysgF=3OqOB`uT;#1 z*V5L>qwMFh@U2ns+)q8 z;`*;6=Mv+#?(>+!z!JQc7*|7khcOq+@J%Sgu^hYoFv&v20}HOE+?iRe{D2Wbq6C_P zcV{u)59GvoF`^R1*AzUfGfZg;p3xa5HwDk`49h@HQjDuv-(9wVAa%T5!oCCT!i$t0 zZVys*xLL^1S7rD3lpNbWM^W6iy;)WSMtxUV6JfTUWg+Ws2k+T`DpN@~V->W-N056p z7|6xlLXhg6s8AomyQ-XrNGtaU%!ZwP?LE3^0?(4Q_DzyV}W8K1oSK-}lITjwgU?hE6|kBVdVH+@5$-bt|W-}o=_ z?K8FawzK^fN)^&~QuKc+c*YoVDeeJ60nPE_QUUjtnB*bubGZ`hcNy&3Vtrb`)~p!6 z$NIE_?GnZK#V*4fDu0o#H)`*8dkubR8o$Qx+wC>`6^irzMBGtGifL`d^w~;d?>UO8 zU#Z}m!1R_7>?mpa>qusg7PC>2>BP8FLC${WYy6s`8Q5X*C~~phK(pAU2`e?hN5iEk z;#eB$hMK*nE!n}&>SNkfim6`B_R;Fqbi~#jcOQe2c-I2nbr#-rX?XYx?_hV4$Ps?M z(x}~_Xk?<=p*Zhd>ULP~eE~JVQEyNfhGfa1p0b1SccL%eAOZ~)F&YCmDvjAUDUCS` zl*Zt{6sO$(g~@nZ^nU%ZMK*`_mK77{9cb$gCew^NT>;v}t*#R87dPUY#LG8_G9qL6 zX8lDN4P&82O5@PQ^p2IugUp4nwX`MOEPw{vOu<5+kx+AW>e z9CTv*@o9eVIQ$y)U* z9K&_nVNSMaMAO2$t+p`sM>cP;uzwz(UB>2*mR_cA%b>vuYo?WLQ(DOb)!jvZ zO7}F2?x|^XFH56)nnm~2w6-`etsYKK^SdFx5*nJqgA1XWltRGHF>xVfzopm)S*`KM-shzg2C5Qt;p2K1lCbL+% ziQM0Y>(4FjF#fhnLHZJDq?^YhqWnb6%?CU;{eWfWh zZd+b!!cJRn$-XkGw?rM@A2s~i?}7x%zpyu@5w;v)&me4P3HJin{R68!xt zQVV_#WSUqS1@a*afNElsRAxzI6pcAL>r?4cYZ*KuCz+FTT zL$z@8Y+OAsz^TjX!(C%n;Ur#vVKuC6 zz^6s+F#xrgABVRGHhtZ&Basfg=gZw#W6Ey^3is+pn-N`;`*zaaXgxx&IjC z2=1kll>XH3ce1r*30dW8R)6hJwKwE2-9+y>_(gW@?5e+s>aa?}kMwu)>-=H$=@y+I zV84NC%N2WeS?h9t33=AVLgGuOs3p9Se_yffm0A{=$bFzRfCv->SSBg)|-plmc#qQFh>iY_N-?TvmO0ci6-#cY)Tupz7r)c&IsC!9Lf9&vG7Jnbr zAKR#XO4rn1r?u7EU6w4B{w1Yu>g(Cw3EXD!dZ7ILV3qDd)~AI#ahE-|VYmzne>31e zYvFHJZ2bXrAGnL@Vlu~ksYFm-6nCLxHiJDM`lZ`#)_$Qh3D0IVht3*YEX2SEedBub z;0ZL0S&OdOgNtb>v-T5koi`Y3$Ji{|`h9j;I>J>LK`XW>c&^OBp3kiK80?1=W(Ckt zCl5vqFw;~SwG;6p`JWS^lzU%kEdP|&D_^g~ zfPSpv6Kl`L%H&$BZD7mLxMn>8tL`X-Z3G$(<)16q9?WtmFHVI#zX0{}w!jf=5ePMT ztj8B2PkzTf@Qz*f-20_cDbN$pZc9AY8=%78gbC#yCcEhu%S#}}_x8E$!$7ME^XAra zN_e(D<_XT^9?H9Q7f1D9sUGImTe&*YBrf#fdbutd?ekC&B{%UK4>fajt|l=z)9H7N z!>@$f>uL@S9dxDJT6a@=LrARU3uTgcI_zY8+!(06Ch-A!H&^5KijA!wDNW)P4)?c7 ze$pm!waO?PAKQEs-|b>^mh~<*m+6b~S-wmdM;XT6UF;k`oN)}~G6Qx*c=p&6>@Ogn zlwi)w@@YA}8%&Sp?kV+@PLf>ic<3La>Rib8<{_~*zb`gl1&TgFUpN$Y$r+?5VI% z49MZp*Nm#ZB(IvAaigIwZy&V#C!_)%IVcv4Dki0z4OyIouy@LQ7(f45R^ew^{an^~ ze*(l`j_tP(YB1?tV|sc*i#iE9Ur+9PH++TjNzm6jROHF#rt%zW8Q{++xjrq_o1Eq; z;QrkcaSOP|@C$SD6ZjR+C)vId@}$tL?hB$usvKXYL-(4w+c|~+SU{)0YI<+d;EAaL zAJbQ0@ksAx=SWx<_ztrkz_tQymcEdhMTXR&Ui#mAxUIAAOfpHx^&tm!3#@MNwSpJ8 z5aqS>Lc4hxO5&db&f(*FtZEox?H~Iv;}g6Z;yNCA9EBX;H2s{>m(cr+PoxMp7;yK% zc&mtE&rp(T61A13R1(-7((ZczJ${P zaXm4roS5|i@I3-HJgM&~`330`;|m|J3C8cpV-&Xd1&^itIwBpzp54vfdew4a)PWW^ zr6#Vg8+8J`arHop{ixTp(E9KQQSqAd0zS=kQikZFww#k>(WUJVxFBEp2cym)URR}Q zz|1*G%=Q(J9XckDplzHea?LgK2HbK2mY+;8>`8*?w!V^|Ndj-{43{d5eVS;8?CfiN z=Of*O_}m9Q6J0L1^_5CR_6`Q}be?GI1f2ay*6HVvB(H?~r$RE4@=8n+PS=pjVM-lx zriLXCw2?^~j&~u^%ZEJy65;&-o05X@8Kgk?5K3-q&ldfQaGlj6!h8-W0Cf=s0P zB4Mv9u8tUlw<{IBaiz;f-wC{w<9GRJN(dPS>9_#GO3nC2V%X)TEf&TYDdH7LSay?^ zn)U(h&nr?`0lPYNxCDM0r|pfa@1v$BVW4n`u4@MZl?cod70qtaTyyn+)~glz7IJfF z?tpBMpDPgh)^I|;4A zSX&@u2UDjx}GG zEOrOR3n5dHCjxnq@Vy&ce9@N~U>^qN zUN9?hFNOMck+%i!*TAep*$L$JM%f53KcLPI$G&OfPi)U(uL<&ejIR>g|CXN^FQlpG z`RK|SzSC;{Fvd?$$yFZuDP1lD?b4pk`Wx9AUD?CVGD=`4K206wr8>9tJ75*fI1KJ0 zA*$=5NPGlbcaj>1+)Ce0G<(8`N%hqNT*vhTKTT={R29Zrd>yelba{0J(PYgV&Ux6H zSyY%=mVy1EEDdJZtE($SwA1%PLjMHpus;KQ@65vYpW>mp2+_O%xiyR4DN%^lBOJH^ zU{mSsB7>pJrU?GQB1e4rR`_6&;^P3h%|Q`e$C#A~jot}vU#maMRRAb05j(9ylei))uFr=RvDb%hdkz1ffR>ZxFE+Wp0sn;@U8!L?i0P$R zM$SyM5Op-cn^^Ec8drjE*68D1b_nBp^l_%4E`g=#gfs%=4oA-KfL!$*=^}X~KH*BF zu_z$GShl1HR#3P%etHknKXe(_FuEtcHB*mT_9}=svqgPq0O}snd>&pS9w9(HVm9%( zatQAZ5|5NiJf1wlXXF!?w}8x0mJfjToz=v*LOy3zA494$O9;M{iqhUgzwT+htm!Ay z^ixKwly~DJdUx5PKR7@qii#mU1f|wzLg)>CKWA(W7Z#HyK9T+7@sK+E;GpG8PI>hk6=n)UK0Tq81x-rKryzy%Z)%ON{_UA(K0d5n73DfY0 znzs8}I!OOLLhI9eEUbH7Gq_tv`HA8_$qnn6oDFU*f$|w{3(}&$N7vo9#!`F}t(ey; z?bBABkBQ@8>_WaeqeU$^jyMt6-Q{pl9JTA=a?!O+rw|^?Xw7ICIL}YoDnV`8w->&faV5 zl`n#Q)s6v9Imd#%o#h|do~URqJ2Rd{B0hXYt%Q8&YE}aSaVHb;A=FR$&>b8h{Q&n) z2$UBjpHI4YGoCI4dj(yPm#YX58OqL`^UnQ$UFiwtW(RM2bWKfmZr>lTAGsno*RxCs z=FWe`1vq(lx%SFgJ(rFKcL9_E|L;)+L@szFFR$RCU@(vRli1h8M&}feniT~F3eH~h z$x(4%>G{j2qjCyr{tP!8aDx?Fd;V?1%YTf9kl7G)&{*^L;*6Sy)L@F`8FF&|v^f5tq zuqxPtak0?Xrwd7=TICA{6A8?T>Y&mkr}(CC=dwdR3#m2XlD*xZDc_NV2M01ZJ5PCFFB^wS z$j9_-Fn6E|J@j~=QwI9My^Mc_oi)U?alQhQGXSMwc*-f*0VC6KzD%mu5b>V^{0P(k z$eD8iTWo>E2On)Mz7>3J^opVrC$#Zt>3c5eZK+$C}K2c9Fch+kYw zmBS9WS`dhzlQ`o@ggcyo?{Buu0!KFQwPcmbkMo7OeEN;+JNPkFFQDIYZ|70FCe`%M z-I-g!Uo5qRK1WUZ9Lj@=_IVHYNLIi)Gp2gUtnvuEGD-dTQ9f&3$9I0yr@)d8`W5i6 z#j!B+cpFz~AvsVFijXUkiTzx6h>FsAe31f7RG4S#9S0eTAfwo*y0WYt{<~4x=YAF48ch+Lt9Zs|5qy zgq?mi>%9i{qi|z?fe5wcy2phl5GH9M#%TK14|1XErK4+5&TaCLF>Zha$&fKnGug)H znrLiD^_NBax|iR-^(gSWjsm~$DDag>fj@Q>_|r#$zi<@zt4D#aISTyUqrgAj*ZI8$ z_S*>XTVTPYovRJivbEkCA0Ryl%0c%d-(kHG-QT+gPd1+<_Q__k1sToRkWv2LdXeXR zQseL4gdw3TL&!0HJQM9lWa>KJ@>8hmM9VLSx}ugVNL>y70BN?;!2D0QVq8SH*(}Dl z{JqDc|90yC4utSnA$Cy6`vA$XAO|R9gI}v*ZrIr33no^a9_squN?itZ?SRmJE3`@> zKRaR=L?MF4!dFq3qOlaNNT$%IrD%jGj$hNpGxy2V-5W5x7DhdVlxe9{Poj_^0Lix? zQz>LrlFFUbeY(a<;(qFCv|P)n>r5?^G69M7{U1Cbgt2qB2*w4*4F>w>Y!4V1+h=>h z$Y2yOFfPu9)-yW`3@n&u`@v{n0${SiytEFc_!Xiqnomv1s`&w?)8G0JH9|hA7V5MLTFlAu+ zgBbv3Aecd527@^UObARlmY(=2S3{m)WO- zX#{fym>8IeV9o^dH!x>`X##ULm`PyH0W%rQ6foz4ISXwCWM}ZxYn=VsJ09V0hnlGuUqd zb1RtJz}ybz4ls9uxy!=Cwa#Nu|8HO$02-xu3J(U`_1$3Z0khP?#qkhFwf$fYfVmP` zi>!9_Fb}H&p1IxhT#n;D0J8{iz6A3Xn6E8-OU8_|aok)w-Zx;jfY}P>TQJ{&!F!^6 zAszRDxgX2}j(lSK9SAsszzha+444p@axlvrZGSqrms@T>J)4BS127$EPX@CR{2m1J z5SWMYb^r{}o(<(Q`*AQ&fcZBVD1+HgfqB}Zg?9%4=aBv^Fq42*56chFG5Y|lFPK^| z&j5TCm}kK}2j+P&FMxT`Q6Er`9MmHR^~XW|ac3h3?Q}%a1-!|;;{_U-^}Zdefov_ZT+<1r{2bsPVY4}r}^XTpxAAb>5577zq?ELS!w?Fbn%~)=6`P& z|Etsd@9W}!eVYIMNq;-<9Zr9J8LxK=e`{L!E!i!BdwmF;hnte>(a{Mm1H@% zEpF#e?DW=rIk4PJh5I&*=96hOcRJIe8<|eO18L!&O$&E8&F}d%Ki2`L-wSDezBIoV zsh_PUEXU#35-Q8og-n_^?2{!rfDVI-@!GOx-QWs-aJFoiW@tcH52?M@gpGiI=+}NR~TG1 zN!Ji?jka8IJkn zWIaG0;#4<6+!XQ|K$df=2O$cDe450;S9(yBNt-{ed#T?i;P(in*w}HY*2I0(4Q^w{ zRPgzrTc3--=fk8=W5>ms&E=EgS-$%Kc-8*);zGv$ZCZzPX<^Ttp^n~G;RGvI+lSU_ARsLdcmfRL z{I+vb4}x|u-1JQYti%X!5YjD z{yO@R?CfBYj&=TNoqmJQLr}N0)zk2CwW(8T@EvZ}lJIUh$fIW4Jkmg>)0z%zrxNC# zLESfNnlG&Vg# zu#99Mv3q?4TO&Z^Bbv`Rj2P}C&=X$AUQtFaJ%T-ieK}%07xt}Auzuo9iGi1g9FrmV z6~?CDIi^G9h(mwI!e4AX92aR${T#O@;TNaD?@q#}YR>h^1HahwDU9jr&@Stjhtm8j z(){uFM3QcET70XL@OT>hr6l~)H2CXBfxq>O#h?5^O1I?uza({mXwJ3Wr%4*EX*4!j z@CJ3d=3Fa$^NalsJLavN=B)zd`_ZirhqXmqO$_9cYjdQw^B2bVjpaTFqCj4bM(rZa z# zeiv*P6+Gstxl7)wl6j9q-g(0E9`Ay8Y!a{4QAVv@@WxwlVm(*r5}Bw??}8Ic;>@sc zW^}m!wvSbU)VIXF`0)&*j zLdFpChV@E5a01u{3?_jD+u<AOV62cdi#O2Aj(^KK8Hb?%AD{ zOi14E`~Tm3y85c_uCDH`uKMAQ;d(wl-Z6X)iGLUG81C=ijX&l+2O_g7;Qhw6Y9a8vCMNISuhCfzN^&~Ky>Gv`4>6q_8@Ec__jq`RxO1ZB&OJldm425Q z>T_S_&mZTboeLnIJQ*aq`)C}bLd3xIWae?TZjy)Ty&}$oEbS!o-gVcE1jvJ2@(WU1 zhyIlv!WLbE(+72nvl`L|{gVd;oZmg`llmdOWi-lsJ6DFxFNIj2+4lq9+hO}A?xV+& zFw7;*QM9{^G0{^jxA^$dXzm5;iz42pu=~dU?AX7Z;cYu?K6qvYAN*p6&F{{t;Dft& z47bxucb4sI*?MT|&eFYb-FaU;DB!*HEZz3iiy3RHvnIY}J6G!Y zjfFB&UwxdqldnB=cH7rZ^d9LadU-$N z!kzXy_a{Kr=p^S}$J(9tT#sR~N%r1}J!UW4DfmJ3B0Xm!P9wuvBkiD3z zD$*M}Y3N?f^%ddchK1i;5k7uc`0W+pO~bc?G<535yt<%+G+cj zY9u+2PDe{#^(bcX_@{dLjsZ|(*BH_!_>YV99J@xx`yp5WKl?g9=#Ekq7h)zA>r=cZ@`PG2p8{OGBZB>7qA1H`!3Po6zKhedhu))$xmnr-W%|LS zO1tlKcG-OUIz8m*Q@LHXJqWZng?{3mWB#Dg-m7h^`P;j=U(?+Ddtlx;Ym&@qM(kS^ zix{W+!Hku-Dhfev{?e6Og7_;Z;SHzU(mV7*JU?lkd(iwol;1qp=T6JB ziF$5>>~pJ0EVVwad7e*%OcNn_(?6vXbzc_U0A+yHB0LAk*~o(wp8h#3{X)mmNmFyk zBS)(P=66TJsyvikbfeye`-rrG;QN4i3e*OA@S^J=EtuKhIbfbV60M`?lJ#rz+>je@ zBVf)U$hix0ww}b6tW&Zcw3`jzf919baqf6`m$*l$_0GLX&&}PWXOFpB&t`Aev-57& zbGf_p!Q2rUE$M?<`G-(S?pu||{csn*`>BU|PlUK9Lfn3cJ0Ien1aTKY+^#tp+}#`0 zF2os=Vj49Sd+fV*+49FtY;IG<-dS-Mw@0EIx|}<(pDU!h~Z9Uyb|Df{628v9$0D8=G^ zhM^XVAm>iKe{uJ!n;}jyls6xx9gudR`9+7EeMe z(BE10bAa#J5BwJZ{}SMj0~~c~&LZp^>W%58l|_W+x>wx-SUXD4-c`54H`TjVU#l~i zim;6U+ZpOweU$^Y0br7@?-2Ea^4$rLy`^&WthxifKXsJ~R5q<-Ff9CkUUeCcV ztxP5~o0cY#EX2qt6G#p)Gs-xEp#x+&jwV-bHMYu%Nq8R!N7G?T(C*ypa?h&kL~Hh* ze-q3+^d#%z?5ZnutfzGm?YCZG_m>nHC9Y%GD9I6B!C1)AY+IGz`HIUlXd}AYyjt%z zuYlh*@Vip)jb01CtAwn}|GsDAm*&i7!spC;^?vxBN`9$3Z7CJL;^zPbb1uwhJ&lj* z7!zg~dK46)$9x1NsYmo4^I_d#3-&8}et4A454J6Ua|OH~@^Fr~3rhG8>rVM+%~xEO zENH7H*|M3P*7{Of_g18JO)0HMD(0q}0giWROw$1QStcRLG+W?pZ?Qq*w^DJ9TrkhY zoFr?zy&iq=D|-$3n9k2l9@PaF$k>nR2oDi%VF1VD z_gks%)|*m=gMjng4iKNKPTihBnSKfSa#uqDzk_4KitiqBAlU@z*f48HOnpL)dHBrd zA$3(m#Tjos@i9-_$Kw-bJ`X$#=5J=KCQWK7z1mdasiO62hW@2k&il7b<-F0J=;@Pw zL#*G`sT~JY!j~cZvC6V~fntj$NjQc(&Y$$~k=C7hNIllN-A+ACQM>K=84DP;i`Ct_ zYFM5iSxCgXxH3=l9zhwR(Y7M44Jg;=K7)Lq6?&q>?RB2$7B|$IG^R_ zJ!-GeL1Otaoe%wGK>ISy`VUZJTp=xO1v)mgBAo+@^47oXDd%QbU-Fg^iFYp-b*?JnEb!d>WM@dWcXdW`IH70lHj zE%%teg|By@*M!I&_zVp1e@ahtI`r?44hL4y zVP5}lbarz~l9X0SCHS3>|G3_ibNx?3I#7Rj=FJQ1O?Z1+Kz^&Er4QWEycntYCtdG_ zT&-tpejeCU-W!xihItr5JAJ8^q09P13zMon|Bt$QoN zMo%M-v-W;xdE#TH;rY6=JpWx$-uh|gkTw5cMcNG&X)mit+bpGRho4;$9vv3`V`tj& z*fi8xaEW>AQfJ(b#%X3}VCe_aFBR^>@V6eeG+;L7QV7>~QeP?R#wAx1%IiV935bwvEQ> za6#*uPKmy)Tl0qV+HsR9(^2Mp+Ou~I%;*q*L3KFS6@l<;C%f2AV1om86T*N4n(e5i zrb{i72J`61_OZ-rfX|%@yGVDxHyl7u=oEP57u^fIVQUv*dy-h5>|X98FE!#&~CpuYJj)G_xxy4P<1)9?~wsa>DmE9`nKSO|1Ea|*LM zQfk}i5ct2>zWIvw&9nBk&p?9v#*lHWT`=7rPNDW)k?3iqHp)ix;b}BLFdxEqhgj$a z7HVy`;hQNf;-0SE=GH!Oeo&G2$YE*o7SDf8i&y0Jf!+Qc`|S2FOc~n#hwdBR{@>as z{1b@w#}b_}g`ZCphO|G1c7;w4quoyR#0ILk@$TSU=x3OlvuBj~!YTXgzLB5e>>GCY z!hOT}2D7)ekINU_hMKUKMn-}3cHb1dKZ*YO3feA+(^QJHav!%t#N%ipP8i~RkHx7> zD+KTsfLovMFRh>MH~%pZXX~*1?en%P_SyF)SBHn*o4kIX&3jivt2M-(_UCRDZKjh# zT#83aV+ZMScR8#>j-!1VQfj-0_Hkbgg^o*Fb4z2i!Cf%-Oqoe~X08jDZHwYrh>Nx7 z&-{8AZ6QVD*xxjQ){xWGN6=C%S{X$vvByX~GuOhn=s9F<81J9jx~P8^?X-~Du`cVV zzBdGJ%X%N}?5FJ7$7ReK=~ zamvnPa6RN>?-?@u98xO^+X>o5VQzKoBB1rmgfq<%Md3?K`9j+IFN7*C%j~ zPLLsXq}{@f^ua~G*9X6q1Ln=l5>!6k*eU^+d^>}?$D8C$^YAA89W&xWrtk<|!LB0j zXS$1@NqR_g)CDbmZ|hQ^T6NqlH2cg@pK_T$-{lipef+dlbD_rG=y;8=3X?k#N{r`n z@C5FW7$57D=6a996N!x>n~EHod0+`Tk4 z*GvrpQWQOmX}U!p>djpo?#f;)(tNTNR?-wt zQ&@8qxt;}557LtI+8g*JYvn5PhAg8dm7Mna;aio~D3s)L zvDSkI(q5UI5erId9MGi+>kCpkmw&Nn-@&Yh(frjEHgCmg#ku~Ui=3Bq)1N?_kBU2W zh2Jf5TX}YGPD%ksU;kN{ulg36e{PKuo0nk!*jnVi9d$W33$SsGGmB$`)aGhr=_zdW zrh;;e8tw+zlFL#7p zF2eZNwP9w#j-_@LyuV+x;T+3)r@U^T26+$laofSHmsR?4J=6iS=Z2#JX3q_lm>a5u zOnxkcEnsb?>xK9g)0cX<*P94w&K&_L~ltA^3nub6D7dbNT()r}$aIm&if zPr5wZr;KxaUkl%pL;4q}LEGW-D%~et0W_ZiLES>E zAOD&87-}H@rQ#TaK1j3D<24(jS?SmCKPYV3Qg(Nwp6xxN_4&M3WIPV-!Y5(w#<=p3 zdBfh@xfbGK-(RTRGF>7$6I(sZp0=ibn)xuq?@4hc<(p5Szew|1fqCr^%xi~XUL!EC z8G?Du5KQO!-yKjcasC&!&(|?z6TrunWD~R-YeLy?FO^*tWxY!xqKv926Ng+QAlC?p zohMrd3K}ld?gTl#j~s@+MdExH_Ofsv`Ih5*y<>bm1MvcEZ|3T72Dr*X^RDU9A#+hk zXg0kFxPL+!&wclFpuxS@LHi%gS`1p(jUJ7XOJ@^3lvc(Lfudc+WW1Wm0jyt04N|FJ zxYhz|&NltJX46vqzg8t`{)`XME<9>BOr6}?KgVRzcRCQa+fGUii=tjx{7ES!<+ zU643eFHMYt8l9X%9^}6;z7cp7kBz%?B0kN{haMpB zD&kX&TN&*MB|ASUMr6{FOl&D)tb&<|AH?*uV7vdhSUNg}0@e1p8yMHgEoDVNF?}L7= zYe8|ojj*#JEN9zv9fY1D`3XMJYT^S@lD+56qvK7aXBmWg#^@?L~(oj>+IDVggUgnkXOb#4%NtyIN$t;%|?in@WCwG-3M zNWf(Wp_d6evZ^TerBLp}>~d$X;pK*BsodFXSh>fMo?~&`)Uk3OOS-a{YnbpjL5>G> zXEt#(l$e0hx%(tN!7(|8T|PdtTz2`gqI}tM`E0u03gtV#MAvHtU9WY}_1Y3$A=Gn# zpljD4j4Y{9)VYB@bBnHX(DynAeXn!S_qzWp^tIRdk3jjE{qyK`T;hdi-t36$q^A*k zJX&m;5KrP=vKG_@)wg%kO*Q&^-E?CO-U0fsC0wCT`wHcf2%Z~tGU+e^ ze70=!f{=G8pCfb%Qtk9kl2ICfj=ALJT(*NJ-b#{aE_tnhTw8)%BOuoZ2&?Je%J*J& z()yBbc^f84Wtd%FAHZU4{<=Jz0vdH`D0hv3?`y^PRpAVi!>%cX^SR@xVRMJAI}?F4 zxnJVz!#&asVW%y33?C!ai*@!5;j-Qu4;wGSdgw31L+zDMgs`#9zwj@Cf87-4Z@C11 z-5lpym)r(8dTU?DEP&^d82WRZy_xKaumSUixaP>SrIhEr!}6R4VQfz;es3wydm+zz zhvk_|au~}=n;b{0&}YQXiIq!o@7I>3?7Q+{$dB!{#LsU<-<39eZVA4+mHV{h?bl<& z%?m2l{3n&*KVopZZB8q-&0oT{UeoL0a($QC^-cT*O52`bz8SRhCQ|`vPVh6C(JE?Q z<~6C6u-!eh(DFL8=GX+^DXU`mx#a8N0rQ|llzr*afSFE2EB2OtWS7&?N3a|hi#Cao z7LZ8e3DePMFPG}Y{@DSEXi2Y;%jefhTpnvQ=XjiF-nW$EOf1E*ZC~9fXc8mM?t(TU zftD8D3zzTy{&GKMWO{`F_d0aTCn~r`@7DerF7K5-CDjkJ$^M+ETNW_64fb;Tyjp6X z5r*A9wML*MKffz+87>=~#c ztxq7_;`$O&YJp6GG~W-CT-y#>mJXl9R_6xDJAlzacEAj4|@&JEW6IJS@g*^H$Xx^W60Y+D}Sz*dMazHaO_t z;GqBGNdL#G1pWJ=e0Y{0hViP0a_2y<(ioyko2k_B7l}5ow9l_M!m>%8KIk_mt?FDu zB^g7UIUp=ZF?L@28$qsSy<2X-Wst|TuWi3}T5dnA8*i0kO3-=z^+rDa{*0(RyfqvC zjn*vhD_kVoJluqF^Mp(scX59v+r02s3C+P{u9Iz^@I;9x7;Nven%n|m$Dwy;|7<1f zZ&0?V`k2`+cym3eqSZoJpZHCn(NhUO@%i;YJ|3js4*28&vNH{3^XdM<_@?&h{yP6% zwR-)4cJhn>@dXCs_q4wm(EW9R#nxc_m+(HQb>aC(weD`YzXx&~G_&om5TCcf+v!HU zMFJ1s&lr`v8(ZN$7{$KeV8>nUZ|+0*^E2jMUvHo#sneymkb;h|dpojsV_Uv4qcRSr zyAjge>~>S@Nxw8eo(8_>^Tz_b9Rs8;_=Owky${Nb&+p(9D3A3Rh`*WMD(U`^->%C> zR+qcmeZ-~>)Y^O|v6b7f)w0l+bieh!U;WoPvDiVR>~9lT;!+8mIjh6-c)7^)uwL-{ zt>^t!{}*zp8lKDbb}m;zE?4+H{}*!c4A12>kqheY`27>e0{G9c0)W+kSo<7QZSo_| zyrMsVy2aJ(CJ<$|)aDV~*T?-s7rBYeh2xnm2Gf z%y#Fsl{2_kl>?0!`IX9f@2O-ueEk!?lI{34&EPt$T<$p);`bnr1?i!ny-5{Pj@i>O z)o|$ZbWE=JO2OAGw@wT3`x70srz38JNs@GT9Axx%CXC)$8F)6svlT|vR-lj%;v^09 zEz9?vO;ShVz>|JIgMW{3@HlMAK8R6A<2Ki_xe}z(0yXHF-D2>w87>E0q}cmJNyDkT zcZq=a15KQIL|2sXTMVa9_!|VgmnMv$!{^&C06v1PV^YSTIj23rWb+W}{zjXDBmOxd z!Cdz$`~OY?y>+|-|AVFdswW_Rgw2O9Cz$s_?KOPT`!yaH?H)K|21wa<-^&me&)NH> z>BbnTpH4H-qrgliC(d?f;2DEwA^v0{uCUPf$q-sEg@~WlOHEW}_7JcfBiX$G{N4^} zrrB9Q*OFEv?P?~uC24rZN$=uTBe!I-F{mBY?gD5M+OJ5s{&yN?lN0Fz#U~?QMgKWE zX)zjTOP6u(;C`_?-K<8Rk&^z|5iZ_FxK8g%CXBRHL%Nd9@C3e+a0ScTBX2Bge3wr8; zchwHYf6<-}>OQ?8xd+zIQ<8hCm?o!(czxEFeg%0Z%pltB0P$&yrRQO$@&+@(6p00E zJ$2gF$WrOf_8@5r`UCwz;2hf1>Qee1$`_&S?!^)teOjp$AuI)lEvDN<82XogGaU@1 z<>!F69*G?MX@AgqlEreRL|?K?r8lJZ!03_hwQ=tT+&lI50vTJy5LxoMvAUmIN zFVJOc*!BKD0o7f^#0coesZ8C}H2*seQN5aMyEvA>iR@7+xzBDT_|{c~EMfXu9l)s$Ala6YMz(3B@ywEldVR+& zic5_V=bWN4v>hlvfX;e@2Yn< zxp-MSSy>M*)xA~a^IExW?7DY19#oQh_CtYfWqR7Ohn?n;kY-H<{mb-B8@kqOwi>)u zA)PPF>F6wWSm<(5(xW=tv8Qp0foTkHM|%x>ifXT6+aUdSsZ%HBG?niwFVx;cZlSdS zHwz^BE&i_(aT#P4ge95&_zaM-%p^Y%4U6w+ zl8-GP`ySAOB8P3wgn5^9!p61mRC1&bI5&EiPjANpk@k(y_k@g-D8F6kYJUnch>E1~q2w z{|W92Gm507N}VwL3wi3r9mB(opyU2fEx>O;T(shfhRC%N<|K40FP+j=$Wb6*4N@kcY?hjl}P z>s-|tt51Ce!eqLX;N4K~j0Hq}B1F?ZZz-QXbx|<6RR6}joZ+}i!M)Tz_xJ6bfs>x3 z=FQKbW^Anlt#t}&YCx{rruPpkW8VC(2*omW-Ez2*cKb=Dx*FaOg?E(7f z8n&?$2F7Qia~PlDCkoX9FU0Z8cN1uRZ?=JFbpIOj^+cF)Ny)Ky|B|O(*k3rz;Pw{| zGZ2Rg{Yb=lqtuTNH&P~^eI05f<5i?rKiudIA6mk<)BHfBiT$42qdB64WAnGqJvM(k z(!p;zU)t@l`4UY!`I1^y&+qYQM?$SM##5PQisKtrFm2opxbOiFanNs8ZXV*)BvI~7 z9W;Y|=e3dW%|il7e$#q;f?2w$fNe|gdtEQU(@Xas_B)_0@;i-0(0h(KmL^3Wqd2A+ zrf3(D$F3FSFxWTtsz|bvz2|ZmJ|d|worEwzt$)U3KFVP=BHMG)G(n4kCMQv&`40i8zD#`)TOr1 zsxGOjukf3Cs?j5zYy?Vo#BYG`Hnw+{%YE0#C{-k;{0ijB!c>Ly03fYs~33Ja`WUH=?!m&X;aj3azx zb0>>YGdfA^8~c8VzcooHryj}p+_y{TGG4E(Pl=_WB;fGzu6u=SZk`M@(%CZ?zVE$P{cgN;C_yHkHq_+(2nryk)hwgQxEmhsWo}+Fp&<1 zTf6MECVItwtGQrUI?!tHcuo=MRX{z|$uc{o%|~e<&E-?>NtsX=}!>7ky!X(Qcu6 z%Jd|$_SpC3&bRZ4pE^A%SL72vGiAzrkDK$lbzVO2=u{W?9nlNiV$=Y>d16m6C{ z%Z7SW%uYDnXatp#jYhA%Mj5O)qj;qRU&P=Z!Jl6Da@j*ya#<|dqUoGN{XT^Jsecjj zr{_au&M}&Oqwl_ls407y4^UZ`V`+a82o<7W50PlvYGHGJl^CBV1% zT{TWEceTAP9mE|3ZHd5fu3fbf&LW1h)Pds>_M__n=UJrfq547kIJ|w)PiB%+$#Nq` zj(6)P7R;4N^aypPf&NeW=)u7`Fah?_S@=}?=P-3#xv;vN0$nL*B_ zRvC>2%zdWFy;J1w6S;S=+)pJx6g8P5@Vo+Va*)^L2Zrr+rH^U?XNJHzM5NU!YBH@< zlX$5nZKaw_chp33)MRgfm-svbeX;b>eF2_}%yK!Eoa-3#X=tBt=`O9~tkPT!E%cd+ zKD$nDhn0(Yfe~=r-JM-6_6)W2#e86U67K;BLi2H{mh+@4c2k*>c@Sq3lWVV*JWN7r zBDv1h#uzy_>jD`6KWNV~Y4>57pTRv0DR$Q4nG%G?e+Z#5=}&6G+&u$k+K#!keNFYU zt_LN*R4+G4x`gM+*dL>;&s)s&oKY+pKsQf#o904Wz9&M%}#U*&9&&OrE zY{!P0vw{1X-L(nV^5eGDf_uJe0)u;ry7$`?l{iv{W6qQmS~^+8Y^oHtRm(> zheL|=%a#axmDQ~>>;Ol+%CMNs%h*UlvQ5v7C}SUa0AWC$znS5)bKnwX%lBPomhfKL zFJ6@`djQ_CSeK=JE?$D;VP@%by=uRc#*?6q{ZL1_-vxDaDKf|WHio+9xFmK0(C<2s zh0P)MchivXNkhJ^A>WgSd>_ESDgTbSI4us5LM|Vh!$3BGvLC^0@8>SP$jG>$m%I3F zO&93_NbZu0477aW#kX@oK5s` zja}nBy1P&H25~mKP4%fqsV;Y)+sD7%=+)KbDVWbmbJ<>;<+pbv++q%ijCVp*yDEF0D|7BmX^WN$cx`U1T%lp;+4k~};_Y@3S`x!cdr zG;}$463moJZULVumy~8oh14q{kVWUzuB>9-r&U}*=e0dEB&I=f21(N(vm~vuJ(-Io znCawt#rmfo{x?C)!yzVozpXHT^pwrfTo2;_wr)ZAR=fQ4OqdVPft8n!@R{;dsTkTDRK-LIAT zt+ZOwqScW)dUQujI>B8qFGwaK?~9U##BZ#je$$^v$E4#RYLU5XS?d$o;kTK3B%| zhhpx9U(}=nQwcuNmN@GC)djgu**+*|IxvCodR&9^h>Di8pifDthoTa%U!R=Z>LPl5 zYU|D-zMD|CT2Ec@*WrSBXZt?V6!5$20*A_V!Ch|D7TM>{xYiYI3e^Qa8qHD%IV%vf z&O@CQm3cXFP!PkaopkyYL5qCdZroK{OtD6&#~31m-#I_2H2GX<*NesM3w%!c2PxIM z>nBiatkL5|>sPvK0y(-!$a2&@hraSl^z|cbj$T7aNe}+zfW5B`ZI5U48ZQH$(5K?6 z_*QCd|2-Jz9nt>>v`90zH{fRLX6$RoH~Qt}2678_d)a(g!qrni+^_!>;@*I~&J!fS z(NsVDkGLeZXLMUN%Fkn1x_-vjdAg|Gi|cdtgthn>NcHCALu{WCZ&^I)cSp&k_aZ}xJjRq z{MsD9{k1v1`k&{xZXkYF@?k$}r2nLt_FY)i{niC#zCAry&+LFA-S`>1#^{C?;F6{n zcmniKx+)AZa~k*LyW&%8@a}$BJYAC}W7#)a3eUweHC+jS0awZ;T5AU4*CaKCx1mIA zesz%cZZWUj0TAmA;3V(&)8&S>C9hqAkdLcGA2}Y%)Qh}TSq|%CUDCJpyUu`KadC19 z)Gh5A3v0U9{CI=(2v%+ngYx!9n}JA$@oew=#^g+t@1P9F6a9BGRjnruFB3*AE={YvR=0L=WYnv>zjPX4Qz%8v6Uanr*{Oo-a{e2LChU)c)z^#K49MGOR_y3fY1F! z60JR;{=bjm;rkn58?4HxjWpF(&D!rCBAg|Mqx znDuENoh~3(amWXKR1%O&Ipp0wx;MZfYdGY!K1v17B^>esuF{hR&=FSYJmg9q@gpOk9TuFJ$FdR&v?lCKAMI+E-e&q0`#k&8 zAV1U439DBaI0~6TLTv4ebeA-~hlX@dx;U-#=IV5g(FuA6MQSG_J|@4E@5GJJD$h!O zX7otw3_PRaduHPxd=BQjBe&{jF#EmDcD(vs*^urYICkCCOKwJs0P{k5^Q@^Iw$*&Z zG`CGRASB0Z0bDS(!{wEeiy{!V&d8m|Q)2d(V0Dp`hsNW1y)#|0`5E*Msk9^OSNL0# z!uMR8nG7?#bbs+Ujh`2%6${4fI)nS|hJ2GeUv^gq@{KCazL!hz+$lR_;h5|m9rRe# z8Md|{6mRftn;wNxO_(+S^M|PM^VJ@DB~b5bqes5VsJyR7$uhth#m;%IgmPRBIg$1# zlZ-%)L&*r_INY1gh%=t6j6tnx8YR|OeroOHd+SUeh~6C>DfZm(Z>`4n+c_tSfaK%` zdFFfM8iSoN>`_JkxD4>nMx_qxz@ytb7xYt~K9F5EHFqLfThVlo7pH1s-}IyJvI0%1ZoF(q> zw^4Clk^fmCaSmW|pUo=sseQd+`(L}MXp`;sN(`i_6~(*<8Y4AT6CkgZMM$x_-kns|H~X@K`Z zEgSGLJF-FM(W?;uJh=kCOX23cz?sD3(MZU{GK;tl&zA#Rf*w4Su6EhAJIo+KJWN^zN36quFWnNwf?62tS@7p zvkC5ZtS6Y(vqh1XFCTwVI^M_dzTl-e9ZGS3(IZ1Cmz8`{w{HchP&_%xiy=K-%`@%{J*sQu@+XV`~1q zmSQp=`a*h>q(fd3^DQHKn_ge&xIp^FR`oe`!vwOV=oLKhsSv*>5LUG&^U|dx?Mf1L zZ39KCOXo<~|6|HhDARIS*XFfz5d!kWc~TBmVJ-3qpxoKGest+INS))|c)Rg&X%OHm z0S>tF71CH2)1UbuZ?2LS6ZP;=Rrw5NPsl!lxzTY31K~R733vu`6Y$u48$W}&-WbTO zn~G;J<(Z_KAWp&jA{k*T+JUwtL920RO*Nh2P`-$Q;e&0-(i~y$3D)c7b4DpudCoXq z=WXpFKjzN{_h&dmZG?NdDeBY2NJuYCf9LVYDyN+Di(9hE>L9EfY9 zkC70nFlaumrpChR9Z!8=4KMNW&iB2?mg?B&sAJWTI)1lQM+@rct*GN*sgAc+)bTc` z<0(+b+n|oV6xMMA)NupU(VxOP+CHhy*7;o+aqif7mtiJOQE?_$6AknfwI_PFkyb{K z0djbXp9zMEnOLRbK7|@@Agk0tEyQNMz2R6Z|$ zUK}(}fu3P~V&4tgpbNbO^KQl;2Q_aSx233uoc7Kh&}}YnkOpsOWvoq#{=JRcF zsE4(yWXo7D-_5qm^`2Xxz)zkf~7itrq>G_Z+98o#v9i6#kQd~-fa9` zI+tPcS~xY-MxI@V;!t{<8kD?DZ<{V!Sm+nCyj4Mym)e{*W9#;d^GAWh=cln@`_B1B zn3*<}WGb()qc$jq7K+W@JS z^7Bqk^)(?zUOOP=wE1vo*w%@=XP6H1(GWI<(c&H>7lmKwL6GU2QW~S3hr#Xi`1^zu z#~#ouctg8wc0Erh)$^B7&wGdE)gKmZ8T}>8C$IIT>~ry4^j@fUaGK`O!59pSd3!FG z1wu>~_`PB4Wb{ex;^gqTl6>Ieax`5C^1*5FE5I*L(JLLN#Sg;u75?B}a-1!m8?JZQ zy9^0?mj!phT#-Wi2r;q{-j~9=^_5$!&o2t|eMa2lXm%kt_d9e=biG%aTGK{BcM4;}zjA82X`zQD7K;0$+ersK9~xaEptq#Ghe_ zRrB<>+!=K$>Y7N&pVg6mwHek4UfQDils>hM>0B*lX;wiCGD!SZy4b_L;K7PjeXd+n zz+EZ)1LzEIrN{P`hbumqEQ*`o=U&wqiLe6)tH@ z*t&;tL)<%pwoWV9CqHuKlDsug0x6h*NhmJ{XHcP?MM`;3Gx$B0LVWl1PM5yDJMp^F zPk+ZO;$bQJ=yM@h7orCk$iFwS*(m#aw&$v&4bJa$Ew8Olp_H1UGO_J!@-ogdxGrGY zHHn~KrR!78@IHa)^YZ3(@ZKk{4d%^D;SE>CRS*Vah-qXlYDLNCa+Dd!W=i(8qEBA) zvXsH(rb{3Ovm^Y4E?cjL<+;S#tan=f!14ucog>J51=nd;(H@qccs*UuZ8p;05XnCG zx-oS_HH`hMQaL?!+}IslxsuiInBC zn}^6{o^n{nEvcx`>Ed&}9^vzBq2tQw(asn-4Jh>;v`VSHVc2(Mu#63ndg06c_LNgE zyD1`M4ed>#vtirw?EwfvLuDJYCET}$;l5=cw2a$Q!hL%f?%M`J%ed1^xbF7U+*tM()bHVLN}%=b^A^z;r?P6 z?o9%>MvRsDfcpYPU)Fa3r}2fv`3pSH#-}H{^41#kDxF<CJk(G#(3eF>GcL>(nAhGz~G19&{B>VWCEUk3t5Tg6-udwbarJBAD0L-oLZt5az3TO(>+V_4`Ao)1PDM zH1q+EH-um;hax)ZI9<9q6Cz$i*Gr{U=0a(=@D!`xG}6_Fk?cmhw6kCxX@6Cgb~7vO zg?4G>HhJQHN;~^&O50g3tt_+B0u5bQ(s`97jVzHjP7gyH-2-jp4d^PAy90AXZUi!< zk&)(+GUbngy4=t6^S%e%=@62=-mXhK(W~sQ%DUXd>hfc|E>&$z^Zb87`Kqc=%eB?S zS;i`)b}f45;WdF-$vuJmbsz5?ZyOWH_I>64;C7UX7VRF0Fzz9pL0Dh3y_4Jc`S=%U zAGP~VDTnH}Acxvwxec8;G!h8{Y9=o0bf)7?|%FHQZjT?p+w)(e`_PUJEo=v-!Lg za=jgG9l(fy`PwBH^X7(h7G|?HIuZI=sQC_}kIS1{a}QwpF_uerqYP$vW`g8yR2@uY zn(y|}1*<_Oakc7bgLkf%pBbKWNItGN-{Int3C}wq_K}eTK3K!$tMY7fD*3CyC3+ns zdOR^}89ksa6_!%|Vc<@zwa;JjnR#ol#$iA0iJD5=WYq%xTY#T~`%+cVpKEm0+;BEY zd#XvF2Xd;?NHf~2a?_>OK6ArL2=TCxmi0S|0Q=nBunJ&af$ahK7KFcVZdl>KeGg%8 zn;Vt`EXK4DQ5(uU{w(-@xu|9vq_Y6}3_A;qD!Sa#`D_uScv+m?dNLkZK`gZ%W4l|Q znzx=Tp_JU<>^8?j$j^?Uwdq&-U^hbg!l>%&s`&}N3WX1reA_(;x!-dHzO z`()kIctMv3J(xb}!4vpi5>t8aQ3pJ2Ym9%i!U=S8~S+Fn=P&|ZdpSky;Y|5I1(PM2Zt z7In*dtFHRyF=g1Fi+b96Id4ksFpfOk%MK>ii+)rnth;g0DCEE^e{yHn6O^deC&}pFobGO7_RP3m>KNwqT4DTWGPBoB z*uC|mnT$use*?|WWcM5RnZ*Dp+oAqdE!Ph{P(qEEklZiNBG%r1c_yr#`{fR3v3_|5 zu|DsY+ljTkY{mJbVjcO24ro27sV`f9CzS68DB>=?DxUVwJLH?+_a|(hA?(oqeZ5xL zql=&48kN!a$_Iu{y0wpuK*^uNGeDKh8o?)(7OP_MH! z)B?7KdXuf8?q+MK?wKDOee^G7ubVSJs8~~Ro?JVE^Ki5!86`a5togBlrOTR72KaX3 zH;v%;O3)^yjqeO^DTV)NSU9`mKcXzpAJ|+e&mUP1>zLTg<@suH_I4bEE#y8)ztmmm zabxvuy^D7n-Anfv-AncwhMXcRN%tZt(l2ig4Ro!Wy8b5gCjTDP|D36Dw^wRqE8>;S zO#pp&2=ojFeLI9Fc5%fEV;-SPn`;63*HA=R`RjaqIflsHi>e}h@;i2X_}*jm$^YOn zU0%6&kq5&6783VhVCDFO=Bbd%KY0un#&841-{JcV@l7J-dork_ihD#qh5BZgK386w z(+qM9iAbaaWf~LZU3beZIG-KYd@AE@#SG56=ounuj$yXBf!C=G>T-9s@S&l9nleFF zTJ{N^$1=?B!Y78hhTcP47Q5#+6VeS~%v#*5&NBSoQHCRV85CZI4z#|s|1zN6=#HUf z_{7jZPjz4!J~Yr;I4{G8ScZGcW%$rh29MaER7diCy){H}uc0nAe@v{k(-kP$1RXh& z%O<9|+#O_NlJ~PHz*jL|emv@cz^J|g3#n`koyP8JU0*3VorZ0T^~bDXg`*d>262GlQ`6v0h(f&);KA zbE{;bc6}@M=^)5+vsf!HQwy zt?Vv4dOxcs*_<0%Q=w@E)-MuGTKh0H99^l|UOQCDD4(IPl5N>6d`l9n`bI*nHdA-8 z6?M0vY!POqyNG%o67KCLlP;obRI>iec5t^s>_3)#px4>5~G8ap54=Zyc)DFju zYg9eS0?O(1hBS;eV=>J(!*kSHJ!USZ-@3KJ#NMwVQoL=Ada4bX-@r!Da7i9E$E2EHNA5zTR|mEw~; zQaxGfUIyHf<9uXn?B_T~A&#iWUb z2x-&0jpM9G*Ghi%4d|Ufw^0mJ0X{T~zr7DLCD7&ewUSqLLNFDyLd&Qktqn?5dhB3n zq_pYNP2;Se1<=Sp>zz2xrlal=GyE?z-V+!6=LqKSh%g=5I?-pxkFF;li~bQIUVUwN zM9pG)48GH~o-kcY!@BrZ)>cv0SK+-HJse~y^h}Kw?03;`LsXfl{gS1bMO?4$Z+YxC zf>_w2UV;&rktU1p1@P^q8|yav{nXkjV$d~|j$BJ=ElU}Dl$R>jTXyJLWh4*59%Zl| zWw0KFSkH;kO<9kc$$ONw2?VR1d#aJWjl$W@Nl^C@!c)dYdsLO7L7OdmpM>OM!*&0|WcwiJ_@1c;w`^Lr- zdH7Knu56qs@S*3JexSgZ31mfaEv<6BL8%1w*R!8PkDQtP{3Bzn4E6fWTIz9?z8(p1 z#}1{r+Pet450R@19Tm|3FPaixqKZUN#JO>Hgk=sC!e~w zozE$xTUI0CM%+6DNOc%8(d)t%w(RlEQ-H(a9y^SKiTF$q@5pci;EqSWG==13Ig*A{ z_`4FxfQ+nnHl`Xp2$~PuMLqCS;pc{*>40j%yLL;3}Ah1++taBx#VvV4*$f+$gdF_M|V$>Wp|tW0!fd$!;wCO zy0;kYsRHL(TFxo$zZdDstUApn-da9q)H1Jw3Jse!wMLR;+%NJ0j{9Y5zMF&_C<&WX zK)3Sr-5`0_%WmQANnWGL^#j^_qwpPflLyS}($G)zw0{!g*b1H)e3qOsUZet}P~Ig< z4m@RqTzF3&p}Zx_``)XQ>A`Ze4lPRkjosgi)*URz>ejlo0K(=oSgcNhSy-YP^N|R% zUSrz(T1B~Ef}T5+UVk8I^BI`=4uqKXcFY4S+iwD?F0yhVuW2G8P2>l16R$Z?cD_WK zZ10Svaf5eZ!s98KK)Q>Ov1Dbr<@8}KS4F~Op{M^1;oX3v%adda=H0_NO;k0aS9#rp2)*2qm^J7tV*)5DRjd;iq2UbI_&0;wwM-U%dG zlyg#`>TS@nZ}>#_(edKlXL_ zHEU#F4fa_ zpRt}B(lbW?FMGxQAhL+JpESWgd|8-gD*E)j$>_rhq2kaOf`Kf6tq4_FFq;9A_<^ZXLH=`4VC$or!;pa<989kUF0=kdEB(H zLU8rK!^7-cHO^Wh#O4z8M9OD@h?^Aen_n>(jJmqi(?puQX6hE!%f6| z|JLj@Y`!qhso*(j@A8UNPlx#6p1n@}KbpO8mT4Oo5_BB5A39DTy~QxJ ztM!RtSkPV(fI#&?wav>9TE-5`;FCP z_{dn(*a%-a!Ar`qA!hMXS=KL;<;m~5b&dC(1m`Sn?6t^GSHP%AH&mDAB}s~tLcFD! zd+j=~+_NS;Tr7{Ldy6(dxV!kT`GHIDgMY;dwuzKSmwJ%s^X`bscju8xtVg-I|3v(| zy`jASGeN8a?g1Dcu_50Y&({GU?dm~T1&n2@fGA%Dj3?d@O8-s7I}V=~$Q|L4unK5E zS!q1U`t}(3WKuXt^N|`Zb%&tF1&Se+v)Ont^Ng>U&Bp)B*=&5pY{ug{`+fa*?tmX1{G%DNNEEWG2;qVU)E{oMxNNpWFZ5)dx5usaAGBnvcy5U2wwD@`%%=J7$a`-ck14gELM$@dnf0@f9gHur)y?)#^yPF2bZ~iH@*m zhq0A?Yyx?7AMnV(Nh3xRYfHKg?cR(ijc=H-5x&E2RW7RnooQ%@ton8RG9CM_XooPD z1;c%gacGa8W6A#;qo;CARJ3)?|E{gAr|fbe#~sgRkZ<8r%pl{1JU70ypMyMjJmbNJ zotmMuFNs>VJQor2oDq@j^w;W!oM`}gPVc3>ueZs^Q65^B=NiSR1$nNK?1!$OR?v07 zGTBE`W0W8*hwu+S=fr-<_gJn)B|rNz$YhNmlhuPv*4XG@tLybRla6OI&oPW1Ha)kL zDEm?A?GuB|+FT~n%H!QrlDU%c<)kFp1myZ@0h#Cl3`KrFgV9mrD|^`<5wE65(H<55 z?r18H%kGL%lx1TwU3W~yC`fyctiU>ijkR)rDwVjzE&tPgHGxbkw$*Eb4)qS1$*!&S zqcBk2+J;=k+Q>%b-7sz+`*-?dSz;K+C5BPeWO%!+88u4A)d%mbqwF${!gq-_@xB`5 zWyU>uCMD4H$m$YDkR%JFgoA{XFt$v;*yF`=3qM@6d*^*cXYc$*DPg~Tb6e4FUy#Z> z#2yfP=REo5OrJwaDC=xr5*2nk%zeTGQr6_>l6V(B*_;Hfmp2pm{LGGXW0c=R;hHo7 z(yXC9&IenQAfv2wqvjQ}fN5r@$tC-q81K&g#(QX3yhlVlTPNVbDAzM~lxW9CeUd6%RY#LO=G+ z$~b~{lVg%@D}KyTi3OS+->Hz{V* z-cwPwgJQNVcUOela(9*TwsB^baNLn3>hrMhZrvRz+vGhm#{1e^L@s2bu!5tskfc5$ z-Y#B7@p1Lp1M>j5OCsz})f>~~|%b5#z_$Lu?A)e+}CH0Hk}#%)aG zqScVw_GW$u&F}EGtBSC3El%6==atg*mD2PG8|W9s_}w;rdlE{Pi~1r1+D9T~H__>U zd2zGtKN$b+0(?p;eT6($Nt@ZNFZohT=>JB;kmEDW+{XV0%>K3> z8Z_T))hhCMyOf79ERTPb^7u`&^B%_bnC(y6fINQNOdNKWcgDEyD1LXA-`ejnM@M=Z z>mtG$HW|=<*vjqip52PtLFbTeb7W+IoWs7l%~6po{07LGt;{m6_68KU+Z+*b`Z0Dl z+IqOpH`_i-@GsbCpV!w#LgJnh)@4K^9}78iOe9UJ;8_>RMaM+)=0UA^U$w>otr5_G z@a@Qa6*mh1crLxJpgr4MO>z%mjr7(kcCLwBXry?TnV!sZfP-JVi%9<}v@-?NzmW`( z;}z7Q)0=fwk?66fdzPbSgePxKYW)%3V$XO;@58l`-iPZW)|)<|M{*eCe=z1>t9x>{ zV9vj5M(y9U3v+h0xQMqZQzet22m6_e^;*pN=Xmm8m9F}tIH0Y}phk8f{>SF;!T&!s z*GbviB9VN2Lvs}G=0VO9w9S<;OL|GN0R1JCTvJ8pVmwVkU2D3``XgOs?V_u#-F{(L z?Gh;0GN$*f*XXX?J)9;I%<35xO5?)xe9RvTo_<<8^X9TlFU)e?_eUbV_ti&o_t!)+ z?kW;W|Vau{*$&L@%&V7KR z$N}R3iAh4kAEcI1yy8g zAQd{dQ4tDk8QIit%6R{p9cEJ@55?@I8{zc+u&|uRg>_8OY+qmU7hUvLyc8Yiylz_oDRRdub@itW=JG-AA=Zkp)r2DbSz8K8P((3c|A3@z+{?s@h z+Ifz7Ag;XyP7N+JvNrcjeJ*>4uknlEU+Bi*w`uhShK~uQtQF?6_X&WHxetzHTA#V? zB_D%&3+->K*8YM|0H+W1KJv_Ry^k!->LWLo>wV-)mOk>5a=ni%g%)wB-hBW1a)Y1h z(`_#4{H`(hy<*{aYq@?uO!aBy%I`@tKYou4?az$35%+gX+`Ejp{aJZ=(1`nW7B|09 zLdcWlnXyUNk?{L+P2Yu7XRn5S(+@G(BHTjN6y_h0KB(ute4>TlS1;D!e_`;XAKyRZ zBb4g0OB(h=Ez}<^>Hf2k?m$+$4;krxtDf5-;j+tL1AGmulLL5D5}s$_)3&WPC7sRR z!i{7$NuC#AskJd(qb(MHO6qOlRzzw^6RjDAJDTAlwPmD9@Q=bR<+!j?YMRHXGqzrPJackiIS9bt`Itr=%VA2v7RU^qCCIE3U@Tg+?X+DB7zH+C*WyuR$u* z@VrLI{*=11MPe|$?uy#{t`*YQj&oOfQxDCB`o8f3NBlZ`pX>o>G+@P!;)EkzOO>pQ^K(*L9gqSJGH`) zt?zojp6g1=(OTVEfV-I8nU&v_ZL%G|u}FIQ>U=$YjXtmNp{=K{$=9|4Gn1a2nG z=9&GdzIK4l_63AXVWfPwzR%X%Hy3=DfbVVQTL`|3!FQ1P=7H}*@V(4@E#TufT?EqG zx4_qXVhunZMLTu`wXdetZ*5_~H2eC5KNqHs$)(#aN9zLb7p6k@P}S}cdiv^pD})bB z{-`ej4)x3~Umf%D+YSMtPlVD4uiMevH_MjP1XaZ9M4}=KBKn^BJ^T=m6?wD$D86kLs@!7~UT7aZU|B)byZp zWlwtpl)^*x9iyPt0Nt4dZ3XBa6BKof-9O5|%j6H(&(qR+3G^o^b#E5OdBAa>0c{&2 zeQiEdIFAO+pW}<=uOWflH83)N-FzL>WaMg@P6BzWo$@EL-RIcSmX3ebJR^zp31PNx zny?BAzF1gR7_jq|x}6j|*1K>uo`k-R(K%-OaHXDPdx3v%WtN82gE1a^LTL0g2{#g- z5BK81Pa1uKf?rh8WH4`Sl!#}XoFfY;V}pAt`2z0EOae$oztb`U)HOi;TbV<4FOlT zRvvXe`Lnu?#bi(@^cD!RP(_~jHWm7&`JTL#`mg4X2wJu0Zyd_bAAL}_6~b_tR3tE$ zo>EW1$zWuT&jpL)Skb1D_4Jj-BCY(^(}Q@QdQ|!0X{J#&QVO+%4#@?*X-C zZ=r}iwRI9z<$yCLc!*OfB>^YHs82Pi+I}FnQ9rYi+f(m@aT@hw;gjXr%kzx+b6WD3 z8I`Zp$KWscx~ovjhhkdKAF1UdsYck!T`uH1Dk*8W-mE9>_)7h5#knxbZL61rLW9SN zm74AqnpCmoAK8NY2{{q8bH{rCiS+s-zNFghOZw;f_$)Ou{;aFi$BkN_S?>PKO5Ii{ za_wp%CfR$$f8T;%(qgtXiof$Kb=mwn%N>A=4S2oJ%x}=bFKLMne^*yp$2T2*oxyLm zh2Kq;d=ClN8HUa*rUNVj{I6wmIIb^@)8AFe_qvc?VDt{WQ?o^4UneD9S5KH8FrEK> zWAXocfyVzQ^}6mdo&JIEOwaX3dUX27Eah=jR(Tw#I;68p?T3L zn?}nwc%@RmgAmg0VemNLsMK_(shMve`|G4k%gXS0*Wl4%Dfjm+>FzbsEotldLx9JA z#+zG2yg6PXyX0|LCV6a!XB+XlTS@r(^GNbFUXE^n&vd(B_CzE3Y=7u)Xe1WAPbX)yJPLCt_D*7~zo>x7d5yaf- z@`%Bg5QA;{BA({Zo%J6S;5rP}Q;=?XDssM4%g?=#A0Ef_eB8;U+k#KyU4y#k9i(p6 z*CWBl8-*`M>K^%gq%QgCNbn(k*V)VNDihYvp-%1RA>(GJ@1txDYPt<%xw9_P#_FM+ ztqB`RGF}Vu*EEU*HFnE@i)in-4*G2)-#>Q1s5`B3rM*DVY3s^Lta!DmaV0=zGHi^6 zj%l1kwtHeH!9U0X+M(3XQFaHpJ~XY}0iTJm=HlO%vK_D@?hoBnUu*ZUJsGSEHq)Mr zpy_JDvvhX9G{|+&Ax|e;2L?zo-3omy@E$JY9)T5$RC-+yx}Z zPR~12oZn20+OPMyp9J~dJ?~TJL;Y~DK2^Uj_f?SVI8Lga&^G-L`$eKm)1lwjqrS#Y zUvF78^vBgcw)X-4b!s83v-ME`pGiNTF-uHC9a8>z1fNMiQp?b%2j9w^apYF%dNgW% z<}(IgmA;39b$Gc&$KPZN?pTJ?&!sA>xXr_4E$`d;jz4^dT0UEp*ju7-7L2Gk6NGt% zf4IG;w$X>0oysDx#{ZX|wx%lm{3YZwpUZSs>1Re^3w)75Khpy5Ht6dt@Z$`4y(RA_ zTJpD&1A$&(OW4n*(nXTe&D;bKg{WjiaN+9e6*^^Xf5Q&~SLR=7Ih$aZ^3SAN9?2#|TZ%bVkW~@f2oFnemR}&M~8e zCtgPMxPuQS?rii0_tB$*4^t`l>r6Uwv(nK;f)4@BKUnJHFrPg!xGQmcoiDhPUKxCv zo*sOfhwL$OxC*tvv(P8D3>tjWuvVTFnQF>akCv-$f_YLICVAsRpk8yB942lF`v#J0 zrbyxB4N#AuzI2i98#;Ww(xYHKPZjCSuhCaYF_d4@I~h z2&bkg{w}~(X*$@Imd@1y%J-0+tTbuAD z!QsAv*oLv<$?Kk0!gLjS+589R{|^+DoBEZfrs`+FDK!jf?N`UO_(|r>{w}gEKcDb$oVrKAmb_gE8Fz#+{9mVXU3LA^c<96NB!4mV5HOq9`U$7j zazCG{*%9~zMt+zTaH|9s*R4ICa?%lG&yoi6in)5B>0ae$MYi*-?Jk$5qzr2aRA<*!1u=qDPbp7 zgiM+?ncT|m1~y0Vw%vN#h|iq$v*-8<=B=kud`jzS13YuZ^)!M{p;2&W7JEuv*3?N7@nJ=P58vXA8t=X$t^v&p{TJ@?;Es;Xm69F? z9xZM=Y8!KEw=})*?&TV^CXjk*GHEKtzO5M782Qu>veXn5puMxx5=M|W7uOYggIh9eB0p1 z*k&)nHv1J}_82B>HXRadT;lW9&~(jKgHIN*9lDr)uuABC!yC&9UBc(d`-MI+6`B{> z;fc}lB)J9i-iJ1FA@3*P6Y|~~aj_HT97dlI2SQc(C_hA32H&Eqga5$x$!!pAny#%) zL-QkHd#3ffP%^{oAQ-Ys%=8;qPUrFqFx9ubxNd`^!ks6`Qy>PezmSeHt7L85n_wdeI*au9yL|~d2cAd4b2dDe!Lt*dN$6)~8hkU;fBk&At|$6vK9_}ON)1L- z(>dNgJ?+ww+PnqNusXGOtFCMOJu=;_V}SQ#zn;!zTQWJv`gnx4UcgmTEFu_ojQKnk z`-|U9=Q3w0=?rS;vKsiLxGRs=OVaVvsm}R`0M5MwHXiTB%|UdGtA+?pT*y4!EesO=Uebw47?t{&y0ui z8XbR$CHz(+{kl%7GBZAO9#w5t{0s~Jd;_oRSB;wS@gGpN(~9r3;4c6?Prr^o!h+vs z;Pvz$V@dyoS>Jc11%FXi`K`6!FU|@-V8LIKRX!Un`M)$P|648T|Dln8J^T+X;eTX= z*WAT*7AI!qvX2B0-;eT$yU!H~EW5HjMmH&q=>Ax~7{ZClJUzNrGISYP! z7XOzm{C8yWf725F8Y8@3{_oAu*Ed-HKZf$p&)Ar;;I3sjU1#ODW?c7m45!DLS8a~- zCs}Fsnem~YW~I5*68?s)GMQq*-)EdGs_@Hc0bNqe<9-?y;5>Aa6H<3hJm zv^K5dda5(-m=5t*iC0k@o@~%f+>+4ZZ^7Z&n2Db{{ zSA$#QTdsZ&+=)K3KAh94`B>B~eUGh%6Vh5A?uee`3x1>1oLQ~!hpx5khn{1=PqM(b zX7N0U@mvc$9h$zKZPk2?;pxUyg}ox_DT9=jt@WX8vYzrazMk@vG?`Jhj)5?9v@qR} zmpU6t+bu8qp069i$4D5)pLt-~ddh%T`6^t?L%J}fxce3^vO}IAZ(ewo zVZQhq=JuZ>m{UCS(CsHYT&>$rIK|g1oNCB<==MeTS8H~`+fQZlLtNt|J5GW3*KvFo zlAQ=AO*W=w3pJk%5h^6xPw}Bf!oNrK_g;Cc&ny%AyJ}swBn5GHH=AWk-l*1POKyyq z<&)m8)@*1{ z$!}hbp5Oi~S(>66J->Ib{OWp=)EaIJ-g!c)ji=hiPO9xyc9Kl?v%E369Vi3Tb|%w^ zf1DKqxh_J>n=9M|PwP)^iW6ol_#@dK{7Schg>GRDuLl9r;Y>@BX4GMOfsdyJ%c84> z+t^L3`_g7e34M@HjBKsy2X0WxW`j-gm(i_iwJxex2 z&R>q8+-UETbA3s00YP=jf0RE9zeVtgNpDCT|GxwMMHGH2S9r|6w zZ;a2}?$$XqT&6uhQm73EOM%M53foWe((&1KQaC`rFUs$tCe8ACzb&Qyx&>F}`&;77 zej?{_X$`lj8(_B)GCa2Dp?*p!EEmGeu3lpHI#7qCL`HKx2VjMUp1SL5G&wdQz-k}o zm|k{wB)%jjB9Dh)P9C5Oobo4$&a-{#(5zeA9n_|-@+_>*1dLVWLoAF%-n-;d?{{3b{-d_M<8cuE>(v7z;2PPZM>d{blz z)W}D0AFFFC-%E#QO8p<;)|=ewL(0UG?*rrj?x6olPv389cpsEWAKp+Yu(O!7w4D1L zY54`)cTA~=fHL?eerAr}`Ctt{2ap|DlQuXYtt+uk!nXiiK%>9>)MrPDl8X97XDU9U zo(7XEp)6@0!6)X9vX;IbzUJ+)R*JdVUaa~!e24Cpn|%D_0S$lmglZb?pXLk*F$-_#MUJc*orx8D_K;auO_}@%r%~hP$#YqFP)5gXO~UJzEKbT--ZnSF|)rm zE2P^cc!Jp_*s9HMcn&jr@kqNk#K%>>)9xbmeh2ASpKR_#t%BI^QtaL6sNT(+>D_8K z`^ z>TX?4XkSYGC^C&C_rbU3x)*75FDCtVl( ziJrcLE|-952=0=(^@P6=+UjHRb-9WwGBj#y6 zBJZP032#+6kKCl4)O--3rt_n(%zV^!Fpv1}_~>aAYxT3UO_sS(L9KQ!L(fL}7bdH! z&jBXX@;N}yvhVwnN&and*B8e6+VO-z^f7*AK9h?(xk=Tm0R1MinveE>k%i!A$t0xN z?j}tl)WhU?te0J7x%0HJRy&W9IM>X4>DLkRzsNJ@?dV#4-m}e^_qetF;^S+zbK1~0 zAKFD4h_7f^;m?HKV1&KU2$l#^Z-&Jdt zJ?HZ1_nBZK>m>;Jl@aGf5a$UEswtl@82m4`%%L%#uheq=ugUg{q2$hJpzLPgV&Ue7-=(sc>U{Elic%d~%LguB!? z+BVwPwYnX)OCj9R4O~`RvG`T8M`Uvd6Ab5j&-<;Muy*%N{UPw^ z)8fgq_>=x0`qqVRZYcHh2UYh$zeUuKLQ@BEqRU_;V#Q6t5zf2Wm(~7 z8{q~`Wu@IC4D&T%QW}JCYgn4=V4UFo6B!@={=HGSwcrna!rxCCg*zE>@A3DZQMh9e z_X>aS)o?G2aQ|||9njOg!bta!sg3bD&WV6qfpd;RnIscK5cb#xft|IW1uYKgZQ$~W zu?B(NV^K!IYZ+YrG#thm8(`wcHLTd?A;EXdbOTZaqiYm?H!>i-JKn{3y)c5(DEM9{ zKQ-bNI!ImRet-=(iYyk{mP~RUd?gdso{w;8-1zYgLMN4ick6k*z{u<6rh3NjN&PUa z?~`1vl`YP63E}fdJNYr-Pt@)WI-o~SIE(2Pzbupm&@RKKR!P7)?v*ePz0!xXtDH7T zquQKBbp=peF^cNQfGi`GZ0oZ>t1Pw)HnjG@>8}F%t4#Fsfd2VrIiS-&$LMA6MElFc z8uDrgd9@Kzw;U3D8{B?y!`%LW7vKtey4gADcqo;2W={e7Ao^gz@!(d1I|1BkV~$A4 z-mrF;Q@w(p7{gPhWrf@}MTqkFxQwJrlab6bg@4=#f29`w%Ks?5ZtL|02(K_5-dFih z77U+qA%=(XKw8rZb3of-8x@dSm&VP`Y_D-%MT{?(fqg5i^=I*`f!8?pl>IudYfu)H z@j|`BR-UO)ym_?~&w}l&3_0)drn{h@hOIVPjJZKrm;L-1tcWKynDuJYI$dw__y)6H zZFUA%$L9iN>LQnUuTL_<6dPgmHTt+ZeT{yPn3l#h;2M3q>1+jI4t8jQRT}SlyZvPIT|44%`YS-Z?Y0r0G^!0p0oxTrwQ={M34JpJgukG5{1epzSvN2i6y0aX+4pP3heqf zI=7DNzQ(ju7!^_P39SDc`FA?c*(<&6D}X(e}5;?^HO*XLC?*IDObO!s)5d9KC#?fdKay~AGlTS!YKte1Mc-}rip{^h%! z*lj)1KYje3Ab#7&^luy=X+YahqW0}yuG3_-L*M!mwcq#>;eYxLbUfk5G@9+ZzOB*e z_FRjE8=$Roi>^e;$aMdyE+eNRMy+xxhwAkERxSDIxHF29D!JNytFHjJhu@(V)A5s< zcRVmau4J|wde5Jt1nm4&*G_uR9}m9QpwGB3wjO*Fm6W7LUF=34zMqS=&XMT8Md_J+ zgVJZOk_VPu9=&r{E?HrpE~Ax^IO91s`1e5TniZXA zl9i9w>-&YdN};LF&8ydC`2bEcec#f0y}ww(>IkkZ@Eaai&-=b)JXhgze7R9O3DA9F zqGPfWbNE^9mu=~#B#OImxe8J$!q<>5TU527FF^N->CitL+8rrX0PYA&smp*5Ya{RK z^U;BNeNP+X!o1~2@it&D_{};~&Z_6*?0~eH={JyTQ|fupWB04yZx+~%Vq(-${9Rhl z`_yVeg_*cpCd?qz)`BfA9Q>Nf!7qu{8xV3sJ#P~Ub+Y24qz%@aw1rsjYar!q^?Yv? zZK~Kbo8&&ar7aPjtl&kJv@|`6@U4Xhs81kmPx!YL7SKd!vJ(8%p^YmK)bqRS$quNK zLJ-zO;}v{I2?v;=c0gSgirI5O8qaQdCpyL{iB4778BTa-5&WNx|2Fn+!}kKAkGxwH z{0LUL|IE?)gZJt+nJGu|f=NoFh>lrgd(b*zau)4=NjU&~f%{5ajB(y#3$Ni4>Xb-_Y zVFI-1yy%^{pVSq6nl1@`JOe0OM5xE@!M}k2gS1qEDWJjks6Y6wS8MmTK_2!KZh0~( zj8~WiN_!!Hia!2y6!E96K-oa2MGJ|iV9;qVU||ZN_7>bs^mnYm1tizS{ZQXw=B>YD z-K!yq8mL!a&_y&wkEJtXt|Lg|vRTj$XAwcda+gT7Ajbk5DkzYK|CP9G4nXFNqRPM+ z)whYuW&>pQD5?w$sdj#oxU3T(oujBSFh=!HBi+5bg%{q+B7m)g=l5Z^==W~7|h&5n9;!Nux{tC zUP24Tr!@^Yb$ec)kVx{RaKKUADl_ zH{f0i{Ne^fAC6+a`!#65ODyoK4frGr{5pewsfGVd27QHM*0*y<10PE=mi#K9gf=t_ z#9Sv*($57#%yoi8a8wuATtZ+cUM@DO<6J<{teER#@7@M3L+~oK(SG%eW|^&GSUC25 z`Y3_EITpp!x^de4@c@K@v6P%HoZ0MSypt~MQQ%1`6c@9N`#08hu-$Co_9pUuj3VKI zQDw^uI5&5Rbc0p3khKxR{;T5xRw9id|G;(##UW zrPO?3&Tv+ib@1|-ptx8LN;nOfsBk;K z8cvg$bupdwMUak@X&3c)*9*I2@~99nZ*trSz0xxHKG#6}xwb?|D}fNt<)B^m9+d6S za_)}h5s&wv*DDM;W$&Pzn{!Y`E9iG-;F9d!n&!50CA6B$ZfYycYOVmDR7epdf#>$N zSe~ggP&ZQwFjd4iVlA;Ma>@uV3Dk^=_nm97gzUjRru!^WE=S+5Zfy3$jO+f1s6$WC zWWu#OEm3}7Y=sT#KJ;((oly7Hvzk|vVjI#wIJ1G(Q3sO{A5W5r5(Rq+fys2EeCFjd z#Z1ouG;T=Y>ocd|K4zj=34WMa`KQzmaOH0E+EsXeueFoeH~gTrjD-+M@Xt8w5ZT<| zAxPJ4sP9bN)SQDi0fgi}sI9I_lH3b3y?xLMU5g1mvEH9a5Q}vdZJo-lgd6JRSunG^ z6Q$L6K>I=%j96#Q&cFoh8*_-q6?098d`yhu`=H%L6Z^&~!}E5IA9A?hJC0}YH(jpu zbk{N_WjYxlVq%|!b2nGdu0o|}k5B2jzd-5PU8L}D<|M(rDXE5qO-YmR>E5{mIU@HV zm%}wY9^w*$FKYaNY67Dg-jR|@GWbJCYef#u z|8r(B&6&GUw^q(<_P(2V9EpRnl6XU9u?;U8UaqBp=?lLYwSWD7oYM1(r1Xc*ZvJaQ zN-B;*yA~pSZs;T5ErIu(RA_eeVG;Uzx9kcI$~1Tf)&LukJ;8l?-~Vik-{0<6&uI>u zdVRe2SE8T{LrUtJiDU3ObzvK2_W_~xe3q|`1Al<$KBRvQFO3(f> zrRRxqCHRNLQ+{Qd`wG;6c5pO@#FJ&p?M{ai=hRN%lz1wjY`tcN)9G$@!aVKCa=?mX zU|XDfMtYvXxqK<4AlHf7%eE0cPP#34mmU+Y{c`aOJq0n@9PXIiPqxm#liJ+aT65X$ zVH??8n0RWk^2CIJP(k!gr$4a`WP4zR}HV@vqpaa3TVU_vI z;5UgU{Yu^59GKl76@5c1FQon6i0teET=Gd=J^ZlI3BBwwBN@GFxX!wg*>dAgT;t&H zt&x!tq-ZqlzpiQI>#=@yEA+kiy(zOJ8H(~-mNLoMI>%W+B+B1KNL3EoC&GCJC8(`W zpHEN{{2b>K`dQM3MqO?(PeI+5%jG;scW2amZhCGbUu!L=`NmpH$6eB>uft>(&WyXt zzi!tk5L}JL#2k{mZKASuZc5!7+km$Qq8_qBY?jgT@Jg4*u|k}wzuVHG z#nEGIE5sIn+>TtK%*K;|_z~1m1;XVz(`x>V4W#!rMM3>Nl#QX4h!J~lo1g^u$s*!V zuc;yD*QlK@;G2EvNt9jh7{vxIlUaDArl%0w3y@9VAH9dzmS!i+9lSXG1eASKc z#d4h~bzyV^i8(9qMh%Px9{RSOj$B1t_T;LG%9{>CV-6cTXWtWp)jGl;F)^5H_=GKw zq||)?&4)hfOko>v3%&;H%Xerv_!&}aVfyfGUkrK^7FR|G-1H`WZ@W0_yEYiOk}O=@ zz)do6x(v{QCQYZCihFEIl-O>Db0%GSR;;#tT;~m&Nz}< z9DL56ZsPk=TFZjA=VUkEX0b0Mv-^1Z_dT zoC{%&X8H(G+U@|%VE)mH=OiJeEL7?$qJ1OZe!CEovX)e7kn3>&mqDg!kZ%PYQmH|1 zH)v*PkQ)q0P=nlPK&ln4lXMCzm9=ELQl^%=){?1=axJOBojn_uJnez>tOBQ>GYvLb z&zVHses7buhf`J-?sXv_nfBSLl*KlIE`(Z%avpuQsoZbp{(x-(Nrz6NWu(yN((c^s zYvM9!1L_K>d)T9)4AZHUusL8JL7pk;6w2;E!Au)%Ul-U0$Vxl~fPTquY}1y_R$(;p`8klZlOj&+vQ#%m(37U zp*xx7a;~?lfaYm$m4?l7EE~nx>;Fp=*Eu<$9vAI|Ix!%P!#i7at9&3aAPwWmlrW&a zlc&P7K**#;n927q51$t71tlhXh4B}fQj%w+!^hHq&I|l}O#e&>%Ipg~2_vQCuOdo4 z2H=^NK8|Tv^-I7On(m7SXYxH)eh$sd;B)rgV=hpDl#^TqX)pDrN=b$9FgB`3_}_abGY);=sY z;yP8LER0(COYnP4{^!IPMX84Ya@JISgWjdd`xTJ}|K}sJ6#T@g^;4$--#FWcNkv6= z#@7Vp)MszNbDB0gq&q_Wg!$D8ZAH*FN`>D#V*hyl>1#`p;9s041V6B8GO&-&N^5RVWd>`pV=!+-9x65aK)IN}=A&U1g_5SPinWN9ic|Cr6CO_wZ_D*{J zjmmO03U#Xqo-u{DaZdTZR)=`_UfQhm3N1=TmgqCBJz$#++o7G&Uy13^dYE|?Ql}=p zT8rHfk~cU(t3}-xcP^9`_ftUGOj|EbSDI zCd17Nj@o!%zL4^8KZkI+?E8w^__4N`%gH9&Io~CW?>Oe?e3vl3`5C?)&5GI;zvB{E;dyRbP_qNVAB;zT@?l`0vju=i4p# zU0L{H3x0PN{s9YqPgXtowI%&~v+kQdV@dx$N=DVA-&pwnBC8%Bw1j^k>%QnamiQmc zy1Vvg3;v-j{2>ee;Vk?=Eci!^@1v*xTTA+XnN>cn7IXMtWqn`CjF%pzqwfOwEa4x^ zD&I*hx;$Wu!pHi|oVUD1pYygUqvZ&v8R6O>Tr6e|7dFDhmC%h4! zd_KqJe-g+`Z2(@~z$2!u4;t)(Wqp9*E^EoiXgo4XMq@{dE~C+%pN{{M$!L^lG8#7n zZapMugZ;{;aU@W5mAHX!kDw$?5wnTaEA=QvMP9On2pXhEI$jABz3tpU3){?e17kv0 zDBdE0g~e5Xi|t+OxHN=#RMh=x^{S|3!mbAFVJ9LX)}^R>#TRg>c; z5SIY6Qd=<*V5L5gygVv}a~&&+mdU7nliOB8`!p9u9n@2l$Y2Q>3X(QF!(uRfreBctxv zQGDDhiaN)Fiz|v|jVdd~)48H(_E>NirX@*w6uo|>Lf1voE?*JnT<3NX{XHylYim~O z>m!2@XNQawC@tiGdX=ebM?w1AHQXhmaLWMKWyX2WppV47#8cE*wUy5QyJ_fVa zm@`J@q@KloVKg?5$$jLJ#IkuxT0Iy& z5n~V?1b5!Y0~gy!@J-nsJRsX5W##|>+-UGkE?%hHC^_i%bNyj_k{S|nJ_4s?J-FCkid?yupD%wec zf9103_$`XtxQ_bdl5VAuw!#{w&zX|`h_z0TZ7b|a7}cI`_ILII9%+(^qad!AoBf3Q zmVxgjwuAi=h9N~1?Kve9N##vJNbm9Y(0Pgs{|i~@l=?for3P;S;c=K_ToX-TDx3Yr z{tJHJ+BWT8sk#!@f_X4USjE!B)|cvQ%@VB6SF-g!U$Zv0@w-cD={HbL$=X$T&QwcT z>6K~zi)#6*)*TPJ3OEp?mBgQ@T zBii_SJ=wkrxU>M577^3N^vI}b2-^!7#3njU!W9{ELrBMJ@ZE0smMY246M+A1wSF6x zot>4P1Iw<%Ty{vEQg4CO;~S>;iD;3KZ+ySike(^*`>jzhw}=0JYn1Q$Mi`!d9ljUH z=22~Y&jVYOo$Yl!JiY>2)SHwzr%@)|>a7bqh`f~67ErkkbWRi$3RtDV;XMvjz24B-cyLY;SUuq%U z8Yj=rJ9kbN|5=i)uSKcHv4ZWFQV|82)>ohst=9xdP>r7&O0n}c)=F~SrS6GN2VyOtd-^mMJ~06s-xmi6>{ccleUw2UxH8LV+iu_Rvy9w&FNJ`l6jc-%O&>_WiEywwJfz~q<>;n^IA>X^yXmhpo|6_6O?mXU`Z*;MJ zHlQwFpv-c3#35>DsaK%J4bR_Hgzt0UeWBeWrbBN=x8ELF^HAFeGh8svywd|H$6pTe^L_=iB+YW{l~2 z{(#AQ*QvS88Ys#EdZ`QAS++j?-?wXefpOj;scpC#f0dGvCg?r*Tx3F<%vuoi3+j{6 zGQ1r;68xCck82Z5`x}Sa`Ms=^^p$o_2Rx)z3fCurBlk76WK{ds`-IQhdHe2HuW9mY zvURGuU$oNlc>dL{%_;mi`nv(gZxO#!&2CfzG%2+!!G9S0JstXa$SN++$I`N)R^Mx8 z?Wsevm-B}J^epMnT~Ude_k1RIX!{>9?oyK;7`9i^q4(AMMWe3{-4m5;nLU?j9b86$ z=gGrpu~$l~KWBS0s=CRMfp2o8)t>=8_?fEuof){_nO27p{ys~kdN01etH*JKo<{X| zmVF(8$;-zGFs5J+omjChePJ(tcn2E@|mSymKV+xg)34X?|evTch#Axz)2{^1EbA z+ULfk9U3F z4z`Z3mtC5s+ z7dwNNNksZ&B&FVgKIm(Kn>YBut1$l!ex~>HUvy~lmD27eYU=HE+agFa(!uB0UI%JU zl5Hrfg}UnNy6j~63B5{pU$4?A!N#>>%FZ7+r*9#M;g`wOUaMfqfKVp0iMnl#p zu4>F{n7C*)8>J*jORTzx#H8N{W6=o0B$DoS#H7bOlQ_QnJ9s=Qj75{pW7T)?*eQ%f zBM3#n!;U$k4h>b$n4pEN8LF}DWp%7j=h^=s@a+GOcs9y*5-XfVWAZ_2q-7dP(QAIOUqRbZ(@5_0(&_uz++8HO z&Qd3g(Q^K%JRXAdc&eMLVUAe%D7B`Q<65eBQ|}bY!m*uiz`a>rot|F(Bj_53s`HD7 zN~^~WRhL#CRIA|&O}FGKK~6VPkM`}c) zlUp-1vAPCpJntb10bXwoF3rVC^u*+hg8YM9Q{Z=nk6ZTTel*7LvPTW6QgP_U}n z3jZsE4^~XAw$?dJQ4s3nR9HS&5y4(TQpwL-q%hCNX)GT@Rl#cG%YuJ!Y6aAkCI3-P z8Jw!eX#GkL;ItWV5V44)iy|zPc9IMk3eQl6wu(iUJ0$J zefqDld*=*w6{-DZ?B3T*)Beray=$gdsUl0h8N2r~^SSYxv3n;o&CYL(Z!rz?Q28xy zu^Sb9_fA3B;%~K4t=ecKTKloIld07;RV4K-v_EKj)s^7XA%Ar-4>Q-)uGX2_pI>W# zUEgB+Nu+ttV$eZr8LX)Z4b{~6hicRsY&r0~)G88V@#yqJMq1Vx{-LSWl~rU4<6A|h ze;b?f60x>j!rQLb+;+W2+Z`+_s@6v_fq2JiyFnO}%8LH$wmZmL+y7PD9b`Sh|83hH zEHC>%Y`cSHW3}DsFy{=i(E6BOMFQH_svEJkW5<8ijwfR~o(%1H68X>Cai&G_c5IE6 z{+n2hF+22SRLb?_z?@_})Vv7?tE+{KLAElbL-2)yMOY#5UyeH~@b!4d8J!#10st*3v%6%Mg$GNk4&-G_8(f@+tzN?L` z7k@H)GKtx6AJ031TZD9x3X;rAD`(IfV--yL^fT(61moC5!23144f;8F;*2H4XpZD? z`x-@d;akGpr?_ktL~u+Yg0qrra5`f)BWy}~0q;xNnBSrE`ct$EX2OGhnfdD5VRE?YKgc1j^e(K; zqM%Kc8*?~LV5g<(s2q+{O*x#%`5ZeccTHOEj>X)Wa^-w& zgHyyiy1+{hsaXfn(tPZ{P4lteQIA$0CLJsPZ8~rl*+p5dR8{yGL7 z|008d4Bg@DL;t8Ww(&F;^ecmfV%eZKkn75abV`s;xstew@>p8)8Lx7^)XH^U*7Wp` zsv(1cfK8_yD@B8%SdQO9paH!_O~73W?8kAJqJnW5ZooMmhaJ*jgA*oz?{fylkPYzk zImpOW4u>L;DP$ldO|&^YrR(WujK=iEZSOb~Ng$Ov&EyTVK^r;j#50LCYVkqb*|H(Do+LY0DKV&*_{0-y zlpar%bpgx^u;buaKu|X?!q%ya8*AA;3I`dG`e1D9E?WW=FOQ_9!kC=|UyxzU&*+)` zU=H8gmnANFUZ`oB{Z&&ZN!Io#b#@Wj)lVY&Z5aIw@$)%+KMG|4`=v*l_!;5@s9DAj zDWWppD=%z^_gv#WC4EqhdI5SU%I67ehio}rq7)kUh#hmay)`@9-}&(bQL}xzJh@!y zPAu2joJl>w#T(}xe^W;`&&R+VAJL1%Ya`c+gpDf<>u+D0v%}*RMuBaVS9+L z;N1asvYe=2sK^!JWIjo*TBU^JsH52zn*u&AH(@8Q3c^V64`%&eN6yvn#T|`zjbg+k zN7yr0m#yqkP#Vf?>tK}ycfE$=`<(rA_4`Z5DEgj%=KfM?OfcPbI&&_!vmCR*yiR%{ zDlln?v^o;yR%u<#k2|(cL#MzTu693$-}h#=axtw`+i7?5op$w5vu;nB zm(dM#HC>TV7aCDZ>=Klvu(3Ohzll1SUz6Y<;T8WFVSBerzK6Hjs-Ye(InMOPHI@Hb zL^+Nn_FjftRvRTTaT4IU1jh!7l*t75DFX6OBn;^cj7`0}c7XIA^*tr{2oJTecAPyE z>ZYjQo>GqozC89jqO~OWrvA;Jo~!E>TdMSWPf#ppMxonku@2~E_Uc@|Cmj>=$0*+^ zu}pi^>+@TI$*tmb&&^R@c^ys%vXZbxn&`UBe`S zcwJkg)wMOF>e?DhU0ah?*F5w19(g8DC=aAsbh#DH)AeedsF?K#Pcp(9=OyYLwbpW| zoX78lCDfCkFUdtq6)4dLKksmDqMCg({XRqs z(4C}xFFVtevKac?eyFE4EG(X}2IzUtwEA`n+7#?p5Sx-*t(4LA2{%D5NUNVDYEMSsPIcQ1?4#r(32-^(lDJJT?O@u;5GcG6pa3f{tE z@J~j}VPo{e5l&YWgE6QUzFD}ReKS7^zMY0Zv+pwi<&mFUDHy*ZZH!6tL%XXusY|qe2aU+!C8AjQjX@Z_Lz~ICetvA8W&=U!J@agKtH24Z<6n;Cz}YZEYmYH4ocue{BHMJB2PM}d zrUSl6u1L#i#RliSGoY=eHz{Ttv`^2|bf$)ox-(|zfM)(#+6}#Y3tpzl@FrzlNS(=L z@I+1K{^fbxMiAO_b7=P59GX2hhhfhxK=?hkIOz>-SMs&Hl-H%k z4U+YIlG%cq$K|+^{_P6hy5q7$_1p%vcKaw5zcWn3c<-oR-AcoFo5|?IKb^^st=9PpMbMiU_}Zf|4C6^;+xjb)5x;*A0xsI6Q7@{r@MC_}s=7r{&rc7hI#rUxYU}3BIM&uBKIx z!{Mg$m<5Gr;F*#JW86w(DM`h*H+A|0BCjEHNbdzdR+1O&0N&7w;JGezVeA5XA*?um zh+#y$iHa6yf={GES2uOi;2#6xu(R0tyYXrDlGY8RQVfVY!T&P&FJpeaJ>NWE|Gufv zHQL#)UZ(fX*KHnOqnP1)=j-F$wHElV4EpOV@B;?@4#jM1;y3d(+0fb_E6n~RJTvuo zq7%=GQ|f6=sM9_`A^pOdW=y}IR6;F24OR*xw=eNl910iaGd^sL2p~47?+T z9Sa#&7nNipod`TmE0xR2>XI(mKGAV1S?sXcI$Ya`N4weCb@Fgg6#WD_{&?s%jIf9g#wc< zXk`JvN-m(4=`-{-W3 z?bxHS@(~&Zk?3WE8p65O>m@vO0;JCN6IM=PNSzM3nWYyXhq54l;$?|CyQ%HLg7Q}i zX53rQV3g;HMtS;)ZX*KA@stHzr*ME=0qrKzx`G63Tz8WVHQZqyV3zzL)7w;RuVvbr znGPqZ6}2n_uDEqJd;UeEnPH;&JKAKW0pTKNIy9xV4=};j1n`~FDwt%FFI}MN)l*?E zj#g1xxkb-uc;gVpSd@f($VQnoc1bJh$S4;6CKuaYs2fn<#Jqo*nH%1+fXl#mDeg}H zwiQNc(hQhFn+$X1--AEb7W|s)2E@4cE#P<7iV1L}JKK<>WV(;{*aH1N-T@dnAGMiv zMjz12RGrkS+a_f)CjjqYecw#f@vK=yDkj6@0+g36g&gd4U^)5O7}tt97Bc?7GtJlo z>O1Uq#$3jwk-R+;AdfoDJnAz%;2X7@!lu>7AWfA_w=kB?JCLRgEKOImd58!4;{pP~;MflJunX!`TCHte zO1uuDmUWf5QfjCbTg^-X;|;UgSp$&ZU9uw;uWPkc1pk)jFk>nm$7nMCCmHQI1?3^I zI|gM7CzH8cR@Xhpp5vZFbDVk`h(pQPU1{~oHk2m3stw!mIw^!Qkz!1oO4doWZ35ee zu({Iliq>Pi!H@HVViEH1;f9HxJt_d{lT;-@d*=P2y8P(@m}^zG@;7Kht(h?&`JBIy z*XL4tBc!XWRU#SP-WM;_@6VsqhBf{frB`@b$=or$dLggxDQSAE`L56P3-!6d)0Vlx z%?A7#rO`GjH1663-^-@{Ane-mAn>1T?Q9AWmxA;ZjDpa z+kccx7LuLMC|qZMvh!*7mQn+)-1dlmXZ8Mte7#vrR<{jEtC^nrlgL3O-!vBOTWB4N zboj%Efj@Q__>+f$KX(}TONW8Kb{P2Ehk^g;Fz~+|2LAD3;9ndD{>>=3Q=6097ELBQ z@Z4^V9FdFUGFkA#x}9sc`4iJ_v$eP^j{0xzH}v0}r$O4N4!NP2YrwgwxNHT66exzg zxfu1>Od&bUcbA6CWxk(jI3M%v(tHZ@?Jf3_w3Y^re?W`zNX!_O%3 zLaX2*K4g&E610@TA)hlyQ;8hsew%>)nI$|<7xT?8;i+>o-y#TIsD+joWT`2J84R*o z3*W?isS=*TJB$?en|Op6&1ofa7xy2*{68qck&i=`GRP&SRQEB+)c~2GLHZfw27}8_ znEwH-ByM582Q}aA%=gO@c5Z94v%MIo37er8*$jQ_W@zV|VQ#e93C;x$)&!e9;Bvs_ zg3AL3wP$kyI0;-KI2oK5ToE`QI0f7|aL^ZSo&c^GTnV@&IE+)&;?(2F)p$y?d+ybl@;1+>f4DJYUM}q4Dw**`Q+)}OVy1^|22YK0iG`Jpc$AIev zw;bHD;En@#Jh&C$R)XsTcLKOo;8ufM1MWm{-vhT6+)3b026qa$Q^BRc^@B@;8vwTs z+-cy}gF7AE25@J9I}_YSaA$$r1nz8b=Yab@xXs|UfIAo5R&eKmJ0IK+z+C`t8@LO> zT?Fo8aF>9)6xi@y7|@`6}>Vt-)~2+YawLz+D6G$Kb97 zcOAH&fV*C!!*SwX`2N4fIsiN>Q4@|-wSRZxL<&K z0NjJ%9x{Co_>L65BZcor;rr2*$P?TN;8xL0`<;`e@r?l3Nv&U4|0MmnH z)|>auBK?lct%UDC-bw~kHQ&7d=v=Jd8@QF-&%tL(x{}4&4^Nnt|I4^@vsk|?fwXSU zPb$kF>#oGO#rnQxhBhVPNQAWg@P@k_!GG%XrHl1BuPLokc|PXUe6OT(Oujb>MAM6Y zlYqCBGJI>sq`%pqzgeT#%Pcw;y?UF#_09Cdo8Q8}eN6th8~MC_R6ggANq>hyf5#~L zC1aM$l&o^;Sv(-x zx{j$k$D-+;ny+?d^005ra(UD!mq)d7G1d=@^>&TB&r>>FUFtCJH~e-n-#eED z)WTHG_Dt-gxAqRUzr-M{JO-q{*-;Z?Z}@iY?3UX_`e-q~uU9PWj|`~)v{$m-JKVGA z6IPRfc%EZb1>Q$2b=b7M=HRFL8qaeCw|$QL>$+Y&=?G1)o`4o!WR?#b=?M>$p3p9M z-c5RH?*(@k`1iqc4?OphKA3OyhIYa;2G9FY18%%0biXN|PhgMJ|TjZRD=e$AFAsYwwvsz=;4pc3Lj(P z8(H}1VZ-NYw!}||@ONYReJMM7ui8zD9sGOuYF4rHiR{4oatz6}$LvspuKYQXD>R5L zX5%#oZA4C?G3|?RS%bqrS91u-fD3x$16!{x#qgb4g$?|gWm=4dt1CB za5(yFgwfL9e$XiAT+uw= zecXV%MDu>+Ge_$Cj+3d`=F3Y*YPOX9lPGGvz*DMM2_0#|`{@W%k8Gn%XG0j?KXLfU ztAvaMKQ`;JdH28K@#&a6KK`$Ge4fRF<+4k=ORf58N_wV|n7#><&Fj+R2#gU&z!XP4 zyni_=4*o@ox^%g>Nz6ild0sZrzy%DPKCi6k;_^-1QVHc}AE?u>gmz0Ru0B4u9< zRtleF>P5KAS}$~abTKWj7#`&dkCBV1xqY^G>1U;Ws_XT^daon+&tC@7bds=df zsOh*TK9OR5wnNz+6ECI7xSuB5CsRd`NGcv`lET41>vip@E^AxY<36@4+jjh#E?wth z1MvT+gRr~aJeMbHI9*3=CC$ieo!+I*+to@MfH_<`Ckx5Z%e5@B3aUPf$_~Mq0TsoStsSCU3?!LamXhnDP*+1(;;*CP!2K6 zu3Tfrsc8Ej@0eL|G@;)<2rPhxIQ!B^`co9=r>)wKOT@)h=O(&r6Y(bzV+yp}Xl58=Q++?qnP4I`=>*OzW9TxUD38OobjK z)IfXdYpELVgkGhNIOC=Syd!}b5lcdwRU^vn< z0hx%$Bq170YzPhBtQ^FKrU~;uDZLfet+(*tF8)ycq@1T;(-^k zF6er#2j2IpnBRL<-90^-1o-af`}_R=`Ftkb{pxxELO{L0RrTuCtEyM;(Uvhav?V&0 zw$xSwl}>X@Jgk;>>i7B=@%K?M+fJlLE%Y*Lsi9ZWc(8`IgUVr}pnY21%rW+#YqD&`jiYE+e=?Mt&_`2TU&r;a0GW{y ze@~NX!ye+}%CL8eYCDC{7r`{|GznevVu{4i->A_r4)8eMjXOI>Q#Tt=i-<;VWp37~ z-(CmnbGp3}-&C}dfpMV>?3=$*x74ZM$>FG5YRwDZH9371n|2`phW^!y7}{!!%EJhH zjmCY?B8pmf)#@OUh#=Ob#E6W6G9DTx>|lA#?`z;2dry2l3t!=X3%YQbdTqIJu@_)O zurEFQ*`?RJQ6Gr+WaV+xsDj>%9qm>pARQh@!(RzKJRFk)`br;(xnr(g=@Z9fq_=be zhsT8siuI_H2S65XPQRg@>T0*pT@t#U_08fAjL?}YC8L5+cH~BPBa9cl@+6Sr4xrW!=_Dn%_Xain zSyEx%nhacjzPq70rMqOHf{!d3KRv51=yU7}K7VxTYclxWnFo!#HY09VM!ic#z4e>i zRb0js^|t&ZEbpuBBY%K-9Bq-tNENiF+wA|V`idL-qZ@DLq#_NZN=~=^&3(4#B^*!d zPSIbRg?%*Po3Mn8YQ+Az%BPY)JwhXV1#=&%rC;>~q{#rQMi`4S zO!b(Ay8q$#G#Y-#8eh*hTjT26o`?Rjd_V~K?HDU8@&fdG+Acn~LvMwt zyKK47(jkf&Vt*@1n`x36w72d16Ai202Gsjjh1fR8#NR1~(1CZ3WlcSYoKJ;Ccnb%^ zud^mM z8-W=pMK!mkq|}em7d5F-&n5b!{0_8_U>K_BKCD`15CF~d6i3^-qk?Kl^(oHz-vOnN{Pk!k!u>ti4C(o z-E?!gB0g*fjk|WxYM{GnmIHl@kd(eZdLrQ-ZeH(<3|1~-;U64jK8o)gE{E@Tyx-%9 z^EU_l76<(IIH(j(J8r&y6#g-%;C=)A@LXXgU-7zm`<#{#d_C%cS-$f*in`XggO*Zh zsh9U=VSNO893eS2qzYCKI73pP4r9)9zwsh+!W@L6-KEdAg~G9O;C4 z%e>tbZP0Y;MDY;6pT9?BeE_}WhH}IXVGfBZ#T)||)8Bb~h#{o{^&C!Y~VqEha^@O0Vp%4iTdsA6NX({wQ;5&?9 zE5%4?I6`ww=x`IN!FveG97a5BI6-Mbo#2rH3m0JFt03K;Ttz0~ZN^HGe|T4Dkno^@ z-hac;UMZ-50CIqDRzy0D&)wGq{Q=RISJ0?Df<%jk6YCpKI|kMp90weQKbFLZzr3t` zuo5i?*(8AW-7z<`0J7Pu67)2QdRq7ea!Y<2#hf}KyWRPoP@%x2kc5giO5OCUl44RA zq(DC&60JxJ6=S8!o*{GLLH2|Z8-bNg7X)m+6jqCcu@ z<688`Q440Ye`LQ0r2j+Garf7CaX)jPqYo`+-Fir#1*N*illYunPIPbYQ4?S?IWxx4nw65$9 zk-1dqR8}e1(LXEqcDrA9qn**5T^uTKzI=hS-Y= zk&RM^`c(=SvBE^Ulm~)VqKb@gv5Q^(n^k$B0 zszo!bdvrgeJ!o%;v{U5|%Hzt*9=U)h_cB;#Deo)acYF7kz2nWe$9+AdAIa1Alqj6j zOQZnCiD&`zd9T;IOk0@)xcwh-L*&Pj6Szh^@J{Xxd|r-}YVUm5Y(4v@W$fc(}gB0uzU zdl!F?qQ4VpcbQXn4woMo_qO1Ib=*f$CL;uI^Hevuko!d?PB%HG416DyQ-%GhX;Rd8 zEQ#L&Wx0!Z{yy`LJLYq?5A&IiR;hn4@|jQKzyE;Nz}#YVtfg^sA{(XW^Y@g_yuasf z${*+`TC>RQ^9sE-QMb2GGi5Xh_nAuYKA!3=#XDLxD*BK?%RPQR(}=seZot4(%3u}C zDe@zvPFSD*+iUi}r$wwiF&DJgioG9#d`M}j-P1mNm&@eA3ih&$dJ!HUNV%dPhe^Db z-?P3)vGDhK<{dRc>RUv=MqNWVu6!g(HIWi)9Kl)^%iv>&muEDJdf$sxLYFRQoR3tIdy(r!Qh6 z;TdpEBx%_Db&I$?q|fnAm5g_!8i8ZMI*h*7V-(JV^%!s>c*aLPN!KrGf&ZeUBeP0+ z+%Cx|p2u&78N9TO#0iflp5zjZkzH!xIZ)a}{zNK83qE^@)H9Zh6)>Ps$z03D%K@8( zE#($AM;rtj#AH}6Oya})!-AhjZ!-$cq!naEkG0=ccKT4Ri*Hn+BqY|Yj7v3q-CB7i z-*Jm;ux@2jFHBmce)(+Q>jl;#sxFe6< z_%6c2yBzP&IO06%fIsSh-=Dn>J%-;kAp9O?%v_gR`#N(@x5jHq|B9bZ2e@k)Tr;-Oc;x+7@k^j*YCbrtPYZ@`mo8=k8& zaw|I8N^x;kZWr6Rt;)*nQZu*9GI9$YYo)j}E4Rz-+%C(?Z8^`)SiFMboMz?r{75Us z@~qr0BvyN_fOa~A$699Qa#2PuJMCPSW#w{#oy$dLF2-Wul&*o)N?l$ga16NwWpi1h zZY|^yaJ%{YJbs(?bAC(PShO0}J5l-HBt8i^hwEFUK09T=T~KDFh#%j^`IRHJjd7`o z71Bg4eAiIxyQR(x-;#y(qc@q0k3q;=TB2!agBG)#?`3{h_?quKlKRv40xUm zzsFFo4DV{99vS>zz%wp~PRX*QSWm|FW#X()hk1yIU0&qo@!&FCsh}r#9(oZKzSi+? zP14eDT1N97d0uYkxxAk|muKX;!jb2-cAm?rQ$Od}6jb9rA+m z^0a)Oa@P0mU3azTf<&5&Hg2Jfb73X2??k2z9rei|Qd`(W7SWHRMZ}j|o9p54#qb`@ z%_Z6pjPIdE+>dHUY`*=H4Q()-*T>^;fLbqpGCu4<4fnme`Dc1+ETlhT6OPK2YGXdFE14<@s5AqSOPNC ztr!Qb7ak50sYnUDTA7)T?j>5BK07YYjrj~&llL&xT787bp=C^`Jw^9d1@(gJY`3N5*?&a{KP z8rN&6M~mYPZN)go-(9U)8HjP&{m@#o@rJb+K2 z)m(Vuc-%`8KY^U)&m-}l*3jepP^KT`wcHN}p}e-2jPPrNan!s3V?vWPce@|Pq<;`G zeu9>M7RKX{QG1I>NZ#-6P~VHnB;*!vZqgC?)IH6u`EdkJd)n`fdLuC2_! ztMOHH;lHsOsHk!;MU1svq}_43#-(S{@D>b-M|SWKz3Ykfj$_47eEvNyf6rLg zrD-^fnO5$JqMM2qAC}eP-xNAqd^|h@dA}!4*hN{r5MQ=~R{IrFJ;p;cDG8YEak+ZJ zPZ(F8Lu>tBXcMu<_LC$)5Q;17Wu&ERFBLr)fjpk1d;EUd0#AY45m~s2wVxA@K;A|h zxA^iWv)WhShxJFEvh2a|rl>Thr+15@e85|}O29GhxCbl9lwQyt4?-JyoV|kl0->XO z#eIv%9oZ}H8yu?l@E$o}%?hcRig)jWq9qi8t^RkP57GT467rVU5`qkQS1fGi;xoZaGi4!V&hqBi(XHhheh0 z_w$7vmYNV#BYd1r8on zHZzMyHTAcStDGrpf`rIZN+DfII`p@J2L-5`Q;W6q$ zBn?5DLM``oTyr8oB{K{m;w?a@G>A8(J3_=6tfjYf!c0qFBBD5Tm8Y2S1?nip@)^hP zfy@;8hgt#Nb-Pqyq(#4nw&)vaYw!;EZ9vTg{dVfq*O)cawjrj^QfP)Q$C)$jHL4xv zHuc)hn`!#+EKD@q1@*&SkJiS!s76~G)>EV5PHry=pDDEo^3!M%-dh_t(Rjn{&{p|S z<2Js_8=r7HtivDh1SRc@76=RPwL((r-#o%*9eq)uOW*8@Dt*X0|yrriSlH|Cj0O8*6aOX_!01Ab95fZ#J8ya({iH~Py>ZM|xzn&@1J%E1M0{u~?k;Ef^gY?yes;!X?G%6oW z0_2gwsmN|ghB~%H?x6wll;e9NeBTS-yCfN?uQhT9d_O!mQMrMpVH*IpX|VPMPem~m zjtHuUU$F2{W?B3K{bSEoBuk!eI_X@7nBvxGkP0`)0{a_WnsMz`9kZld^w z)Q_Vp3GdE35P?}j-dUhN4e3NXdEt4NXfM@jFRNY4X9>QTfPB%0wR22bcpnXMrt-Fb zQ9(=GI0p0iGo{YJn+E)5FwiQr(0fu5iC5mk&!YnLk-_mQr1}q~A{MXQXhNR?=tdKo zsJw&La_GH-6IDPfk#{+Cg9(LJuG(Nipx|d*e_e4zGSzX zkJE|OZgVp3g`7G|=nXDVU$)~bM8q^qIyA4!XU`I2t(9&t z@9T(rK3%iKI=H3$9vTM@ss*c5)Zd1;%4&EkA}vJXd=+n}whY@y^K3hAD`yG&eqOW!R$m3MrbC4cy98qyLoNNAMlGc5^c9v;l9r*TLTpxHnwBp6ya=A6Q zi6Z|)FRIARmb(|`#}<$C{>vk? zOg(Ju;o6A9mnZ&hn`PZg7jZIuBMN`s&zWNg%chX~<$%Q= zz#^$?EUD$OWMKhI78SCV;!@LJx>z%OGRxLAG*)>~*Gcewgt6JCeqV$!jdnDx@>EGq z`qO4xwh4-uxO0qeDYXaZl^@daLjA-8c0+{yK5@sZYPM-lwJ;GYX5yAtYhy7pVnvMm zw2WaYSlj?qW#KOqF%|Oru_r)&Ac=-zrmIOaCRD`XKo5>5cw-(X)?bKs8Q=GNOv&pU$Y&z=$J$bNJaE}+zTfO7 ziAXWSePlPZB;qv6jxkXaF%XVY5$dd=R7A|3NH@e8MR7Mw#7SFNLy4z>TU3)tZ!2o4 z87`kXFMWsd^4ZqBp2wVYb%PBr$bjEs!?g_fCL3PJ#2p}U{{Q%F(~fB{p9y>K+oTS4 zXDKB~fFLxbzgk+!=k>n=_2?NC5kt5nAOy|S41x`e$BAsC7}6c)}u&$eWN66W0V^3M@>3b1T$d$kvqcn>c@ zcR+nm#}6r5#CQ{8IOpIa=Q!tJA%Bl`z${sQ`W)xIUm+XLo@3n+EMUE*A7{ItH^-85 zN|{s6xo}R}UV{a@Y>v~0gSfZ$n?CTl!x7JdJvb+Qui4@c&&;u9+vzuZf{l6R{cx^B zJ;&sepI5mojy9wu&Cv>=y$Wf}zGuzv(l~Ij{JP3*L&;HG4;cDFuHes<`gSSarYV;q z9^tz>U%>Tuxu#*6{8u_vmMHgJ{Ux66=aS=@1Y^MML(LWn|M{Nu*Xg-xe4BN*G@l7Q z8BuFIvin)deVBm6MP|7h#4Bx>}&en=}`QIS*FrLyl z;#p2X^GNtBwA_oZ0+;3z`ubw#{B4`1a~)(!IRvuO3m&}NfoFj@zuej;?5k?h0{taV zH!)_1m_Z%~dM)DbutuPdQ)70J8FL_{EyUuX52;h*f(YJ@a&nuv52KM{S&tPoTnxU(*k2L&8Vz6L;7jLWN84W*b`;CA>HVoT zF-O5%qTcRdxUSVtWXWJN{Nj-6V%ni^_2{sgIEjgQNTl0i(nlgH+P9-I5FZz-hr%MG8 z$HnEyf42!6%OPJ3?N#cLaREqsyrLBsyGgxPTI?b9bSr&{K0#mU_Kq8emK4T7esy+! z;~~G4UO5ixNSPc{ zQfk#WncHZ`8{-6ZQz~-_-V_H8Bk9%Sm0Ib89!{a3Yb^Y>#XnAK7jvOTj-n_}g=Cak0<-WNgP7^>zEk~a5HoMNb*gSIHTJg6j~ww%$mc{{mq5uW_31hf*MIm& zw2=s0K4ao5L?4h4g69~Ou*wwY7_h2bIF&`EQvM8}$7+}6Eti+d|F~h>2WW{<{=jY;-(<;~LrFZ5Z1;2X7eDHd^n8UTt zkD{f#-=nBusfK^j^zhI8Jre#_i<$4!fof(W-|CANRNK~#;Jp8CH}9mX6Bw@09M&rU zf>7L%ME$h^UTTgAsXI@zU zPu~f$$T)&|qdx6)-m8PMxX86if4SNGhv!fXIkYxEMnPVj{w7UKf0^HnNKF3+m)Bbx zPhn9vo?LsqhQszkaISgZRc*{_n?{CE(Kce3kmYnR<~6Al((59yM2gv^Q#qlUh2n zXfM&R6X@X_(z{g46gU^=?JVjB2ttuAI}VF3JNux^{&2iv(7|yOB^N`aqdOQBvMtouz4G4xXo|^AM8Xgv%V^rx+5K}(9pEaw4={-PO>y1@(0GXR9ssU$Qu=F3Ovtbwrt^Aj zu9){lUV2turG4au{?ztBUOvWox0cU%uJ6LU|D#n0HZP+Ns#OO|m)r;8&0Ox(m|@g& zIUUM2oHxXD!oS7sFthAJkYHYirZevu6{6M3G*?0@Gv)Mu7{&>ZYmn!9f+JU0o8h-J zSBBnE24IclS{d!SKMA4-&*hzD`~;RSrSE*7K2PY3Y9JY-y@$z=^Vc2;wTHdsELjO7 zy%I)x<#ba{#WZKmvvl$B=DKJHOBOwE-hb4W>Khh@j=sEn-hbAYZ}!udR=)TCXE^Hr zbkLjC7Oz-s5lgp)wV(cvd6s<-qY+Ay%CMxydYkXpRF)9_4J8%YCE<;Nx0UH!5`-0o zCbX>cS$aINGtDyfbeUF|_sk4Bo!&dVATvDHJAB}o=6!XwRfq6Mx&+)mbn(6kLY!*A zC+z_NdB?Ab-yKlIdw1Fcf^4j-gPHwAf=}x-)A18%Xub1sam8uT@Zxj=i3Hnmo*T!aqPxm*Y8IQSMiQ22dD-AIttp#NGgQzkr! z+EC%W#yaQ^_ZWiDG)~9bI4M%P%wZzd|D;Tn!RifbfO+r|_ZjO>FiSk4&l3NpWR`fs z|3ZlqphV#O@JyFjWtS++=@LhXSfWH)M$bBo5{KapBD2I)>-X*k(YCJ-@fhnSLdn$x zpXriE+9gYll64X5e^N5^=pa$Yw~Tcl-?_^OKFyNcMCG5w>HTV#YAmP0NT;VPk>22{ZXygV{d~efE!Tr)cP>e~|B>rvp4&`mKF#eS_pO zR|x+GUUU-b^vGyy?Vm6ThOmS_nc?{r%CEwn7Rs+5GfVEvB|{nRzcuxiDglB}oOL5S z9C1eZRx7Ah2k`t->Q($S)(D;i@jSBH2NbPb4CQz1ai4&4+g=flcM10yhN~3qtfAyK z3|A6sPi9fvA9Mkh?tc^^mh;F6S0@>ORy16k9w2|-CMuEfSvAj!zoO8JuMrq|Ynymp z__TCWYh4vU<%zXZAf!vkCu{5M(3k{aPq<)@>Q7NP`){6SLc-=%R&I1g! z;#O!0jnzyj;<+8~a)4)c2W zdFKc|S5bmKaYn-PCfn}Ujnq1G={`&B+oH5XiDeJMw8MOsxUVPVgQ3JJ9qgg3XDlu1 zLqbqUob9636C{x4`JU$|MitC_YzV<;X8J+_%Si9$>8mEZ-NRFVsu8?HXyLT^EOG8C za2iIUa;Oiy2K0ef4l$UxgFK8&MK*pP3jE3mN|o6-miB?8FC(v7wpZZ#5#YKzjqB%U zndcom{}AM__mO`|ANix~a|K9Qes0mh#B)FTlXaPE`@np0em_JqA`=-(CuQ|9YD8ka z$1*_rTi@O3SQ);b;YrF|>pr1fEqj7u z4%K;mmfJeVm}b;`%QigB%G@sY1e?29HfgN2#Mt@5pP=?7>JM}?AFU3G+q_0R-HPb3 z4mB{GI|J7%>0N;Rbqo2w3tJ;vQ9Fg6q|lS}ri^>+iE!_G?AG0M?8zWW%z1_1 zx^JEP3N_|@MllbdnbW9uUMbQTaBP5fM1tO8{+80a$5Q@Q$k$K{$6_9jaowuK99Z{K zSohBP2e&!iYT!J$O*uZp=J6Htt@E_W{46TZJoWk|z)`og$aCXwm(~LpR*Ky#>*Igk zOH;AOln1ByxqedtMMzYJ70C5MCm!#J#s9JwD09>}gO3ZDC^YUoN}5OzaGiiqT0=mzLjy`k+2Kvw}qD+zTA z{|LB;kNyeFyJEO+-0aXpd40av`;5n4qhrOHd89#{f=3$cku?r?J|cBlyrGUE)QV-m z>NXYmN|7mt!ibNV`y{)2dh?C}Qh#3P1n+>BgYu0^fdjWh3p@;W_r%Gi*xk!6HQw+V z=VhuKe!{BbSM!BzgLOQP*Rem2c9(K+tgI3=z6Yo>#IbjqG;k=!Lf%Jh-e*LnGNa*h z`1+*>bqH@qyCe_gnsyPqXAdQ__@FGV--Y!?RY)h8a z?S}P7t%CarC<`Q3f&@!;^dM$Y@>CCEpv9~8EgX_ke+M#K>)KOT_&#Ab4#(-lv+eWT zX2lyc?FERl#c5}Y^Jq=7_xCc+4GT=0N~b}*<3V;yYxnHp`BPKJ@w1yhA1Qp@2$0MX>*Kb*3%S&9!NNm|nO)Zfvc&>@F zM-txRkAFykugF@lvR>ILu)?$>$@`LctJ?K`7CpCAIVoo=*O>TklJ-Y;Z^$`UzQ|#- z?C|*GA8>f4kGi*j;##0i;k)~z*Ew0G_M+DQj14z)w#79{b`MM@*{88{{roJ2=X)j37x*{ez->DsRKM1<1xk5aK%iDB z{qImN;`25Y)HB9}{|4aPKlS7A75j(cN9~X;pFvxo_SAI#Om5jj)0P9rahL}EbL3zZ zN_j<$KY$5e%nQe={L9!1IYwRqevZ`sYQG$7_8}+$@vS9)hV@Z=3tDn$f;vuO@vUe# z>vZ5lcuydt)GCu8=07231HaMXEaCCOG?nh)y41|!cQnAN9c_FQwg-zpfw^Bpt1{yC zkp3_gcSlgd$sx&Y+o`i{c{^asmO5MZ9+KU%Hxp;eq6H95P0ga-oq2vY+Q-FElu&Zq z_=Xb7Y$D!%HC8#So)CELRzzM=n>s$?)RBaDr0-zAebs)5zDlY8!kl7ba-ToYUmk6T z%;ViOHhd&kkXsKRzMX2dk6Rmt_X_gl<J~-d_AUJG8AwgoZESymi;Q1A+rC0+FJE ztT>>lHMz?UB-T%6QJa6lOuXZ9DtKs0-B9Z_;co*E1CBbRg0vsdrq>*#ea<*!-QMEu zbFe&S9x{*jF^|Z>@|bnVJl?@P^qSm@diu*Fc}ULunYg#fInGVMaZH=N&|}>0iCzZs zXiD8@Q(HAWx5M*TqPgSiPh{g^mct%EE(No!P3Z%OvR#ah$0@eF@yus5MAp)d({^~) zpM#nVZsHsPFy6M}*AAd}?7i*04?m+8edP38$JRsg9^|3NKrQx~{PQV@@wCmuhaVOX zpV}`E*I?d(+3}THb@WdbzfS2gv|9x^`X|KyRbGpI{Qrym|2C*m*-yA&5;}BvZ*CmL zvjy=R#Y7l2^_MO|pBwN)d)`6E`lRz5ajyflHVu}?b#+i?IUnFxQf@0n(!SBOfV{dK z*ZHrQb`lF<{rA$)uE=ZAeA(}5lfy8F=Fp#Izq{6hd;Sm6(ZugbMIN9>xO`r17($LG zejj>5fqvVRUd?pso0T=i-hvv!GRH+XbZNw2e21Z8vO3g`&S7+7Z4xq3(twzqwLcdpP^50O>C6Q1zk$tGF}5od?u9;^3UVK?nKc~F*Qd87$RrMzI%Xq53tK$4Y8i`=#A;}UFO}_@^ghw67H$XFh;+D|3)mm)2&hMOHE2O z7kT9%?qFFq)ki|Qqs?>@Pbd9{b-;CJy0lcH$SXBi`?R90OklNMnP}d8Z*5*RIWE7F?DML$)_XJ$!}X|__`G{u-k#%J z7%%)Whr>#~#XPABF>xc8Iqv4BBA>W}Zf&6EOP%Uhet9J7Yyl<%!_R47*XGG&Y<@g5 zf7#nJRxS}RSo2Oc^N!}>d@bP_n-}@;%@8;0bwgX`A}+U#&3BXdz%{h$ci;Eyk>#H7 z8;E_>TTbw6tX$Sdj{dA1YhjfS)%B=m~kmet{>m z4wAQLOk*Cg+NYM6P+Wflo_qC#zruJPj7PjZeYKe;jh6DbU9c#(;(8XvR;+OIQ?su$ z1;a;?b}w*f?@$u(0*CeqO7f9F&c#JYNe|*&BXY<=&da}nqI~c~&U;%%{?(F?XaVe@ z+eY{mUd{`eFZ{jetqM}nqnLKmK0H_0l#9>CJ(%(=Eu+kte-5AdJ4xTVw761`cusg% z$;hxN_XCu3hR~^SiQUd4vUWSCk8$pH3eJ6_%^~BfpR}!ZX6}N5REu^?Va^*#s5^1- zPQHH`b(a&Pv!0<{dVHdG&&4EhvAN56vAN6HaSCf)`xtFq`6i9Ja|w;39}#*T{j;_2 zK~D|8Mj6^Pvi8G={ldDB)5yfVs79W~-GKH=slVEj<9A(4roAVvAlvF!%U? z*XZ$*;z?G{XUV{Ov}Mqfv~|#K_&o;m_~c zE~#16&9MW_tnz!8)nJ{;crgDR2no9~e=J5d^b2}ZEm^KHJrTayT@9B-(Yel`=A>dt4ELeQt$9&w~ zkb(1CfHP7-_%&lh3)FZe5&hWW=*N17z1G5et&8J?;S)U`*~E+2qm~9C?S>4DHWyl@ z8x@ek>y>+BfE?!%&T*Czt+ciDv3`60wg0H+h3;i3w0l(Xar^?Ffs!b7gd)O`GI)z# zoqVRA86!@I@>6CzobG6c3A`On=j{;u8Q+dq6sXZL$~KtA1>Ox=c>ldGywknnU1Rr3 zz)LdfYe_hFUdHbxK|SS1NPIHPsUTN`yc;rR^yNx=M*pbpBzOjL<`4@OKlwG@v(6bF>Fzd8 z?f(tb9&-N|%(#=h$CIgU>WNSOfR6WGPK>k90f}!N}Gvd>fOY9lg^DKI6ab z8=H&zz^2W{#yELD?JaLOu@R*L7xX>^a_TdZm+*4o7w|nfn5T{vd;j~v_~cIjlN=&K zo){cI`4cWB+?FHco+Gm4p1%}l<0Zx|$Lrj4Sl@Ec9*+lBG-G;<$?sCcCA_Ov$v35| zU=NlO@Ld}faVyAx9*t>|u><4;?}Y@PR_~4{3rRUE^I-p`M2P5LZigRR^JFjcOoZQY z-eV8a$Hq>P@(PFK=Irl@Im~mg{uY=YnbkhOjHcV?{kqG0w@)9XX17!LI+SUn-lF+5;JUpfTQ=(i_1lc0e zjJM@5P6M8ti@m)@Vl=$REmz|@IYdNWgy1=hG2uO++0P`EB^o~E)@*ynd3tbS!l(QO zKiW62{NNk_97l6L8E=Cz$jY`#-);!Vo#`77eP|rS+hEkQTt3?8nN|rxbTRbI zYFGiGofy;aXG*MBjmRGBR85bwTA~BqVts;oVR44xMlcR-6~p~?fS`{O!l~i?9{f&5 z-ou?bcniNF!rzDR@VmskKS#-tDdCfPh-@@WH2cD~?+Xxwni4RnaUDyH)J#8)Lo`08VQ4H1pBU>;>%t>B%V&L*CG=+qkAeAf zsr~8x>f@EN>+`_j)CcmOL&7)Y(xLJQD({gD%h^DgJol%<BHZ@PC~CtZAJoNMehUM>vm@>;J({xa z(VfB2hJ>NcVrZ9wpAP{H;V65g^h>-kho6RBDY1`);dq{oPhkZ}Gt*%{ciT2AxNq^4 zxC?%9M1^{awdlJ5JAvzT8fyRp88BEQFhFT539ytt+WS|M1F*l0g_%U|jMRFENq)-X z=^H#noKpd>=5g0}Wq6y(s$zJq_l?p4|9^u2Xa%4K^6`s!A}^QubYq@JNPc%Jw$f|N z4*yf=Hefyd3xv&*GO3&Uqe6Qf)w01JuxUQFrW z{y7=|TQxxNi8PN-#5`!e{RD5Q`GBwpuT6v`V>4O$4*DcV+1CBjDGSU!SBkX6NHUmW zPOaUpjIU0X3@%{F@($+oJCa;r+WoOHO>x@=MneZPZ9vf^z>J12dlzE#91r2&oQH+K zG8!@LE`@Ll`z0c+zC~yz0B>!FTst|Jox?DHv?;~!YX-w#ShTiufkkU6lh#rWT7&Y{ z4x84z<``KEX=Vx?oAyq7^)P02F5%z630B*j08eU+cBq>Kb!!)O!?`ipj`&Og`4_0I zy~~jc;DFyE7goj=Q+``Q{~CMEQQqj)UjD7g*dC1}{3Z5c6Ys?)5ff^@nquili|A1! z638eY|-EYhoHecv(DQg-sN~d+J6~Qwv>Skf%_%9NWgRL_>}$+X(d`RzQ2p_ zen2nX-)X+#ZG24%hHF;CO#VO@JKn>jGS6bJ%XFF0!~Zg+z6C}2l`i#0Ja3S@)LOht z<%xQlNtZgdUihAR0#>x!Ln-~$x^+D4(;jU=O5Y7%uxeC)gLhS2#{JO3kxd?t+t0mM z2t33-!|2nz{97~kLc?Eb9&E9TMJ#Bm(`fjKfai}&$SZiCmjrxXzAt_o-$C79cQ!tO z&w1gAdkT=t?RnfT1M-`rJBE^0(=J07OWQ0SNJ6rZxqyE-Ldu(t^6+mxR9}qtzQ?B` zpGXFURq5hRher4)!oP(^xJg$dh)MY_w6t6+D~>Xp)}yzFY}{3u%&8)MXUO z!AMH2k`aSkD&9~=!G0^@GRjac|6&tF_RvkKDmFGLauG1@KodV?M!3F%D zuDHMT_YUE|2Xv-&i*w9#pdkR8&vlEBQgDxE!Rb4s?i+k^z8r92YmAdyNcacweuR7) zQ2((&uPAjKCF5SY`OVC47!`S>%_Wg8eUiME`_9oxs`+WJI~aaVlfpk9MozIOG4_@| zV(L$M-6Xt`FqzkbnLfmiH%^&_ZB=dR$9f!hj2D~jhBg|}-qlukJ0Rh$`M<$z`A2A_ zon95b?t!mA!Pj&AYdsV9=tcjmf;={x^Uj?tDhXSFyS?bKr55e~NgI@ayn@>qX(S^g zz5Hwiy@8amvz27qolGliZNHmgT4U~d7_~=_ht*^IZIIJiV$8mcX)r6@2JpR*qtX61 zh;Ufj-5O-oUw5a(+2H=k2Lw2!oZW35ovFXWo7bm%vXa{(Ql32#4) zlSq*w=usKJkZ7eT-2=};1u4o4ZzUcMxx%u+fczZrL{ zFBLg3u2HeRf8$L>ZXQ>ogs3QqLjHof9~sw4LhjXyi3^0jIldc0#psdhy3v|P-DZ-R z(;Qg;p6y6eG`Mr;;w|HTEbj%WYaXsc8y;t!>W^N^t-lV)_%;flZ`En6H!Q%$k4kFOSUY_J zatXtXeUj$fZK=%I*%7-vH4eR?5xMgmIzYX5eePvlk+;1~?o7=5S(qgOGp(St;Xa0P zk}*MqGH$sRVmrQ#5X9D}u@SVK-#0;iFyG#fDOf1>CfmsqrY<4W#&Q1d$o=dn5B}IJeUwUx_2)k>P41uzr#C~^cu673HGbo=y z`Hlc%K%BpwQGbTrmxWn&Uo@??>wcE#ypOdmzKscZI6~JW++#XEQ|f14^v9kH7>IJjD1~wz z-$pf*8v*)YDN{D0WIeTPS~f!;edMrddFRo>E@eFOAir;o7AnstmKDoQ{C2k6j{Vh0 zE9Bl@A;%tLg*{_c87f(JW!b(U$ei2ly>;#B?~Z zVE368Ijz{2A7$aQxfiC9h?QomozK;FK9Ab46*lbtUU~oOSS#c)JN7T_*jsGar8ev# z+g>R2COOK^>FgrQ7AW+tep)a4ppP7OyM69O`=FMMlnWLLyQPR4 zF^27wsN4eUTQ6@jt~ITG2ec-5MFH;-ysv_-$LA*KaibF2J@SbcHTe{CUbr0aTFTe| zg4YJJcx`l4Z(iGLXS?ZsNS8-MdM{5OfcaU3=E2JIab^^3XYn{v^QWa)x2h&9{uezW zexVsZ{DCnY`{TWy{_rWw;QiSr2T9`*mQiNptJ0v1g~ zl>YeFxKRhUjFo7+pYslp-pkVmq#`0hp$*yqpAg{FF4_RGuWGa6LmTk;#b$hHgE`O! zw5nfzT9(023$yS^&Vx2^mI-Z8<-#^_b6l_uG-v~(Z8NK01*4%2#y8-foWGf&H@XK{ zq7CQ>_wayTx;-MVZBG1QwR|hLJybOtBw5zV?&G|Wkj%JWLtKQUIr0TP90S$k6MhK0 zdYs|Nq4DM&`dXjYlh$|re4(&Wo6wQIi{SYvJo$Klw}k$HxDl-bl?Mft3wtxx9Q@-# z;j6R1aX0u-<4(24T`O=C9EDrqe=>3}6Z)>)AL^o^|SyI1fKDR2bnQp6G%00c~yp%nV}V8$mzHB;4`H@ zB&;2)tN5+aC^?#B!k3#?k^S{TmKc(yYx|RZ6UvzIFduorKJ;x9v4H;4=EVUfhe>E_JB?D#g8+?acYLjU}~bS+ekH)>^dFu{U|n zB5Te2G+*;7d_79Z!bP_2u7cLer&veqfVXiTN`yY2L|Ut!g4nqfpCc&adzvV_yDTm*Oh%4<~^9j>VVJ4^hT6c1~ zW`1gaGjZAr=*v#wc4+_4OWS~!$KqJw-#>8g#%1(YD!#udMSbtjaK#hf)+_$DUh%i} zivKi2Pv)jg6K(|(VQJo#XWNi{3+lZD>)n8Mu8$-A&1%QHowM46K2|M&v-*80zYR{P z@V?q0>P1aF1$L(QRUZFC2kePk6<5p1ber^*EU9${cEKA^2Nd?Vt+F#E$&Tcy=M6MPUvU6RkT$Ju#>~M zi-*=!pTg7TUU?nu>Nl^*+gu)in#Ol9m^C3+PK{8jv{jQYdMt|7_-Pu}>KiW;mQ21# z*XhK?;!Ll zEmV?Si|_1Oh@M0}9iO?Ty9VlWH_~jg$O%tB$4gCol`$Vi-$&fKRg|RhLY#zFlDoH7 z64f&Dsfipdz5yG_!p6*3*bs}F;a~FjxQ2uoRTB2ZqR=YeqpT$f3{owhd$mircFprf z^R_;*ZT0+5vE9}S+ii!ycH4h|t=OLuJmQ~=#o0Xa*(j~;m+P%n4$k$^FVqfpc-;02 z2dA;@7Jau^*qcniT#BBhLKLl7hAUK zC6BomJqq%?inm!mxHbq}n@n6qn-0rrQ&!QtO<~nY53YMvOGc57*iT-g+uv_rc@MGD zOHh#dDXeiDcJh@cwwl3&^sh4fDxm%4J>XEQNabD@-j(*xHM?8*K{9k$QB{f+l`19l zolMvs{njh?oqcB8o(u7FsPHG=x5Q(#iPr5h>8U>n=%q2)dW%u&gsslvhEX~WR$bey z{7p)`nItsatE=gk%MLumx-w&(r=jdT4EMvZBxsK=iapwW1FR7stbipnSnsfsUaR69 zbCt{MkEvWjiU_}*8P8|NOR1lt%%$O;+XyqS!C9CGY|M?KM|ht$X3K?|wO^MkeuQO~ zmTQ)V@-Nf?q-Yq6_zS^Eys5wTDmg@Z_0>idB-N9aZSLUjd1YG~8Fm35Ipo~Alw(tti(cJ3m z&fZpE-Dt^w9tl5KJzRu` zzecTsXP{+#w2&P`s)HZ*ICk+=yz`#6)`3r&UR{##tFl>UaEVy!6a!mG>BG36#28vb zRfiEF^NV;#FA;vZQtC(|e6k%ug;z7wlNdJ`Z%(RQLs}+UK|TdO|FhK}5$8RN+)*DjeO+08 z2-=niS}4~mJq3<)pmWSLDSfOj=RDOY;&YVN6hg3O)B-=tKxU~d+Qwc7PD_c1bv82f;Ni>-(W5D z4Q2%2WJ&raJomwKA3XQMbFagP-hEd4s3+KMYU#*7vP8%qX-)NbJwc-0R;BVXTH#6WLED>kfap>oLz%HD=IIJ_pPnV?68=HKTIr+_Z zODuk4;UVDUd<(uW1MaoqZ<;p!#7{e4*qRQJd!WC@07_?*f3iH=*8PCY9Z*eQ6$>MidvgBPT zBjgf!x=8q2h37)Z@#l;2Y2|IT*Ua;+c6=wJ9nZ4iZ)L#G>nHxg^DRGAZ)fh_w|EQ)iKd@H?1gL3x5hZaQ+m5k&G2XS-{+hD z_q6vJdVc%>dfe*2TkQV(kXbwh%evdl6I+_`mi`x~6D$1w^97xy!$0DA?}u0xzK{2V z?~Y#hp6$Sw&uv*{f09x5-mLJCGs54?!tGOz+h-2kK07~?U#mc^NUz^mbV(ke${)+v zH&pqhvQc?bc~$;bx96{%SNqJk%2Jb8dw$2uangU`Qj7i{0{Xw1(|-~7RpsH~1D6W^ z*P+hM!PYO4l5C)qlm|#jDIg_XrPAr{VkytmoF$}cspzL>y%^oe*t8N|YSBuGRABDC za2qj8O`D^7De#%`P%6G@^mst8z_dAPK6KPR($@1rd{qu{Z<{c&(W4K6*p-Z#bsiaUUCN)*ucal0TM`)!T zgI>?+_dNl2#gQrfb)2_gT{VLw<3TCFKHz>_gR+mc#C7;SX{a@~b&{GKysy$G6-jNd z4CsnI>tl_W_7R$lhotcHRv7`QiqD9sLl)j?&7n6g6~2m{con$Pcdd*GK}krgR~%_H z2BlQwV<{-bC+H^hgTe7eUBX!=C>aw%04=a_G8#itm;RIwr6P_qpEpwKLY$!mJ^-nr z;qB?ResrnDi*(7!i=MRmAehmg&)D#ghvy z9|Xrc&G6!Lgyhs``D&>cdws=A>5ut>4!@z~0@KcbeuQMs2BytQ^tCN&=DnadpD34{ zd_udRH=h_LA)gp7rTN6*3o`kH$Fx5Zy1?AqoZZ8WIp4#o@H=L-f6I)y->^>Oyd1U4 zPvUc!G@gQdL;YlT!AfXHF(zbF2CBKh>Gx2yVf_VZKZ6$Rgg)Y(+6QcAAFwm~fTj9? zb@x&3@;>6NbHH4t55=qdhlIie_bF0jz{uJbUJL*gNFn*zTI?)DbiuNs*lLHcl$WtcCO_QaT`=JyE z#E@DZoGP_!K3QtHZ<^HdKwQGH?&q3C7sEcr@%7~&p14r;n^&u*D7rnT61WAjx~o`Iv?{P?CFfPiqV9% z4b+Q!yJav#EEr_csDxpLf#JeiQ2E4458nQ0;QLmUo-X|vUm?G}^r@uNcvF+)SoOr4 zBy-i%G+h!anRA0id^(@I5NbHeEybCw24P0CAz62Z%Bw@Xyh>hP*n{^?bZRu6Wac+x zh!H=@%rD+F#e{Asi^r#!WyhPQN<|FEw7}~g2%Bn$0Y5N(fZqY|lWq7kGpEb-czl`- zJ;j8s0_Z6=G%gjg>1OU*N5tcCJEYl+e_l8qZ#JPg>$)@7Z*FT2{ndrm96C8;ZoSEd zpOgXr!-duyeR9SeeX9+hk^#TdhEL6aZ@kc2?=?xi*Lzl+2kf+`WTbt}hEL0YKV{=Q zJp<>RcKmoo{1-EEQ2WB+wahrIuQ>bc{F^iKe&Z+j=BjTl zwB(kPGUS<`FSO*JlQZDTG7CN>1FqWesZxPMhj-wz^m_ZqoXquh$WC)gMqVRr__Pf8 zsAU$e(=*`X?fCJGvX5UTcwZrKZ>w}GY?_6ao{iUOc7Dwn`OUG?#L{W3uygFPJa$<+ z8Nj84g_w?tx!(hG@(|LYcarN#^DQML75NRBtN3L`a9{RnBJAG7+;U4kg#8yW+Ta4lAEH!{Z^S zFC40m38@7*{uk0b8RQ7Lf=ubb{|5ix3jf2Grse)ems#`kwIKhTkmIx!_VhBbCNT7C zB_ntp%=;JPnI3$l)Wt;H0k_8bv&$?Va4o0VBLI7(y%(1WyMIV~J`!>Z+S^Q;w+q@^ z=k>cqn_f+D|2n=6Xm7iqy>5@+ZEO>?hkM+{wj#oN6zETU1O06m^e5s9`s?QT0R3$T z`r9GsulokS5`P+K%I#)R_oGBBLHaw3*icW@y_rKVcS6;u`z{V$f>6j+(4W|aUru)O z=SAdS@Dx38EfGGHE+pS_n8xYP&9N2q*KOwh>X|@)?p2VxhkGMjMHDxtDB|>oDHy+T zeyRCBkkg=e4{#b3@5MlaB|w9voCe)Ngbn62=;jz8tzB%smved)>4tH76!77k9>qJ- z?D=LK^b@tze20~<{%bQ%2;Q&a@5x)Pmln}M^+VJ5dEHU>KF?(_jf- zvl4P5!2d!H&j0@3^SoJo^1M^~J%3Os>-oc!vZ4VW&nsi(3@J8YzjBO+=+KY} zb&Q;{9215krz~USjOAly0{?#!|KHss;yT98KdrGdZ@D#go`bRTY}VMZ?$w;PT-ZG@ zDxc#tP0c&~MkVCT1UzHT7On@o?)$CE_8pyeq&O5 ziSHo3D515Lm-$ZbE=in83tjDNmWwl!bo`dW7o}to#3kvt;#}en%Z0t6L}ZtQ)+mg~ zOH!Amq)#k0G;6K(BI*DAq#3u8%NZr zddc)N6`%tx%SSX`^`a!a?F48!O~-xNj+sC)te;)xN&c%=+{mq@QqHsQoxW?*fn{%Fx75O3k&@DDQc`|Z z68CFy9r>L_FR|THyx|qenDClpG`=czH9zBZ1=GHz$qJ!2BHC?#VPEaGyU%uerO$SI z&5oPhLRR|}tms>(qjZI(JO2&U+zQv^pqrGZx|M(DICVKjtgv)B-pc8%%Tcw$(&ebm z(B&Ar!qVkG541l7Qg4DmQqc90IN)9^8U*h#-QB_p$4$-(8hmFI=zn!24Fr@4c$7p6;0m zB7XmW_)NO{y{cEQs$Si%-m9OPUSCM#Bn#de6?4K;(zaFHqSdO)IbsT}F)6fEtL`Vv zWapM4@=h=$yc=X5os#D+Q)aR|$8NmgqJ3!xd|qkusk`{R*5)%{^C?>AsLN(DJuBuj zCrJ9~ekk`ZgckjiY&=sHy1;1SF7!)FC9^{r(DYUs)j|AC;0X;rny`{WiOA zj_KS!lb=0#a!_79aF&kiio5|J<6M%MG z-N)H_Ri15=<6kq`9F^kCL)m)D9QCc4+;^ZXJNLfco5}k&MRtb&$cC#f_-8g;bHTs1 z;U3vpS3jiGRhA_O?EwEH?&ZiP5nB7tKA*Ii=hqexFA0c4NVVxDA@M1y`PGeCp8GT) z)&d;na^jN~Jn~gQ>~6uH;IIz^;+158DU<$nCB&)O`4~yHEEtl83aNL&EhrT94^>F0uX(wlg66QO#Cy>b9_*6(_Q=WAOM|HktF?mnu;T+T`X)`a3 zF`Y2h&kvl%?%5=5)EPpXenBm)F~!!pQ*!FU>HWruvr^9tRr>w=S!~QGB|}KK9yQQU z6l9^r41=`h3q(iVG@Z28Z6Tw^Iq8j`m0CxP-g&c_PLv@c#S;ZZWVC_;+0UuvkW+~Q zoX*ObbO}nF-9|Ie#5Q=v(bGI@jzyFA4L8hUZK%1dx7?yn%oQQ0-)V-w#heXef3w+3 zPOh<6&tmPNL_EurFc;*69eP>F;TFLAsV&6bazbBi^$TcQ=qjiuFSU=@Loi6>8>XJ5 zP(8!1RE==mUx7Sp)m_{K8qphbOeqdLB=ot%SZ^K=voC>q4Yp`dtNbkf+phS_k2*eI zm;N-1^_4h#=p)B<%*o1}q-{MKdNz~4xQ?{uSd>vagXif!pX%6u4bA3#%vEwr^!l8z zLw~Viwq?h}EX%EeTKw$5*=DueT#n;1w}(_WJ84&g$2)B{)2~XHt8#`zZliK_6z1~! z?NI8ix5K{&j- zs9N+R-z4-U87TLIS@kl+zn5j*#kd1#PQo$gtcu+D^mtuAxrWYtn`+Mleizfb=Ndsc z-uKo3wwokjqe&kbZ;Inr)D=_h%|k^q#Ed#(j;iY~7eEnJ(i02QrjT37LL8~$=R&4$CJv&{(WQN4ypfFW zhBT%OfFq0B>s$3O^Q~(;ES1B7JZHLi?ISpduYd&VYW6NgLb>_nFZhSGD-HkUSv=#z+ zz&j1~5SH3UguM76FX&Gk-f0V{2R??goPPOqA;AoqK44=c# zVsFmj^EcJfuo^Lkorj;@59))UgvgXHhqbLJ%0H(yaSks_lw!Pja2@Rlcz=BPoYel< zL)-c6Ijl|Bcrea_d=Jbf|4UeJ$mdTh<~Y|arQ|&rsj8?B#Yu9raiYxhshFLYJLXvS z-}HxS6l%*7?~iQLLgFm}ybX-^M-uuFs>dC#KMDH1{=-J9*e78q=XgC$>*%IPOY}NQ zhu;MhgqwUt)czXlSN8x9m!aGgCiK0M7h(j|=>e#6e7dnU`YnADk+s=%Md_=6VhxxWzkLk|zg-v)dFe;T!UbZzZ) z(nBp3mT4`~ezlc&ui4TaufwN`Pl?8S2|{|+m|70>AJszIm%$eEX&O5>Ek#x$JjKEc zDf)#I9A$E@RVG-A-$R+aL1k?yTKbj@mPfsMm}AdKz&#^@?hXBp?imSm58#m2rk`tB zu3V-e?<%#y_)_gC8uq>R8nFN<{{v<}UK&<(hgA`$LfC=lztFA?k39EFdCOFqF)_Uk z{>KsPquPNPVrAe)38|G(LR(+SGS~nB$oFt%u zOu>wAI^7|w6k5&Q(o~BR$880vRNVzFXS0O&8}2Gem^&qUuCww)kg%;1J7w7}4WKc$ z(G>hD=Lo$HbFL!y5l7uNIOf=6=ccZQSWh)^F25Tvgx)V`F-rxV-oJ>#cYT+HSq9&J zd#>6xm(3?IJch;bs0_mT9X7D$%w@WE2{R`bbp~PHHjB^Ooa@ZRbJ_f>*|-!&-xhOx zuKWJ)>baIJ>gc6%t3D~0`qc6#%o|`P7oau={vb1Kyb^v@GoZ9C%nj39{gZRq>W1h4 z?v(s|eT3ko^Gb&LpnAn~Sznvb zKNet)3D1x4DeTabI&p8$b?V76-KY=eCdV6|#+NB+@UY*_b=oy!G=+KTx_4O_VEVjt zJ-Z@DIMtfNm&~)uZ*>2>a6_IQHagF#lgD5K=eg~yQQhHrPCLv@$L}NujN537XNWs7 z1%|0y#Q8A?)@ zn#bnLrQ|{wm(IyU-viuc!&-~p1X52fBzMbBUDQqU_?Wsx#QDOsJb`M6-V1U*KQHXc z-@Ws=9kwMR?j77Kx0qMunYL{@&cd_}A^`3}cl4nS0!(o1& zNY{-l?h6oi5VcooNC~|q4|-}Prbxsm#V13|k(*`uY}^9W%1Dif`oR~0#Cw%Q^p8TT z;w7Ue-y_$+vvKlPxq5_3;*+<@RgG`8C!&|HM*aCDTPrj`htl zwa%WJ4bVbp0Zv`aQAFAZE?y|h}4epoIJsi-WT(&eShdto5jsgTYscIEYfv``^gn< zOIkSD>i^XRjK?X_C&aLXwvfCmFYs+jUKfwNPxeEcTH5Dqr!tFAym7i)L@S^Glll_; zDudc@Lutnu5YUqZaLh)OMw)6hYjQ|&kxL!4!pm!b%R=jJr0}BL zqIdHVN1sx*koSo%LO-JU@MfAlmOF8}#}%)?D_$0j$L);N0WLt-RWHh=!j)n|@8y%J z|LgWV=G!{khgxo4pYB>u{C;8T+K0g#7xFo=Y;QG<|KJJ$L(Wbmlv~1>< zl9?j^ZZY$GXt_V3SEk@AEqpHG4<_`eg@3i3;iDGbhxixxUfV?rdHeq}=Nzs0>ApL0%A47hx1hazEC%KOhZ z(_-$-j{-+Oz|7=(nfY%={4l@|#J)v9OY$=;`yXFQ`6MPou3;S(5BC)aRVgL+ zN-g@A1-Lt$r8EaTO2XXa3zB%ptQ5)TGj&DYU#>=zzxTUq#rknc$M z`m6X@gRz@*J{EcCdAmSv1bmydmkn!T%UaJiEhN2PiTjIattX~&*oa~di#H;@b983M zG)O`s@FP7HKz`5)A(WDIlh{)Cpl{Uq3G-$jvn-}5F)`P|{srbW5Bo-G3>*2pR9GP* zrloGXZ+s67n}`#1wP$6fg5H2kwyv2l{&$51?!bucyD3obh6=zQ&p^@e=Cd=Di{%D@C_q6~;*(HzZtZKZY`Ns~^ z=#KwmbQfQvJKvk2kLj+{9e=$WK8YcsUu*^aUC(*79sOc=1L`pkwDLW&g5NM}^OShD zz^tR6PCX$<$LgnesBfmX<9jrP$0_mbCGiKK#Opfir))&uJ|PcCv%_cAo1L9Lt4?wG ztoj%Fta>?*oI;pyVXTugZChIcSp{Wq2AwBtf%a6bFZRSIvJ#w1Z|-k`)(N9NJX`cK zXsr|*6$__|iD*w<^e{;~N5|WSHIkpycvLDaF|^`Nas5!9Wz5}F=$~y#g4|3!Ir1Ik z2IR--FZs=2(qHmNwbNYwlBtBf(a#}YLmYk43y_!dGxkNB`X~Dxmb(eIeBeEY2*`(* zTC%UvRI8sUv7We((gS);FS{R%{g!#IK7n9Q>&75uxp0ErQ+?Ks&-f_Jt*K8K7Fnf8B-@(=xBidt(Nt(@4=NMyFCM zgeOY4)nW9K$Y29vHca8L8|-k+Wv0?x-a~2bR;)C4FISwt3G=Vvds^KU=Y6>1Yxq4m zfID^JWOdQrT$D3+&q^juTu^yq04r}xef zDNrJZLnL2`{175RCGu^E6e>9HCIUNmD5ScEgz5^L*7-Z8x9b{qZ#y0>QL5^OkVfFP zh75qPhYh!-|B>{@?pWIjb-b#F!tG#(#C;BUi37gl2zJF^ry7s2PS+zpGk<&nc@p^9 zPJPWbP6JNl9;8&>t~tHqEh^#O@fxT1gudx#A3v>}OwT-jBDVKD<~5I69E_75a(r5M zpx6~CKH{SI#&JAGe0q1vyF2!yR_v0DvA^z>j9t=U?50b4Dy8BO=q*Ol^U2{PJ`Kz7 zM0hKe?i3BVCHj_cs@yy^0xdm04P@vNcq>TMeMrhD<31ep#nYfqP;P}j{$<}K63%Gi z)Pr3}hPrZaG)YTx)FX`}v?>=TkpqOxr2Q`TNq75}3*45dKz_Q0>59hdOV}K=zPl11 zj(O_}b5LvM`M zew1-aGq%(t$LZ~e(@i(sqS5V0r5h4| zO7lWu`>KkD6+hM8!Sn`S%luhex;vTIJ8JrRr*U{s#VD()N?Yj+hjuBghLy$vU&9%E zr9;;;fWfuQ$nNps-RWAUQHXq*YsG&p=!}0G#Q(P)AAJrFaI95^INHhhqbRGT-H*Mj zx+#7;tv_DN{6-|xDoac2Ay-=LmcTEi(Zi9(B}b9QqsNd&nc}zYc+I?)ol!Ny9Lfk+ z>&YGBqz%LQ*RpwZsw6*IedHeJRVw{YRJTM4tgMiKT*u%@YWS=49%=L*uRe0!^b*or z7~T$uyo`OX1UZ8~jP49Yp3Ab1vPB{5_y~wHWm=*SG=lS5&nS@~1)m zJS=}663Sxvy9w4kjhk5hvaEFt!a`XrfB261qw6Nf-$KY=^A?y9-Cd?M-xF4h9!-!! zd;{iny$|N*8!G4uPorLkr{JoM>v3r{+Maexj|*0EY=x&<_W*H)r_$TYY=x)L_#-hs zzdH!=Uu(DS4#KJs)@mDI#M@XxS2zRbMGocCJcc|6J7d2EoX)OCTM<^z9~^!@lmCT+>vz)-*BPrxn!|dVSB1UuI))Y2zsekW zsB!FfPPvZncUCK@`<>ITAK}B9KYuP{8YMkQR9hFJ4Sf7Qy?fc9=g98Lq9RF zR%UnO30-ABOAHD3K&!|EiS2=w;U0wf`(c#?cR@uGc_%)x8rnmDo%u*BBKRGj#9(Z7 ze4$>CHz_AG7|z!cbp!ROsACLa6VU~-uuMT=gci?B-U539s}u=?CA8bV7ns+&TqekP^dYz|P8YoY_! z@iox^*V^hW8{SXhIso|n;dOlfv%iA<4Li?ano&PFanJ{u4axmyeUSra_R&qp8Br%E zF4~vUROziaLdq9$pN(UbX6YQISw2^3R>s1de4*|<8?Llyln5VbiRe@v&mwsnhykt% z={JsnvV2CTKAJ|Iqr|JvSK9PNv?fvht1NgGwWavFs0lTwk={5~!8+}ZV@D&zDm@?C zz`061K2~X~TdY^rM?OSp&ki`Hz1sHA5Rad0zlY>CNgLmBpmqEON{Z(J3Hwpp<u$^X`lB%Qn#3FW15+WnJpgnA6XOY^$ zW_tK$D~xWYOsw-&oR{!Dfxj=}wp5=c@o*c+;gdR>=@g?kScsWtX{8hLPrGjaWbx1} z&QOx)S8v*Rp8@jwfxVBdTJ7*%z#oU_y^7|r|I1STQ(DTGDk1V%X*_%><(Iq-8rlW`Fb`lG^830W`q*! zhb3Z--n<`{YvdsBhtZROX!&G^HFYA|Ne|1|2baOzCLV`0q95y%q-1%WbUiPxKilPX znUcH<)ObD9hiQd&iDlI!H50?%B%B3pv8!AMrE(dx!munj&Im8Ko|o}ujyh#Nr>L(N zz<0xZ88H<~S!JcHLMwZ`6w9nYbhf-zCf*{~<&d!2q-{_M33r-kH%(VtqPOT}_P#sP zzW#bvo`#8i_bs|eeI2rNmjf=6(yo)#Z?kCDDA*(2YMLY8)bO;pM0r!Aw(S(75-A4g z+6L;v3=A7dwEV~y{QP$B^-L$D*;t{lGc%MIs>7q-##*nwT*y=9ZAZneo^RxB*_0~N$2-`}YmQc6B6+=rj-lvZkpXabi{>Jr| z&PQ}Pv|R{W#lnVByUgk@I4|!Xk(WJ`7v6tSxKG~N0W(YTuwAFp3M}tm(&x13Bt0Zma*ShY~Nk0At_nkL{p4I^` z-&njTG(I6sH?Z|dsk8#`^@upm-PR>xN)j8tenyQhkgK%>d)GmdAeD-&y^93fuK}_& z&5yP{E|fMX$-aEX4csO!JEOfGI9Q5%tNMD^+3Tzuc$-`gZE~59*nK`LtNAzZehBb& zH~Mh?!Q(D*;`HS{V$Bt)Uu(df^viQa=%Z5RiZad>hm#3%Bf+_1Ioe!;eAe4@#c}c( zB%l%YGYQgDaL@?z_Lt*{buo+BmgakF+h zYB3-4zjw?tSlp(?Y|kNXey_xdrY7|F{Wv4j9eQ447xVjURv7bLzf+&|JQqG2@O|jL zYCiu>q{fea;>S5Kze_)TvF-P~Zks4 zaD7lL*DQ>V1SuUHA{v@K-KjbAOhWW~KGIpT{`l$MSs;>a#`P z?-yM9idQe;x~LD*Q2XiMNBqwIb*Wv}D7$FuIoUtlV&js11LtdPM!w#(`T8^iUp(&C zjByXzaX-rtm-G98i{GxpOvf7Pu_e4e?W3ly+n%-K^?`UlyZXt0xNz-$C(YNF@VOMT zp)*iT?qR&Ygzr@hRGoVmhb(xA+}VZeO5wcnOMv&L>j658gBkRlFpH^?@xI{@c^s+H z3h4d50RVxqH2Srq3GtBwRl_hOBiI%X%Hb%Epj0zbVBt_7gu!~y)7lX5P-e?=4{Em> z)AlVbrg}N)Y1gQ!sj4j1wxdgxoyiqKYNnlTxt(t0sM8(qx6&Q{f01teQK#D@-%7XY zx2G$RvzIcPTAAv&4(gbu)R>-9Dt(>OEwb}-$x-H~HTrOkm7fW}B|oaAQ+EAQwnvzr zE={BKNI8+Y&JnbBo{!s>vUPc;d=$Fso_v)=ahWpA*&q$LOdL^F}k}>x~r_nXQUIObsLlGly8e-%}XUq~qA(4MNAx;{7HH!x1VYHMm zyI|-CVZ{2eqZp4V$rvBQY`HVWSnG~4L4E@I&2I39`%+zvd=gofiJlKat|>^;yHiV; z#XzqoxxC#-DFJ63JLeDwa&CrboC!yaqdIbWD&#aw`2gq}@NWwp3ucjcW4#)XvSF=nHY?wlvZC-9tovI#EfC*kjRM z%lH^oulnt|p+L3)yvGrFVjL9wDh^ngu)eFr)=T~CGNy~2mX^fQijw$5NJ}muhSD}V zC^y(?^@hJpuW*9Iq#(fM-;u6ggjVofuH@oHV!RYnUXG)>D#*+C%b0#j8ZR>ArH;g> z0WS)ynbo#4f^yvEr4RhgcI8(Wb7fbWGE0;CTZB=V*Fl#X`Fvna7r#SaxAexND;LiZ z%cam!E~US^TsSYMA0;oHkH`z_Ef_B!i^s~#6*s!ah|IhglTtZ34tJ4LQcX>ft->(9 zQaimnjxz6Ej+l4Wx3avCmX0;=&jT-gj)Ir2DZEUOSRY*ZizUF)&9}x!p6=I2Sq8;N zECbfNvoe6*{TR!jY>sV-Qd4m7`3{_&-SN zi=#{{_cx@)*Oa*{ib?Dj<`!&i*#+weW*E?FM7p*V85em+0{5g zD{a22e=}dc{}1?*NE7gN!V&qZQM11@?a{LHs*E4Z#i(;&*Hb< z=DWt0sRb*JPNwpI(|nDs(e7Bm_AHN7M($d>&aYbK(dig#&13CdRM>g%Ypr%jp=7&>#^iAt zOR?xzuMYy&IK&*iiBxf%d=88BgJMp5tVFCeKYW1o>8c+Knac|zJ6y3=(9 z?%B}y?(*ey{+wg&bmdT8+7dEBV=Miq?3F&p1pxP~YT=|3X`qy-yU6fXCGxLGw>MPx$OR=PTQhVBW8TEa{iUOerhv1?=~orNgvz~Lr?L_T+N z8AUF&R=v=m`*P-m2A)sSRF@qoT$>%PCz;vqO!eRNH3L(yR zg*Yceh*Ml?o#6;kBYSC^UIcCI9`a95Pg32^Q|{}cI~rnTbGpzTPgQ!7t}eP`JD~fY zAkx)rx}u9Ntr7kdEeU{{Jl(Fzp5%j{k0!Jy2gc{ZjB;Q^7v_H)n6D3K;{J~g?%z3_spPQC zKUR_@_a*eC7dYrXa~MkJSJ&Fbj`H1jnAVy@+RyAj+Q<7*+7}<@(thn>XRM|UV)e+! zSeMwbT3q=&8)K=wP1ng6Lx^)-bel8M#nT_8dx}l>cvq}=2i$xuVXVG(te!4z#yI*a z41qmN(P7;D4*%jldKO{xkZfu@iqLcOJUV6&dZzBD`vQdO=?3Y(6rna63+dQKm@XXr zI@7rfyMtOx^>El-RK8D-HpIqT`}5bJEh#)_Mq6xn{sO;`ktbl*gkKDPC&KT1_+16R z`{4H^{Qd#IgYY{9zaQYILB@jc>juB!@S6y~E8+JS_}vA+C*XHbbe{wCzL}pvU!*ev#U$pW$cvy*piDPIiR}<+CvN8BY5$BX8#C*cXB9+;2GT zA)V#KMfVt7&xhK;y_xB_Fg-Zbw?%!rR`Y@Yvt8Ay#^Dzu=F& zUVRH%b%Q@ae z{Qm@;`Ww_A@Xh>8q*ZmsyW?hV3k&1@F(6nT#j#G9cL_sq>UP}Y;^U$~(l&}f^S1M5 zrneYxLHq!yKv%!Th*xptTuMSxt3E2A60gvzkHn|gs>ksO@J4*ft@;RjD$~_(4Pt4P za6TV(@tJV&8OnF^$@OraznSR_$Kx1&NsdS`m7YKU!hQ;m_`*&XSE zfb))YvFfz;F1qeVzgolW4-xB(5ASVg^quuglW$>r>eRLawKYGll-rueblc1ujFH3; zd_sD0){srN58{dYOp4xfg_)9x$^nv4)fXlH}u8bcu=>zwJAt zVHNXtlI+L6>FVmo^l6k&=trZ5JW`AgpGx~`h2HPMJC)ZM2Fyve8Iy_OZ#C~R@=2z? zHu?*B!ugd#B5(6OHq2KKI`%W|`LV04F&B6$6$iptb!xDUwAC%@pl`1}%D&xerIl^p zKM}~(RqpX)aR+G(IL7e<%YET0W~Vn}xu=!!GQ%LLwUH0CVF(?U_~2jU&dc`_fwywU zoO{(Ou6qN^KA3r5p(f|V>sRsd{0iXl%z#rr|85uVEEjI43)d8I&ZYM{anZ8_d@hZ+ zCtbMa0J~Gla4)W6`;fTunjpksEp@+C@ACh0S|?tn&U;qty0H6`Az^J7ev4~8ycGrl zF1_0KT|AF*@%)L4uX6(I{w%|NyNb_iu7KH!l+Wf&W9giU#}{vP#vkjN7vSs;|^)v98=}W7f^snlGe$6r0zp>g`|4TZk|JX6}U*_U}X$Sld z`qlLL{gbNI{9fD{0phTkFmN@$OScJRE-vAHe|~5Bq}9wuF|%pdYVHd*P}>pLs-)&yow(@!pmSgBYA4QoBxpK(KQ3Ku`DlO~ z#v~2+Y>hq|6wu;k^lCNogKcBqMdPuc^B&9w7w&NvZrf_>-m-Cx%J5GFowl4GSk31E zcKYU%L6oS3-b`l$k?(le$1{X|$_iVS&%*L_|L)@HX;+%BtmgBUYhm7U*w6N3o(bwC z&+20cc?-gHr@C!53i`Tr?sh3Idn~%c4nTh?p$|tXp*C2mNaRqw0n>jrSmr2`g4>+D z{nf==$!+Y87`vfZK+tYW9_6&vd?APyRFZd^db;TRE$F;|RCOEQPhO<9=->K@<&y|u zvD?^vqWJhlAV)b=s;gQtolBQo(kz)M9UCcl?2ou(kwmq=zY+x{uf%?sWN_TQO8u>4ZrR1yBB^t z0NV%FK2HatfPGY@meHtX(O|%~EZT1~)E?TJL<=4Ft0BVfgUb9qXmq36+<(8?Jm4<1 zdEhRf7zK)drxYJ%t-A7I)oRVrN7SaOy{e%%MITpHm4oZM>atarFt;+VJ~b@EdLTei!^!8-AY)zTSpE=z?#x z;Tu(_pRN0EY&07zsVK8+J-;m zf)BCbkGbF{*z_NF(Lc?G?^L-hSuDFVZ|7xK9@HIU*hCJGhODw?blPk>TPYpIx?}w3 z+u69(Xo6gZtMwe{3m#*)AK{5N5~H+#*r+y!cdCiH&qci<@*T1Lk6jJ%PocKGW1371 z&98-|v$`bAxPKr)Yi(W_sYl!2HPYwprQ(0Z7V|`Z8(|^O1PuCU@Ud_GLjia66VZ2t zdIg^+`>SL|gN7tE#K&ktNMePovqL8IlhC4q7TL%4@=*U}7x1_Q`$cbiyN3ixT)j{2 zs?xWdhuBlvt)lHJ{vOJmOnLqXem20fy~V1LRg-fjj1ArLb0C~CplYI?{5r8} zVpj6&jOvNQ(T_NMW#_e$Gtn=vR-hA7Ddp)yrG9`br6E`8TAo65GGBdq;#E;a$60VW z#xib^b%Vw5>Vu>(JZ0}tsVkA!mWm^w=lLM`sGXigO`WEF8AN}~ALCAcRxHa${5iQ& zvD!molw^Id^q+S0860^-TZJ~#aejcOr}OOj(p-W2?kT;)zK;&l6(-zQI?7S+Bo10_ zSW4RL5J=4(mYtI@l)Df&w^{PF4dm(DKr~(~;QX$b?o&zj-Mr*{|95v-^TCEK&?BEF zqmSB=Pdl`GLAgCQsf)M_QClNq1Z9sZ~Zm& z&2GjB^6TiY_*L|K{A&7-{wn&Bqo&X2L?HL{oeZ41;Nu|%;M)H(CXJ_j?tujYm za_{^#dFlSE%c|;E(XaRwWyRXTnRgz!KW$IxPrtYNQ_a$oI}hUTq_(1&&c8uMkKeA= z2s6nz0p<&$hx7|~2G|ZYCJZ8t3j*|>{V2X)WdvqQo7MP)U21&dT`*I>3fkhB z$vadQ8)h5f0*HMt#2(6Hi#5VPE7m@kV_gm{d(7l}RkS6_pg_lb1)!1FFkSSf!_$ok zFSWCD^HS2i4%3~qLybJ1q;UXge1oai2>;+T#F+40dwe{md}XlS!N)A*W7559FcOF?&M?jKG#^i!G=HLg5P~7pQmkCo$IQ5@3eeV zkuiWV^f54xYtgHNXh$F%bo&o`@J>E{cMWpCY1BX8olF-3X;+IVg=38E78SI%_I*3f ziV|i8eB+!WVfMng@}X=?%i|S@k2XCFIiLkdK!rKx)tl5Sg}Ry(B&ldUCl`s)Uh-$X>Jw9{n^hS81NRO)Zv7NnaR`o(;^h zXlKLxb^+>Kh&+ulD~*@hTlJ-g5qMew5_uLzC>ierb*H*H0vTnGMUA#C{m>e2lm8xj zosGR!*&53R1|4gf%C@S-0+y0U++z&3-E5n#*QOg?9Vb2+-+usUaB`pm#Ya`7S7_UkL`h$_hOgiE;F)Gnci5ELW#b+IoN43m-~Kh+ zhs9pI-C>D7v&P!_Ig-tCRTI9hF2z>7_M%{j%O#`?3D-<2Bs&lcJT7lVLvh zBHe4^dv`ytar;bDtln2z%j`kmeZSi!T%)7KY9C188fsUs7u^Ajd}oM}Z-~J1@?(2@ zyX@E(ELofCmz&WpU(0>C{VqS%hg+`>;zaE@e@Kfnu!A^5>^P^{ak$^ShP7^+a1)`2 zJv|@&cKuGvbLfhlvew#fGk>Qg^lzyzjS@0RGCpq-PSKKQQ>U-xzMb6R8p$b|(`QM1 zZMq-t=CyABbof501A0y3DVo!-(nV|2eJxF0o9-k1vXnC7`u#I4cq_Ri-|5R_J})~m zJwLgxY54}{ar7DafOQxvd@kPx*oazSf3c=7Mjr;eU3)cdm8YUTD;k z{64sr&mkH$=N#hEwfs*02A7SVr`D$0=-FV~ZyC^`jh;sBx7g_6cQ^jC)_r#aQjV_3 zci-LkU~TH%jSVSxH>O&5H>T3N8?7L}H{`qTZjg1!yBk^7-3?_OyYpuly%p@Er=0bS z6rb)DePT%3KyPjg#G4!Ry}LYsYEr9~R=!GC?|HV324*WBHL7pQmxaiih7kFYh^*wf zzOKiTbGpa5j@!gMS8Eo>X{r7-2d(4#qvNzTeSbbbOF&$`9d|s$osbsy6g%z&M_kq- zMyzwU^+ixtQUO{RoTxd^)z4nX_wy%0o69Ol-OnHA!e^)9&vW5(Y&^HMdC@wyA8x>0 z2WEd{j?@x;B;QoxVF+L6E2xz7?66m*gq@4_gzd084a@Vl*3LWNOn-rMKmTqQ&T!#& zxp093(@~xeuVek5VX{(d($CYH^huhbH|dkLWSe|y9q(8E?&?3DU&r^yCTY(7w}0C3 z$u9W6ZTNYb&$2^}{|>H8_GKLQ@w)Ur@4Iz;9G&FqABFWCKG_A&vf<}xye~$Kf4$Ym zn85-V4a6G(>$Tcs7r+gn=cp&3*EP||uMr0j%?!(i)W4w;b=KW z-|w58&<9ayOzliU>S(o8W9M!f33)E0o_H3L91YLi3h}9bR*N1C&{FqwVkieBNr=4Q zQxuDj3G3OKJ3xJA|8H$S7>@@Dh2(%FKu`2Ce51A01GQ8)gERokXn%b85Q+M7kceLl ziC=Yz9OiXBZ#|dW8zJq1wW)G_wF_TkjB@H+TdKK#ltshEzy3pIxPw2l^#8- zok-ttMph~;0a+ei5GGuIIm>G0tAWlRXrIh^t{*a$?qzl&N!#aGT63wb^9sRf@jsBX zaqcM5c9~>V+=pjqa_Q2J}$-Zp8M5 zbd#^rQ9e(u=YG>~)UeKZNe!|}iii7~s~iWXmGg@(d~I#2j`hpyxjj9^)6!*rtkFiL zBM!`w3h){EIvMwM2klmUkCaOLKd!Xv(|CK|g&$s8*dv+=l8VJCMAiBHFnC)BD`YJ+w=^U-!zss0z_0iz*t6WyAH?VP)%W6U&#yrAMnWYf(WNfP-bt-8FZVkWBl2dNm`GgJJCoStE zmTS$@3N6nbyGL!{wkwxI8Y`e3_bSjG<%MC+N(jTA0OYVFo~$r2Ju+E9DS4)CS8s`v*qX}mmGba7B^jven<G&g-o@hu$fAlifSnYvGOQYhij$x-q#Q z%fmKo%)D+sc_Uvp?<)|kI^c0m?;uXxj%y158_o?^+c^gpZ_et zXDROG@qYJ4HvSl;!uZ8R)%puTg1(RZl>2;oGb~Xn z(dR!3*lCIYeEY;?*}SmPy$*gtOWt|<*G9|NkN$+#R`*1K+2AF;=-<$bOQ3 zOWo52VMrHk%yXLGTkWP*&l^T{5bK^P5E|TjGV&(-%+owjAh>+BWNqT*`C5Tf?);m$ z+`V5Qri`COHtxR;nPj+z>YI`TsO-?{KV z+jzduH{Z!~R4jDrldX5+OtsKy`+1j>Zqx(u-0l5&yWIa;=(LmnI)|HoD|GI49^NQm1fhPL-@Lo5dNc1W45!RPyWPe2PJSv7=GwXs*yZM|+x0)stuSK7{PE;uxectaeo|p3U2v;OU1Md*o-%tF)P& zdAFEP6jsr7iX#XX_OdC%lR7w*I&)8UtBnw{@3wa-UmrI@Zi#fgJHZP@V<#fAUPNhdIr_C-J?sD4Y zVR~_#9!Nij4cy}7kHtMc1HIF?IL`yvzq7Y+ zpJ|s5!qNYH($~{U=2-7l@cw7(y^kl)ssk*6@mts(T(&D%BNw5^7Fda2SES3$`e09U zpx$Ffzo!}+CDQk5!dwk<)nfjoC`|QLA*^|A5%&6nJ&_NSW8)QD_?X$>;~X>R+wgji zb6i@qh1c0lMb3T4<#zaiE;_ev;kpDTc%0`k>n!*fVSvXcBz?+l+rsuE&}aK#51s^M zp)GWL4?Er~`TI$pguXmRsIKWro-tKJ;dcW3`oXUnegizCqeDEnTQjC=h$rdO_|Yxw z?&Z;?!{~NIldn-;++wZw%w$Z1j4=m5-#Nw{;)$E}(9ibww3&gJPW8fAX}r3H&8w;Q zt^^~Ae3gPDNdxI2#Yfe9Q2UUOC?ck8g(K(1)*tF4e*|0`66oH!fd@6;^?{69`sI&XO7cj+0;hS^q7}q ztNSL6llpjO52%!6b%^wNdqTe~mIag-R^wYX@yZL2UqU1Zf4L36oWli4UJ4byR2GD7 z4UO|^JpCJ9Xg7?=b4gh#zMIQREtQqt)aDl<qxjy}V$gK~dqTssi~8t8^|l5!#n-AJ__CIJ}lYhZpi zL-3M5YK>k+2nu$z4ccCn5{&@4>JOIsz^V+LC zh8F4k!sU^VFlSA9!#wO6V^3e5^&I4xF03r7AdwG$DV(!}0^R;A;ddh$?h(6VKD(1S z1mC7fH^j<$nRH>f=mNP|jkyS)SxNv6Nxri%EmgUNJd?L+iU9rkCSynWa zU^=BBPo;dL87|L^KbPT4%gWd1nxz52^)1gWA6))?yEFVWVG-o7CmCfy2U2KFc`ISx zgRSzB$TU%u%ZXR7fw@~cE(>rB+TWs(E3oh5t#3uB(Ivqd#>RJJ?;ZhYh~0=s>IG}L zn~U@+Z+T7m2P9A~P)SAE9-|NSI61ZH0gX$=Jjjc;e1+d%?heD`zs>Z;bO-*IrGw`s z+m*Lz!W=3SGodv)TU~#To6~+N-_=n7 zSCn62TC6+C?mjM31_@P!=1<5Z- zKu_|o!z@leE6zf~XvP@L^1O1ai-lPXI>>_h7}UG8JS%HyH?Mbbc6m1z;zSw(u>-SD zO(~0{lrmmG%0+19QXvsxF4Gnd#z5NrE~x}*bjw3O&ym_)vc@t?MH1@f^o+yqRH{8a z$sZ2S5N@w6gp$hdHfva)^73wjVVpr&kpniUyyo!#MJ{`iUc&ygtao6ev9XE3rxgN2YQw`N&j~{H7yWF-lhn)FPwTkU|gTZAf`OmBHd8h8kMl z{`1jEC9GoP5|B!RN@Y*-_RrIW6)<<`N&faDq1Gt~*@0(>BD2@lPbQWQ9J3k6=kkBQ zhtK6}J9&HBk6r(Vb>_waS+$uNs8ijkCk zoUfdCvr{Z}@9w92_}UZkp_o$#L)q%Yb*4DJ#>w02UYBOUe@rJ}!Dnb)V(earM(3x! zEqLqb;#jyLk81p2zK3ym)Qp9#H8K7>bt~I{3X=BrneF$PPMx|lGNeuS8hF~Chl_aH z$p17BSNBu6Vy&VV^0ez7DGE0vZOJX)%J;q=Evib<=UbhUw%59!xMnM}tARRL%Vkxo zk@JZVUO_xr@I|O^DVTB9hxNOE7x+6Udn^a_v??hn31zJ;}sO!y8M=Ocd` z+sApy+)woZ-VjCMbs|Qsckw0jTjE^vn%mO#1AA=Ce6G`b8{b10JBjw0on_~68`t-f zI)xp3z(YAL^XDRVN0;fIov@9!lM6g;qq94i4eq_>#%-C;uFl++EN2cIyUo%UGVd#J z*3)DgzS9N2$VG$6|I}^ix|o+|fX%mPHW~L7IN>+g@SO$DviwU2Wx3ie%gRovXBF#g zTvZxwi;b&J!`*A+`Z;hc*ALkB)1TH4hd*w^2e{yWx8Va_@B=oyhQfJ1|Id-x1@j*Uy$IL`Y8Dfyv#8{2tZOtI?-!(6eQ?*(7%X%-Wn zRKJ+>xAV4_@U)rdbV?ng7P;_aZ9Fft)1v+;}CnZzFKGu-oMxOI-Q;Crg~ zWGLf3+mm~n+&;wq?X2&M$&79(*`bAmmBAKsDLpITasTQ{gF*jyJL?Z)GVWzx7L#aR zQYjES{OhjpmvdYpdYOLnj_$%pAfAAk&nAL>}e&6hlefOMFDc-7KP z>AS<)wF)EC#mgurUf6X<% zZQA{YCtsWOaMSKLJ*8S_+3>VP)zEHF^X~t^_gt;Td~@hiqsg>@0ptVW3J!9Py5U6iS?ccz? zSNMa5a=JlSmWBJ-k3o&p2&I%-tKK)HQA+&np!Jr}1tEv>GFw2N8r#+uKyB1N-DBa5 zrrqy?1kikfJZcv2?CqfS7CFfGqF>p;^`hVOICUl7+`;;j2_QdhW==?V_>_Ntho!p> z{1${n!nB1F`fVbi)+0IXA8p$2dVJQMA}Z_m7DEg|rs($$QXpP&2v5V!vV_b|0Jg*2 z`t%^4+Tz?=3zrB98Cx`-Q^!aB2kL5L*GlVcGrTpAeA^Qr^??WP4&XDP|Abn)Qi)U` zV_(=G?@&mQA0;dO@_U*7lp##f?;9kNxcRoHh7{5#rbDO=tE!MFPza=^GaRI*ljiW- z9$c@ev^_=dWoIGKw^jlbK_`usZ+ciSBa_DHo1VtXH#~-cy-C1CTOq7X{SM-_;Ce<_ zgX?#1elDr2`Zwf07jmCBJAk=AM0(^V^sXTv@xn8N&%DKIZk};SgmJtzS{NFa>lJ1Q zYmq|Eoacgh&;9KWwND>f_$r3bX^3sPUMYSU+s-#bhYIn-ui0-0tvBSrPrM3pQ2kO7 zL3)0?pLQ7K?yb(b&>J4i6?K-T-bK#!YKdsC(DQgJ5$WlNhC-OEgx(1`^eoQJQd`Z< zwFiJk3$GaH^B zxzPWTznwJIzvXF!-$6krY8(zNQEG2*C-+sYAc7dLXKh@7p8cTpmS^872bs6(zv+bc zJn?$g3ydVcjv60#Ke*S@pVP67^J+~guD@o#9kkw(`TWMt=eu@3IW4l2`O>KoVNB9d zy5H%9rv}ZsCEFDCS|_xe^S{t@{#YBOxVVn;n-6oNCLMZZ0=+V{W`yEshPw$k4hj;c zhrIhNz0Lfc%+7|oMrY#|x@pcOlzo1q*kH=Xh6 z-M%TIccE`fv@GwOKLx!Y&BLDFwD2z|O*f&wow+V{A3gmmvSN0%V}@8vlI6wF9<+Q8 zp?9LqqGy=&_k_3C?6-r~ThnuIct$_-z9*KYk;Z4<^k6%E?dma4{}~Ox>k^!3WSM5 zUxI6?#ioA-U6)M5^4S9JL5GFF`cCi;B8+-N26G<#ozVJDt`!1!sq#_r}v!Yz2d!m^3J+Qzun#Xvb^r`8K8_43USH`hY0 z3!NpgxL0Aw{&uHO#8N1P6pB((5YhWF$Sd|O0V?%L`OPD-=*pj2+HcaF_Nh3oB37~J z=g5~!D!P>{>0HreNk!-USF4Gur{*Wr?REe{rb?;2wZ`0RH=S zoQ#OHZykYm(6D=S%*DIy$~?EOu;Hl^d@X%S$hogEZddwR7vYmFS_yq|Omyg9A}(R$mc~-=C(p=0kKUc&yqV)e zRStS|y>85`U%!j3)!Du^jz6DU``QBKX8A6*PufN3qJ_k9VM8jbjzfR?=i0E8 zBQ)24>S36HX_!wuhJQ@`XC7uB@}{DYxK(M5zJ}HxzhZhrA$tF5udkS}ds|f3c^A8n zhWoN@`tM=>>m_aaAMh!+>A%CLvP6)T7|ghYDxWymqmm)yaJx_y`Qd;pwD+s~7T>?( z^d521JI$hZx<&8Qqo&9AHeTDs?{3VITg<7&Ce_JeQugjHHa{@Uh+Knuonl08iCzG! zQtNJ&wb#nSf0;4-g&D)s`-i*P9D4<{R-a>UCwsTGwxk@ zCx;}Mw|?TmeQkUiVp-{EsIRPH^3}FXKJp645WW)!p5xD(*g=FszSgEhWS+3$ul#!Wv5Fq<3Z+>d>FH}7w1x;Xa+>HR(%7weL`Z}{&FX}q0* zmycaAwvPMS;-vt}On1=yF++U${&ZMw23W!U>HD4~_wzpP)tH!aJ`%|gzS0i=Ml5yT zdeHs6ECzK+#WmQt!Cg|*`2$bKOr{gJ(|Io~opWs5yJ@)dY}^O2)cTl`p-e8#0Gpiw zc1;G@vJ9|Q8DQ%&!0yQa+kJn!yzI{q?wJg*|IGk`p|& zTt>&Lgn21Gg(vl7y!H(8q3y}gXXx9lbByF!7#(-^r1Mg?C%JFTVZHaHr_+BAm!~0V z@>H8bgU%)F@I%vNb3{g-cer>~t*{gKu(1O7VIGMogx$DH=xcEwMl`;xu9B$6J?CYb zgLl3^d&M62c@)*#-oxiDwOyR&G)ryxFdL5lR_{rUH5|5aPx?96jtsDU4jA9Ve=>zn z#Q$Rt-($_8`v$5tF1*g+qjLwbGikQA{d5nvNq!m3%d$zLE;^_|$9qyNl^^%8`wxhh z0Kaz}hKTE~JNys0d80f%z~@av2UR)ddsMIUf%N=EGQg@cz-k{zuZQ0~z{|VNRS##_ z@OoE0Ovpg@;ta4$Gr;C%fL)&f_LmH>wHaVrA4t~|e;`A+r(EHz^OXl!duMGxV{O2^ zw^NlPuWx6d^~nQHy>=!a-#x(PV=R>q9@e`zJ$^w3SZM}W-wd!p8DJ-7fQ`ri85fT_N|=G;k}v9Ud4Us{dU$qo`-;yhXC;PXy)-@U;0^N zc%QRxXJyrUUwZlV&j734mu{2kB#WPBqgxi&8M+v9G8PhP*2}ZegeF|W4)sVium$w5bNx& z3XC58%Z3s9Z8ml7PjZx2^SRFGmj|f|5To(L4zOgrrQ=4mI)=OHG;^y|tX&!s{BU8-AS z5aVy(KDJLhC0bupC3hi=KYD6m)`Vrsmq_PHqu?uUR%hY8kGifpy%(q9+DK2BhfE9i zc?!;CxID`T6(P?-dcULd3`3t%cYG1rb3!{WKGItqh-*+i@?(5>br#YQ={-isL49== z!Y~&I!`smb^Ukj5&uHb1=2>RY14UBi-ley%*o);wkA2_C;gk0JL#uES*lXKwwX;DhOV zN3`#FFugA?eK6g|P~QjB_oD_pn0j}N-OU>82+P;Vr#zUUKRe?w*BY6x(1o0uX~50wf1DV#M6A+d93^b`=L_in4T zgn91ZaWHds`X~MB!PGsmYqOkoV1MTI6wNN?en_zFavrkod7+nzEcDQY&xHA>Vf8e% z{aTFR9k)NphR`zd)2?O%;$uPQ z&@Xnt%Ud15Kkoo8Je(Qs?*Ja|0AASvyuJhY$PVD+A5JYZ){nG4oZdIheAvD2!T5_F zX8kC%pDPp5iw8+^lE$hGG&Vo%p7S7$Jr7%L$o!$JX}6SQ*+10*?=N=%f3E}h*BRin zPv4*6eryVi_WAo6pD5pzHkIVuttvyDT071RR~(K%ZGUE7$94cubO66{f9AYhpCNCz z?stzdRM&IA+qTD|EM}7x+sE$xOqU^FWIaJSdR!!?0X=~TJ%L_A;0@cf`Oo4y%YO{= z^uPNpd&^3E;vyKoFD*v6jNb0$?hb?f*m#+G$txi6f8@E6crT=D(d5-#NNdM zilR~kELcE#7ZgE65epp@AAQ8ae&^gfv%ATT&-;Au@BRMx^cQySx$WF`?z#7#a$kzy z(qGRpp(o03pf8<-F#Covsn@AWmWAOtkWs8cz|LY&EVNyTRH&86u4X8k?UM{&ez|Vn z#VT8x>+eem*C%3aCvqX;I>5@{lj69N-9e{F~O%B1*~4)Ik<@e@15 zS0}~a+#x=Y6hE~?d@w2gjt=o!Qv5v~;%k!P@9z*_n-u?0hxkEB@sD?iuZzVybgKMJ z=W!f%Mpa2TK8^<8@M`CD%9&LqoyHsgTd>^Fdw(t^k>_2qyz_aR(a86fcRb(Xe=CJo%pa)8)x;wY!&h+)t=oh2@4!^5T>xeo0DandHOE4Vl;_(5|ZdMBSI4mz&EQ z|7LCPwF&Gj6W9oZCa_tnlK16TP0}qjNw?f2-DVTm zP7~NZ6W9?G*smrqvf5TcyF1(MI@^m z?Wdvr%M`tqPggU$S>e%;zL+nV=u9OAR%Ywk3TM;?>YY~RDoSKHi(aHjaE8t2-?U;` zJV~{of7&piwm^?(SmQeEDQk>#29#T4D==)L8SThgW3+=4ns`2`9eHbvcJTjIJNm6L z+QI*yw8Ow-L|Z9ZQ)`pywsT!_x~z4{Z*TeQ z%w@qnG5BePiD&b^>ypo$73-4cNN`>9{5o@8^7-U^6Ii`Td6$~Nt~ALzW?iy8+c*>0 zqy$*ZexgYoZR?Wf`aSECZ9&ci*enRR$U30yJ)K4L1Ui;TLORt;U8kqZS^9}DXX#M? zIN4GOzm*@4dbRTRqlYU)=k%z8aMd_@dR70Kv#QpImsgGMwy$c>Vr#YIimuhqz1FXK z&QoVpcR&5I>Qkd9SGR1wyZVXu9<5&f%1hOk_}{8NzV74dK;KWR@4f%K>IYW*QeE_& zCGhn{X@Mu+%MOHkDS?kiofas6p*--?*TKM#cb*gI`bap?J#BcPF7Mhv!C#XCWZdn6 zuO6Bac<=3h1|Hw@P+;h_PX?Y|IV%tjy&Ra5`9`3NxHvFi(|ZBmZz}>DkF5)A?)FI_ zc+<|n8#})a{NuX)fwAOx;H|a421xsk71%J#Q9DH=)`N12;3=Lk? zb69ZXu}gzBFI^G5_x@4AXD=TcJUBQKyyk)%f{O><7#vW2YjASE+k8nZ;8l0O7%V=2PVi)x zxxugZz7|}$;Emv`Z3}`A)V~#+S+X?P-sRn3`_W~=H+Fs)T>tTk;16%C3i3~`4OTw5 zAvpft&5-t!;9oO7g?4=&eDT3Ag7WM=!O^eo4Q^ldZE(<*AA%c?9SjajKN{TI??=Gl z=b&`+uffH0P6nH{{~1KKZ|~Ebw%l*gp5I~B+HSCGKW00%%im4WHeM!bRa}}j;I(wE zv_aDPM>Dk3=DM`E8nd*3kfW`6x2yJ5Ypyn?AWxgRtB3a3%zUl-LbvvfSg8HB!lU(> zQKW4>L)9!Pr)jUO?xT%q@25T0aJts4lxPopSE}ta@3eo~af5b(VJD?!nqG@0_b$@%Z`Luv;(GE*vpLJM-+27U&z+ zR^$xR-ud%lZR4>)w(==gSO%MiCX3xlcCKwX#+M*(VqI@R@eupX@+j@BkK&^TuEqAt}f&f z?mVAb$M()~%9uiTOizUU_x#_i!;Js14u3y-ZDskirIqkqb<2t3DhOA>+NwI5_CZz8 zmk(4uS|?WDc(b>9eYm#z-xG&d!&<3cHsPV_XOF*JJ)ru1y6zTyc%=H=DVD$uV>0M^ zTcs2SjvcNEY`!}b7&Lrz;JTEX0(_qtfzv7<3_SJ2GlBho%ncmgwKTKa194CJqw4|&L zJ{H{?ln#C#yl2~2!41!UAKWqQNO0Au6T#c=J4xpytX-}6e7h!HlA`Sxma0t~+(k?8 zCu{%uD^vSmc@CX>-(~jDHouw=@B*#;1rN;2UfQ#l_tskH^?`Bhr_FU0YfqPzYTO0o z+WR3k*IEOWFlVc^GkyiMdBAxZtbNU+ zUI_E$BJGwFL$vJ|gka9pL)x%*ZJ%M z?9QJ6eJ}ym%tV;;6SeY;NwB^qX^tN!X)RYw*3MfyS?g7Dqc-uO8?}#rxlx-w^d_zD z^_#Sb{LR`c7vHR%Kj&ucr+?k7Jz6&f*2xs@Sa-K*2X@_}4NJdO z3!QVT_TjC!YW)`8s-^9{RXdt?o3^RyHcc6Mn?~Ai(^f9HP0QJJo3{JpZJL}pRr|br zs+NAyRPBthQ?+BaOojD5RjYYvs&;VcROtVynzC)GR`vB%?cyU-weL?%)yAJ>f4Bw{ z*WsMlI?PB~hx7i!I$ZcS>rn2r4p)D<827fo;;bnFVay8wKM(3;+MsRKMZtaxFAFXha&2(ttQ&*hZ*2>nKk%O5@JSB@3+@LR|Bt7FWZd(? z9=?}@*8TH>i>54uxxO?QI_Lf1jZd!#p0{=lz&8f(Jp4&;>t{QH(S^H%^7OsIMCsEj-Yb)5+AyX4;x_Xk}MKj-t>`ckX*!kKoM$4>3Oa|NwmU8<&4q-z6n8GU|y zk4yXEjV!HvT8{S1x!p9iOLt9Mod-0tC(Ip1`|@+Qw)6Hvm?K_ITwDa@s9NFf-rA+3 z`oMha3uD+H#^Q8seYiwh|8XhM*K+O6hby#)e;uG58S2v(&+%(h|ESd7J*OJxW&p-H z2zA$J7dO>v%?}LHuKc)8yXxO(XnQ?9i+J|b(Y$2`QRj zPjA-NIxd5GcNxsH%e5)fuh3>+I9#i7U8!C3)s@N*Pcvr$^X{iC%^ z?J8IUS7|3_T@CFW19N|j_T&>|feu`wz54}QZx>`;r#a_cr>z`xy>?>T_0SIyz%c^z zb)0s;y+xaKPm8uFwN+d7K&y6c>Ug^DR-GEJEt_zIw&>6eT8~R7Xm_ofpdI&3r2EMn zVG``6lb{`wv>v|6+Ot>?=(YD4~H>u>R#n_%7Fq@Aj}Sr^3!UR$F3mCz9fJ#NvJ~>}<S>kN6chH64ERw_-j zJt(Ya@475M%3j6GkQKCr!TP7$dPBFSug6U_NKj^L9hcZ2z4bJH-bU>qW{`;VK@eN0 z{$adFm#k+#cp9W@1eE^^OIHghvxmRqrHx#ozMXNV@UJ)Cl&=;t=-V~JU0cuWJv5X+ zSzLD#E`c(X9b7H(+tAL&RYJJ*Y9UhN^|(d=VnCh0q$Y%OJQjBbaST!aO})>=Y?+K$ zZ}_M7htF^~|pYYhSwFK7q9la8vYFU<(a- znknm<-$IlzYbb?$d^SN$eY{M6G2b96{R-t2UoC`6t^?Q>PKx=iWBqX#lv9gk)LtX_ zIrOQuz>&+p7DO8%)E9LvD{CnAhS;6P7x2vYAWw2F2lCPPU@1xEBg+0@2!Ev?ar}6r z1iu|^LqR_d!hS6BWR6cw2N-fvzll(}@Djmp)muiScHxv{UlfcX`6>wV?MzS<3trb0+-DeRQ?bI#Q% z?M{FgqvpaXP{iSq4h=LS+&4LV1seP>;bV*LqyBF%MkF(_?nmE`$6dsh@&~ z5K(?tP-?c!jUGP#px@>AEfu+~RLcHxw+lidgiy}^LK-@yu#k_2I6bbKhI;DxYG^1| z5BX^*Uk?qUAw>_>(NK;aDy1Q>9tzWtTMwN}Lnjp$I;yy0GP^kTw{BoE#i((BmQGwY zg_MQe5FP^IR4zPfoX{%W?Xgn1H5fq%N0hmqa-4_s`xT7iQK}E`%iToI>|z~P9Oyd9 zDOlA%4Egwl`dFbJgxiuwcw1c0AXH@`##mw64>mBJ3E9$0X5hF$>G@PcA#Bg%Sx%l( zAfLO4V9yL7*dqhT2!3TsL^&OxBlub65$XbI2<4env+XA5;uh{ESNe7pnp zh&)F`xd_s=6c6-_;v!N%H%Ibq1&)^D0iIDdb!B`F|7(NckAz|eYtl()kVV&f7*|u* z)m@jkN3r?JZ#48wS_DJS#OR-tjcnZ_j&2K<#?zAR1ZU|*ZcBo^QTE2p@5X-zZH)0Hp3Z#9*|E5vJ)LbwTx5b5{@1WES?2J{ zjmdYZV>c$hS5MrSd{=nu#$*|%J2#rkK>ov|?uRxe-`PH8l5Y0KWL>q_H?p^%Ci!j{ z!?#qVImFhYjH4XD4586=r;vE>`(6yM+dQmK7$326qi*Y~I8=J4P{vz`JS1FtH>{^8 zu+KS4C26?bBNOJ=neH)=?^?{~le1-8__4cyE`FstfOdr*gK}nENVqF~+yx~37%OWA zNwxZ@tw>S{6u>s6VJ5Lzd{#e|u#ZTe`w?1hgSp0?9t#h&^(Ns*u!NUAXF}L-LyEA& zZ>29}e_F$jV7(_Xts_$NvwCJrt8#^B1j{2W@u0nfiJlZa{7(qO>>aAUg<<((#A_np z#bV#|px?uGz)D@r_%<97Wm8YmkNT2?9Ho)s`#rTh`nk<8TEb1qka^Vh@&bK8yE|@b zFAmdVnH<$#W+~fYC@`fhAtm~rx9NUd25d6)0#A0(yT@@Fv`K&Kldw15^(gup$Fe)> zQR}wYAiW29bk54ja+$lE(E?~Q z(S9?|g>jp7|9&-h3*p)sLN-4O_=?SxdpGv2n>R7Kf}>}l+8cjbWe!J6qGQC9^q9}q zf9h$&#dib$cqeeeILdoeN^5Hlc_dFdaFcdsBV-e^FNytN$GxB)@Gi%38fnFSG>^=* z5Jy{Cn{_T{v0`kb_#4ki;O6>SIE&xXjmUKo<%Y@uG$+m(q;Tx}O{AoJyM>SCSNF;m z^L;lKGIVpNMHqy>nh`O6A zVS1iyjdPpXxht%|__${PmRmeh0&Q|`Hu$f*ghZXZjLo`FR)x*EVmjxtX*lG*Q^0l= za|lb-)4WX6B--1y>vu%mp{#PW!*0u>Hfjpp`OZx1BEoU!SvkvC?g3#qhm!LyQeK-w zIQKQ&y%bVDR3_K(j|pfQw0uZ9@X#l%Em9rK*|FUHfGxE2FjuM`FW`O$_&GY9*|DK^ z+&9NI6~%W!P%(=_1xv*hxYnujZA%q`&m4Lp3c zXFO>d|BR5ulP4O-zae{aIyJfZ1^W$?EY{@#Ya zcOfToYdbx?VCK&AIOzH1b`EEFNO>tci=Q@VEuUo}+Un971&!n9L;AIKuRweO&)Hgv zTRr2gP2*n?FeKO0u%&7ILLm&W*5d8z)qE=7G=46G=fbEQS3`t-{ip&L4{5?TU}&1B z6haFVax8)ziv+n4^I+VfSRN?*hDCawh_cUvno@ar7Xv=OLVr|1f3zwYdA$hI!e8OH zRodO%K{=)_zysY6T($;j*jKHmjbLr>L#ve9wS43F=bEEc8O!@P}GWFYP=<0s9nd#*1A-qK{LElKZ9&Q@aii~i9qi`o@5fu%ok6SgWp~_nivgfTCs)MENYd$?#|KzMRqTP6I(X@Z7Kf1 zBh#-8F6>?^Fb%||G5Atg|6%vrg8Eau%=1jkT&kCum>0`jrk9ym7nb=hEi+ao=c>w$q+#lHLKX>{I>wJwg51IR9OoVp84(0gt=xXKD$WDhNQrF z;c6>pv+aOf$3p7K_?=+;7RJZTiBaKA~YrL7%Z!C~r_UgDBlJFXaZ{)FVaFO9=3IaQ2OtbeQGL!IGB5ZEYXl!h8UZ zt9h)lG#rthq$dPC0U>^9NeAuL%C*>2E;15!6UyPZpAnEw;n`EpU~%e+RKn5yF?DNC z(wpjhH7tBq@bg|cSzThqJwYy)9af$jHraU_daH9{--tv=k%fvUQ)$n>u>r3^{!( zNwiab)mC=rfISST2TF)I)EHw}%fmYU5*6Dsb5wG5# z^dvQiS0>_R?}(RW4~&}MQcAHJ1g8PO%92Ze5i3g~R`m=kW}6$a8sZt5fYoR#Vr8TB z+(Et9M3fz#3c$|~=aux>d9D5v#(#uMp)Nj`{$gExVqK-IE}miwbrlcw46?Dh(y9K7 zjo#~whq7jHXan^%PY-Hgw+C@@NWqtS(65%9Hi3H+W6~#Z89eOyS-y;`AocSI6I?D_ zAudueE2MkEa?v>=k<@NZ(v6l>Dk+dY>hA_~#1Gg`<`#Im>E6CsZQUrfko1>;3EUQ% zmimq4VO6+XoVr;qjirTEA@P_t4Q&8pTG*w#lYv{0MESJtL_IKp`y8RUKx;_F-fyCO zdM;7-pp{_SMvD`;ph*2++}3>)ZO>E!BpV^#4i@$+{g2l0AEFX8Gar5 zmXL)$j!O5X@Lk&;q%g~3VQuLQ1)4+l@|j&3>@6YFN^NM@J=%r0AS}!;ffeBAPms3l zvbF7d9UH!_h{igW2u|qV33ey6yh}FA@eYjd#l&cPenQ*NCq{~hGz)SFIoKEZL`Y@u zx%7?&;F8R@eT;Tw+pO#AvaHjzR^|0z9qJ>)dWBuZX_Pa8JBj%%Gp(sm)++qAMH&|K zE9#6CS(d4FYp2gBiztiu(pdepHsmEn1U+vIo z?6hsn2CH5M-7&h+G6uwV3{(0?PZGFO9Ke%=!Lu&f#@<8ap9)}~Y$>kyNSxuzp4uMR z#`txNjYu!j`?{9m29IRPi1CHXx3Tkq!AD?P#GpkP=0TgTisE*};ciEZatXlIf6*G1 zi}CxI@jkX|8+%t`{H~3Jq~`_W-YG@Dm;DCPj6$3TVDBRT*w=Xh^-bJ`4^4bsC>;&? z#=kD8Cy^fujek=p9r1HiJrNo|Pf-5|O?*R7@rIxt@N-TQx?!GBI&vS{rrjI5;Y~sP zJv8x6Jq?6*&@^z?E*-Ts$_-LChv3YOY3Au^pwyK#O$(Gf{DUaRtII+yQ2+0EFl6^Q zHhRxC4SuK5Z+zQSkylHwuYcP1o}~1D!2?D9Cmx8)=l-;Yq=`UB=Fk&C7tVP9s)jnV z<7XBQ=cx;KZhEE+yFY-l3Oi4R-5)}WU^f0{iR+d91cG*Lr8v!@qaV7}`!a3%li%1!Ym+ z>ZxcG?ycEEas8J9+icd3sH`0|oMIkxUlB98mLb~S))*vQ0AzoaVMNonx&V7_Kfb` zkW0;hvz44$aUJ@+V&|8SNU9C*4`40IE|-%qzvM3FmpnBU&Mx}OP0LUF)5>x!^$da3 zKKV2_Ki>#PGdxG%BJeK4!kNqlGnAM$Gcz-b#$_=(&H&4vnU$4o)WSnz-U6IveLl?>sq-mA%!Sy*e^EUXh(Vj2-LUvarIk^7!O5IWN-yJpJ3 zL_$q%B%XS1y6n<($o=GWDD5&h$%M8}r0v)v$t``QWkhcgKxVp}0{wkE18FIUvVcG`uS=p-2ZWr@%Lt7_MOxtBq*89!X4&^Y+Cs54WGsVng%+(h$Kjd@l zPLX+|#q^|+B9YLpTZEaiQ<&*WiM2X16!N90GiJ&u4q7%~)9w;oM*KkOKr|7b_7vHn zekEU|PIKuc8#A(Fm{O_){|=MTt}VWY>+cPheb$ql&E0^!r*>CPcpnWTonAe=s!WTlfDJh9PJ zQ1Q1OsSAd}r(3i>F*BFxJR6HR*kM-DH61Gqx6~mw9SXq*B z8Z=g1wkro$TsHNwQ6}{uJ0*!zfAD9%7e$O*S$#Qmu|IuT6!CF&fzXnI?D>w|oZIb_ z_oZcrRvw@$^?hfnc3)(7-50U3-J^i2_ zUv?Ua!Svo}Rl4Qb2rFqWEoqM<+u_Q#(AY9ZEpcUVaK^O~f2y7MGpdO%t&$XEFK`s( zta41^z6s`#+^%8U1pY95rRLzRpo64#HNv@F>qz{2nmzulCBRp^jqeHEkMwsE{{S6P z7chqEa$m;zM9yQl&!@P@`XAah6WW&8|MBpxG>m6`oZCDET8m%6^QM?MCW+$_&pS!a z+r4vM0mo>u(3>ncCHKHN*s(9_V|~H)heN?3w2d_+5zglSe&D1qt|6f>K63nBUnJV; zx_C!Vav|=M<;sXtRzGhiKZ zuuYyUfKC%i2RZ0(r1(pZ*Bat)2MC;Y;8(7vFiVJU1DHVYH`9XW90NWT;H#qen`yDd z;OcvZyw2@A44IM7sLV*3e$Ksj2YdIHQ{=AWq~(?9wXeW_3eJmH1CNNO-&Fl&qma^y zzVXwqE#JoYZQLKr?)4Dv4kIM@p*F;)qxVvur8@~-GErz8GhGO+eI0(M!S5UJdprET z3BPUdI}d)R3K@3pVf8ESA@w`@Ua*=_ZC2{X4Dh@c&naIZ4|h;K1Ye8vuZYy@M`;#0 z=QANn`UuxUx-Jgn)Y5S^1E&VRDUCaUQ`Q)7j?9ADmfEtnDLJpPb2U4 zZfdICXD_By=Xz+DPXG?%i`l}<9PDIY%n@GZQv`~U^o=S2H~5Ocaj%Fxzxv$=MVqbd zz5aqARtb3j{Uq$Bc!McW9x9;sk$`uWz}H453uaefc~%^}PO z{FMpk+8aOrzkNH{)amWuJ}7?-^-J^rQ+-2;UFz&K4~(9`uCy*c*a7`3)hB zz9Gn+-v{=0d^?~o43-6@ol<=o(~0?1Za(r?l)bdo<4fDGaT%U>K4)(~T|=d;7dZHUqRzNb<^kUUZ6>SS!j0668sjNEzi-{MwH9N z5)VKqB5kAP!g=mD<2?B#?|Q_{RJ^m2s(XXVR7G(%<(i^xhUIOX>3h?lcOs zK5#Jp-gxqJcE1poUKQ|kfWHxCE7XS)m=Wb(IDIwAuf}A8ao*W?vil>s7%7dL$V1pK zd#7M+lOWA7{m#QiJ>I?F^=xQUUk6H$;0udfURIMs!b5QdtyVeG$L^=HagD=X7t|jc zhrIzSv~k#*f_kWN*gOHobLb*LJ&g0)Mpx63D9+LfqVCsW(9(TTeD(4Yb&uJd5VkW@ zUq89jcp9URJ@j*wAuk%<$?hqz2S?GF-s^vu=_BY&zdkn8b1iG!|7q6S6Yqi6?&4`*R-4T$#yNOwB6iO1Gua@fxJ8}=i_#+6ATX)0eP zAmz6ZCKaXr3^9C}VuP5ag8K6wV$-D?n#$jX9)>WLZrB@bDt}i{zm30nKCqL$O`G3i zHF-XOS%NuFMVmZ$k7b-GU);&&d7{jieq+J)HrN(%8F}?lgQ- zzC~rI5^d-$-^t$X(Ly)gn{w3p@8VR2zSh4_)9dRdR^G;)hRp2yN#*U>$?nYx$W5e0 zxrbLel!EsQ%vSSWNH+rKzbfb8+h0W5r{X;^d*!3w*3wohDVtD5%LBD9WkwSMlpdEkno8CS@qQ@zLYF~P zD!lGaeNb)0)tu#Z*Tu&P`{05vm~KdmQsZT^9y0dFv_@&I5SFm^)Jn8g4Lf`Bxsal> zpS`9p7@h4ytu(h3mwA~7fEK0PTS7J4aI$j*dN=A!*tf<)K8?)K}*XQ(X)^n~ax+XogROh;%-M`FZFuez_ypqS{)N6|jT#;=_Yjk5Rc@iEvC; zVi=T%-X_pG5lvCNtH5o`NYMMa=L`0(h4@e#$?mN%pB#A{iN9+-(Xp+{0KKPMq=8<} zq^*M9$Fm{dyGRQha&{}}MQtRZzRQ(lgcV!sbJxPx8UeLxYN6d{dLM_KH{A_oTK!gu zYRs^2Xs;F8YwJzh8z#N1;X5`_ot#>NUn6W-%9VVWN+cMm`^HkEE)3qS?y-`Zc>HOx z_|L4}5-s+&g7OOpc$7YDdwAb?(yBX@ehWA+L zmr@S-GpIIDE7Vw{*Ql;>=LMsXPyUApW!Vc1(rj=Gu3IR z*;MTv0R4V8%2;sYCBMc|oMkdzs?<2j7rf=b{1NGqAfeLJKPrQ4>S6TVBGX@YQ?~tR8ixu|HMsX8e8# z)_Iu{e}ge-`b1lWEc@?e+U# z23X|<>;|5|jdaHlP>>$@%gwZMBp_y!@^YE%bQ0i@a|3tLyYW?cU*L>LJuzL%z{kIh z$~o%ZD)H-RHTNe?H;L|xRM*E@={yltKZ)~t6TdX!$iICVXgxAwm)Z-Eyz!Ok=anD&n7D?!?TPEftoC-)iz$f5)vWO{y_gh;p>;zXmFMw5 z5A!WGPgakfk-$w4JzZ?BFA$qUZc*l%hUUSS0+9Zq{8Qu5T(Phg`0Sy5_1`{Xi^LV# z$Ox{h7zw3vlWxbmikCTsM-Ab!qAVEgkD-wTT&A@}S>J6al;2w{;A99bp`q?#M5!pM zfD$rAl>yHkyWf>P85tnDfKIlNss?8OsJ0Ve>5nFamS1Tl%B z9x!j3>UxSzbv;D&k1je-^1&XaHz1z|E71EI^;UwO$En0Bk*yWhv#2f8LG;c)&!OL+ zrs#ChUU7XIsW>Q-if2+u#Sf69EBc3W4CSU%$+~Z3r}~>O)k$?BVeEwRxdQR0qSoaq z8Xh=DBytY!xIX8BsL%03)G<{3R(7cW_Bm}(j_gvu^f`7TbY}(^zmKl@%8(zy^@jaX z4I>t?<(`MT)=hmh&iYBoYYK?1B*UIrW`4%x;K|#pl!&U+H~q z!<*HEIA4Hz^&mLIhS4_=I=lGz?4onZx}eUOXA9~Ulp;OwQb{1Yu4{YaSL|Lf6e<;& z{HmWn9Y*Y^y+!)T$I&sg(ej-fp2adP7XT|KXGUsn;7V%+{cN@X&Sp_NTF1b%8JuHi zT0`qBqWtW`J+=|*z7KzTG1KKg;H5fJOg`PRz*RmVn~oC; zRSf7t^?5N=UXcRd$LM!Og|Uu|x&GEy#+`DBh}tWy`wX%QSF&Q|5wZg866LiM>~SxI+-(%`bxsyyEfQ_d)BtS=NX4Tc&aO}M^9L`iu3#nH5| zRdm3Z1E+n>`V0G&*`mR8kN64oPsjQ;Rp0B&zSeabT-dixDq(dJe}VdPR+qy~%5LgL z(YK*d&z}FPo@Z%2Y5Mv&1bH6AvxLwF{5Fn= z2;*BeAJzt}sWhf-RU`V}{s?b7jzcV*v#hmrHKD8>uBP**qYT_Y5?;#2V*>kv@i@=H zV4r%Yz@CHSc`Y63mC)lrm!(Wx+YX;22hIkLB9VUM9&-fC=Cd3;r5aNJa$1o{zx%+h z)5XCJa5-Ui-IqnFAmULmri<}y_t}4pmd)!&xT~?oDMVdgHt*kfJ3vzgoIgd8W=^4c zWUKs6o%a*zX@RyXW&Y#1H{e&h&6(2fXH&OLx!TZS!u2v}uWk!Wdaj!5 zfPwgGk2-_Rr&RQMJq=A5e@I{VVX)k zYMkp9K)Y_B=QcA@jYVx9jL$eltl; z!M!{M#;4+O3t8Zi?HD(3u!mskftM)IPosDo(Sg1!3R`f={JZqL4jgsVz-ou>9ZwP2 z&_C)2Si*wA^Y2oRhL)a1DlT3U4K1xB6=yGu>SZ|w4$L43Yj;>33nuBfI;KoUj$sm( z@igXaci12{QBU=+*jT?18*9ThfaM!@*D6Eoi`DFP?zNyqQ>Ex>QohmeXlTDVb^h3? zpKYA6vkiW=6Pumg)?jOIjGu%pI&HSL0~N+PE{49Xvf9XkI<8nfIM8z{+HSM*^Xt`< z#vO0fH%u3Lobpn&Teoi$QNHnZ)`K+es_MQm?wa6SP_wj~@xEZ(MGZ}iFMhk5aTjIR z{fk|e7~k+tEPpEXyiUlq->~=9@bK;;*UGhV4{!;HHPKcPUa+t9(}Js62vu3Ho&{Yf0Ekthkp< z7=my9A}Jl8LU)4@&2OPv@yNNKj-^=qsO!&4wDh$gpTW8CmSCVBi&$^+o{ctK{uNPv zU|+{O$6t)l?=YTzeI1efG#+^%t}db!77Zlor(8X|N43ziJl;zN^*daA5AzZx(}euy zpWm=M9^_sQdei7GJAm$nY4ld=1paahBwUa9)t*WyhaQNZKg94>q>{hUc$}4KsH0^S zQ*ji58*%OyQhDw>u7VrD4dnb2#1D%I9j7!HA!B@U_w^)aQh$>;Hf5L8pmqkEBYb$` z>0)E}EEsF}9aKkroQLuR4vKA0veQcF4tO?6wO|^g5Eh-9;JD5ojb76+21^Px0A2K= z-*tq9&VXMX+EUZEXhvADcCm7`>Iz)Pj9v}d$K)HZP8%HypcR%bl%m^o>SfcPw}7nsVVt*|X~U7h-6mSviz?uy%c7`KnnP#7!C;PTrt z)=D#UzY5fM<35A7^oI6s=tdIkPhk9%eaz;be!>F&-b!_*5N9hLS$5j0fKy?c+-6x< zs-DQ=0gnWK&JXWPpkLB^-8$>-Jh_kE^)^WPVj?dvt3$qJN%`i)^7W_r1pUl0Zy%E- zLLKQHerChuXZ>XRFLrNI7xFB~ZY@6K^;vOeneA`DwiFju=8(7zpN&w?X}X*T)5LW< zuq2yal1(q^t!(^vG5kA!ddRbsmOBv24HYiQ4tW*=T()8zb$T7yx=a=R_wzn>XNvbI zZZYoX_4j@3KEG9Zt{YOaJvJLpHCWiKy{(UJ0BvCxTf=BY^xOW7x*)byd8*sRNNH^S zY*w4k_EWS)`jg%dtvz$b5TuHBeFotjKs%hUtEh&1sr$<)t~^XRuK1nmVVs<$ZXa0k zOOz{7PvHBD(|8L9{BTSvzU@g4u=}L1Zoc-Cut3}D!YBaLw$xP zx;K!k>K^)}P;BR51C*YJ6hdm~lVWjT-YRI~!r*8)H zs~;B{?#dVab}HQ^z33O{{`^N&=RWNL`!7-8ETA1@=&tr7LTP*OcD-W257D@^@fDPk zU@oL2@avdADRl92N;}3n5O2n}E*Kf(Wk+V&Ne$AGk=SyeBMPT3v(sA|Lb`va+YN?u z`izQH@e5vYy|#QR&b_sg!wh6b~e9bbP%Zz z`r0;ZxZU?1yW^2LxuDD|Q;y4T&ouZZ9w-lRPJ`-E!c;~LNx97X6VO68oUe>Dk(yNh zpkb**J&vbowu>E!MvAK{huDGl`N6ouc&F}*!&zyz%QWp6^`P3QUH6&axcE3 zBUC0$3eMg>MLbb|H17O9{7yd?NDHg+4zB=mwJ0BXCAv$Z>}n(L5;I_KF?$G~e#h=5 z#$CFodeY=0 z&t5ujqW;FxGWyC>crBzuXfqEx6U?p&+^;B?ljqBG(wIDg)LtRUIa3l~?-pULw?JzI zentUnK_P8H0YR#-0GvT{MVZFqELVv7G+?!ywi9Al>c=s4wtRwW#VAFv@4+r;VY{G( zSM0~sg)<<>xi^T;VqdXsf;uOQPua0Lsukgm0 zOyEx9jL4nD{TqLslezD^!*6$A_Y^1@b#Tg*@g(4EA+8(_Eza2V9Cq0ur^tfb-O0NN z-uv*nt+)x?DSeKm#O5O26XT4aIr(;x&uve$ijX^%rbvgLO@UH?9;VPzs$=8Ov9}hK zCeEe*ZBO?mV^10VG~d&kTo-i#(N-Vy}Z61Nv{oY^DSTGiu19sizUTipci7~&46 z<8}4%nKKJ#4)n-hv`5;mS~ogU+}&GhWBJ%Az2oX&?|Xc#WFKF6%J?=?`}kCnTtb&q zlQ}WZ4RcpG#giUn;Iyx!MyihZW!a`_op7}4I6B%UubZ@{1C~7#>R1wu!w^gL_4q6* zV>l6@EIkQv@dsExTfCGW^@P5EAlCP|c6&nISL7;eWpzWH$>)RJVsp9(=5!`d!ER&< zh2TC6bNPfp6((_Cd$Fw#|HWoVKbWb%VGFwGvq(byG}PWi4Oe~kW+Hc&PJ8gnDC;ft z^LPt-5rh5(V9x&U%C!+zZZf9YUz52fkZyNnecv@sSz;709`h`XG0Nyol)onNJ&N4K zg!buF^LhFmFRM4P|7Gy0$a56KK5z}%k>eSUx*C4J=TXN&py!bDe&|W26C8){ySr$6 zw|UW4`UGw({#pmtUP0t;6S&WH=w~`~7?E>*T^#tPl^-I$lp#d!X@t)wKH*&Ak~lJx z&(8FxTM4k2WTqu2%P+xqccuY2C2eL#ZdarwQ>gavOlS9QvdEJRGLY|2cs_&3-R0DQ z)B6!_x}4`rm8f1|nCmCXa6XgmI0}G^14n_QagpY(Mam+-XeGYXT&9VhqP{2#>O47J zU5Fa5>f06DK96$SEeN{-fwW%ZrsQw$MczfI!A~wIY8+;y zJBw7=c1Ml78hleQ?nwvjXLdXqqyqX5izki};24)wqbx|1D^FB^H|!%1+0SGXb&JjL z`wRZk8z^d*8F<-W@t0rVMj25X*HT<;YT z*GQ@z`vs-q+UkiB0yT432@+PNjrRAl<|M#~(}{ z-w$JTZ!7BD_iJKt+mqt9#Ns|piu*hk_gPZh*Ri-ANpbsQai7QHZ2F1+xY2htJBx5k z4EU)Sd>4h|*y4OiJH*PG?D!&9mNCZeLwcTu-87FwAKy|PKH2`I-fv9b^UOnrKl3xh zCjLw@kq%*hUU0~ugJ%LA+*hP@@;%VdA^zKhcvk*pvGUJ?^3N9I^M=i*(Xsqz10CI4 zL^}EFxb~1aeQY_D>~mxCp=5o*+YTku(K}6G_nDOUkO}O`4lqVE zGl8u(fo(aI?2BZlNxE-MU`I?~znH*I9qOoqiQkUHhX0~^G1-4nNKCX}+y&BJL*>ju z;{V_M4@D$Fk2~M(N>~rYhmHAK4{coCOCcTQ2z-Y-`VeY1@gZc`Pdno0=rWPsHyJu)VfWcC$Etba)ag#ZGxo>iNSye>BP|uyS6e`S4vA zIZr>eBk&r%6YIjWlHaE(LRn4X%ucyx(p<0Ux!$0;)b9-+Engir_tAoJhhp=Fl@@>F zWpm-gVaA_^6^wtr7oob1tR?u?hQ3!ME7N76ayy3&{u43&vKP_$Gs?RjVft)|WuXo^ z^8?jehriG(Zru+pdmyw!jmnW;k_q%p9g4QNU!vofoMyg}CWEC>k2$E6HSoqq4B1#n zugvaMthZogFGhC^|0%s8-EA@dDL5Na=<6@chC32x!+8Y5I0NXId7J5&F%Kw`?g7O` zSe_SXntoQRBVbL@VQgII*RhZ>_oz=Ey<|4e7L>y&LC^ENo~oli7S;;1D8jz=S>%OT z#93|3w~K+%o@g>g+oK&Ys#Vt;V|~>TrpLkN&a=IUA>)LSR55#+^|l6bnTS3MjlFaH z5p#c2Hy%m$BQ@&9c^?Z3`3{bjhx;FRA30f-Y#L!ZiBc{i6R9-(4*HP)Nx^?^P4D%%r_cX@! zl7G&!D}&@L8K~+*m5&R}cdQY!_-P+Dwrv#)$LBkn+E(hnAB)X*EEgN6&x5~3VgY}J ztwph_ZKSDfHH1b%NT#7TAv797nKU$CL>ciECM%D=miWfDZ7}wAs*}pv1E&S6;U2D( z#w-Im98m|80)CJq%R*{elmXSHP|6Z<1V2ZN6pP$ko@u$%*r3Oh5vr1J-1pUN>To6~<*tSUw!5_A|fM@zLi2a8UV)`-| z`T(#Ssa}#G7xC*6L$+g$m?-mc>WE?Eb(NT?FK9n%q~G2lefm*Dk8qP{@P-)9KB~{9 z;_Fp>Z#3?FJO*4jUzHN@IXza+<__f#jMe*52e@|B!1FyFPd3-j*5QrZVi9fJ8tFr^ z^b5s|ggJkyfsfRr8taJqS&iY@+yT$)WB9BS4SNt&Z!ebq2AbZ`&6{?V`IcxrbEz1v zc@yT(Y1Qa4>rFA6Ukmf0Z?$5RJ4(+LoFng;HS?@l3B|ZK_!XSgnFG=Xi_t8ZfjK zYQT^S{lY2R^-x6VqgoUE)-5?|*vsD{`uQCCW-75Cu>|B7u9=ujP6L#e0`ZZ#BC}3AS&+F!8(lB(L zi1w=s$Vi|Q>FN*?8oF3)Dek9c5t>eU!&^es@8W#(pGVn!3Es-1d{Py}WO36z?84#Q zJl-2JyWeyz9bGvJYN}pA;7XGcNnaii8Pv&L?vxtyJ%S_)YzHCcN$M1%;?V>O3uwK_D zk;ShN+m5~LOiP#3&^F}S`?1FFq2_h>qYZedI~DM$nVXiHcF$L_udOzyzne^ICR^VO zN<@?pC&Yu)ydtKhzmnz@>9>{D97 zz7}U4WA6zv7YZ#EL-i}fPZfQz$X|r(m1r zdl@WFnOr0a?HR7}q(MQNi|Y-?nAh{JC`3N4QCTdaeF12Td$G7ck~0uvIDZ|B-?4mq zjLCntNN1^>zLvAd)Vj6G3|a$6t;;PGaRw^-S6}#2e~FiI{Fvb*66=1ykex^u@e19= zBg#u&g(Uj-J9&)J&<16VSX!J(nmr!@cTo=5Hy5rE5sFxZ0Q<0eHBh&{D&C%l75IkT zji)+M27MEb8@>Xu?sp3HFJ*0EaZ+FStYQLfL#xndsyvCyB6T~?WN&1yVG#5xj28Ba zmA;@_i9^C$<`K4*npCxBbT;3Y(|58#Y~Mn!-)!7C_62(uN7NtUzQD?k8#WTyOhvq0 z9E@b~IA~!iX;NO-b){MQO4Ib`C!~KvG;AJX`r6~nW_kg+5_ShctszY{8(^>70Q>Hv zv3-|eJ0xkB-4NT^jeY&X<4ooo_i?=^V1D!?bobQpX(Np_n_-u|3Tn)zHEx6&Hzw5h zpZE5Sv05?QDjn-iM+?eScNpy&b)4z-V+wp*!xdnRW4V+<@xgw?nI=K&hXXE7ipzSy zWxW`xT_)Zx>)6=h*d+JC`h-4U`~5_y`&_CUDgPq#!!775GM!Y^Rg>_@EuvC(zJq%D z9==7)C+9mN(plBawgKvNpH083(MqCnCVC)8$y{B=doadXE2zFD=T=W)X|2kJ?)6k| zT%e`n3#NsZ1~Wp2RENV?vQ$He*;@h18w^AqDu^iMuGZs?zU zV5)y&=%a5w&d!n{X^~h((Dnh^e=D=tNXWHFR8Jzj-12LbdK@_sfA9J>R{w_`WYmrL zgU1cs%!MNJ>5ilJQ6V9TcSJ1h@x-=tl10b(UpmAm%bfplyyLmV;M2Ju%`Qf!t_h2=Jda%o+aef=} zQ~fE-Z^QI!0A`2Z_eE+)!rF(vp*B4HuBiSVdSrzdew0x+JJo|i%HBw|V$VfO|BuWQ zn;~Tgep`yG)wwo->u2K}KHHvXWBc2px(8#*MhigCUKVrh%N!_SHkzoL5_0hUY&_&x z84W%Bw)nDzw}u|xCbpf?&uXy-tnWt=6TkHx8XI~9Vj5P58y|j0Y<~P*G5j#BNZa{z zMTUtwr$rg2&L!##h*RUE^F;L-Lk7f7eQXj+cSj`1Dql|ZQP{gf{f|s9Fd|i{%>Hd9 z{yLEJMmxCv6lw$YAaLX<_>y0)vXC$3*JyYzt|JZ8!3nokWjcg3oYJ1+Oo>P}_${jRHV~RwkBpU7KyF~#T9Rc0p&1)6B@i3a6382R?_g?3 zq4#cTObDSD<0^OSKj)U&8AY^^gQ;??ftZS?m16SSnkL3osifVyo815*yiCV zCPtXFV=Deq+psPC3$=!mG;KnJy#Q#92)*hl{0sBUraI7-6T&WY-b2~R`Hy6alF0=R zW@mD|SQ&P;&wH0zYG|ML5BOC80(Qa|mctQC)B|@1b7b%;lObMx?>a*cPPkdPSPi5E1&! z*&Jql4{66U{dJd`KRGaxB$h!n9SQwz;bJ>u~vsUs;(`Cpl z2T)sib}UjTGcS;sI$b872f~Np7t{zLHw^&}!PZt@@nX0Geh&*|xg(DXeQb3L;|tAY z&u06&rM1#c(!*=pW&n8h{TAerbbqEN#}Ij=mD?0y?%h{#1rEAw7Z zIv|X3I98uSXS;TbuzBz|uCt9A!D+o4C_a^RC~s$@#>>;$q71^oNn3|=5%jgG|BY%E8~7$he>yvm&;FlbQ=``QdtSx5M7*k{Wr zeHP$#%z--YpuUmGRMm};)sIrWYf#LRhr-ll8JOBb`R~YH zgq(*UV`NaRiA3H*+l{wivE8rz1N+#P)Y8J|R0xtc^C9lrg)iBdNW*FN?f z=dXyUJ8&eC-wQa4XXZ#QZ$(>c)ZZ=M&D-oB-nNC&<&3r}02kvMnW$74U_G4IG4{hN(A^LFopx>!x=v47x=u7@s~F1(jaT2zRGxgD~%52_3TddRlE>htt4B43kPCIRgu=nmpj}34iq!;WXph;&Y`(iE0G^jc4fNI@074F^6Rb4 zmsH&C1uPQFXI_5WA};#g>pY3t4|kW70;y|SQog0|rSR&!j)q6FI~pF$HXDHEmr*(g z5Vrwm_u(%A2I*Sx7ujFVf3xe*=pMpgY>N~*g8~40OK#& zDs(Qcj|{$#TWh8LDKc1x;##qn+V@Z$84-Vn6@S1H|F{)DK;y-I=Sw`kN56sIP>A?< zwhEhbn`?F0$!aj85Ao?%aff(fl{84#;)|_Jc2Pi9Os#_$VbA>($eGqpt_o9oDJ*68 z0D36Il*l%5H@ii&OXn#iX~B%ldhb>t`__VXnZC5mZZnU?`L<>BEX27CZ5w)jRItr? z&qRHMZ*%q`KbV=9s%=6(zN|{&@?0#_yp7+D#`1${WgL-(Uo-_@mo5Fb&JHC-1cqk&dCh3`j|g+#6Jkp=qp8cT*~;N61H9DZR4;+F9>4U z9^;lO#f3b6K~Ts}u>U7*V?NE-@>Pqs^v4)eIZ z`JOjqNlMQNN-+~5nTp~2d;VQyJBK^1J%qXcGhXZ= zaR&Bp6X&Jaab8^8GiO7LE3lod1(g}-C9wWQ!L&X$&hE~ketk^bpmu!N`0}@l_g$D4 ziKAcO)m07re%wR*rEh0@QI&n&zVm$Re50jXrAL?hF0CR&yc@)P^&+2}=DW$aPFgR$ zkja-tB}s&|K)y7s4`&IjPjwn)L7@JO%3$16M=Hpro^E|r)hv=SN`n<-6@-qf!r88h zdr0b_k-?6*9_&br2qt`oK<*1YWw)K_^ zJh(H^4&()%UgdatRf-doN8)sLw$TaQcjARMZE{3$_BJHUPauM`x zNmUE0=izeSYENo>I2d_WtkF5!h5Vo_XqO*cxLx3pKUWdkect8U#adScnJsE2ce;8z z^A(#fqn8A;VPp{fbfN_k_Wcxo1DBCa)Nl;xG#a~xdbI!?s~i|$F|R=k-rI}4ciVQc z_izU1R}J2K_YCTfh<|9%xWxW{e7n%u9~Go_QeX`vy5q}XJ^rUkvgwXIyIts^goCQo ztET~~wCiO-gdIs;hu&UWCEN19v7PfMkRSc53@$OkD#7&evCK!JjKRvN)R%aYO5^XH zf^)`dvFj&%vE8o!#>Vx-cE;<(UHPO}NzoU}`BE*BsgDZL2V6~g$Q#O?+XX!VbF43{ z(rq@e$PQ+^pk1$o`O1f};W{j+VzhJ+=-wOUQt1+JkN$5s!$`qZ25BB+QI+A&p)?iN zle2@#s@vft#oVPpTb0oqzLhCTbQ9))mh^@!89fA(82TJqA965n38LQDOXKU(1Lz$ zM`Ga)riW_kwE%x>0C#Vo^$HxjY=_WWyCayPBiVjEYlpzGmscw`-PMbBh;w=e%>0ej z;+*>VTwK0`@c@WZ*HqhaYL{nc2r+7pv37jSjq7yQc!o=_9Ph-Xx9kwO6x+C^I)h6` zRQ(bzeQ<}srS@`&OAo2CYO!cK>d(ZQr#pk)`ZaaBjo143 z4u)q<)3~muZRqhq}RbnZ$nlb_YAdOY}e1#b|!SiBMjNCFn~V1uZ?@Ebr-|kEKhDf z!^KOC+pRqJLLTOqh{e zG)$JX+)-yPhmlF!1~8_9+6xu@0vuxmt!ZcyBN@`mtbY%-sNK9)sDbn@BOG z{t$#83hLxmPu#Mo*X$A&^)M~1udilj{2p4?4BrEBv5A>CRQQ+bx9dc+8J^eAZ~^L1 z+)~XbNH1#eB1V!Ds1FyuH<%}hyRg&x*?FiSw@|y{zpvJ%JexhSv--t7;DZ2V&<^PB zP-}&>%VX+y1>=-DzAMPp&UBUBNu-Twc~M z_94zpKDD5T-{k}$UW~AFYATP~c!sO`#aYhGt{t~t*DrAE{XzR(#Et!SUp6f6_I_?p zM(Kpy8QH~s{dRtczs2eoxcsi5T}SDu{-HX0&kl;i*jM_+d3+RB_5Nxh`@lNi<7pMJ zJGzalsuelUf_I--<({>{N~X*AIp5D|N<-ZyDMz&yzDe%s#8V=Yko#>}(9Kor14=E|_eXiT*2V(8^qg zG1I{Z1$T-%p10}{ut3}CoLl@Z*(q@R^S}p|*4W>x=vG}X4}tgNb_#g^MYUq{_0wq8 z_cF{!VU5nmfO9=%r+}j`!~SWikvPAlNvDurBRo-YA%xDni#Tehco*>+Z$Bl!8qBfa zPHLyvkFNqJN}}H2v;TM$`}%OY{8zF)xphs72kh{@YR1qOP<($jWUGR!ENk z1^!KS16qj~CF=VT>I+%ltfudvZzoi<94gfDUC<88FK~>p+!~`;r{7y^_&VUCTN-tn zobHc1IqrR+NzNxtF5I=-s!^iyAxzRiGPQ?hg~z+>wrvGIyKSd{Bd^2Rs;bH0vpX9H z<1?Y7a^FtI6L5RDkRPq${Fdszu5Lg(M)WJzZEUYDkhx!o*{=uDI#p3k8?`gHM1QPt z5#(aHiq-qhP6ms6$p6HcKKB-c$bcVjh@lK3t@l^UHksHbJBRmI_3xeH%@wJM+5Agk z8{h8~cR9POnRlSfTeNLE8Jw!r5B2BSWKw%Y8GUbc*n*ktjLEyi`g}d)j0JXyGZv~* z==}kcofPb1_P)?=@9j~fnPR;o0e_kczYd}gI^Vb+y{x8>dV)|0-OG@YEZ7k2X&G5# zhB4G*6x8IqsNT+(<^mSh{E=N^E)U6$n$H$4n3O1yO`ac9{r>m)a~mwjsp5Ptt_sQxwPl(YQ+ktl~b!TZ+vh* z`oui7%pyuG$FfzvVi%(e6CMrVJG1spsFiQjqU@5t2*C`tES17W(sOrVu1Bo#)w>wn z!4|2U+clo_0i$p&`iHE=YPuEzFG{=t=oLqQJYq~ z#W_7WOR?$LR_^BKR2DZ;O$xsDeI6kHl>jO8_zji9+?J8YY>o6TpB{y#O9q*rOC^<~~#AM!Kx9bv_< zan#q&=h0bTkN#&mzKq=H_@AlwWGjB1qu!;vxh*a|;OfzDsBzi)D)#T$yBY55R@~VV zwQpV$vaj80UWYwBtzTPX_qTK9Zo#9MhU~QEpRD*YNBnJ8e2F9e{@uckz=)82+>cx1 zi)GvO;{UN*+do0Ax7Uvd znR;o+4+z)q$|I-c+*5=1VQ5tb&&ICZ%q}FgC1Ulfm4&T-X}n(=@0Z5=rSX1gyk8pc zm&W_0@qTHxerdE{W_?MhT^|vW72G?}zdY=pN>0nYm-f$+JMCe#kKPLXlJco^^#zY9 zmxN4M@wf!^9{i@2U*}URj>fGumDBv$j@ct{w;r<7>sWuy9xhwZ^-z!UYz@1& z=r#0-ic8q;z&c`99TlO$_&>2nz?FySnhSh61L7l8_7)B?pR*`?3d4F-KwB@+wtAKK z8nN{Xt943Q+QJM|S0JV)SUR#%^!=DU+&;gfbnY;vDV|pbzi*sxjj3|Tm`=3D^k|J@ z^El9+PRNDGd#KU5&-!`)MUO`7b9G&6Gam1-WkN37zPE?YZ zf7^gFe;D$kF9kM^%dK&Y9x{%rtZ_W)SeqO7@ONnXXj^}Sjxg>6oOip-@!ma5#)A^a z|E;W;bPp=JCkXHa3-UrwvrPn~{ zRR}#mL)8#^&5JUXsc}O}>0=@MCh+ustKPld^8}H-!pG@*HDSxH z16#93NLzwuq0qb_5=wX$5&f!wH}087d{>~%%)9`4tZZmRpEVUOM%Uu2aq5xAlUDvm z^3b=JeiqjIB$IS`)`gJPH5VkC?=D2`Vf;-S-ID3;@)YIR)1tPt3aQ_#!Yl?7k_T&) zc#Shig~#jd@;;v1Z5$UZ@TQ=r*xL&48y?lyZ9G+Tp)aj>M;8%{P3z}IlQ6$so);8W zZ{)p zpAc2(E6*|?zBgv_wu|?&eW|+ITdG3zrlJLQhV&YY>EW7ISB3mKd_7h(&DCq{YgA-_ zq>vBu;Hh9#xLC6*_6pfXEsUsOs&13dT(_6eRj@yOrP5o4-TEFXT@*6pn|~%<$TIK! zU&=r6GwFgBdUmhSgTtPG&f#Hzhu>`^Hr`#xKVIW=(;gcaY8;Jtq_b&U$c(}06rK5@ zlA5Ld0UD#1OjYUY;+pS?zM=j4tdR_QGbi#T_X*z_wN-^^R5SC3ZN`+kCGd)U4+87E5U)-s#+sE|<^3c}--l#UxS2*7S&naL( z^=ppoKmZ4<$mfr4CP8`<&6o%y1~nwxvl?8zxP=EMlAnh zqt1B%YI|@$;{nVDcJ?Txue2p3D(%f+7FABS9GqwgBaYctqdD%1)&1Q6%fBngnSe?9 zBZ`zZw%5dLyzGemY`>uW%CtUbLX7w3r$*f&Q;F<%-rr;WhN!=ldb|MaxvK_moZ*b^ z6|%Jn`z>FykQ%n$G-Iu8`?-9!mBC#+gZO=w?D77~dK7m1*2b`ncQJW?Q8F>K z)lA=x6@3d2%_Z_Iw(9c#VqLwWuDs#LN$kedu^|6!T0 z_lx^Tob!KDIA23|6uU>gW@6?Z70YjLWaW`Zkmx&y%>Lf7f2bUB|1fc$1I}}RvB3l4 zj(=<@?h+V^;mfq{lMLkFbXSu^oO`DDfPFq(P4@W+|5tUohtyf;sMGD(D+f8!d_0Z8 z*r^9NK7e*mPlI9P4BtHSfZ*c}bI22@{OthOISL;JJk*?8O7SYqhQuje=B+!&q9^Ac zU^*KMMmmkGR>26pBSPgTaO5(q?1Cawj*dbtuLt6 zc`co_?Ea_2AUx(bwMCn`BPH-&3B?<*XzZ94<2A|YfYWcy-w$TnAI(Z)n)NWHAFT!*EVRa zZHd)~zYW`m9)sBI-QnN!2Zo;cHxCTeQ~BV4xI;N2#CRE42cxWxNzgL)ko4{40dWs` zM2NlRNGo-<(xATl4*C+=CS-t{4sicFirE0ABw;ORW4)WoJ@yV%NCjRq27606vlhL) zb{os<>E(_YH{tVi}Y7k8&>DkX^pgIv~!&(GK~_!B%|I5r2dgKid&M+ln_G@f`!g4o-W> z&L19U<)7oozsQO|CS?cfuC%hxDX znG7ZM_Rs_>nZ-KVX&uRMJG8Z>8Q_2{=%Wh;IIenQ*CFcV=PN0UHo+Oq{?!0~tFNI1 z)J-a6CIJN;KJBcKy0v54@{m1lX-JhjrX3&ZY?}}N`XFrs(2nJ`(;%%ILhnN;Ohact z=mQ8<($G1f)Qm3JO^w7usfp-BiRzTCtaX!wH=E?+Dgn>)mjuk7oSL>El%bvS0n1IL zb1+m&3w_+&p+g^SanMK7p+g_T(8n%3;`LZJ6v1=!NwdMd<+ z(6(r^0d(kMpf`5_ubyf-GZgs_;7cvGs#Y|H^Q}C~Lg?=re|wbNGPKn)5BhQla0HPr z*-Ofwpk}mhBjmlKq;e{6(p#2$Q65z8Uhd6v>n$&Pk-92(zwAvbd&i^Q#>kEe=|Nuw zVSauHDU~OC(3cN`qTfwvVSdA=up25o3r|gP(>P|G5a$r6M5&b2HAeObTK6ESoZ>K5 zYS(`oLS5F*@Na?dSjN^2e$)CUpuD^FCu-5-H~P57{nZNPp22cOs<+ECKNlfVC-qKN z<4vt!7Bb-3OCABH|O|4%X>hc_AD?J8EFM_yV+2Sf8ZXVRQ z7-|GQ1k&+Ewh3_wPZg=~z^r)Lta$0Dv#CGg6;pip3p2Ew1ihuc86@-lMT_{x8AFS! zI6I5TI1jeM?{T1a3qvgYK_l8++USwpanDR5^~K$8()rjakh&07x}c81>ijy1z5<6+ z;%+9=vb26Hj54j1()e!ue;|Ydp4XLibqL?2U2ta*=B7Rm?I+Ii;>&WBNZn9- zCdAf3?7bN4!uyw%&1wBlv_^cn1~_VA=>siF4Sr-l-) zX~dk(c5fSe!AzQG(p}j`a2KP!D0OsW+a$n~=4?0%E*19Ac!J-!Un}7Y){^?SXZzYk zOmi`>y9V-B5lQRSH#IiV9PK8=yTkO|L|XsSK-nC&%38#pVEe2$k-r0;eF0n2-0XBf z+&fZbE7>uic;t|}VXp3O@J*v`ODm&gHKLcee5KgwHL+#U+gxcGF8xpV) z<(ciReIfM3sOELTS6V;0)`apH8h$Jbj`<5C!;@?T6a!D?)M+5oYUbG-#ZJ5g*kzV;>xI8WMYS9yku%WOM^5oI`)>A1og|%pTqgik3HWouZ^fHWa zHtgWd{Bk+f5wMjp-fY%gtR0=UL(7x6%U(XnWv@jtgGGh@mq?*^AyGZ?Y#nNQv=-(n zyPTLeFAk~Gdt3ZXZOem_dGjLZ(|I-cult!$*X8VfxbK8e z+ztB@e$&eD>)a&ScRZYkUb4XbYe-3x_P*003{b+q7;?=Ep?9htJ-^JPA;4G0LQ)~I z8I@R^5;f4e?wQk9PK*2Vh&sBmt=vD>HH%uG#xe~?6PfOIc~?$;;rZctnt6wo{ zH1Z35=RmH@N43DZuZ3FM`{qMmG>BgSzq#~xP#HJoY$fyE=R(OV;j7TS2iA98U8~3J z>xQ_iATHH|qrAF~+H!+f6=r9{C^#*Ph;(Xy{yF-&MeCzcNfd zZ|CxPJJU9A%V@qHy`gO3F!Q5Y^Rv=1KWaYAklUIeC_Q@6Jlkhr;m^)mF`u=3Hfyw= z!SlD!Hh(LInZGlJ%%9n}jL!vwveY8;kln$?%=(ed`{A?tfwOT&W(__Vx(1d!*HzAS zBj$(fZx3=H-p9}2aCgS}j`X2-#-&y|&gRg&V%?UGt2Q`&td$N>U3qv&daaAWbJo6) zedqHVTsx$T>}GjBqkT zK8?-rX%ttO`f1SiR4OZt>@aoA`4MY-Q>JZ3t7mBMnJz(lpXSg%KHSl#%)Pe2K}kpt z2pj^iNvAT-b3OJter?r}nU&04Cm~&sj=Hes?6U!r>u?sB-U{r+*$YFcS%P$Um+QKa znvc3DMr%^NyAXX~R=E1TrU{g?5lFPjDJYM1Nk~w&nfC5;?7x?c z!F%BmS2?#A-dl?pqCMP4H52LELuDz(0nW(0YZUeV9m**dZVU49eAh?@y~nWlDpxsw z1N9M5juUDXo6gH?ke0)FQKUYZT&1**;&-4jC7V9^2FT0gwE$^Rimxz8OQ`Pc2_a!4 z9sfRsyn|)HU-13eAsrvG+f&~J@l1zyQLSC)eTU0V8;zW5mscKuG^RH$Rms#w&E>SO z!UmJiT~1OIVxI|cp31=c;B2{L^cT;T8$ChyAzk`)^Z5{qd%tYz`4lgI zkI~VJ+%r(f`^?s^ke>HjDK5=q9IDW}QXZVZH2fwI%u_D?7UIVES=v4P_o4v3Rc}2l z)Od7+{>G(3`ind`<}s(87V0%}tHK1iWZu4<*57VM`u=YNY30%Y8_^T+eF1z&9)Vr_ z0p+PZUXm%XsX5GB2o2Lh9<)&I`N)%+aaxGwdS_s0E(LN$p3lI*>)m3nA%>q}*!2i* zbu(HR<+3iDT-Iz@JXD7OrSP>b$9?ewR^5v&tpK4r@T8l;UZFRz*rqpN$v)j|ueU3w z0JK4B`|4Wzeg50-@)o+Y1zyi{+Zb+M&W zuu<~5(f=UwHc$>yhSM;}-1qNxmk-e~$n+|c&*do}q+^iDCGvzk-Hl2pMBFq!m+J3M%6Sm6r`B_Z6>-uaYyj;m9fe$1rT=n>|c^_4DPgw90o@ z_Jmj+U(q^5|5`ovz2ekw_?08gsoyZ$k>=EI=yaq>j!|0ZjUD~k0RE=+d!R(eGQbnhN)3@$ zq*&x#)Th9)#kg(-)kCn!zh8tg*YY{d(5j<`)ze_O$>3BR_D`mFz>B&52HK?-G-MIi z;ShIwAA1-*(5V7{BxiG6@3Z0hjBd=Ap7J5OF+Y0jaP(lu9b>;o$SQy$)Ls0}=0V3@ z<$z<|U5>r#_YPP7VMqBquf4oeccavi=G5J&^m3X`YS+_r#GT>vAes*I)p`YuxP;zW ztE3aYR7KE;0%tTszR6Vg>^Qdj;5V&|Ls?40vJk!*{>ng0af=|f*FcYAA9`45okstA3bGOFtrWW}otM8bXSaY%v2wzlNv68nl}`+(*5i8CD4jT>|)i|S}t8A z_vjDRtCU)VT*gMom1mPFkAXTO%-(FOQg^9lI% zu4=z4{fiaM!K7QoDgw^TFs zKI{=q0xoSkK$WeQjm}}#RPwVvC1GD|gy3Kq2z?{s%p(t%C)=4v87@zrGmqc?CPKjD zBLC3+B+|-%A#L2xq*47We>t}?@lsuQko>OMN_)A^Zhr#*Ci>Yr9xHvQ3cVQoo9<`) zU{Z&1NaO%=Osevz(gEQ-Im1^`{RU^={WPyWeBQZ!MnCerKgH=QUWM3mi@ful_3owh zwm9n*V?4#r=(7&>J=Ij+QhW6EL7m!LfHNg!Y!oc#bC^=!RT;#{lPv#!exWZR&Krxr z*qWn{)I1wry}~~nT;M)%t-9XiWf)GsnXd)bb*%iMqn-Qx@x z*U(yR4PZIycW^yQu{P2_)o%UyCc7OuPe9z){Zs8xzOA!fG~2>y<;yxon~8UB47P-z zY!$e(86MaOFua>qzD>9&T~Og;w&z}+U=TCBMJ<;q zd}-tA2@UQXo1V<{K)KD|IpZac3@|#^G`6Y9hD|DyH7TR9)?#m-Rd!Cm4tLp!=n9B^ z^vZ-7g;W_>esW+aEbR#hxc{94?w=MA_~ZvQm)rQp@YxWr(s%a7UWDrS&c4{2HVR>W z87-gIi=#=jY0)pna~+hSwtn!t3p1PQho$#?kCkwOFtA4`0G2B@wMLpO?^$h-Tup81LC}3o&d|E zUt6yer>|f9dnq8!#doTmj()hLMm zno6~)#?$MnH}Xwdxf$xq3N){IU?6RjMt@8Fn)DA)+4t6rU8?r1a&F(dE{gWOx7+CE zC0XpQNS}5woV2lY&s;2YmFQbZCqouaf#K&CD2CykT&{NjKwx&+D5LejYoJJ{f;&)efTU+ zTPr*GUV^?TT~tr4pU3p`7{QBSxwoL)7;2XqM@;V~a1_cS?19{?EWuyWt0bl}ShQuJ zSD7%C@EPb;Iua7ZH;@e?6F@_nZ6o&Se*rv}&k84)jU$*630)>R$-(vGD(>4{_) z-QVJF_&p*?Rlu7F{gldV#=GW|K1k_qX^4g`yO9W&>av+!OV!X%UBP72o7N{qr<3{8 zF106l#rQ=%h^u}-UZ+%IfLaOF>1*&rG@qszwiJV=OvDswMKoi-cxJYMU%OTNyZ*zn z#rfT%+U3`?vjxw;M@9YX2cw3R#o;9N6~NP%C>4_>s;M|3Dp7x2%*XS*Y=#%pN(^7N zlU_YIxrO2ZICXk+RI=&tEXghxwzFEM44R)aAgzY#7IqtZCz;;Vj05U?$)%=e2PK@F zF3GE+6>Nu)$GD!+2r$8TVqh;E)_@``v+hjTx zfvaDI_ypAvm$i=3E|{GIQ5U^Sjnb7hqcZ%zJz7cWrr8)$_Rt(@{RkSWtfwJmQ~p}9!1(? zZumv}eABUvgz;(R-;?M1$%`at1i;LDTp3x$(pFTrpJd@nIPliNI*^OYUU&=Nw2 zFfYh-2sPjVP~Y4%Jz4@aOw9c%zmqj(Xl;L#-H;kQ2l|ydBnrIcELh3pel_lG;5qlw zoN0aKq!tqQj;2;wmr)OOv3#VhR-unxdBXt4${5@9<^aaVNaPjPD%L%d)(yKe>CqzZ zNDYxsF)hw}mev{lb(GBBt+$j*PKG@y1$Zq2S&b~>aT!D!nUwpLLuQ(wJaSh)c; zPCa#^t^%$jz75YIk`md4tBBTr6K*eG;T;1k4*PI0taK)&gzW{`k!gMNq-lihfNyaA z06%<0%cb>QlYs7dM|DRw;kjhqrFKmM?);^UP4nA=j1G^x#{v(Jy{)WgbAxX%5=hNA zcr`YTpQ4D5(t6gEFpW(s+o|P`7?qVnSXZV<;+*^^BWLvN(Cw4S43Y(}<|7ZUB~X?A{~DCF#ypw~x+7;G|)LZ}n@9h~o|VWrxGn&`uNOC5trF_^lxQ-ekB)L(L$x z_ye=5+h$c)wbbYWh|AHK?k=>T{D#^?zLVz5hc|rP9vR&kr%$w_JJ(PDwgyw{5W`R4)8>XzWEI zdTV_O_SP#dKQTw2K^=#(cVG0Z%cMiswNAYr{#C=jTKG3k zv%fNGgwRe1okc@YEmb*6LkSD@?x8n0@>V%QO*m*MBqR^{z@Mgh>+bl1=HXsnnM zce$JO$W2><9?6*=&E!3jd5?OP8$dY5p0HGp-^L(9sa z2^wR6j({=r_DM!>xD(J$yk3HP18TyzEk7ciBOf%)Lq3FKnG3ndK;%bNMtLrSZB@DD z^zC_pG%&Ef;om@sOn_ZGUuxFEdDKgd^nkBa4mYDkiZB@`Vajw#BA-c;k}nSo00fCW z8qSr3>?)DV?tdo8$d6QMLhrPR@wFJEmrd1y4%jn*vZ4E-hv*w5zQt4YbcDiT9V5#qY!6LZq~ z=@Rqw;US$yOk+2wZvHOn>|7@ILtm6ohrW(ltVqu~C#vS56jb;{z95(D+bAs8ES@Xe z7Ub}N| zWEK@tnb(Ys(z;vTtq;4>dTG5v#JvlaIaA5(pH+PS2-3STaH^_x!uS6%PBs2q-|C6{ zM|ELskqyG8{%6o$>mVF~Je+BUwb(*N6RH%idx#B7NZ1F7Vu>=^2Z>@*)(4jzhjA>? zMEmfE`lJ`RD8Ql$S1YV<{Q*YJJ;!jON`aCq+j zYTy4jOy5&;pyzLh^EWro+N;Ku(J+#uaJMNfx7B=UG!xnX*Pg+GFdHdtCnxE7I))97o4cH(jR4G zMk;MHo+Nj#eo0~>z0q(lA8}~y! z=)Ya{tJ&r=jr8Qfd20DXwDw2TWe3_O5D!34{b{8sfnLfh+y{Vm8k=y#`DsiXN%(s= zpIXv*O@Pu64^fC8^hUl)D|bbMB+CQ6>;7y2(`4SWxMv)c`~rLDH4nY7@X$aYyYXr- z*%)xi@jwy5IJFvLvqWqn0QlUKM*vqqsK2y;pEO<_g5NgM_@@Bz6-ORQE8o+aBA?JP zzCtKRP4Cjwa&j`l_$+*}dKbcXFCU4!!ox=5p(8n#Fl&3UdnvW?IHN!O{3YM60U84% zC>FOauyQ~>`Q!dVOyL?xi2&-Y6X(JVwXH(SUMp#=|M(!-`sV($i@#L;5CXmd4N_$PpI_R;-tM-=gO z`yFGogrDCl-NDY7pWX;0aJ8ULcE(^myyaeY#=MjQhco8!vodhT7E>Dcx_a2p{zq3t z{vC%MZr)Kw_X*~z;a@mc=nn_xsM|KTYEBm4& z3Z(VIsn^0j?Szp4=Y5@uMB_Q7e9oX1|wj(!{$fwv*Vqt1O>gH*wOS@zmJH)20b|RjosgbEwr` zgO+D|lXH}o(G3uH=j|Hf5!>4$TEYeJx2;LbbK(Cu<1Pk4IA4G;rFa;aa)81V`l=ht z!TM&0%r{wcVQ6+67I$cj_DCDoM$wJpRuJ! zZ0SOt@R}xQlXjp)&}$;TyhpyD@%EQT(T+%GxLS+s7ybQM6YoK;j)ti}j0dBV&F>Mt zFV-yl)$&j@Y+!1T!?#V4Mtzui)dJsI3R%%s1V9d$J72;FyjmCPJnY0UdeA`(BeNTT zGm8;!$9?%knw?g5&=PSU=KeQ@rjK^T$$tir7Me>UpGpfNn>ej>hx(`#D(KHct?E5%evGGo}Fruu=BP^c9zioSv-%T;LANZPXS9X{r7g|tdbhBKJ1EdE)#68#}I9{t0Bjkf$!ywAsa zUxj+n22moL$%C#(nCeGq&85`h#hVZYibZN}h@cKZv=rLtQ5KdUeu#Tf7w0YX;^bF% z$F9ZIn>t}R^yN1RnPb3Sr4zMd0Dr*x>z~!HXAu6QQvc&+X?+8&vTRws$JU&w4VX_|Vb;|@3xV%Lr5|#2~lTz>FW&94@mo~n2o#?|ciBudDqd{>@ z|E^!hpxm?UJ>B)#wijhPCwek|J~~bv3&p*6wX`QmyXB(FhmzbC~KOAG%x;>UZqn^ylt@#(6%1 zdpf(ml|;6v?#SL8dM{1)PXT*VV8aiTE-JC`1Jhe(?a7qp#5b-nTJyzPzwjWwR_}f;<-EQdqCZbGS2)=Ia}pr#+L$ z1$lagtLIpe$Bp&)dZDHngY%p)xUJE?Wg?H*M?Hn&t$wXzf1PQ?*EwYL=NB>@*Qpvd z4mp#4c_EWWBkpXZwkA<#9VQ}gWLJik`9q<2$B>cb+3kh@xscsas1kDW?ZCO?Js#pm z#`()OeU3W|nJlASLCor>IJjQJ*ErRh-R9~;h2;*v@#D3O&f!yqLN0L-mpL2+{TfwG zY&z@D7IL{n!+6a!;u?A?AY7kg7T4!cWs0R`yPnzGyj%i(9Vp|qMzjsByh~}g1aB>2 z-7;m~Y5c2@(}d6#wh7qFI5Dcwx&s`?e*<|IP})gzCrRvJ4^gK#9^6jQTDhN|W*xqp z`8V!&99KoPn_~J_YGsXiGMxzD@8FG?6qlL-bJirz^B^6@>S=7Mf%G`9XUw2_M%wBr zvekncf7OZe=o!L0|M42)-zI=i<#3K7Z=17WRPJ=k!_lROWVs?QXZBKkk+aUKRJD)_w--+PcJ!_45xy-kUG z8vda_i#}rZ!AdW~(792xlfl-U+Tt*FRJ8zZypc+U<5CRoz^fGaKfAgceJf(U?o{7F zP#esY9;?RMtT}V1mD-6ocbfZqSI6k53gdn^NkyJ4OpboMu)rgeN6ilSVkO2`yD47& zGwpp^-vhnJ8g9U_C#~mKnj=*Qs`W@MRXI!R7<0JRG5S!gW9&?=W87>l6`8Ab zRLybRao>2Oa+WeB0q`w z`npKG<1ih(+>h2g9_8REw-t%I`a}6$J<}uFUBv0d)?aCOt6;YL3d$v057Y1sA-DJ` znbTmDa57K_BiVMChE_k3J5r?%$eDsNk*}b4Uu4?TibX$;aP*_3SoGs?N59Lh{6{NWpKIyfQ9td)+)iRc2druV;EE2dOPWJ8 zq=UlNrj3CyMQL>Jb;xFdg6bICamjE9Ux@Fc)^7+{5iy-w5f4 zQ{LH}cCZ%5m&ovo?}esu{rp_Ii_NxK)JrOA^{0)?qA@p0?Y0e=(~g2teuBTf%0B>_ zMZPho9RYDbP1<(9*>;46?~Gz3@?i*e#i3fMYoe#e_-8x@`CvqN_XxkhdlfUytLFz) zDe_D;VX`(!sy@gi-g6Z*IGY4`xe>MjzJqO4hRPeBDHigEBQ-()P+jt3VIwmcJ_P4i zYNW7=y)9yS-Y8~t4{t+O!}b<3^ZQ=0c&9}34f~eqV`m<>(>FcaYo9@$akNjUfrj%j zg5YmjIj@*$h-oAlgYvTMr|-pS+F3jedoL-G10qLU-aP=}{>+%avyFMq&y0DqHRd_P zj#=Qj{$e|fo?Ddh!Nl~K4is}3omqcj%R{P=kM}|TNiuLvsMU0I47Jl-^`l9i+p>vU z!uEfvat2VEDII2m`c!_4`iN1tG%DH9$HTSBaE|adtK=m(+TR+{KTw1m-zos~ywSTno9RvdDtcnLe($LOZkXy9wn9;J5*_VHMVv6qT$ z6ZBMDiJ+$#o)Pkg!%Ns3S5;279HJ##VI5u4fw%`>ia*-W(aPdt3R)_iMP*=Nm@z5L z-U6^Xx=PqRQD&d{IsX596mJoc!wi$iKGEjM!?n4ewi*7pHmMDptu~)yCG1^q+?7ku z%BOG!kdCpBK2PSS=qF5xY!h#qE-ex7((n}8-=!U**=>%{`^OUNE>ZuL)=_!bpcX{F z8%l(I0i>!@mA}&1zF@gBbnV^NIvk8`g|F z&pph}!!e6?wv;eg@J8Zt)o{%-^j&gPf$&|@Q8`D;oFnFcgy~0S+x`ie3n>+E>Wb>^ zZ|VZ2;#?IEIdi$C3=XB#V>E&J()w5RvW<=|Ddn^ko_wllhp=u{F6>};f@?*ReL)!WwHF z$Krc}_z+ukj&zb3Y?I=8N4lI4<;A+)R4RD7V}Zgt4%T2sJ@bU^O4xlE++E7xMp}81 zzEC<0I1@G1c^WsYo+xyLD9cliA z-IwYsrGht|ud(-FnKQLP>~Vb_wCDGk;rY;~RyvkmJqcrRj(g)T=AUil7j1uOwY_ji z+ncSr7T~Q5)V0u7mub}{bWC^gx#=QL=AJ;hx!l1;>)+4!82W1K@|5KGx_mvpmCL=S z*RyvvS%m4J`bO}4wp_k-nS3G0MRkxwKCiFacb@MGAJy|*?mNS(&qrZKOo)pT}KowYNxRP&htfAYO%>`blOIHkTpPBrvuo#W5aI^ySQ9f=iGXO-Fa zJ`Z09OUb<33qO%0xl4X7C#|mlh?6Cwr8?x2I~vZ>QU@)inoG@YJI{ak2tn7L<>2AW z5rU67!@=KlTJdMn_z-{Nvv35{(^RumpXyQF=HGj@9{twDT_h{Oe`WL(ik5LySF=`4 zdi9*i2Fdcr4gtFLeAQ#V@>?yDl}#$Lx_suV%QW2ePm&bGVoGmI?quWEpeJoqPPj@= zE1xDjB+Hw8{+7_ie{sZ6+YxV%;4o3SuwJrY;@L2x zo12Ku|M5p7hU)SEXPCHeM+km*xnmADjj+EBVEcFb2s?hpv*q+hxzC#4vo-r0b-B#` z4xNo7SSECN&gQy2I0pI}nmG9aR*PCD;P9DROlEgT=hUNg^E@cOX8?bhbThI|@Q->K zdwZk;UwAfPnKPkXhdl^XRY48Lh5XQHr~X6j23c5;pVl^RXgb0-3<4X@O4EE|cn zWsH8nHIT(y94O1|XqIz3iC)@6nf6rV+dE)}ahzkCQFAnlN_`2LUdG`<3+y}P)OteU zYIl7%@Qc757!UF{dS3oEe0~|X7p>jiR_;-3)#tuh- z^DO5;+)S?j?ux!%-dt=hI}c`NZM})yi}C~J#Jdg^-}HQ3 zAE9@K#~}`Z@+0B<*Epx}T|`urcGWjQ{a2w?AP-X6SR1vs55FjXy@03%xgL5K@`37! z>=k2pzf90AOC5I!pIY(fIpV)A6L$=!IpTjR6L(w7HM?%#PQDJrm3Ffh39I?)ho2_W4>u>Ta;P_I}iS)_0r~5gnfHLi@SV^yElx$<<4f1B~_<$WvPH_VBU&3r8|KqKn)U>TWR&gaAJNMt99f_I^~A zyIWjF+oJhWYaYH`Hs|5{)Mx=W`vYX?t3Tn;m=4nc>P4p2MoCGKG<`!3EK4vz}`W60Cgt2 zTzBT8H>p@4tsDm_SuVhF18MzOBSCLNkN2gZB$n>-9hsZf4@_E0<5xlagFOC-LGkx! z$#oBCaaV|#kcYSEOJ4f`eUrM>pImo0Prb*MdN)tSGUhe+(pP*-X&&>MyR6W?0D=D+ z$CoP!S1plR&2@L#V#W}u#k}$!Sk(&DS<#g#O@xjdy~`jRnUmH7lNZo9pm8SSDN3N8 z5{C751O5C+M@Qb5W<@qi3-GPG*mvLXeYZsS8g@G+oA@4CqWBDH5KX^rq>yReqES1o z)UscWW#@RWs8jJ9j5c6vM@9)e9`>nQ)X%$(3nwUYo~1+L9mRN4Ovm|?shzgf6BJj* z#$C=R(XYUeerZ-(mLm=Sibn|=;VuVlHqwf}SF`f~6{7@?bTdC^H^a;x+CXe~bbgMz zsv+-Ln0Fz}hx-(|7ri9t7PM({;jI9lQQFozC+JQ=F3gGRGLx3+^0ZUWEhgZv3ioJl zw=v6D=u7LV2`%{My3R*;V8ClGgudYG-G$hf)&@7^KFG^k^K|Qt4JJuJ8m6lSP#(e+ zvhGvAP7xYgeZS+Lq%}}j zIR~hq9MYsjp!Fjrq6Cu3#8C<|cVZ>=u*1A_pF4#~HW)p8#l&tDIIeWSxdCMw6e&6u(TEin^um;Z`WFqukvr{ zL7>?dupDq4&CR#K*lP*?rj-H8b)$SDrd05__mOf6m50K0X<2T<2br(ZDw*z#@Cm06KesZP_pm?|3=O~ML zsipNTw>#qFo-r^x3$fpj=MIMbcHW^SJQYM8;p>+oK=A$w^LuIj94mJfIcFgG=_7@a zTa*7>Ul_S<@Ek=xQnL{bq8C0~U#+~HK9oF7x;arsvWg0dNsCO1h%6ODkE=*U@q@mK zlIMNPrGHN;A$`(QQ$~0pY<(eQCu@qKO_!^f<-dcsF`C%JebVn6 zpgiO$hIU548OwL1|8gJh<8>a+%iK=GiQ?%r+)nPN^A#_Cn`peQ)8t#BzghYA^4PX4 z<&(7Gnyk3(DSZ-5Hp$XtqLG7)+XxVjB(Ay%j7qceL9KE1dfI{?z0RV|Tfp9mqfhbT z4o6tbTk^99>6~dL2L@!?j}q9Qmyv=j(jw9(6kkllH(R^=rWhnEko@d{VahHe1%531 z05983#J4E>0Lk*%`+|GnPS_*(yP9N`_PHu26chW7n^b%Z(G=|Uak!hjYN+|tnKTDd zU~iFNL7((Vq5$^Xn!Msd8Q)Mz3K_2eWL5IWhoO)Z`383~oRQora{B=dz;+es9ME9h ztH|*K_BsE#6|W*4128Kqs>redDG^x-qg)ZWOnNMG9p=XN(#8eGEGdWe3%_&G#~Xv~ zQ*{CNi!8V==$je3pl?bIyPfD?>4Lwz&7oVC)CCQHJLg(%$D3osQYyqCc2(|U@K3pq zr{J3{h(m2Ez_MY)9EQZ(!agj}g}m=B;Bii|`hjVuSZViKX@WOerZXA~@n?+cYGJ*d z>it?qmve;}pFYx1xG!$X8;Ch+8D+%Gj2svLF4Kp~jMnMH;rwGAIN!x(j@Rj2wm@wz zsZy7GW#}-dNX^TaJBTFV_le|5&8|;;gP!4IZZMpFz3zlG6Zt7)-Gs0UEhKKxD#)q8 zn;t8pecOLHLa#eQ&pATRI6|*ELT_jqnJafFPeANgZ?}G#fp#d~h0r(%t)ZcJAQXYn z6*TlW;OJj~zE+TYcenmZ3C6vxW%kf3x{xV6ui5PtZqS8H;qMyS>l1tNGhO%;dB(8Y zf%-Z4k6!E_Rfp>@sV{OP0vV(=AmQhgj!W?CsTA?0x`o`oroLCOp(Wd@`?ro{u8vK~^} ztdurLS+C_aa9lv+J%Fwcj6`citn`$?#w zS8AniAnuh67jV8u{{`=w@cv6m9sQnW!oP%6Mx=0B-)t0cUxsOA6P!$xVV4ult&!%| z5a~?53S8q~#(HVV7hzvX4Uw;;SY*40%bZULGkH6%vzwSLf71%(xpKPY6T=<`NK&Y*l^-<%e9?wfaP`z8dV$Fy_9{0)p`-teNf`nduhS&{D_7#KKLQYB3)kP7<( ze;o_+3aM%3Irz#7m^VDF313&^1I$XLX!D9Nf9s-bq;0+cZN9_390~c(AHr;(>w2}< z&L`X$7B<8)W#4Ng+%E`w<9nxAFKLN>{e(rtOuh$@xS6!W>?Y&}2xH&I8%$58nulv? zcx8n-`)OE%Z6lC#e<4=jB2!<8t=6%QwDNbuL#-R&_n&2aTk(K9ZLXJ91J^jMUn9?B zmW{r}_X{X5dQSAkqiWdaETH^%jL3o++OP&K05`yYzK6^kpVoXgNKMi~%YC=wocYWf zo`L#Km34w&=8gZ*dW;+5S+D}H(@3Kk&{Tpf?_w5F>nd5X6%*K~E;KO}2CnU%MsB`Ux4VhjtgebetDfFnzkT zvfjW~yJ_V~{PnL5;;qF~_#Ijs2!_(iU+_C?Z4mjwCs@2M7*ajW&FBH;5#w0OnN!|4 zsD*%U{bxDhe6hFOi@W$!Ov_FypWv@MdCH^O8p$6_p7OZ1M$QVZ2};>(Lb5ykn~Dj_ zGaq_9Qsmtn=%lG5#5JL`L`vTDsP;fOdDCO?Ki*{mHyF(1iSay-(>&|{KhoX= zK8hlH0Iu$to-0>R&jAEXdIkuCTyrFo8B9V#5D*VS>?mCRs{sX z-St>S5EaD>6)zA}4)0wN#r0UPMP1ihL}kABs=9i*C&PaG`#yfZFkMxz?pLo~y?XVY z4g)-T35V&CKkSb%J?d?#en4jy2tV}q5|4~lDBgrgNC|d9IU-eN7cfVA#Zx}~?GSeO zP$xcLQxaQPo+@|JxOU+w-^OZ|y4}Zm$>>c;&-0QV`?6YSwkzYw z#&0{7@urwovT;!-{Lf0*#!9kn_bGlQpahjZIFd*i`3SzE*Yy&mgCTlv*0)GnzIEG7 zv3DmzMos^1p0>d#Y)n|^3F970{P%f6m0JJEji~ z)OBa%UA~RYo$xw`t4HK-&g#{dd?qnqTUtwxY*Plu}|I&ILWA^McO+<-3Ve zC~jZ-?*rL6=O4r_vJ)R0JLCQt+KIF{@*CSbG0#5-GJUKLbtko7*a3Y_6V&(H<KpIShxOP6&Bq;=c(_$5wqppb7QR{7K zw757I>%Tc_BX9a3hs{l6@Et7DbtlsG=Eyt3*vLPG*2qT;dL=+d_Vc}O#2~h}&sLuw z9fEVfn?B3vs;hNBC!9wgJxI3;EN_D`3d8<#Ohs0`kMbkcusSmk-$f>w;s!$8(-1e& zi0f7#qrVy0xy1~I*M#1~!({;6PWHWYz5 zPyq8-5tyG7s^x6IwKq)kmjruX#(9vJd&9`TC5WLvO#OTgVrzNYz}EmL{RZcOCoAOk z+5tO!0-UU52le{2Ten-q$L^nldiyo{d{A#+Vc!<%lcUz!?_Z0+IBQjl-h^XtZy8JJ z;NHBJyO#4~ET?ZUmj~?y3ia^_v(8%OV1Dm>$a4QzGno4+*b6&NV=V8dARo@k2cpGv z28R#kI)nRs8QZ%)^nsw7%B~-*`xBD)`84t#lvhW~V>TbXz2dWSHT`9_WLX(w26LMd z43^22@^3E?X1vh{US7T454-O9nCCr)=0$sye9YR6G5f%HXU50uWMj+*$IO0zW)5a= zu+)|T4)ocHev!~Bz`LV#&zb5qBhd=%2TeY(cz({H`{w9M$!jF_y) z3jG#c4K7wQ;-DyzXdC zEpiryKMx&`y46T+2zEW2pOwnxlph#vj?~H~`R9J4pH6>aKfgBeoJ0G`ZSeg%nD6UO ze~&yz#}nBSo}TF8fpbW|?4}5iiqtMd!a7YnY8BJoS`OD?g(hD3zCiYg{Ilc<~lXrkvwlX$8(& z>b{(mDmj)o_f?nVB-$B<}JRCGPT63G+FeasVA3R=3ec6t&}8n?GIB56bF8l)$tr zbH2`nhkVODq&!eUnz6jics7Ibp0>eEIU}1DM`Wuap$~x(`kmh<=-&<-yYm}PJYMYE zFya}EzYzA#6aE-Gl6Y$73D@E8kfnoahRhSL*W<2baZ1e)Uk%=;3@4%hX8^GVxaBKi zvgipe8$5WBiyR62h}RF%9c!O~y5>ncyy3c3__6wn0LLZ<9#BUCF%0fZ-kk1OA^I6mF1@I1kDsVb+)s&Fxnw&IG z_-RB9^et7>0plr{%8~po(uZ^q8|_J|W+GAgh$Kj7t7poeVi~8$&2GBxZCXk^eHnDl z$Djf8%F6|733eEDfjqbxPyRTbBE7|{p(Vh2=*R0%xV0R9udb=_WB4*6LH@t0YRynG zA&0$*Y!H@2HmBrzXfx80FfAt`k0MH?uL@RR`Prn=btdswqO>$P0QIHe&zR$mB6FM{ ze{)aLHBL6qA1j{7-!P?}9HJ>~9xH*%!JAY)9@x`@meaZg5_zv!-h}+OVm%!&pk{CX z{z7Cs^m%{?dt?2=jU+9n1vWyww=uz2EkHjv2tmjdt5IPV*9m)T!Z|Ff)&-nFwMU=T zzBEt0yh>Og{<%q|qhCW7m8GjsCP9F>y{1MDMzEBcNUEmFw6<#a7}eliYK>)#BtIJ? z2MN@WG3(08YOuDwLrQbdqapbo6_&oYrZo5et#qWuWi^d8kCEjyE{XPmAk_MrnlcP6 zsmRZ=D)b&(b4$`StJvJ`-&EJ%sk6vjVA#xmOsmBqAExA}J4!sm_ zF6H+?T7{(s#6O&C#J{+lJ7i6F_=l1o4k@lwRjY|+H2x1XgXlfe_lA$nW4|0`jfDlj z2(!0zV9gM~>t+#nRz?NyLav~O&0>(?9$X?s-eoXey{&LkfQ>A_>-qFuZz#F)SI%c% zA7N)3eBZ39qaB5Bd+Gb42)At#@H44Ez>m6d{LUNy-5SaBtNbowZA5=}@?n^ac63L7 z7n23_;od2Te)FBiBN2Y5aY0Ndc)RpOku-ka@l1r@cZ>$E{mK}-?>IAt_Z?gY{z8P= zfk@c~5H$w8*)Stf@5?l4^9M_Uj0n^ikv z3c)gHN~_OL?G4*7Pgd=Wwa_%L5Ejx=>S{8kTfBk`T0g!a`c#Jx5thik2t>P9b$p`It&>b@Mt!DFkdDcg)mzW>RITfU zt%Y-k8omqsX8UdD59NNKD*T0hps=1xi`H{ok$M>XF-`$gC#mzGvlFZGuy`>NdHvdW68rBbDvX-icCjfNegBRqObXxR}* zC`#YRlk49Et_j;XsWm$+^ zhPxq-N5YXHX;+LOmyFP&P{sGN{(5Z#cyDnI_LWzO`>F@k?jek` zts3|Z?B!4*=Tfe5w1#CtxeB?6#^4xoW7QEskyO(fb&kJJs^kpPYc%@748y$s`;c{B z>CBZ?myLE5o8!3bA|0>s*(_o6{T}u@@(i{lvaS6!2TfhpuU}PRPkGOlRrNFV3`z!u zUbMj}#SXpG!lUJQ`)hVu3e3U)`0InEMRw^p(HGmj?Ego*bv%8~sHJb;!?ty4RbNwE z`|542vb5D&D1l*)KaZ{8C^QWyX^>@G@ zS`hENy9^-KAcTZ*Xnj~)TLHgiqpHGlddx%G1&>qr=w@%U9 zVw+2WmMo6E!C#;)f)jWtzazHcF5a1P_&Za;r{SBjuVzQjtKD3hx8mc_#TlW*pAluhS@t}87^m%u-z;0cU>KJz8~dAjN=&uLtrrdB z_W(i5zHsd@Cev(J{r-5glynaC`_ncz(Rmt@QGEc99*pu_jyo;eFdltH@HVU(rptsC z*q>##E1Tubw+}0}U!2x!zug<-|)R%pKz5k2@ynh&%`8`VO zZ$a_MXN&_dxRf7 zat_pMNkQA%p`P|*s{K1Id|@@#>31a(bI0sh0%hhRAN0s0poMvP=CI*h);Y#sC}*!5 z&h=cz0LE9u3*X)!WlGP=qvD0~^RbrnenvXi**s>rZWBaiI-7p+?}n!4@&3H8hsncr zUxv|PwQ>6l;dp;fbXk3?P)dC|@i$|hxI*&py||2Y=J33Xv@~vgt9EWat+_1D-l~@A zZ`Bq++74#leL{EhiqY$LhouR?O@0_#Nir)>^@pX25c-&gPWN}Nn(Ch+P4p^`>`A4< z=I2XEmo&+njXo^2IXzP6%BlV?=@>8Sv3cPARjp4Pa)PV7i={l^Vdn z-%ahXR-SE`Me?C7dZ^2hg*@vZgn7<@JRMNZnYbjN0e1n}FK=8k~gU8^k)DS#yxTt!BNbZWYI4SH|(Za&RehObJ{H*5jUT==sR2^ z&uJF<^?OGAseZ3XPy5s1TsJlr=lapOX1?O_YBVmJbY_1Z&Uw&N{AS;&!U#?qAzsMW zTRMW*t6AFPH{wsS#19z3&k$4nW_zH6AU;lc?`i%t83B~+ItOAGrKaj9wK7oIX?{%A zLR0+sa#yCX_y$*{UucP?pB}4)aK`&vLX~>R3uj)ou3}K<&A2`SibGokrOIE&oTSv5 zc6wmmA9Pka9-wcJXOSUNR<1%!cWSFo_u~uTB}7}LL5}qePHGc-CK1|M8DBveK(EDV zL^#p!M44s$qN!x5(_^de)(C}BN&IB`wb$i=Q_-Q=5<1szibYbLotBs;9ji|9qqXg{ z*h;jUAYU{WJ4vKp^3O5!Xw|+df*j9;T=RR zVyC`h9bL{hE6~2oeCne%(l`sx1T!MH2{R*Wc^iMPxAstM9f@qD-_U~JJ0j0AduTX@ zi(w2e#W8d%eYLgNvj5PQH9ES0qc{n2KiRODu#~SbMPT3G;{o@{NqntxcUrAfr;Ya^JZD_d~R_J`-S5Ab!_M@JH+UN+f9PR5) z^bfqM!*#sf<<3U!!hBb$$m-bKP{V42*>h0a<#2*t3-oAR8>F6JJ0CR*^|s$cB6lFH z&xsa|w?Tc8j}TUIGDy5j;W+%p2<}frjWe4Aed)Z4OryG1Ac#fmcAZ*25SX7m#Hfm+ zWQ%_9rz7~j!|<|j-}-U{*Ewc1g4=H}uc>cGF#W>W^24J=Le~wHBpBWRPlbBlj$ysi zLY;p0MiukfMlwIms9$I!TAbw*dA>O2`yi&$-q>j0%8wGL4LD3?y$R7#u+do5r0oaa zia0Hf^>}nWMRg==pJLORC;OKPF2^#_?aa2HRvSf|!Erm)&1Jdm`W-XUti(v&Hd7Sl zEXL-M`5r|ZZ)>PkhJeU!z(PQEv(4eSP1AK11zlHB%tnXDnZIGqpB*!j-(Mou|3-VL z#s%HSD7FG;a8z6{>5g=avDgl04h*IJC)V#S^1s|K^)NOmOWb=j_? zn#x~blt0zN=Pn${`P|bi@mCx1U4FBDh2N)O`^ygAN2f`^4R;4WwSyQAad zEn=o+hF^ofZ1mXpbZ3uzVS?JsX*mO8&w$vA6VsjaOTHi>SnQ>|I+EGAnk~0A;Mrk@ zE@hp8GO{?%+ZlQc%Wbxm^v+2B{s(ip^<2lq%{n6-_Jg9ZlPs_tXFkPJ5wp{oUQleYy)@B)nj_+J#iGrhqHBjIQy`;GqoseaojnL zkFVMZ_%MKIPV<{=(Skc?8nCDIf_<_8c8&p?p?GHMYcHI<#DJaF3-F}=k+ z?oGGgUKVh#18^@3xHpgD-g$s!=RpfDjH8wmr|GYa()B{+8R)?q_LlSfs11z2S#^HA z(Eh*&29BJk;|RdX3yR{?Cq-c|h+B2t*f@MKipfVbXgQ-9S%95cKr?yNkkHLSgv%NQv_E5z~?4`cr+4 z_)BTc%wM8FLQ!VxpKBrYoP59CKdV&m3T32H_|{e_{^UT5!XY@v1%i`#3rboV6 zUzL}~nNIIHy6-0@=Q-_g@X;&df;|t<$K~w9j7zr>zr+|9^XqiXy3U~IH|R0F^KOaqHFcf7rmj0IJ%7F^Y;k(NJIdG1 zGP-U|ZR$mL-!x#C_kt~?yYCz8#|&kqssAbpW2LFz@H(S6QkrTSpDoTYP?x;%!i0r*md%L$CQg z+JJqd7i{7DPLA<&2lQKg(K4?m$N0ROOR&y;S5cU@xLLpRtXO_NcNWZNPd=@AS3GZL z57RF0HJ|SsWpMN&yXoWsUD-JuKw-<#i zKA&riIr@^$k*N*6=5wO~`|n<`h4Z=Dn9r5H=JPpYuFNG^=W};a7(Sou-```0KMUSu zIt#vSn)kN~=KaH%`7F5Cau)m|*8412+h{%uu7+`aM?VYR^#5`ee81o9+_-=eU^ z@u@1#aU|IovbL!gK1B@J`d+YwXTf-!p9NRzd>tEmD_{4%eilqMn$Lm_agIyo8m#zs zbWs@V-Z7cCH=1t5y~8xRz4nf2@jTA`RDg45#5vA|%DbBnSoV%=ypSKC+i2z;?$Y`3 zy9|DO4R8r-dhz3z#yLMeuaWWNYjl2mO;LXQI%AI4=ySa0u>AP)qOisJ@zrt8kKd)w z+g$*AuwdQ}>HPS?!}8;I8n|*k#g#Ss*sm$Vk8d#M(gan&k8dgpbBTq%JR2{hFJle* za*ye~#P&FUOYwDF7Bj-Ve&!Dj=l?ZGtEP6BXGgz_&vI(*_d<*BZbS+xd$i^C zGv?wLTw32u-;6<95Jp|!Xuf~rZ+SkC^S3GGuvHx4BA_p2vLva=>&U^ z){wwE;Im;5tWL;cRy`^qnA+Jd!Q1($<*q%P(C?enc%snG&&UL~^E0^4Y!j|N!DOX9 z@}d4B*EFJSdL=Cu+*k9vf@a9`0zD%POL$QK%a$U`iMH->7==j*Cza^06}$DAzowkj zC+PwUMEl&MX*erSO`y+V_T7o!68oNx-wu}NSp0S>|4J<^xdH-0_nSyD|VE-L5|Ksy~$R*pg&Jgx_qY@C}_>l35#*1_D<1>?xYb0gQ7uff? zamxsg`t!2sdlFpMyvfgaH#W}?L;O*6o?{7#+8-DSzi96^l{lJW63X;PCUAF0UyDN; zTZpFN44j%kdmvf03E)yTYI&B%cO{q~x}S4la*m^04JFzL-ol9_Y(E#UePBX^@My?| zI*oRnmVBDf-w$~ek?PLb`jFaaUn0n7lPCQwMur$KjoIuUC|A4u!Z#w&8zAUsktd*6 zf*Sc8{=VUR%zqO3J!V`Yq`zrpbmympZX1Mj39<5SZG0jwoA)50mhVB3+I(~Z_aI5< zdrE8da=-3w8=nZZGMhsZh3{9Z`^}M<4SC^4VaBmY+ld$tV2bSM``ryQi`|)dr2ijZGlUZKB z|6r-3%RNX@K1VCLH+ekn&Yj!*UG5qMdAysbXYjhjDrn6R^!!`DjK(xV3{r6i$-MYH z^zlqbcXN4S=Ovk)+ad2@fczsuO890wY@6crLo40DXCBw^x6Us2%N1GmgoYdOJ~7ci z%K_TjZ`#fmVH9@2D8RlBznJ)DwL#wcef*XXn^h4JBvi%G~*} z8{)>dH$%zkIYQT&57ym#RG#7@;{R=^_=oVNK)w_Vy8n1BU)#^?x&iFp7Cn9@tOm0_ z@AC%yPRrf>%eDOOew*Lycl%8pce|s<15UI3L)LNrBS@Q%@~(2&4_p;4#f4V>v+_xa zGUD;TEVEZ??yTHljS*oKfgV6y3DQ!Can6xHo;yHA8#kZ8HzNg`IW||H}MXfTJG|sJ#dors7~bziAjn0eV*0s&hSCi<~vv>U3Tk=7{lk&jZv5-D1p4piY=~w){{da*>gr6q6s7Owqif zdgXn%NZ#Mo@jFkU+a%IDqGNPWs#@?KIQ4cqh6YOTa z4Sz*kSw4~3C!w!Rn@Nrvq1yjoxWz6Zt!Bs^3?q`?Qs}>pF$ofmXd-D~ov^ zZMOPUBl3Od>x%bvdmVoZjJ@<)dYLwQ$$8e<^3x1Ye&Kw>D|KwIs}_LU0$R!5h_g2R z9nvCrci!@%AN@0Cj^5$N6XY|E8qr#CWDe%EmKPum?YvFFy`RR1#j_k}GY&ONyQAJj zyDh6GU=NP`Q)_;~ANddGO~2&pPJNc1TTJV&*LnCS19nR<*h2Y=m^9zTi;C`_Av zC&T`oqW6c{!K|S?)mh|q%3~56JCiN93Brx=$MNm-B)?CYpO8)V*3V2b9&omNK?3cJ z{LPPg4_fRE_HHKjcfjILDE&}`@qqeT{BQVf23C<0V&OORa5?q=gZtb?N!{qfZFUc8{$mx(Ig5Qd?%`-%y`X zXfvg^S<;~eRNKDS<|@UG-7h<(erD|xH;eMgeZ%Kk~|<(vA9ziG(I-qK@w=iQy;boou4F28wL z8va^Q*y6IXJxRXa576~)YEv)T@PPsQb1&FJ+VHu7*Jday?tfPl#wzdnmDd?9Z9;jM zX@m@U7sq*bJ;(Xg4cuM@mf_{`(VH90wj}!3^R@h`Uh1d*Icm68g&yAB5Hjqg;J-oj z{A~BB-(2T#qt1htI%|zOf3eirWYqbYUgu{}Us)S~a48*A;Py~P{I$~V{I9{gY^tFEl|>y}Ki>WtA**saO})ITo#q9s%T z{UE`2xp7v!u3mpLsQ#&TES&VRQ|_&e+smQN%tF_#kluy7y)!@*2U>S14|Lg1BDHg& zj_C5*$4j&FowY9N83Sv5qIN2@?JkIEzuX&8zK^$7(l2Z!`gDJ=6gUk)|O zM~oIJ&0(#cK{~HN__xyNDP&P%9Vvm6`_DWil-lz3Kbdw5nBQ&GKVx(!$xho)d-oGr z_37F((f%dWn_tg=*YTi3t_Y-|=dz0?+mO$t@qCKtz(k?d% zy8=?TdeY#>Nd{stHmha^-%ZoA(ayn-msZ#nd*lN+38~%bcY%XD3Voj2BX4EZi_vzy zYsuoQdMW!_l8xS1dydm1DF+f)0+cVZ9cQ%!Ejqd+7tZUoFt3ZwTy$Y~=jPgBS1SI* z?GNX=qswZCNs;@p&Xj9s4uA1vo*BHFM7E+&O&k-vV;fB0=;rBZM~aVWxjsIV>x9GD ze95GAn>Xst;UVft=!AfoF3w6ZJnw*bTpzR5UBg2r{l?iTzV=u?P6sb2%oqJ+IFs44 z^|81xz2np2C^a!`ccs|dW|j^o3-z<%A(PE*UeE1?aM3S@vokE;Hy91tkm5AxltAGd zlgIQjH2IW3k9u{3H1=9jy!rmY+B$@8h0~-9{%j0g6xiAB1 z0f#o{bl`KGmpN|~9u;0-UI{bZ(*bfiK;Ag&cEY}vjp{bhrM0V!m=(KMGE|+^hxtJ zoF4F+bYYK3b00hhBrP-z=JS#f=sT9*pA1a%x6r58iBxA7#w0o=9ToDnl7^@GUVdtT z?Q5q7=BOQYvI)0S>Ac-2p07F0d6ljJ<5jvK-$`{*iw_u<|2R{A?$=sNvvZju)0fqd zCo8WXDd`^W!UD|K*l7W+6-KRj!KhGOR$ehmAj}s$mO9-${xExHUE{OTeE&T)VBR0+ z81Y>Jv&`aR%UrIYbLr97=c2UEBij{Q=A`ojUBYVEg@@Ok?^nD7z11%MPD-$4rgR4~ zQ|AUW`0Wx`m*I`>gwWw`bf2mV=r=SdTl5P)vJg_Ap|RWRBx7I4_N__tH9I$esb<^o z_Zzq|H(m&RE8=~GKwm&y1}B$NNBbG;g4#{kqeBr4 z_e6b7)19Tn=ZKMUPMdR|OA>I= z1B{kutCzv(;Mp-{a}cEk#-mQ5l54bOC+oJ>Rml4_@;l`+@s+rU@^8hhlxja>KXcem zg1&mt`x0sa#J_>C;3U;T*qK##juv2)@2jgInXh{S+RyU>DL1T0_(d;aPr%n4h$*GN zS@l4}6Z+TJ4Lk9M;b2c7<#E&Bth%}G0h0L@zGO1gfqwX88~!>|wo3qFP9W{6Bw_m* zPMoa@QtIhe-)>k#!qOicXw~h_vd+`?15f{bgNByu>n6K1-_HqPKCEptVP6Lt{zTBP znUi=tY0v3IQBvY*kTwrW4*~DcgDvvV77c;&o~z4|p=3^u<-I4z zTfUj_-s~cgTZQG3JF%XW=hYmqZ!_U-0Elf^(yMs>t-B4%o0Q{kSJ#i`{s}J#2%e+=yJ>o!B^E=Y4GG3`MJt%Z=AhIT<{ z9fV3~=wS%`1w!A_QXYZOEfD&ih8~5`tq}T&hIR*ZS%EXNZhc^e)2k@1o~g_0cfW=2 zZ(7lgj;+htU+Hpfp`Hx8UBJ8cp|3(O>T+IFkyX!6UIe+To%cI3>z)f}@CRpQXhoNE zv5}ft_iUicd9^9L6~e1b;pZWIg{ibNAnqB6TT&2rAH-c*5O){EU0V?MD#Tq?5Vsau z2lcuJ&>N?Pq!g(2#L-KLhPAuYUa?TWtJ)O%bpysi3tatr#X=ig!CtY@3Rk#S?Ajvb zb~&qPOg9~kEztT9jQO*C%$=RuEFo*85gkH6Tp3_4U zlRUH=LN!L{VF(>#gdTy=u}0`o2pwmHc0uTPJrs7`0hlEu?*=L{DT%$RRFuBi==rq8 zS#<-L3C8^Ln7twRk|K`{Cwnv`JXvW;rf5a=ZdLUa{l=+?R(Z*}Xi+?0W#}oJwOVE1tc}WlHSa&~gtlI&yTiya;j6WBCBj0nKjg?1n9qnh6W}fGkql|mK zfcakUE+hWcfLRB8gHg^MmU137;GeU=KW)Izx4=Jdz;6q9O?JdzK1#ngY`!fSYUO?f zS=xKNtmb7&IbLq$`Hzujm66AI6VSl*SXL)P1!sYh2Hu9p0%rXNUjvtC-JX<9@1v`X z_y=e_@8eJ&FJ~=%j2Y!WV;PgQ0e_1HzQusQ%L0Fl0l(4$KgEE*&jR0Rz~7qWXDQ0( zH*kOV_XN0K?Xa*0R+^LyQQZldnBNDU*`S|c0X{6;32-(FcW+uYe9t1>Y=E1AaI3If zGMeg}^sQgg4l86q(w*0zk+fA?0pgQ1zJ?A9Odmm@J{wVL)UoP*!0!~`_uuF%`SYQi zF4y1b_m#xsS}HnS+A3TdBa&P*s1Iz-M&9?pZjWQSqk-Ay3X=wc>$I5wpG()LOi~h3g$Y6% zsT95%qs3o_lVGDDiz%lQVs4+Gk~i5r_?lb~qrWIZU(WY|QLZE&UY5O* zxcRruxkdQI`Qv9~g&aZoQ>kLZd1Gu7q-u4_-3TlppO9=k_63&!$XisKRyg{>9mz~53KubXgA zV>P*jo>#WOS}Apf9YCu+O_WxzB{&C*DOTf{C?$bXIQul;M>fAuY70wG0zU7uNkn_+ zPI`K%^uS#2!@2&_c2`N*jhGY?_QM=pI}pymz~gs$PNFB9+RdZU;~brlth@ti_P~ha zoiF=_Q@OB?o&$H8(sr5C>{Gzjn1(;WO;tn@4%fY`QPsPtULzU-BrE7=#c zeaQgC%JpJpiM=ZA@)FcwX%e3BRC=z4lm=nFt5pis!aU8*&kBT#bVY0_jDN4|b`%@|jiyt_&xm#ez-Ij`@mxw_=3Fupkg%X&;-qD^@nsD+Q#A<^?`j-aROfE~`j(K7^}y_9;xR+I{n<$X!d`)N*_ z@=74`&%E8jR1@>Vf$e1Ny;NW}|A!GJl#uh%-uyf@H*p#I3xPD1p}$6HN>;u$DNx;j zd@gq1FOcy~%pV0>axbSXr}n#5A7Dx30KN}{H7~L?F9N>&&WYoE+Ks! zN?fb+6Wqt%t4+-A3);rak6DTw3FGz@9k)hd5cGW$^sAiy&XLc?y+)j)`jgCS5sv3J z+HXbRsmM3hhS*49f9+H@$;RtrsPlKo`$+*@(V}+7wm{lWy$qbOGmx_Xmdnbc@ZQUw zw*Qptk^k8jzf<;aaz6W55})WHKD!3L4)|>(iHXpznb`JN5_NYJ8}g=(xJQiajZa0G zAixYFiK+dG5Yo;-iq)2cHq);ON$A}S%pHL_nIQsA!}zG29BUKek;iCAPA5@IDDqFA z%|{Zc4LMVNwzTc8T;xutK97Mh)nttBXHnDGh|;$$Q(g`rCJMAyBZ!~^MFR?wCPQK7 zo=*;jQFx9F4pQ zt=`MlCgRo@Xitjzg=b?7V>N?OG?9*JKS+5!&>fwd94{g@TaZMr@whqx!#^(*D(%k% zDy7?`9`(bNMj{^~J!3iF&1q-60y*bkPGZh!Cy|$(x?bcU{Z|lYGDd%Ipdw~XNk$3ok2vc#T{jJHzuRbk=g4O^VJz;!4t-pnh5Vy? z|)bWwYr$Le?4TSfE|aa9s;17?U&`p3kuZKF1`{VOZ~0Y?$W{J8+`S=1Mi zdI6p9tU8WL=@5sJpNK=A^XRx})1M1yGZBAZpu1{TZ3h~gk9|guJ(|X1%(Db{#eWE- zA`$WvzmUrv$~`Kxw5^oa#}`5YU=%jV0r=V^V`;#9BITS8)Ck`X!LI_P_8r7a0;4kRf(?O`s|meu&1V=(??eD& znPsO05!$r*&(M-;2+};*iRM2Gc_IW`JDzCs)>3RmOi$UN1@jQM`%?)oO@o|%N*$fB z`n{A|o=oW^_1!f#vK^@2t3qw$ZAFOuOQ?%{&HYn7)Xd(M(Z0ukPZAW$C)wzj!P>BU zu%EH}0_ZUg>p{;ruNuAPbMm~7vx z8^!dI$wL30do1arl7)At?>2K??*{_reE+oMizkU;^P9ExU(GuGj6E5^HL69Q40s7U z;~qiJxX1^wv+mP`VUyROcUqjqBX6Enos{lHKGdRj2axCEZF9Epw!IiIx4F!S-(iXO zwG@|o^=sj_?(Vn1R~zvgEb)Vl_@^xK!;JVB0u}mLQ2TN%I&XxoB!D}AJZTe=!?RJ| zXgmCB(dPo~v2_8Y7&4g_zgNGHU}M?P!t{?iqW9|e95Dazjk)-oc1G6)cqsuuyG zDwP`=%(_N087|;%Z@MQG5ptju`Jz4kK%h}{6Z}QJWxQjIeAz8uLd!H_K4NemSYBgfFfUyec5LQ#EE3V+Xfnr7eou8-MTbSO$YSZ#E~#N?79;Ic$v&_?6kwxiG^p#vgJ$ zfKOYv9>ARe^F8~2T67-;$o=SYOD6Bk>joce;W|b42NEjc@-&6Xu|rgjEs)4hh99Z1 zCRqSrvss6-!jd*VshVxJ=xLq80|A^RV$y90kL7KD$fDaY%!q%?5?^b?Z?eQU8u5=? z;>R2DPXzdzFsi#amc8N3^JFPo1r1Tz1#tEPwcXeT*peCeGVDAhgmY|ZI{&vOMN=P7 zAIo(bo($l)5feV2HJ07KPaF7DKvQ=HRINqa4TmR4bTwXnv;mtJVg@AP}tv%oR+{<-aLBJG4c~sIuoikFFemy#Qno9k!t^fwDLrqudSTxuJKk>fN{^pLhw@q%<{Xqcbap~v$AjFNQGWHW3 z+Ppom@=M~)=+!Vz=*a>`9%8lgS$i}p9~u&uN!a#pN4NY9tOrcT*B{8IbxHS>p`GEm zf;LmXi?(a$?+LUg?+xM$cg=xZ{E>0A-99qjO}gywS7g-))YxTz559)NmzR|4^1^0l z+ga3x=^Xj$G@NqRK}+stEm?x+zjau14(Kjw;k+C}t=aZ zGlecv>YQ`(lJuWD@aE$879oQ~+h?Tl^YE>$Om>%&P&23oIJ#0& zDUKNcZNi-yb`TGQn~iXaN>1NSYD60gqu9zuF;3_6AF(MGUAWDy?9QoMJ-aRjnDK_Q zTm7X;B^mjsAomrEIQ@Jp73#f$43q z{=H-LuPK{OMTwQXFfbfeW+e7(9gqizc9*e4HnX!Z(I4g{c}C{ zkBRYzAijage50*Fjhq@($u|=9lBkEPAv{M;j36u~27lgDgIU#|l8u-i`MG*_PsC$0 z;;BLW&C1)M&6#+M9tx(Y%}>=aN}}u0skg&Bu9{q|%PO(Ftxz8O(o2?KYrtP^Y-=zc zDx+!mjp-siBfnT5qOn=|qmfhsq?{VejE8z#^cKte)Aac&q(%~Fz1D1`Ix2+!W z<{zTiy(!cwObjaU|FQW})RRUFM(tV{WAZioQiA>!ObN7?Ny2lgUKm%rSJT7Q0*-6# z2snz{@^m*b&gxH=s;G`L`$}T_`xqn6YwYb4#_8{_)UiRfceDiA4mdWbg<7Dc*N%i; zebCro-gkjEuD8G3(=2hU4Zkzh$J=nOrL8P(o++un~2JNvA!drwhpoR7z z!QZU>>PY0&6|qh%V=?L-BL`9WK}#^vS_Yg!8cySwqRoO{L~p4d51c;r-|(4T*I|5O z9K(I(1Ld3U=6mbKSpE&mbK}_CvhL`Q5%h!FDIXj36V%k~lqUwu4V!dtjMHrxo8UVA z6N6?w@K48apQ;B87>i$Fp055J36b9E^`MkeFVy%1odo!-{ax;QTRO$ejkG02|=^XfYi}U7rBePUeP6ZE4rsN zr|=y}e_fAuETj*E;^zyGHwCFj9rPdO5`xfz>x0(tl|l4LhTj=^MR1<*V|^b|>UHVq z8F@LxeOC~-6!HLGkmW%al$G-C7kpm9D07;8BjowAAkTHdRNuFSdBR6D9zFfc@TuM| z|4n5+Af*eW<@H|F0P{9@u^iOKfm2Zha%|>u8VCUN=d(ICM6(5TK)G=#o?kPhF7O2&uzp zkC>M>pq$Y~^)|udby07bnCncSxLw{O3!tt-C`ZbXBCPfmw00aL7z^(Lp*8KLW2mR0 zcO)OKSR7M@`F?AjknRdG7#FQ+7Sx2HcCsWWLTT@Ly>ekYMi#W=3T%h7(b=z{9iL)5 zJe}({2F>vEP?fosau$Cy)BalQq3ieQh zb&p{?`jWK`NO_^A#$sb9r(|ns=CQ(YR7k0kA1^prL=!1l?D8H}thDk}dB6X;v}|-# zN-pp6))y0$D`gS`X5 zeW)#fd9v#EM#1tvbHaEgf5<4ygYD4wf51fQHtqmAo>EQn*7ottj(@vK;q3JNyLxp{ zzsV)^epFo%Y!6)tc?YLts)4)$_WY|MTmxZzXU)o*HlFd9`LfDr|1}k;D88qLUpSeh z1X{-8VB}z47C&peZpVtWhak5ghY_rSa;uK{~2xwO-OS!N>vn{}1`M zBNvWm`*Kj+0o3OIQd(SpvnbzCWqx~m?RYNZ#d+FQUno0XHlE91F#V-^bKcdKw3jVu zw^_>lsGbz~Ho42dsVgivb?tC4GOde(W^bd%dN-uUhhbS6}!(>`hDhkG;y>S7eQ1%7>PGKi3z^@;@7| z`!$r81&h6l{I@0luf6hrXXL*oSj=zX&qn&SMa$1w%Kxpt&`*Ulf#t6x=k%!*Zu9r3 z|47NE^;mkCbY8x1g1LMlRXAV$Ea_se^lD4GEtPK{qaA}Mm~dL{lQPRA>nv$~Eonzv z()wA_POzj^rc{&6>*NW#e+%`BAX*sFX@|_t7D#8V(9eUJfdFAU9K?(DvV{iDn!xl# z+JRF{h$y}3RIUuNUVlNcEl=UT%OO-&od@(J@+B*S+J2e9-@Ppk##JZK)5UQ1U6eB4 zpl{C^qz4{0_kJ&-SFAy-QD zBP9GD31>y$DFi6^17!5enKpqJ9*P+-*pj;orNNeLHvWtE5 zvRFBhck?;?82&6Tt5`RI?H}FpBs_B>^-!N_RQ0dt8>6QAdt?GX7sBp^+OOn6XQePk zLSI5M8A9W;>JFO6sh`=Ng*=ToW*=))V3p#HEBqQ~==K%CL>-WkY+CR|Ro5w%U`-rgZu4FNS<%0+)|m6U15NvT7{vhyT~|x_gzE zGs?TxD38l?-4k`a0rhei^B|0Q(!uzQk0_skK6KHC)a5~h=n~p1vg*myTk7RO^qkvF z*G;v}4Y?pDIxvN=J@e<#0TWH@H99DTmKZqw8!|EfPU(-q{2CuQk=+ZWMW%UiK3yf) zQ|hrtwFxSWO{9=al$Qi^d7SXy~gYWqs;5*I%PK7S(#HI z?RsigPWiZf`t`whpH4DNKx%y}WoYsHPuu#M^F*+`{*feUr>T2b>*{j6y& z)j<5Z2{jPA)oYvLWQeHEfE`x+AcwzM`B7?hQ=19+8{Y$QfS)sO;OpyUZ3bYlxGRUh zi0gUSEjsKn4*M9cJO?pK0Q`&I ziToaErA7Ym#6`!&TZ9(8Y7mk6Gb`{0A=rvW% z621f2?dXmkl?uTe{;^8tR#N_L_@A3--Valj{Sxu~?-TRy(AU}Xd^V=NV@V4UZg&Rb z{;9XITmIFK=fsS<0@kS?*5)d^3Za`|KU+moc8O#L-AK@*Wm+ z9auM&@4N8V*%Q5~Y^}4@kqNFQ8vgY`e}9jO^GVnd6tq68A;(`te3{U#-e#XqGQpJu zHJfQE_N;n~um;vdkNjf_wT$M-_l~g*rkjNRbj*zX=xup*ET<4355P7RtyH38}ewM9Ni0mqaj_gPKV*OzprV{3#O%PYfC#dkmAeg$e65oS{3OwX3aO{p^K!cEvI5zEZJkvu=d_6g~7uXp`7y3Vp}Sbtv~hJB~xWfHTmlM-_3NQEf+iDfkux zPfP)-XWB6aZ?5WE%BeR~nR+vI(Uu)e_QLrr@*nk#GRQxaIA>G?SCW+##6w%9{i`tE zmekUFFAvbv`x|*UWmkx%tsrT;n}lI>pf^xw24XNatNO@TvoEDdoEKZITb^4@dQ`RC zY@4FbB!2E$P1v~yVB}D_`P{?b5>-#)wtf%U&37b&Ch7L1X&Em1n^jkdSdS*(h_W^a zUoWZ9-febfDdhWHR^9^Nk^kiR?ARo>hgsVa*4tu~B;OzrYIBgw4$_nOU9Fx^#ntyG zk>#5$=j`mg`i-RBdo9@{qkj=zXUil;k7mn6;=VNbxnlez&Zl9yNN-?ehuF$yJi~2v zS+^j?%R9j+PmqLy^V^9<`j?e&6ASydQtzK(zp-e(+k54^sUY7>qb;ITXj}YDBhA(; z?K~sR-YacR(YCDV)s{aQbHs4uB3`B{Nuh!=7a8?AdX3o^i`LQjL&6TccP5GLC$jxv~r}S{23v14*PYMfx z&MSS5HrS}9$lb6by4Y`zT8?(M?cLG0?PuFr`H|PcE;wDdm(bJ2YBI!?A6w~IKDKUS zp1Gc_2hxU7JzE$*plWon80A;& z_{M~{q5jxn__U!HKHa6`6Q@OEj^(tdL^8hx8h5OD&AN12@Bk!vMRv}*+{e#Z95;{S zc`Wp6Qvv;Y2bTSC2Zp+}f_EEc5oaqIpIX}X#JZAzhU1-||cK>iWN`tz99-zB1*>d$QhJ{UQK zUvkA(VtK(z#66y_zwdD0l}P0Md|gA1)8$FM>bjKHRjm9U3wS)YQGVWjblY)k?q-k{ zau)fQ#h!7;am?-}^7;Zj3H?BPFirzWl`A9v3Ta)CrczG^zY()vgI^#tSm>6s5{3?$ z^i*aX$9eum648C8VfgIhn9ecQWurQ>rn;h*x}ui4qQ8(#?IEH?4?_PxBHGxGNw)bp z$rdVww1dQKgYY6=w|a$+?+kaY)W@JlU1H#`U2pHw<8+^Eavu>n6x9CDkw=w9!j9My z?+1d=cau^fBCl?vdF}vsJaZ~Tx+LIr9dJgO)gR6%Lj>%xK=4em+EXfJ0tZM~su8r{ z0m`eO#ygw`rCB5s_z_PbaQax?`}AQ)3kOOdp~2~69-KZTIDI(S=>t7n!+Anl+_%!f z&J(ln^sx`UxTS7~)5e~{)W|o4o)hrAaWuc@f%C>ut1Bk){rk{y{Jg<>KuA{mE3AIp z1I`U>n;O)G)9*!&4m`i33f0w+Ibj0485OY)G?@~nFPm`}+C!ul~jIBO_X z@lSRVWn|)$ham1Ah$}72%5%p!C>I_UD$BRm;a>Y5!JEJY3A;nk0#$Moc1z|bE;vcJ zY_Ol5I7)Jdv=cVdQ^BpM;{;HpkPG(2`}gp01)dTPxfNIYGar)n+t!m!hdSZw0^wfT zp2*{s<=<50Ya9tRs!(HP(Hf5^sBu6+jRQ za!D@bN|JEtc9^&Knou_N0sQYNZ!C9`%JMtVPf*jBgv|?nh0FW6!WB%eR6#1`ALH}H zFW?JWqJG}=D*RT;6NnKfe@%Z8R}YaP<@xjegU9#QiFpj-lBnBDwXD6u3}GyZ{5C^q zA(4YKgl5=vX9!I|jb{jBNaULtLL-TMMFi%9hWcHhXF>MM|2zd@8?~uNsC>^y->0yB z;qS-m@AO5~!LGZkFUd>KP;xeqo&X)hkfJf^nMhBJ`zvjW`-bfd-cDf#;TwAC6cxWU z`tqC3m&C)B(tU(~_s9)6bCC9_4*PWzeZQrCkZL7|D|>Y;Uv@JqTOKY-raG+UD1tV3 zGumGW|xrZ z!IYg)O@5&|nA#ek0=v7O1i5c`K_^y%K7 zddn357HNmHkq(Eu!BI`+GhrtiF(>r+aiN6T-ua>lwJj@MR|)(ZM~KOSm?WniO8Q?* zS#sD?lw^DTZr~yA70z*D>vj{RroDcbDP|Y6clZBX)7Af_y}SPBQWhV!luAeS0A)f} zK1%}3aOtB8m~k$I6$hSh&Y|{a-6RwLJJFJRsO+W2V$=AP6F6V_o85fJ*L4E7v3Wq3 zbsW&;7>dPT(U~V$Wf-!~Bb*2EXm!9>MqEm%QljlYKrIO3FUm50Mm}i&FQ|tk-O9e? zZfL2;-RS;4$HHgm;V&Wl6G^+*5ba~&9QOZ)5-RaF`lWsTD}+MgdIhIL6$LQ;&u5$`xNxz-I-^l9u)B{CjNm%1NJT(iOWaQh8Gxg-d%ac5lx!<(| zx;zPZw9o;QJn3Rdrn)3p`Z5XMJ$4Eo(lF|2@H+gH4=-ctH<`cF&-dFbV`BYoC%ecJ zVz#dlDw^;1Uio$x6lMgRrN=!byj43sl%OuTh;W8%WHM70;=E=R~N^UN{ zgS3;W9ZhZVA(D2$YKC9!cb|}y<4EJX{dc>`2#3R&a;T=bU3y&56!(@MS89seOXJcG zi3A)A$5c3slk&E+*>Zj`~8Q> zoZhjS(FjmW^_QSpfDel&A6|ZT?PTsp;(&gxg>i0PFRHEORHpV|RF5-G%N z2T-ogfgcjZH*MfMr2CXRr1`70nLsNC!6|DnJ7py`^lfmEMBd>HDN%eHvhTa)!Ss22R%V61VE#4MEr>FB0_j<8Ywh^|`xot4iMh+*|Q z^07ituEqD6_a_&ZPklU@>8>#v;L_;}lTUT1KSQm*iBS#ardgKa z8qN*lzpLB0P46G9zDL{iw@K#tHDp{?iXDfsG2+zoB$c)cFyMf=bTXFeU zOIvaI*TgpNU&!1pCjZJPKk=Fm^76H|;rtP^b{*hykc->&w}vsq0T=y6*;fmWZ*amK${TAfkIT%~TgF*mmxj#Dkdpmk_zP_-LJ!mzMCN;@ zpM<_=ocjIub8YO72+sm(2jH)Ox3RZK+)~ClLO{efaOVK6nkEVklwa_*{8k&6E4?D| zdoPTCSD&9A`7_+BE%WnHn{FdqeSywhp>2H3|D}=tUv#~5`i^Pe8EN}_r5!ZVKJS$# zOyOx?7-_s8t|`19DJRqOVE9)yMYr>Ga)YyV7TPc=)o)WvNNvbLW}iHo#+%dk2#N4QjzP5uc}xLyI~t9Gdc`i+yP@Voo( z1oIx(q4zl}dt8M)S7wUNOQ=w$9CopHn^^wXv}}UKa;EF!K-1+2EsNT#0tyLd-lI@w zqTTycF!FOg&+IAsIyB{B_O7B79`%`hr7Ke#Q+%S~g| z)7;k>D=Is*lrhvr3T$ifFBhs-&ImZA`$gmN?=)hYB+)$5AhnpSsdqOroUrgq@ zU$3V}J<<~*dE5Kn@im|h^TZ3*<*!pXP4yY|@^;(WdAr}G?M9gm_R-z0^X=U^QR_J% zYIA-PwYfiv+Poh`?fiq{0!McVwTspx+8TilwhN_Xj~DgltmO|VC?91TNF&1Sx^1zI zQ1*jR$3sy5!%+Ss-;3I#CARiW#HKw4bv=Gi)SmcFT;Q2gLJHbGyr66!VK(LC5I>gc zX}v8_8LI7oNPq1)_AC9wejPuuU+4Gi*HvQse^`4H_$Z3(0l2z*X1bH{oyiwO{T~`!O z6uCUO1!SG?y{fL7?iu&L`+dJJ{D$s+@72-ORj=Nwdi5S&6VM3sIsYJo2amF={%?9s zg#3)IK%v)Up-)*-urMe)>y1Ug!GDu)$huOb@VZXUs%w9!E3U--0N|@>UAI78%bmKG zJ9RC0>RRs9wcM#|xl`A2r>^BrUCW)imOFJVcj{X1)U}+}m0pRi$Of)41CGdwT*U5e zkW%qH2&4H958*iQBeGV^@4uC`5>9hWmPVui?*~&*dVY9|p7Ml^+S*k8*HV3*3)`?s<^LL=?E6P;)Uob=!%j;q6gIV>hIMD)MwRys@s;T_vlWnw?OnjNbNQL zq^pFT39lxLpbz~DM(_|aL}kAGL)0JKJ%wS{ym9t)eopjfdIVAplY6XzA<)Q-79TrX zt5Ul2rgPs9xpW=j$-a)_R$oWSL|;c~o3EqaBwuDvR3fXVGg+eBSg%WDfMgrveN3Ml z?@JkLAlrcw&Kd)yA+#N6Jz->UyYin*XEx3$<3pYK%+hH5sXpT+=IOzj;OnTF0C|1n z;4$9PwK_)M*q3gI?Me3;|3IBqYLa%PF%{@!+cGlWZPR(o&IHWcZ|R0huKOe4&cnJV zZ_p!cDXYDC5b!m#9`Ahc29td$>nysjz%VC{KFCJ-rtCL*5YFwFb!L0O?pi-Zv1a-vMeI ziwCIpQ~T=4KKq(hpMC8_pM71M&%S<=&%R;2Z>jo6o%wjqhko*R33}W57GIzB4%`jM zGo9RuRP@0762OLNA%sgES0kL4&i-d-0wk)#p;1fOY z83NwsfuAGblRWVA1$?s4U7uc?^W9*`t^Y2u`5avl%AUVh30(hBwjR1xBiOM4cU&|1mE$vB=Z|nDQ_bc%7a?Ux`cXkMn9HhLIbrcdRDb3-tDhe-jjP;ju~xTeKENx z0dh)6s*pqB3gtqzH}+w?L5hA8f*-RvDx`KM_ZHSXT3Es5#S@eKeJ>957$v4#UOYX? z-}m>X`+d($@^}Xq2S8phk%yW^sg|2eqmBEXLAv=#M-Pv==z2|=QVz=4Af>*Ku0EG; z>G#n^a_LroAKkQEy7k{jH#H<6}Z($lA+Vx+%Z9w-?y%YoU$&@&}8 zdIHO%@&Bm9cj5nB2hJbI&ERWSn8H__eIB~iga0<1jX%+Y_lxwrey9B(^$QgL_xdG0 z`Kvkg>+s<7inGrZ&-UPtiTdOICF+>x0Ul)}d$p*aIzVMlA!pcB=wl<6>&qxYdLvd;_Kk1&7qGiVEy zwM8}5F-GM(iCXxHbM!O#ntZ0Gd;qWPUH@i%_zC|0(Bft<@4=b1+vnW)X}S1U-1wpl zp7Zd3xbczR7NwZ;ZifHBjjzwe@9>NBz+O ztY4tz1oKjXG4kkc4`9NOC*~dT6*@8UI4_(w)6EMd$_x2>oio#!tKq%O*6g=(#W0%b z`rfnM{fW&L-81<+saO1Uga zePhfNK8DpoCmtdG?w-kG+1?HM;p?Rs_2xyjK&lKk|p)~HBn~mka&17R4#uhmf zwQRZ9_^cEq^F~7h_(D#TwfSj=AKivS&qICn_1T2%dAx*u6P#v z{?+7Vr6=YqGvIw^l`*c&+qpkaPuj~ezO7l_)-1lBc4iq{Ph;>Avz%D&hA)DvU%j!8 zvIf^W+*pyWvy8{E#^)1xSuJOkHQ1T>XY@OZG-uN^96m?D&!KSM9^Ilno+~3HQ^q1u z#!gWN*R9sf68ns0+4|j21a5a(_WJBKybi_}Ws+-O=q6Ez{bg<${I>vGK%~E%-qOk= zF8aF!{iJfY&UddUdr5irdh^2qw=@U$l)x=3&#aR(9`fQWCJQtv8ud`MyqvvpHAzEX zIIY}JI4pXI*Y7P+ze~!AYyW98FUPvIydkR&pNKl#=BWeqjV{vNF4A$_UV*zK2X|E9 z?(~#L?U36uu|;>4N1Rw~%%(O7xVsQnYWhnQGNC6Hu2`2>Eu9N*R3}TMqxTIh6Pc}} z_f0J%^umDZ?_$jdP@v6L`wD=m>) zS~f{9)UPXQ?|oh?kv58_P4KjO;wB02U&i}Zj(HuQCh(_c;E7D+PcLb`#wBB&QpVzJ z(%$=)mNNF1tLQJ;*pF8^W$eQ%T2bTGm$K94{TfonK}KcC75&i9Ld8sC_r40XmzrnO zyK1?gugBU}-iJOTnp3@$D0R6-_ z$p%?-`I=kST)SqT{rnr6`o^Mw29-~4+^EG#l%|4jlJ=&+ZveF*YasV$w5wspT?60Y z5QX9QfU9zUY>l#JkvmVWUt-%VgLhkt{jwPJMWeS#b)u6b=Rd2({V?+Y^pYm_omb*j zuBB}uwMF;0&wfE`pYx*DIrmvDdN?un1?^5nQqWo!tB zZ^~tloOZaKtpTKrFUloX9JQ3STtfSXltn5em)(JMCNKYGZL|#Kn=fnKR(%C>!=Pge zsRIqJKihq8YB-Lt&)JLFx5sakSOTL+@&_1fkASUL{DH(`7)6jxYU)L@IjXy5RK>cx zO8jKPo&G#O_AR6>36Pde^GgDkwQZWeF4?~LHSK@RJvFr(a!px>%ZIq;#tCQgxo2*L zdv2V3CZAv0Dl_w+v(|McpJyjky64$5MPAQTy7M|m!yL9O#1{VK{mX;$9KBKL{Kz=N(bbU7qr{3-}*B@NWeC zZVz1T;P5|r;Qa*r9uItofdAP8KVHD^^}tUQ@cTUQnF4;l2Y#M_KS1FD+8Tr`41;E#CVp9%P*9{2$Pe@xUJ;l56$b7a@J*IGPqqD$5*?qs~E z*Z8nM?rnjT2=&Z;Po8h}f6RBOlP{xd=;ZZ!+*99)0{(;to)GXSJ@7dK{uG7t@z~eN z$75cVd;BgH^aHBgHdU8*av5`ARYR68@MDfMs;aX2#MPpl5mjy(`G!tM7mq!h*K3_r zl`RYZR+M*gPI-S2<(*QMt(V*@a6hP$vt;3iI=Ozg!PgTTRE7H8sZ~sie(EAvj=Vp_-{S%0RsLz z4?HU1zxTi!1^gBdyjj3+^}tUS@Y_6aTflGkz|RrzJ3R0O0)D3lzF5Hj;DN6e@Vg>z zIqfHBbN+TL!ev3^o$Jr$yz_D3onJ?gcNSE$p2gGN_#e{#TBLmv(jKH~%d^tnD$*{m zcFUl5oz45>`_ylIk*{R&cQVJ3J=NLoeuhZ5x7uwpg1DLI za6Y!L+RewhINaJ_?H)%L3itsJe2IV`^uR9{@IxN>PX+uN5Bx>}KkR|uBH%|n@OuRO zs0aQx0sqzme^$VcdEl=J_`f~ycLn@A5BxI$PkZ2B3plB9!;cEMGR@y9`W>< zX9WCcjeG91hq`b_e;hAjKHFGQN=!S46m zE8gYA!Pz!*heevHo;3d!X?h1|>k7Wv{5|^yM_lhyFq^F-_QZ+@MSShyal!WR_+SNj zY#7FpWU?lU9eZA zF^0I)EEQ=c49V`VmkC_UknFLxPT*Q|aK8|^i9@pW+8bwc`D%i{C$@bs%2#be*ofpb zzZEpiK=T=;ndG9uGVT;*OdgUwmhKgOY041ySb9{zPxQc_7x0rj@HYhfKs*^4Txor+VPu3HWIqc-|ZiKYa)r3oQP8F~A$?H@t3$k5tN)YK8LL zAXBQ6Y%LXA(cB>6spmPtN(nIXf{|#a7$FFo8?@nPn$VXgMCfU*3Mp7xA>ZRi4_FZr z-OeF@=8&(rUm#{9ZJ>38^jKj;dbDtuh|wyMhB=O}^7=VJ^fPJK&keHZ$h5qeI$@e@ zH_QoQEt62oya@@ZJ9hmLTsPxo?h80&9!MGbSU*9(Y?@=Ajdmjyu6}&l9Nv$w8{+0+ z)90|YD)f}C(9t^GZ(z0)e|V>OQkXztJ4l zS8*S9@Gx9eGmCm!`VVU`Slwu>5+}WBASR+P|Gdt*$vMo{1XJ4>Gc-1*whemzul*^* z8m7=a!)mQ(|xH>yM-h5l;7B3NQO)995_m;6x33}f`lNG##M zyOi}C$HsULw;9`@r>xCGv;951;Km#84JBEABmO>z=?2}_MYR!!YRgbU+`jDpHHZ6! z0Br1op?Ln9+i!KpF0N&#uru^qJ@g-D(WeAG_w)S~uOqaWDW#@;G8DZ8Wbntl_$1(q z-TOcJbGa=Lw!zk+Zr|!*5AIVBuF`}1%!515gWE=N+=jMpE<4}k{!+XjX>^AhMkRc$ zR?Dv6peN+JOEGt^PxlF){6F`UebQY1O_uU+V(p+5ne+)y`dt*O0|a56a~=Dqt_`}{ zE3J{Pm2Q(BTol;td{=H$+c%fnE>wjxz9%G10Qgejy>`Vx=mh$-xoUC1N2(Ol^D~KLl5ZarQQ;d4*7td*;jmk zw~dv_1^SfrqnP2*2_6@9*_2b4XXmnb+*p@QIrZ4&sl%qM@?W3p_!_Y`dCKO`VF_c< zu699E#(6PzBD^pM25qAD8ikd_Q}_2p-CxeB`=@}jow~madHvlf6{GUfdI;!lJx&IB zo>Rsd;|X!6OBt(TZb;_68HByNHwCM?1vQV8E$Q#WW!@_KGC!AoXs#1arRC;fkv81> zJD^vSKlyvCw}#$tIy*$5{LCdm#kMjkIQ-hmon!Ps^)Q<@L{#?a~i`qJa$|y zx6wxWxS+48b^8%%6YxO-j(?}mijQ1&C1F0F0HP+kq!oB(&->jmP6_VP}XN2-X zQOfvBql7*IV^2vjUzhSCK>q51JO}g}r5Hi~)j>j^jX!%Rp3kCyXX9QE#WPtH@NE3a zL-A}D1w0$~xG1MNkF$Ky1Kb|?&3Vk{Z8EY)kJA&GW>F{H z+mU^GpYdcPo(~&UD?1T}F*li>#Z*aHx`<$IhGI&XBKj%MbJsjJcYuTxi`9a(N_(#? z6*y<^upjK7$Kn;3K2wRSWuP0qt<#tY)Am6<40`P|o^O<#Go$wG4|VM8C1{~KZLeM- zzuAHs8}s%XgK=C+lC$4~v?kF0Q^%-tca_;B6OWRbGirp!#&PRXhzXE8plvm2L|06I@~|Fi(*8w~KpEG1AoX7h zQ?V&cR|Iu`mA_i;Jet-!kA9;!`42&T?^CPum>#04jz3_R+B>n`|{gu~HaV;)>FQV(mvr(CTvFCEq{a$035IV+t! z{0+S0uhZ2&CKdT;TcAV)ZJ~AL-4sHZXv1@flkP5!YbTTHz&<}xBu>7&v?n%t#8r9N zZUIXBByFV)PAhe3a|)3&T?x1LE@IKv!AC8Vfs9&G;TH^+21F^zKyCYuY}aq=`QVY4}ElpI;%=s8K}>BUrA$C=&`}#ME977Q`SGmu0xOKja!MetV_k#sZzUCfSm9!>$6tlxLNQ<_d+e-9Y(!a zHLf8=e&XoE5_uiQU^9))X15}Dfc9X;lBgmyjDLOsHY)c=q65yILepH8?I3z`PMz{|H>Au1foVY8<>vqp) zzD&?A5c8Su(~$$2kc&JJIO}6DOTG+*2uWFw)ya7JS;4b0<7FSn4FA$8#&{Dj?CvVK z>n#36?=1dU56c&khQa6^3i3?AyMqLPrHoc|$`w1qTXZ~yY1fvx&Ty8T%g+oP(AimE zkco_yjts`mat;8RCfcUSiE5}x9u4&zT#Ki{Iwl67B^zt0w*=$KIJBMIBqLXvT3d`h z$pK>{jde!tAYz)Gke;_7&JR9HAEKv5Z23bSW9Z;}^jIeVJ&##~f6eDQXHBNdA&eUl ziJ8)9;Qdo%MM96O_Mi{-#(91M5;}?Qr~Y{Nf~?#a zW+foi)SseZ4I)bK^u5h3t*X&64dzLi1eze{YWWf9ZNAz$D;&IY--PWOYfMo733y+F1!!Svr;5_)SfPdnm~)JRvz`6zMfb??Q~xUz!09Y)Y>tQ z6xq?WRk!DEg>;{!A>D@=KPbB*=ra%b?fMTuYx#PZC3VF9sfWol z(jMEaqwX4X^uISCZ7L6UtB8SQYFj2!`K2Q-ry;{nvSK>bm@*9w6))Y))E&zwVUIFGma=q4YPWDJ*_ zl9WJhg3*s7O7@`_LOf5B@1#8m(q6@E(|z{hT{`-0lUk7m)2|EYN|SaPu@^(T`%k9V zKI4f-KlMr53ePwzUosZGRQDQhR3f~|KiZ*tzL7l-rejE@_XV^b$LC>s&7pe(>0s=? zkjDHf0&N3O3Yt&*+VwEz>Y)t}$SoxLAftbV(nohBN5h->10*^6T^(~v*1xBtRCatI z`d)JM7J$8zHqGSdPbju?)E3<-TgF&-J+WzUZx%(LtMD}|75@ADz1Amjn?%=?K+E77 z-gVG6r%|8yVUqMgSw4*{lE&AXG}ekjz21aL!Us~G?>Op*$qwPnEJ-2it$P)&GUnct@{)1rLQN6o_MTV_G@eOeD6w47bv~{_?Micn zN!pr5E^-`jk?8xnqvKo*<=}*DY9Jl>aa`w7-49n-lefZ{!B}I_R;=U;I6>ZNskBIsk%L`;HHF`^KFx2488Mt72M|ZxmWn#P!7njEe>G z6^!+W9RJ5quVrbL?;?7&uVbmN@C_vwrlo1o>pO4%M9<`8-}*0|wirO{JN^aZ;*q+! zq~i}DO~ISeGFocJO`Xfi!1J6e_dMdwo#prj5coq7? z23!w@uVt3N9MXpp-CBZIoGG9j=(j83navb3J>B?5C4=WXbk8|-=TpsG#ksDJ%^(a8 zyfJSw^q7f!CIP;30!j8AfwDl)?mMi1Aj=?M0q5&u^CgX7y6~uuGIIk!k3w!wH_KGg zJkbyGG?iv6NYeZSq&fKVCbV&wwQ)-WmZ?+O6?tx#%xd#SBRwtL$L1i}RhL6)cfPoS z&?QHAb697|$8=umN4<+otL-O8Kj7<@`UPzL6}ep_^w0_dbCHxNXR)=z%0;A5!5BJ? z%D>YLH(lT^CeeLav;~$3+;g*3}(7R4KQ<9t(7W{D7Cdp!u7!K z`b!SK07-6JpRsu?#+bmE%lr)02^X+4BS}jQ#c3Sn&jS_GsPZ1`UvZ4@Rp6YLLiu$P z&_0Cq_|{a-fW7Gp&v7R3Vnw{dH{lY@K1n311%q< zEsdRx(?|zE+)sHSd!rVzpUw-VW?m%stg<%+LcOuy#Wg8WHia~4(~0zUBK}Zm!z`G2 zi`&OPRBCVXL!O`|Yn7_~(q6sC`a{zO$jKi<3__eppLt#R7Z>137vL9pDeJ_s8wloZ zzvK^9=UXbyWsib9cjMR%cVo)9Ru3{%aub2v{Ujbxh#89eRQ8tE+E|=0syucL3<55( zaO^Tt7?Ku8??o7Ld1wnc5xuXpVe>ob_7V5d+NP`-W1}ScnzSVPCcaBtdpiy9a{NQ3 z(Kj%1M)ZAtKKsQB*q&F9F&t!WyFL&qmig)_#EwR^s z1yU^VQ}UF*$5>N~UbDUe34Q=ke^*6n)E=v|migK$CemW0?j=`YoLh~1m0Of|Wvyeu zSQ>p-D#1NE9yi%qz+&f_;gr#U=hJ*)e}XjHz(eQ3`&q@~7CDj{o@ApG!23qhb8dK| zOR7f?-Kkhx?O-)uiGBrg@!?c#3VYg~Sx=s{fa#vtuIQ5)$_2Zei7A+5#D=8J`F>)O95}P!>(WC!P8fiUxG-;4f^qZt{NRJ*!8VB|0-lU<2 z;H~8VElGCHtYLjF!uc3&1)bP8rA{22d?zLj_i?mf0gGwQ`b9GKjZXF0*bY5T*Hi5n zd~f&yae`5<-t*%#Ms-Lwq=9dpF6>UZdjepec=$@=}!tH%#DNc0nyx(rh9NoP`* z!5dE)&ND>RbC5p8J-pqR0GA(vft9 z1iVj<^+VnlA<;dYH~nG(+fRe<>#XRa_rsw>3FT>Y?N>rA9b<9x^Y%9{VEc?_k=+0q z4{#E^ri{o4nV<*ahFZn(c9Sy7Fel*f2h-3y_7Sn)^p^$9|6no#ttr7bi~w(xg06bt z>O$Sn7(l9OWx{S zA8L{4F@EOn;{}fGKr&JrY2)KFl^jB!F#fm`Z({-D;oZg`hhZPy;jE(UfcGBh>|b&| z61b4blBQuw!+rR**r*P|sD`(SO|EV8OQ5&+#3t2-{n2A7qaI~W`R(e}BrZcuW5@L9 zcFDl=i$rF+eS+@u6VJKmN+_q5t(W5nrt?1iezDll)l@^ok!vpoNz&hs;1x$P@QXmt z^y#%TZ@@1MV|@|eeP5>W+S&Fll#G;3{t`CVD>_|E8j|Ov^<&y0*XK)}gHSGhGcC16 zUt??dbo@e{V)WaX%5dP)AnZ02LJlX^j#i_`lGBdqozsu$&UzI_0i~KDYEVtmmuZ~k z{c?0i%4n|jQ{J;R9sR`J26@i-Hwks!!W;xFLe5_INN6%`5^OroyKd*%5MhP4nB^{AkTAYzXm-C_Ccj&DDMu$0|yxLh$r1e>#M?fAFV+`1A^Y(vk8xY>@vvXW)7u_B-5zD|2u~4v)g`-gXh=)BmR| z0a~kvlS{Z(-%8xl1#hbv7qNA&|DIpUx*jxpcOHDKT=2i=kt5}ByP!)UkCWND`$XWq z)y1SqW_yaPS6lLXe$-2<<@?nN#qNi@Tn%K1+|l-Lo%VRjE#rO*X397G_QbtqPK;!h8lF`dza4AfGjuh zOP#Jk!_{uv1^xg0VGT5=CK>G%&aN$Xr6`gOD$`5kC8$pVb^ef}(IcClTd z9jqQ2v^}fG_Ck>4cR)!R+o>&}yN5910M=(+Fl-rU7ja)H>G%xFp}B+zqtByPdnc>e z2AX$~X7BhyZ_=(J$sM@Yx1Ch`+1jrk@M0fK?$X%$@0#lqvv42mbq7m5WN5gSOMO^a zi=+ra3S7&*Jg=JU^CKOuuCM{2KD=6sdJJ(h@Lxw zaP77B#s3BxIlgPkT7%jG=CM0vbwM80+Wr0>>!V>ipeDW$(%>#3{|=}#^+7GGef$0F zX*TLqLHmm@XdRoh6p=Rc%$hLbuPakV%?RirT3>9yh%+?QvgV+)1Ta?eg|U;I@A8Fi z=Aq@y28!u5Uh0qSSdzDTLdv>i;0Czw*l_^p4(Qc+4?yic8Mc$4jmidE^SD-=ws-Ko zTV1nv;_lVRvA9#GrtOdS>O;vipa_Jzf;Qcg`y0^%Re{$7@xaw-+&d_MRL*`ce2*LB zS3y0mjR)wS-f;o^A{gsZ`a|@(jxTq?{rlgAw4vnf@2bR})^7@5mos)B-52w@r&Hy2 zJ2=)BUCiuXs>$OpelDqH)@Cc{{EOCz=m}KJ)fcnaK341FevIIwwp2l?T7N$}*QAW; z1oxN1av54Mj*HMaY*{VH$osluOVl<$>MrPaLUQEukQ3*U&yT;knA;bf9OCvxT;9A5 za7n6T+1AOSUL!G_S&mf__B?$!vt=swJoj4lXgftAGyVgF*(jY7^Fnc6J=uYoQm-|0 zIJ-|7=M5(g=|*Ao{zekQF`T;-f1>X9;9V{Tj5O&2p6z$6{! zMiX0X*={^(7Lbg5{)Y3d64sOEW@zFa5^s&W20 zYYZFnxneJ&+Y ze_LsZLMCnsm-xtp7uwb}wol(?f^1Zm#FbC@-`w9meTSK`8>>xm-FUm{_Ql;O;GcQm z;{^Ouv&b3G)DA4=+Q)3$Y2r>U`h96qB1AImwykDdF^S#wDb#q-NX4;9O16DuHsM-u z+s7uZQ%mN97D{?{>rSY3VO=p=fmzW{K<+(~slz#0b>QD?UW)OHlyLz25&BS$XUBx$ zcHIk7Oz-Y6u}0hL*nX&5C*gipok^bzd@^>{$<&{UMxVZ;PjP~pZOSU5uwxE|pFSOO zC}8F^J~7z}%fFEek3gHfPs{?ko``YMc)c%6ai8AbjL44Dc4dm|& z82&#rVgxNGL`VEVOaZdMmv~hs1q1n8bVXk83+iy6w?)_F_5L8tbszNynI+g1EZ}>= zVxCSsd}ry^e${Vp!PePVN9XQXxcUA(oyPoxuM!;n*Dxv08%LdN@>R@fWkHiNgxD{_xT2OZG#4K}r;K09Dvdnb zBjak?)vAwdQC0c>u3Z61JoC93eUbCDmTt$7BkgO4>e!5C&_2!j;3sA(_Ub4@cGTyV?AcG(I*PtPtrmKQ^&GY;^?d z^-&#*QN-4_Q{614wHYw|9m}9)v|1X!Q=@B(zr`y_EZk-u-w>kLHH~Wq-6bi$L?7HM zo5Jg26dMy*AI0{-eGOn6Qd1w4&mWvhDs}6UI096cz3Xqgx!?HD%mSBx@;`L5`L$iz zVRqZUXhd675rbQ#*=}+hb^P1dovS0i+|A~q4s$280dhwla2u?J1wog@5QK2bV(;&K>&A1f!o9Q88I^3 z=WtC=cAaJvX8Ro;nnN=)ho&xvW>#T#S&ca~?Kw2@9GWw8${L?T(~*-;TMkWUPCh5+ z(46I=p+2yBcx+itb9N!~9X5Gnb}U^xC%>+odbQ`!%+8@XJBMaYPTl9_(9F%DS&&0B zFNdZlhh}~b&5|6Nb8~1`=Fpty86Vh|YkIhh%xK~YN&?4^Y=Bt}=G#I8t;r;IUWA@; z@8N6gPM@~UFKo>`i5|W`KrMbemW+q38Rb= zRT1L`($qsegg?9<$4@bTFKa=eMT#Vje|dRWw;sr;Z_4vN$8zx99=xwN z8{gx>>pA#disyEDCB2TXY0-y*q*^Kr^u%H#BTApORP>^ZEnn65rZFH*BTduiNyFxW zq1p9_EiAN@Og$TO>ba=UeMakq9Qdrr>5FZ19}%fT=A;FCG{OFa0qdb7r(wW83< zI`?sIFV|-;q;nOUZykSMz5HC@1>uyDj+3moh)a999qWQHlQ9;A;T_7{ZLr#%hb1*- zpFLdXDZ|&4%~O8b%g?YO-rwXt&vH#KliNGY1!2VF%5=&KG#PZK3}e2s?|4hEcRuIo z|J2L*`W4VVKZN!fN82Z5JuCP+-<$eNHf{2RLaXijX*cH3j?baxb$B(W4$V1rz({ZS z9sdcmI1bIcIEcR*DIpQ5rhKYqzX@rjAIj2JX}|0d=-`2i{Mb`uKjz3nQgW3S&|sAq6hFmOegaIK|{bcb_^jr_3oi z--FYhkwbf84lOTtW*;Amyxfyqb0h1gXJymGPA+6|j59Rn< z$L=cLUe=2vBd#|%wa|Np^eREO$wPOVL&wYfMRvQkoL*?PWn!oNDjOd=qtH?^_&aj& zQwuF6^Ih)G##_@0Ems__M|0XY;c8#z*Knhg2U;{6q(iBfFmhv$>g?t;?7v-|wAJC^Q8o;W^v|Yb8%&ZyLhH(vr zNBqK=)41PXEwNKS66rR6T}Lh7tliYBK!rR?;`b?Qdox=R+(WO?tz6GJ+Q-*`)`s2d zQ)vOe(gXJ`%!N}QPzzn}WBjo$n_m}r@PDeyo-@J=IX}ntc%sfdSM*=VeFto&y$kqD zp8O|?y2CfJ3P!r;+EYEaLJ!XNyz}2Z@7(FZy;|pv8!>MopPL^DXRkFcSjb~kKM=;X z=HJuxZFYZ)b55DlF8Uv6F(M?Ebt%wJ$1)#(Cu}OFugiaLNWD*eQ{B2GunaWEjwk;G z-}T**1w_xQ%EOZdhwJiaUoFCTYV|r@V;ceYC(wI5VUelKn&AKtdmSx<0c{@~wk z7fkH`FJ!#LEb2C1YhWv&G(HBDP+E^~@FBGG+4Y1(4~3n%^C+a5g8upZZ-SJDCvEfU z3#fIzhF1~?@hJ|PLdqzDXI!z$$7=w6#9u)2^SAhMT_=Pv_yPrZ4PLG02UA9&1JfBy z%MY&4&r`QZ`SSYwfVM@>m#@y3{8tBM|9V~WuMf%o-m``k{O*-Ph5Hkjv51`&>NxMC zFzqv4>gDP+>aEgWS-&ZUH&_ktR#P7U9T|H8(Y zdbW%5qdGz%_=U&RXZkvR*M*Ci-C!5Fr?5-b39&MJ=^M*C3nfuBDabJ+AzACuuGj1P=7P$?JcBVJWvJ~B|PK|!b z?Q=>OGhN?=+5e7_Gi19JN|43})UGO$_NS~o;KugE{oy8R(@+<{6MgB}M5O~@2v1od zhqto1X!K&HpQMbF>*IKELXtX2ejcz z(3|AjoBEUdVwT4jVJ!^$X}DSqmjb?oo=3qb4iI5-DXxqKV@kTIcW<> zQ+_^K-@mj(hH)rMMdWyBh0R4p>8p#1N?A=m3uAQhMbcOCerV^WvK)>$IaE6D`Xzn7 zR;}poe!kA{eZIERudes?uf+G9CjIC4oa?moVcODouSxxhhSp>)Q|dpC=w)tvQ-3`D zQwB5xNQVJ1PYoOC7eKr$6%!eNy@{LZTl(eqzgkuMFOoiNDkJ&k)fE+HlLq`mGclek zwp?C3F9>NRNZSw6_9v;>p7?qRA=p|es|adK+xn(V?!`b=GuDu!|ID=iTOvn|+O>Qg zUr+M&6N-E!t}iCzD;5%OjeTUidI2#9#6wg6e{6?||EV1U_n+59t-ZgmExdV*AY&_{ zv`wxLh5E-s^(3A*@_X7S9%8)++vr0wl%&#TDEiCqX{8sjPSN+)_pi{#_g6*E(YGl4 z+qnLIn$_C#1q|d^1{r_?x2teoE;zf$9RQyX63zSPqL<-(P!-F7gHCs69?+3bU1dM=}74_*058JEHwFGZr?m{Rm0ugm*O zxPH9NsmnH~%QrD1v?PrG$oTNKCC+(S)eLmUthx>P&e;X2*C-i*XRMNIzX{{1#gqY^ zkL3G0*B%Nd*B*0Vr4-h__FI7Ma$x-&*v@d`3WOgD$9)rsz4mLsgAC`Z57<{84fn*< z`nCQJfF{>M>-a*H!oG4Zylww_n{=$(8}7VnUl?~2&&8ODfKA2B`a$f@2-f2Xxcl4M zulPJ%;_I5|L@@FvlDCy^ve!*&U;AaaW8GnpGCJ0M9gcpP`Bv6a9{2EIxQX_m)9Trt zbw-cmw1byA>*fZwxK6Jr!>T9WLyv#Mm+}}whr)#}e@+ccnSPcsTI*4hjnuJtcf6l9 zFJ*h&NefyL_b;vO;moe~9fc|DM|4-a-P#$pt=(a2e+pN$54yL`5a-7+uTz$?`P`a2 zI?$w`l&sFKl12v-;jQ8E%F(nveRnufycOE{hPpO7jxd^hCyoobO0I<7J-z-o65Yn< z^X{eGAK_?_=0-yO6OpgN?b6n85iJwP<|?2$g~|{q zH?*N;J$;68R2hiwL!Ab(Jyu)&XsW}&drgNiq^K}{gdupk(PipQAV+@^Lu62x;ma=t@4)cpJ%5N#_`g+-= zbG{||(%0?MJL&_}AJk%69=R6m<^Kn|E2 z@{&uhwSCekf&xef9F zt_M;~bsliNml@Z4DZc}th)EeneV*ev1mC3L#!~8&hvKZ4#@x%1gB{41qW|P}rrPo^r*ub;QRuj=hWpwv3SFlh zI5guC>Le9-U99DVn8fkD#!ts^Z&Gul-##&X{gtlzfrKP<_YaHjzMC7v4lr=i;wk11jIrlM`p+oM^s4}*`=Pl>9zR&yJ zwxbs<7yj@4a+bZq!sX0|MvpO0m4GiUm3l0nhSqelTuqk2QvjZNjk7f@wZo9)0NVh{9${rx1_OHoMeKB@mxD0>3c(c7EP zBWQnLp^RuuS!XvNPuB!zX&RN9@!7fpc(ZaStzKRw;R%XcG0r0yPrgi7D{KW_p}wo; zLW&BXkKVUoYGV&zkiU+W-@%A{cnU-5X&I=^Kc22s9Axr8_Lg^{J|pS53v+K{zX0it zT^*RG7LXDtoqn(v&$?Ah_d$Cc@5hr4*dAt4XR9XnSmhe}mfZ}W_G3vhisdx4<%50q zMQ9FEXPYKRKM2w55Q&|EG+AVI>i-ve&QT~k1-NkD3=&qSkZ^D~3FliRtkscf`FS-Q zSWSAYt<7i)|5&q5eZO4R9H2g3b^|mVSOM?+8Qk?6`vIRH=ruOD@QAww(x#gbH#|^- z*0KOw1F-N|gvA2~h_r;|kuppN_9f&znQ-WG2fB?&S8-U01N#UlPZE@t1AT``H*lEY zz}^7LHbGhLKsN#OR1S4&TkPPTppZU*40Iq51NC%~#{dWFgZ7%r-^AtvB2V8VGDG8AD zgQdd*OKD%f8gwx1)z{$FpR#^|SIA2t{7da_Zh&XD`@^0S@LcbDmf`u-R$khkX7ue- z6u=r^1Db7FI*gu$=sOK1MeuZ@c*;*pR}Ccv^#4-8OafRXeHujnuciMt(*MV$rFBEe zBzk{px5)RV^?56^z0_+^Pv+JQPW-ipE z`Si|MrqLSCyhm%D&);Kx+5d}r!ZoTf4;#z_1@gl1-~yMO;`5g<{XS(xH0GIqxkOhN zqyrMSP2}>?KiuC8YL{*Aw%LPU?!n{VhnMj6Xa$#5fs3-a;WL1rf$+JQ?h>f+Cqy;k zWD?m-NZOtY^OW^fKZRA^KKEHW{$O zEw8Y5KW+ur$1-gL+*@O^CZ5w9p}Av|j#$BcKR2rpmdfhVEayBjo3D=tn$>Kb{wlz};8 z7?V|A*14M3fBX9@*uGA8Y>FCj*)j~5i>VY6{g(B!^RyURtRG-cv)R*^f{#=A+MgAJ z_@L;oC-VLZBh_1edIejztfi|_-LaEY)Z|zx=R+yf9#LYvKy{s?4y|PCRc55yI9ZiZ zVz=@fK99Cg`Sc{To9}~g1zb8Jr!e7b z|3H-*P!i`c0qRz=HPt3%0EzqilVrp%<0*gi$Lp8-j8mIXXRFs5{Ha*8HW7Pd1mAao zHqF_k!aN&n{Fc0qr>x|A`I4NBtE<3vaw$QGKbF*VWjD=)0LVze2S6sjfE9hc?GEX!s>FZO;4i z&sK7q3B+9_aQJuKO1{^QXB}A?H?3qgHc4BT(>^{Xwat;gA$PzUnnQa_B^ING0$nOfO)DiF(0(0*iPj{zZ+ZAR;78KTV`seJpaI_FuZjXo^@Z9?^*RUACV|G{H($Uyg9Z@IT3Up;LNeT%89N$_+u*_ z-#10jn~l@qdvsd5+zB#NX8a^ABI6mY&Iob7%{dxz`rjquZjrd_6?YelyOo-E{wrAJ z{+^68@H&;O;(i{wjWe)D5#6Z`_7Rp}O3Uc~)K~i|9=GM1fZOby)l(d8)a`>?fZ*<$ z;P4^|4#C~s-Gj^E8r)rj`{3@u2X`Ob3GNK@ajwqA`3p|fclUI4Uvzcvr)qcawSMdI z!+8coZ*#wX(XfBNC|5D}XsHT~;rtcm<);0|Ls|>LoIqH}1aEIdh6&lh1ltw!rSKb7 z0i>BdU$p=tBmXL%uew=Z(U-W|fqOHorg?o|y|54(jx~85Lvu?n`0mjaft=a8{*Rf6uyP$gW3RfJDMO?=g^gmR>aCMXnVou!OYXe;Po)&5O9vqOe@! z@;0kY>|``#173M-1_HYG4>f$d&6R`>zkjlg0iW^&LUA84_A!ms9~oL)v`e*&vJ4>L zI=k&Jos~!{8ff3V6!x)vnr|^Vy{;HLPobsDKS!sJQE`0~@LyI^%cJa#Uw6A}*|R?t zz?DeztP1*mMR52;IO*B;^|X&pf@$Yb%Dg589Kf`vC{QF!53(Sw{i^%jx3S?~G*dLC zyRV<*|I)is-JpDUuL?a>XMO8$Q@#(Q-&$C?BYc^s6Mq9+4_=J3gBl>>N&NJSja5%C z^XUEOe1bsajoAKkZA~YXjd0Qp{GeA0#k_pf4TbL~9%viD;MMDvhv@gKUo(PAq&h=) zk?fIP$MeDOxSQQuhrQ~9P4k-vdq&4|F@6NoW&5gmN+zRZ6cxcoX6VQkBVJWlHvcf& zL2*$Hyx|Rd&9Pl6w@qc@|JvLXsM&DKIeEfx__{fIL|jsxlNgKI`^W&8pp5a`hT5;c zMtU-acIxfWHjefW^~c@YBScZ3lI8VzfD7Tzs`Qwe$tm{B&{!Yru0MSVn=Ok32IEKY zqkmtj&Re4O-M+R)>k}Mvyf2-{jkJj^xJ#^1W_Aa#uAS&YMc zk!*P=ySGohhy=ij_XT^$tUG_Nd`SYrudfK}NhpCU;dPNWSlzup1ZF7&$Jck*{&B|I z4LI`ON=cBwOm*22`~3zKhY&RI0Xi?Mhxm$vS@%##XX36`UOwRF zt%PBkP4L9g<;MKd`B?Sn^Y3QX89RO5pMHwky{II$FQtOs(6w9EAkan|*lQfU-MKzn z@Sf$q_|;)W5cs)Ge(;oe&j+`eq$g%lr+cZefoH_ANY`g=IRxVuvR?f*K+%kK4=@S* zCRi^`G~A=7KdedTRXuPB%Hf!ADE?gH#!K;CV_|2J^YKaP>c1r|3-s0NAvT$!K%fZaJp z{gzt@BXm&K^SPJ6ThM6icA%G^6?9Pah`iRyw0X@I%G zd1dZQ1?PoYnyxPjDS7F3 zwfF)ZME_mM}ukkbiW=Cw>#kf_542np%rwH%QoI=lrqwLD;5_m_+lncCeABs(3(Co8 z10v_>CPNg!*ay~m8I2UEUU>|M=ZY%tno1Mvz@J1$%jP4&f{b$$1@*FUDbZLiDd~y& z|E&np-+{hE6qW4NZe6hQ`53mWh7P)VS{ULEoniBef2GzYe8KL_89CGaY>^FEi{%O? zD^Uv}qboxKR5ymp7oFXHW4WYNr8>3v~k^HT0h4vS*u0xQ~M@~`^=J?h$6)SI4OmEqKLSJ9l>{bQviWbx>Za)cOZqLFI zb~56iA$z{6H;u8g+D(mA;pCT5f5ghQ2OI--AL>S>-k1qmz&)T@Fc zd-mG(`m{6wE4h8{iK9k`Tw?PcHAVCX9j@>}Yp}Go75rrPNC<1J=Tl3$k`$(!9tdeq zI^KWs;Cg`D*AKc-0NCs`M~|QPkenft>gX-V$9G$Alv=v#hN=m2_(s(1IB!l}eLw{u zO_X+UOY#?m~7RwO5cK3b7`_X%!a8SpcPjvv{1!um5c>`hsR9Sx|cM$Q6BD;Hbg1efx6dBvb_ zw8lU|ed@(>IyuUITJcD)%nZFD$B$u?@@K$o`0w#Y=(V3IJZhTcXMAf zwUX8C)9wnQI)iyqB6(^MRjdePsM^IGm=%a*?kpue=ayhd_jsM?L^_5n>75~2zCfu&|dxtub4TI zHHJzWjWO6}3u3Acvt}w+mxmOti)N?H#_QctUcv=6+dKT3_924w|HnCqc+;;Sgzds>N{*^!P5!x)gj&xb9l39opatFDQzR(@vS;*(iQ#Wo&W%30* zj|Z{+<44f_HA0wS;V1E7?RnTN&_vSCMv@NmsUuu>MQMgzUGzn2o>>)V`Q=kRpM8`_ z)svvU6LPsP>l&4oTPil03_rmK=Xt(3!3DzXofjxvn`JmZtFyrTved9X<}hQaAPddu zxUYcLIF!MH9P4@*)>%?E1v4vVahU`LjP`M zkBp@1hYe^YS&X&t$fXhJwA6Nu6YC`&5KYIlW@y2YrF{{oTe|T1hcn(;+cMJdxO4V^2XkM$?cDOud%?Qw+C^$5Zr_fr~xm(etYBgFGnB` zh#`+P*gyhR{h7K{%@uCKd4z+)H!(NSu0<{hvS>eEZl_6j;bSx-7PMAayhfR*w5(nZ zt+DI=Ncll>%6GQJa5r@8xGKK>2D(ME24C#4S%P1NLC2 zIwh=A{cQ=o}KbiD1LUX~#@ltu+Qy|#E zd|U+jaG}c6-Ra5D%S3uGKf`4o0CU08>-E)EpbH%m{st=f>?0HghDm7cUF|3<>BS6a zO}xm@s8SUA`%s}$md)9=EU7Ca#ui4`c!_!uc*SsMHt3ebG+ozt;f2p>7yKD+OhT7- zv|$Y2^K<9;?UVAlBO!}_Z%ORy4Y}=eV|~&y66NEpSel>NdH(0`3}d2g`2+Xoxw(?i ziub8^zmgu{A9tN~>2)@TOWwK5=Qm@hR#`*tojSMhQc|Da^()l&i&9rH_;yh=B?TpA zF|bPh9rSE>b+;@ch_V1gu{{&70mF0OR@^?$Zt_z2l&8{ep_8i-K+-12viOXraMZT)=0>Wq9r=yyW!i`BPy|BE+n1^|=+slsi$)zm-E`sZ`x9iZnwzWc*m z#P_@^C8GS${+mAzI9}QRD3_M2PQJc=@&#VXrLT|a{?LEr3ARqS6 zDS1dY#I2|SEiA>>dq#N$Y!JS>@jC&8kq)v41S=Zzi3a(x!*vUqn|mB69#T}w7d^^r z;s-_-&9?1PY6_uXf(Ts?gMMdg%!Sq1Mk9pDQaNv^mDi=_Rxje^ddeePAE5K*J^pH| zv@5{>*STkh_m6*M{hGqIF@A*i`AA;b`5NbnLJyzk*Xu0&Z+y{K*#azQa=D!jk3?_dyw}Ik>QSikc zbTO6dV0L*w;_ErTkTP*;ACy>b<~ia_9IqF{`MA8khON-&_B6>do>TEg%#jYAGiG~^ zu@quB4V|*Vun_#@LBJ(V~&(qM|3OanvN`&aIw-#{Q z^ULlU(UJn*5q!hl-VujCu^=l6zR9l}5T5mZYK-#S`#RAB{;8`6ZHZWm6BFj^xbU&+ z<>_vJ0F7sdnhUgr*hLlM4y7?cn ztnj`cMKc2R+PkLmBy=9uwLZ@+dl*I%da+edjWl9DwlE#MC;^?9C;6Yeu7E(3N3;|Q z$P$i9S=E8`8Cwv>Bf(KUG@Uhu7(91+w@Zx2AFFaKtpxc?S?ip!PZ2g2(>;B|RpzIZ zFQU{94N>e@p9m1Ve3>ccwi$bL_~UD8&wpKgHGRX~)j7$o=idZ(`DrZ9-{RNclZv$h zSc&S#v+wb4<9QCsXmMOOdyg4LV;E3mtm{;u6U~_+AmC6SnJ;(vUyCgmr~GeIoF9+g zQ(1q|!`BQLznwRE;*y1Qqv{6;Ij*kM`pQven&84aQ?;V*@ViIG8Z8s}HHEvd*=lHQ zHXTtzFXW}sH1-fI(1Hl`(p({adxyfbAkITg^g?(A&RV%MZdZtr!G2DFv>K3f&zN23 znr_0SJ;Qs&D~|Aewf2Y2@*LjZaPAQ90pT*W=_lm|P)3(iC~8w}-PKg- z?N#9Qu@m0^#vu>#+J7{-b@ytV_8?vp?u2f4{Js7W)$NwS+NmcOR7f+;0cC=)faf}_ zKR2NhAC(#lL5^QrGHbw!XInezyQ!qxjhbkJaiS) zgs5ZkkF=5vK)$3hfgXY4J*z}I`)r{%(7FLA7G}WL6lgEwTQAi!$F!$+uD}*_!$Sb+ zxdyICGQNX={_N>FNXP;c;@%*TN27Vz#`LdQ!3^+ilUT*n$M(9-4qx;eNE!^_ z+L6cxggp)K2M|A8!t_dpk9qIyeMY_>7j}uwx!oGEczt&08R>CzZ34|mPd9mY zQp&(1IwXNvPjY{T1U&je<6_Qe%wK2wJzMhdomt)?R3=q4=U!Ws*75$5f9ih;Gxs!J zVVZNziE;$9_FsFp1Ux85+nP~7Q9w4RS};eh0+@TRy`Rw&(|gmrp9iS8+47UUBT4aZ zaIcM$4sQ4()_q^!zzHT88MZnt-HM^!;BupgRXUqXiu=nG%r3>^3pjGUsK2nn&rIam zk@HE=5b}2r8IP?SVdCERuHWB$LW#+F1{1UG{I&7{f^Zp7iitWrg4TijZU~Nn99zE|{^0+*S(K0W~vWH*S zdrt(etY zgXVl{c#{5heZM#Yv4ZQx-?oYA{PA_3q!&h@$UNc-?rIVy1l%q6I8Msp9{^~-B+OH> zuaNI~p}Ko{gfoa~{JV|2aSt=G!n<+VB76z`cOkOoA;h+}IjYz@4emMeyI=Qo(qCye z%X$=?ei#EC{yf5UZcZ}jZ;i_j`+ki%V^B@Kxl#3HM=tr&`g>K=-u$#He@IW5vv@nj z)yD0F(SO5Tu{{Bvq*6U)BWhP&LR0@zH|>gPoFbg=ZySNHF|Sf5gE-+fGD^MORlPNL z<=j11mG(W=T+wzFeMX$Odw`gFVC47V9O;l}b**Sq@bk^l&{`iPmqk{_cfIW~Z;50& z`qm25LvnqUY>SVp4}U`va2>zbUCjc}RU)ZjIg<1gpL{4}W9%S%OlDzOzp{)`1@H3Z z&5*si1%Ot-zx_4$+|~1Z%Uzo$Q_-aXS!JC9-hb5Y(cg2VTfHk>)om`oLXJLDwZ5$r zU<;-99mq`UL&;Pj6v9)z(5-?Q3^mkP#Ng{eLDUY@YpKTkVFbPyjqoQ1D- zz(3Uouw)`2e}9;UIJ9}Xh}7yqjJhN6o*&&4fn!z5Y>w~w6rO&{G)=t)YsGar?!DV* zdWT$ll}4N0FfVq$S$iB_PLikNs@_YLkOq1kH`MlEH)XQ$RvsB7 zwN@2O@bvx~H18*gRX$p;w-xnegO+YnVZAjo~#uzq1ES zXw4N{(fAreQ?qQ0ukUEXJvS1xwe^nF`__lr z_U5>~33hvcGdO9aI3>3BdyPJld^Mqc=1xjs522tCu}fo9xW5Qx^G%^ua6-F@^CP+> zNqF}+`qH!faqm;9Jx{Q=5gr|Qf`F!s?gAp;jOC>(o0G9g($}(gq2JfhW=7^mw%~W_ zye-qm!d9j;Q??sUGHdVGXp7tKJ+)!+nc(@uh>j^y)QFgA^mKY?bxjRIce7tPh|JTY zD{plyW%5y!aDRlb^u+SSdJo>O8_w$E(g%qN^9Q+(q8xaHS);@jJAUygNuoS2pTHXEoLJERoN6rQi zJj0QS$+xxgu&VXjcwR=^yfABe_<>6Gi@6*AiK47|S-5~Cer4?p*$6Jf& zcE?>cFJtvQ{1{j^lzRGqPBMO6H@ZG}WS*fxb!Z|Gj20&TGk5O2DqUbas`q zuzE47CELGSpC7q8Xe*^@gjQi2r>#3*P-bzSQRh2t4-_c4_Tqc5Cm- zGhg+eQSyOdsvV0t$r~aEy#tBGk+t35nsH*WN0Ogy9Sj@qyzF|B5o5x;YL+2lsW0TK zN=tvC)B_aBJ5GS5PxN5Q(|xpc$9@_EKU5>UCGA6<@@{b`(hk^?GJ#C6un2%oW}N0_6St)FezAc2C2z*98p+UY9R^zGG#5bD3o^^V@F zQfy-tpA|vlgzKGgJKD$PgnM9xWPS>lmjijhi-gi(zCY5w#|u6wNx$WLnfD(Zcrpl_xf!L|KyF3AZ(1_1(IWYd z5XW|ULgZGpIe%V}v-GBqc2GR&0SRUeOXf8I)`lp(N%(VUc2bit>I|#&8Uw7eqTCt- z+)l0Rnh~P4jm&G6NDeRE#Ut!a8tp|qToVKB1rV;Ove@sN2q3H&5?dU3zjKM(Bn94{@?2${c0#{i>6-S?V(cT8CA~cAg z7&`CM2}1O14{XS9ML?pw@s6XX0EJ;_wN=2Cr@6qi_uYUn0H@W&_m0%M6C#z*X~bVW zzMus9;Ww&2GB`c{gj#f}eWRhns#pN@7oXFFbt!@X;4d@-mso77VAcwX@!-Jxv^Glc z17zt8Y{|+WQXpY4GnM=D;b<;<`hGA1W#X5E21I6nB3qfaDZ+ zf2@JU-Bcp4b;aErb;8g5oJQb_RbB{JWI!?!louN+*mYUg^AHc)dv$1X?^}CqsUn1y z*SNP1W}Z{WY$_s`v4ekje(2GeDiP>_U$&b(~Z-f8l{iF%Y@W8 z6`aT(%1*-Hh97+nJwKZD7=~H~3w#?W-X%_A|L3XIk!bt zV35$1kG^1a$5OcEKc$v06AAU6&bWQjD|Uj_aWZ{#`I*sUbQNP{LA1=~({n8w84!;I ztsaCXAwdPPp&;@%Ou4s!`)x4Y_2vCG^rLB?PHv4K?dmqFWsB_clRvzGOW~dEfxhbf zd=xv?Y@s zAYkhz4*xvY(5T7030o`bRrBMyLycW-ip;ephmB8To)7IP>^?iO zd^Y7%f-!B`ZO^LaHXK<;+3eG<>WoS-S*fN2ViQL$8u`ymvBr=EZ1$CqTcPSs{jZI& z+cPm;(QXRr(>OKfL-wJ(a}9}T##`<=W@Hr$-xdIBQZA>vT3c|}1Z=6YH(UWHf93Vl48Z5{YpE~^PxIRSX# zdMuJs&R%`CEf29mCZN_*PDi7T8)`N-nYo=1l-Bvc&e0^DkSM8l^S@-ga$ClnCf8CG zam^#gdQH#hlqkWA>U1ZN*H8GI5WHIR>m}qboeA2mr`3ZU3Q91r9B_1oT3ZEVb-dF4 zhl*I0zj^aTCOZG1(zM|0@oP9>$i;qD z9&kpzRje>ccRX5-LWny1v}GbHKSxmns6V?SBby7JgB3j$r#l>4;Ph?TRdD9;Pn)Ba^j3Xj8-$20@JgrRWY z)-9xwEZX~{kQnsq1R?6Omzw*h=}1-{4A*E>6P6>F{ZL_*s1wIOdu$6O=eNjN6OixD zGcw%7W{Sqw9^th(z$WoxXc>=oZ!Iw&B+c8cSI|+@rqYYTHCHp+TvaWmtq8o`$L9m# z8FvM!Nlx%{n@US|>z7onAB7jXM9_PYtkB2EG%9;&H|kEBRq-&Lgd;F6HG?D!~9o%uqN}|W}fdnoNf1uxB_`c zxthUP2nI|rI8i!|WC5AN@_c8El^K0MYX*qs|r)IQW zoK7`Yb2&0PlBwvkDie_3Q`1B{SQYp^UPLllo0pw(w{E!716B=W%N#!^D@0KF%wJ3; zBagn~EO3y5C1bOoCED(VKudtu0UN@A8;3#`%Eioefj)>oz4e)G#9K3lJrB>0N1eZU z05q&}D|19X{^K(@wi5?FUScjyGu6^>Xi9;1lsY+a>_Tbu%7YDmZOAxym%}ufRR_=}f zlu5pE<3~4B$4sZBtG5>xBcY-X|Fcj}lWo=ZU=^>@SK_Dqa%qty^Xzvqc5}cNQ}1(*I{g zT8pW0E~Nq-!b~=_&m3sKt)wNRC@uFl zge);UIrbVC)-1{i*#mw?k8!4Q^nNI{hM?-W9YTtSh5Bp|jQJMEED1+)s;?j3z1n%2 zG7g?n|7ECW8m9S>4o)e95ugFlLT9pZe;^r-tiM9kyHBkMbq!J4B*pH_uK_}j`Vz!Z zsuWyCjx-Ly7l-E0L!Wa}f)yJPwFv_X{Ov%CH*31GrN(U1RtsSTQGy-w2}}uLxJ589 z8h>+{+qHiyZDhJI4i?#fHJ0tfy7%G z9PHQ=3MYl`&aOJb`Cm)_=K{@I$qWw^IzI*@^O7bCx|^HI1pnq?Y;#~6eAKE3&LKk; z-{(0e@=?mX&Chdu&B<6M3xX&o#YZzTV=#(nvs-$TWwB{A!zE_+LjUChN%tzBIBKIP zI{l#a7WDtcO^WN)rcpNoN)DJ)wmHtxVzXwQ?K!ZG>Ntn{I0(mbz9~qV4(XEXy7yZP zIxkoYJKt^mCD>u;HEg%G=Xb7(gD!7FA8<-abP)pbZBur-4~l2~uuFOg|HYb4=X;2a-*4vsi#4h4gXskR%8+5TVD~fR6~C09u5fl1LsdM@+q** z$NjLf-fRLN4XA}4eL5e=l~Q<;pZ*vzkV61Tk#9 z1<;bG-h9weO+>sCD=tLMn|-TL(Ua+#P`PH+lp_{23Qlr4brp%o$|j_#5pRcr)Rj=9)e|-&_^+45NvL)u2vB_bkH=5I&Sr9gJadluaxck z@3ZUeysrb?0*zI!dNUa;g6i{sig&Dpf6FX_0^7c&T&^@{HoN4paf*Cef|}q4jtq~Z z##uzQg~l_7{P_H>rHeIKj4Drh7=Hd3{Wg8BtjsoRURq{V)Y^5 z@*Bk|Mimc6jqC1t{15$tQu*8Y*%b`o%-N#A>-mpUmGoHgvei*lVyBangl~i;{-hM5-EDCLMw3K(+p6NbGZ5l4;0agEuHL3r|1|$> zd()y8hP$U5pB_FiO!p6e@Mq>7nMiZqce5sWLIWHe9Lq$YF3~!D+Km!%4GuyPpb)V# zH-t(1*=LGRPz7#?tDVy$Y6(jQy^oYYjxV~vevdEsqKpT1cEiAkOV`k{NuJojih({h z4Na1XelM8FE^webrjbFDbPVlKV9I%A|2S`z5zj<9<)T>o*ZSuaG`up;xFI?L$&peD zf(e0>uv~({k1+s&2)R(?nozCLjBgOVxxF<1#T4LJ&))ryxqYulG{SH#n)`wv`v^e{ zenKpP!f_qJ!T!JC*?`1W{m#KP9CM9+3*(OC?O?}82^>k&8Jx6oM2~B&EGtTMwY0#{ z$mK%wO~CAa(eF8W9bCmoL{$9njzAK@OROtS4=hwOi&z_kvyTLbFC=tFtSS88gu4C} zj2RYV30L}dKNc!Gd7XBAQK{Mt;)xSHqh4m><5#w0hv-}4lut#|M~Um>2Q$nVvk~&M z&CNK`c#lZj#;J8RM_B;IRy=IpP(O=3Q6R#-=SmCnC`H1OG4@BFM;yfB|i6t!!Sha49?4>;Y3Lp zLvO^#Jt~YUrPlg`gY0V(Z`c8$)$ME|Cz^(V9>+<95*tC{zrD7F+NpGi;)YvB+pIsg z<^1!cjQod|BAu3QteIk*mP#pQGCBKqk7tPwbQ>p!7HJo`e?N#<{x)J3c+v&GS)^WV z1VjE{XV`JEtvZaCRKyp?CZ;;6VXJ?L=ZejVJszZh#s8QC@^&$sIvau=B{e5SvFf5B z(q$!K(TZ7OGLu}#Q!Z=i?^PR)V=}9D$mR4fAQI<}I#D$^53|!G)1tQ=*T~Rp74u)O zt7}mabtqaJg2wL!FfTGyBcBj_%*KX}_qYNBm0M;ppo-TNyY&u|9Z~&2)h1pgDhPd% zaNPN&V`QLPa6fjLkaGskL6v>nc(Y|vwcQN9auC}NZdW+Js-ihMB2Jme9`mHROwLxK z1t5#*!gIVN`HNQj%YLYhuEgB*vjDsntM(`CM}*x$Z`s>;c|yNL>xC%26X~UK34+p# za-`cE1pY+s2WtA{`m&3*-0s9^7kp;dK6auvi0`yy#G5|G z`7!g2C|dSpm?<~fkj$&yqlVjSQuwlTc^(G_%aHs`C05SxRX5uDFY(13GTLcH{))VG z8LZ~t*K+8RV~ZOH-2_HcCM~EY+mH2WbL$OzjOjj5U)xrC((A+iaXE3tu8E<7@!aUC z#O*t(_RKW=mL~R*p?JK5mLj;QOk}zX5OR$0^|SslUqStXoU`| zf@E0nx*>tvXD}@^H?x(Cs3^NvFTO;?k5_SYxjI$x=We_7Hw2^Kl$^=Y%#!C`=06ku>tcWkVTbHw`z;JeDE`9;j5V%}vt?!bYEc zX#%}h5 zFO-!wUzb0tra3~#-Htpdgs#8_;|HM1QV{EGw!%p~7h6lZU~w>ra2s2e{|{Y3tHt91 zb(6^_b`4ZOz?PM0JwXKONCVMtu9RnwPMD4$n#7n|#s|Cbs{w;0P$;7XTqhMp2N(V` zS3oUhMA9J${*+|aKOSV9n_fektWaw1(k@Fyw_506;H0V#(7;bH&|ymMwA?gC(GOiF z{A>CV0cx^d+itxkmNknXIaEMsX-Qc`bWGPMv-Gor+W86oGv>*&G$~?&mjF@8=p5q% zCnKeq$3l3#1x=%}fJkp%qiG}lAl4AR0EE*!zibnuSPYL{;HkW(Nv`8;*7f z#&gF!o)be*Q4lj%b=~T@8&+vbv2m(G~oY}5}VdZBy0*= z<&#y8`(q3_)x!v#sHXchmPvFT&Ah-G-sw2f;5w7BNkDE1pv{gA6uF21Hwnhp$hyHZ zqD6w%3Y72LFPC+`tzm`u5e95W*SpPy)2BC>%qUJXnBk}3C1eNUpxZv)4B^~LjD$_=Mn zLUJx4{@_=*9?t+@%$F^Sn{MF=kSzvc&q&G<$&BGiCZ=LF?w)>%h}yuiIdOFE80PS& zzhd-%!+-cHpuHQMyHg>C6wUS^oYj5{0lF??rPwn=9!32S+rzt?s_utV{7BBAJ2%+8m0Zw9CAIwlX5&hUa zFX{k(Ob7Q&kGr%eyP+4s;V&f!0?2=oOsBG3nT$L|_#*z4RSgZWjPSLcsQ+% zrHlN**fY(y82ixy6Va`2CSS&5oJ3(({r6Axm*j3kom;%%V(JrVMwwwnfe0~g&ii3i z=d67_s!s zvQh024O{5_20;5~IAy$M2Cz%dr>p6Mlk+~NaE{H37!fyNk8(2T4|1YOC{%fSB)1|< zEyFx`b1U%KbBP#XoTI}&%p!^!pw?&vr}*!UDCt0q5ndB5(2KH~p)5GE)EwBvzm}r( zHF~yGzCobNk4>S|$W|tXrvx22>Y~JRaD#WKj9g?L6)|8_h<<@aL(~76$_sRB zj2yvC>ty2U3fr6Uy`CePxi;Nlf+3j>a4p^VsZc$R+e~@yCN*fF*_%hhkEK^PJ@&k&vEM%*-z;+C>MN+eRr3vk(q{P1x{QC1QT8c`4 zI55_K{-^avE&B@%*lvH_M{)<+i@C$;zr~y?XJxpf{_&Tei760~JKGO|ch*@evD;94 zL~sPeAbNq13Z(3(sfz8sG0=9GafsQQ6}i&Hdo(j!d?TBvA`Q=WVU8N#`Y_Q5Qqr7X zf63`|S08dNKr^*y+@ZZrw0~Zz;V#X^@cFHnny8!*R-oe>A#US(kmTyr-qllV&X&TO zI{Ag3iZMIk7sGHmS*ifRP+}X(ELrTl+DgCpiaLJUxZ&7H%b%3M&xw1Mu-}2`&2xNh z-{CO>*hw#etLol0Z4>MB{*mrASP(q9!`}-)3t@K}5X+cmDQ;)*q&j6WcDAh8tL6w! zoTpkR{N_k7W5j@rv(*qznXKF%j~*8_k>j^+#*qmpY~{Mv(WF3v5Cv0Nhea(&tGayrxu*wT!Bv9dSJtt#)vNwauLGD_l!S9PB?by$Lvn8};^ zRdCe4Y7wV0ubCFsGS|NWR#v>u#s8?M75JxX+A%NAW=XN22Z54eSrLB$6yuyPAF1>; zRd{24y7kBZOB?-`M>Ct3!J{uT`c;}FYKX=O!KGBcI~iyiK4{E>&Bn)A=_i^a#a9Kt zI`*g1n!pe}cVIWQTT#XY6?LXR1cv&Iy!gX;#mHGpo_;*toxPD;yOV0I_arYR&yLUO za`13&-ONvAi`d>3`6={?M_9AvsX!inN+RVN7Oc_Ei5q1ZEK$M&Otr&EW4a{o#3Q~8 z`HT8(r51xxogz{zDuX`8*=$9va2r18z-K0U|NDc~z^qnTEQVxxeXaYt;Gqc8sCES` zkKzcH9YMyS$dQdU%sh=Q9rJfZneRQ%oHFLa$|AdE=wl7lDn1SBJ!(lt*?l%mydo9n zYnq&UoT%Pb&Ay_=Xzh0AZW}P(KkS=7yQ>T(=_fa)Q$~`JSXz|NluP`>6b+XO!!?nI zC?m5RZPbXc;oy>zYAua>X2^fBjpo3|$3}OKdghi14lkqEQfWf!mi}Y&Jgc^I?CR1j zD)G8NY*bJ+AH^AA-TRLX^ws%WMl~04#b4F??PuQIY7hO<1 z&3&yRb=h&gI(iKKr)2?}SjnTr)p66h4Qt=R?@Zv~^#rQ|ytLt>^4=Gol-KV{2`=o| zwr}Ir9FISja%{;)97$Uw;=vLtgiWb8EYk6>)SMTlE{U>X)7Kc`g|5y?8sgt(t5AuH zzBxn^yL>ZpS>mMBYP-9IAIV`%at7w(V@7(ADe;I{^|jZM-2EO8mU39i`Gm>z*^&>5 z#le9k3%DTNABwGS6&0#x#6l3-(bJ-7So-&y>e5x#ab$VKo>aa0Gr#at@M1svTcCD{ zz99*BDK(v?q(fTz$!DFQe0SG>KS1aWw=5|aN&FJT{0L$hsT}I~fIj-=@`0{2x<<6= z&f=l$NT-BDbDMuYr0CTbcmin`xW$$;Bi~V@ISe<8u*K;;#O}P(Q+bU448bZ>i|K5H z`I!@&$}7*wcJ5Bz{$i}rtsOLG*De?F`_erT2FriU9PX-k!>aikuS>a*5Q2!X%CGr= z(!{)`5~M@PbX})(5tZ^!=AG;+DQFAX_K;k6ma;jLO|0&KtuL>r=uCN0{@<;;2<-&! zwYGeTZpsMi^EhsUa?H_y*~Cpn-GIMFS~(yu^$c}E;5kUr*U)nUkHN@EeKxm`31WH0 z-j(OMM-At=IwPuG^G7biwEM7nmZO$aVhS6%TQBsMm7LW1I@U*ry#IFM2vd%{)u|la zI9{&I6c>aC%aqdfiF|UP4CE;xcfFk(%!}nH*6m(OZ{E6}s22c$V+_b!=;q3~d{rx& zBbd(H%Ia79XJWKxNK%4x4g=jw0Y!~}*)*MIR0(#Z9L2EFYlb_}9zzv> zTIl$awQw-yaGPbY{*$35UM&P>F({EtNs0p11sjRv%H%4|T$hUQy65P|B{znxILCT8 zup^8q9`|{BPp$%lrQpRmq{TOBR-i+deM4qDF1}whIlB6mWX{QJY)U%9v;C_qUtxZL zbNxS-WoJ+jK|pd-T`Ja#tXBo{WZ-qq=YxLtkm^=v($xeGT|*|V>|&C#a9M|Z+i~0> zl-{f$9FoTI_O0tf--B_%F^}r+dPO~9qayVQc9$f@EU8EcQa9Ywwbb3(9wXTemd8!l zZi6hoLLp_lDK@{dwAGsbA{P!~=U#}>RM4V+q$dtF!N8r>JU$b(As^Zn&TMBFgZ`f9$)KmXjw%zg zrl%Rho~vJb#psf}V@#A5wmlcKZ!X7t4SG?&ZYe{H=e2TNsCsT@k(k(k@uCr0h{;Th z5F6V`Et%mwMy6z6nV}jjx!JrD(|tJY+5sC$!bEmfmiUOc;KUxV1mT=Ei#T8*85I@C ze3~NQ-Opm$(lsb@kC;Vodpg1huP?5gp|5&`Eh)h^dp=Eu36l9d0T%ISuJ0KX#-8A& z6HOF(|Bbp3psHat)c>`&^YP0tz7XS$VD9%j*$}-VI~b0U@A$Jd{Vvk81W&&r=QUe> z7{uC8bL8j=7e6S{Y|1DY%PXlHn7k$?;&xoNZHCwz&Ns`Zv$@1|jEb*>zlb7h;M;B7 ziulO~CKrX=56-QT^^8~ev4(L~!yg@D+2Z^~TgE3|UP~vsPG*G;PFOe_W90%|tF{~R zR6jufZln)&boD&lRA}pFH)!H(Bd$o(iR=x!2>#)f{NGX2TQoQ%P=R7>s}4L;Jo{#; zJ8bpD75I+J{DcMb=S;r)<|ADy4A+z2ryLWVb>ouz+g1e>kLL+%Wl)LCp8Aw&M2Unx z`5aj-)TtF(!WqnrOlbXvgZsrt!t~Ne@*zx&Crh3B9lIIHf<)Ddk!_xsv}4H;lR5Z@ z+RR*1Dx0J6C$oA8q|1;M$P)C8`tk1~eE@q-CKe=ip>>U*Jm*&#VUYj)ps-}}v1OEJ zE^M;d?K8vpB1;{fT;E4|l0@R*ua@fLE+;D2diOj}ny!UL>=I!d>`aNI4B@1}@jOTV zs+2WSoqa#Rp+6p!rC&ur=cZ!K>+b#Ta7tQ2^O3)qrnM?&rIGQj{%uS)7B~e1_QxFP zj3g-j-8{5OPFy4G2^$p)yH36MmNZLNp?UjQ(5)qt=P`HY+cSW2HCSj0bdl*sG6Z>= z4t;Z7Ha<@f%8L=aneBYI9C~SC1<++)m@w6|hvvsdeloKvHZ){ooyHwI6&K?A_exEk zKOL)@`WkI^bm1&6;;^=4T7$gJni}V{8Nj z>|h0cCc7pZxc>oEK&!tE1IWzsM_t1kh}m&u0>mRAw#-%yxD@k}`(Yh#h?dbr*jh-vT;XW&Q|j)E5&8pLaiw@D(^*St-K7y1Ux9n)s#^k`QkHO zTxq3vt5GGhhPci!p#ZH<}_|oFv2*R?+qVq&fsnkj}sFM z!3v&6T~`SXq$$9wa2z5I@9MEaKDr?}H(f5=JG&L8DdX5COw?D6;~R5D^JJf5oYa+dMjKqFGn`xhPlc3#yslG$2hlj-kh9SO}>OcOiSLRQu$iP z7MNr~Y|@$_t*g-Rj5Awe+iK(E6U8ks$rv{&VBU0Gt759b2VY_!Su>CP2LsCF-v1IK zU?p>ou)QinabBj}fPm5Gf zHBI&5rVOmck8eyD(TEgG1yXRh8HIm9ggnq8yEYF9U(OJC5HYAHk z&IqopRpV$=c3F$8u7c6I3(1=>zY(&M1xNj2%b=u#oGI&`i zTU0OGB4ds=M(~2DjRScEe(E_Z%m-#O4a1rqOy9RGZbSuqtWR_yk=x7Cw1y z&PbVPB7WRlj%~u==5KTZPM)`BEUpQ5v-YE~`k=TvWPS zu~3|$17LD%pm(}>D^*;^ReH8h-USHPOldc}h%&p1CtvuUC);ZA>^-U|xr-qk z?0CpQHw^n!vU&h=r?RQDgFRn!?m-G6hjJsace+~67nbw2I@@qEb^+oJ=m&VKrqMUu zD6SRQ4glltAPm%5FMqJ^)*Z|v@~&6J{Z4f3*Neehn|4pbAmlwT=0VXOkg+#_5(S~) zL;O)N@njj<*{n2$s2u~aJ?I8^HkrPWi^L=8d81ptM%Uqbr7AZ z=Y&^v=AamTQUW?-Gq~(Orb9%Hj1f_b1qux4EjkrYwY!5q6_IXc|jMhj*|4R%`e2Wb}D|uI2vTbKA29%bJDf7H?FLW?rlAs+^bL$Bf+D4`(NghRi+EH0=k7c-wsB%^cCvn*pjLvxqX=-Qt2TmAsG7Y(h-YM;U_KPRFK}d0B z0==43#K_bw5TJwJz30-!@#Y=!radDgADMG8y3`skP^0V1ge$Uwd+!kr_h@5_WS+p*fH;>~;lpUTfl-YHj=ABiCd9kUnTRrgxU&%ubqZo@gf9M+XzY}^k_YC(go#tQ3SELpZc--9%9FP)8GBlq5_cpf%$`78ZMmIBO#BFq7ByQ4!+Tpbq$D_t;t}Aiuq?4xe*Mx1jXU zjUrWI!9o9*Fic@>uaQycF8BFy7(M8PUCow(!pZXq#fc!nHyPnxf}`x3;)M5Sv2e(@OlyZI$hNV z5^IjrpyAYEuBdz?Qh#Y*fi~gJZhM%I)8rD~oeuAva*?)=o|s(<_bkAjLf|Td@axp; za})t%J6+`k{fK_q&El*=mTKiSEKqUhJmeR7!u`efNDpvPx@ve&v{+q6+e?rCf_}up zs8S^}X@1OK;OtUeLH9=2^6M3+z>Is*=p3)T%U9@5XSU+w#ycEJ6DmcIdtn~=J=)`a z=Q~;b3KmL?IQIu}oO^)Q+h^#e`*^j%GTlu`TX>jYukIQLz2dq6M|9viHHbi{MY>!Z zZ))WJI&k19Q_9s9bC{uo7{qed5Md;8ufjbrgwfeT$Kj?V?kgdT&K$plQQ}Z$MbIAj zx`l7iU!1933e6EmXJJSPgmg)?zck2)ZFXySjd>F`v6RI%%*@eLzl)Ii>QE3T?a=oH zX-rk^a|wKr>TpvlWFdf?(Pzn5&XT(xH{O)hU5OJbOoui$em>ch?DK>@D81G)+j-tB zGu)vjNdX!F#C6#Ddc9g)LYZ)qSK~x_0{-FYfRk)AUKG8gpOUl*HWEHYH!3hM92~(Kqx? zh`XMbg{no@v6E`cuUkd^m0K#;u!}K%sp^XfR5z!%Qc8K{ORpZB;*2^-I2T5ksh01R z`RN@G!Dq_uCHiu_-$PUvfCYuN_&rA0yZCYF?7fO(tVYWX7=cK&z#;LLQ=iY@jR?`IdxH)c;6^{!JXsqAe83I3;?$Q{&2?roRf&|A zSIb;?17#J|c6DE zwCQZA(a4w|36B})8O*a{eht!9Ym%^u31c=qf|uUbj`T%N66;0Wu*6zDW#xe614M2T>!4WCSJY@Ip-L=85ZN#~*4Ch#pe`?B zaC@1OXl!lyMxj`SHo?5RosqQi5-kW|<1bgp3k6Q)oO(@J`ava$vsWFu8-4|spp5$z zH0c3~yyN1Vi&;=XUnZHc9>UfbZ-acjI(-IIJTsEAxhxd{(5u9meCajcTo2;$gE$Bcf$xO*>nMdBVmE^cSC#(o8x z!DUdqZ83SxN*G;4Nv7D9m%HgL6^UNMS?x?(FyA)LT8fB_$r2 z%|O-gSMkXKi2y~#O0&HSQy}M{eI(O1v@6)`X)iMa?Mu98@q%A|v7^L7%=Y}kJQWT!EgyE#iYKFV z54oMnC}j9{klZE7w1Fkwa5F5LwyXrd>s3}Y?ttMw5GycQim3>0-?6fm1(A--r|3Fk z_nh>84{af(+|DW~R-BGTv)mmBphf!K;=r3xWg*EV;l|fIZzm%XITuM=A(bbaO9uBb z-G)FHhPyYP&RGj-2n$_LHc;BPq{5SJY|);^9)~S<7RnGWWu)Em2ndr7Y~r{*c0k#h zBRdHui13nV(@#n);BCq5^fs2Uu~Ts1_FBxM`%$55q9p*yACMh3FxfLRR+_FkZ;RO= z!QG5t_uZr93mW@P=$Vl?BwAt@@dkS60}!>H7I&u_JMe{Vw|3$q3O$Cz;=~-nBVJTX z56S6i_5hUx%^V)s{v?GT@V>J)MIRG)DEH&`KL|tBHsBE8=>BZQTEfc6YdZS{c`i9` z=uTt4AGzCuL~b`Mp|Un!%h@Mz3mJ>u-krb+0f$g&~1kcCo6 zM`m+W_kAeF@oMw9wJ6dBm>kFwOWDI#aN^c$6_>Vfx88zoldtEO@-;FG^7w#16hjrX zOrtPrWBI}pFhnkv*Ba~2glU}ek?|UpJg7=|ax%{r#%QM#SciSAD=-D%H*ElQ$VUam z$hupv=0VwkrW~NntmSXjLL$Yf6+hAs)R7=H1ycghv(P&LFqk0>px3blx0Nz*j5g<> z9kB4^y}aQxkaV~SiH<*o)0qV#E;#`GXpo+9XqF>=KEt%t$5g>N6W|B^cu03ho)J9* zb9AaQyAV=rf`i#KhLpNsSg005icI+HkWQmb7zg|;=-4HMfL@%k<&aO-oKk_WPltSx zsER5V(!gq>s6!*?Eu21m&`*65C&&qOtQ;&WMod+m+r@ID7E;`dfm#7wKohJdNOmQp z?p?yo9bMfCIYwXcQtEX|5+bJ;PNa@V8n^XDi44rbXrB6Hw5Aaxm?p$J-?L5iLWFY%=kqK)4{00;> zi`=K6?NZ()ocDUmR&S>f*9G95KdYs+%C zfY!_8e!&4g)eKp_AMuicx25*Pyq8+-;;#5;1)(ceUT$DPkk_5v>Kk896{s35gF+2N zD#f!8Z$K35x+ZPTc>P>>Zv)sz9OSQb5!V9*FAPplJ#4w(y$~tv28I1zq`G+QrMM2@ z4|oZxr<7qY$+xgP!W!y>Q5yzEIAN{W&43cVI-E+Kq`sm-YXay zlqEHgN}`FRvi8Q0@p!LdJP<K@#%iVEy8?F~}dg}32& z3Mq2wC(`EIph`omkhKgg9g%tN!hBVW`YNpuYpdluW}_n4x!q$FHZH{S&C1(FG8~vN zZsKbUh+8tuMA~2@9WiubLt`}3;eW@Ft_N7`MlVoRAE*`wCW14 zjrDccilUcZv-zc&JT0*rowR&{lf7N^G@Z=i%x4F^#I2dEv6CLtw79|0Gznt?v&odv zCs$x_j&0*2fgh8DNwNjA=G`sxw5_!G9J9-f$rVak+}!J>E!ZsmQ2GqdjHAWNJcP~i z%w*)Zk_nuBve|1d!(p~kxF#VAfFUvq^YfAP4Z$^+osY9za)h0jNiswqLy#>#Edm;Q z{1_}F$(O`6xMU(OKj>Mn71@+_?+})XrkmlR=AjfVXn*vIYgr;msfcLnT^wO0Q!w4< zAyak~uNxNCCXZ+gd*5^TxvZ6*w-dDD*Mzl7zkkYHXP#yEUERg3!T+@Zdny}*H zyVoPvaKR;d4Ljihjd7!PMAt8hQ>an6f|j%2mXt$)cjk<72r{?|Cn+1AQr z=Rq5*FrRhu>&)zHH>1;X4RcKiRn1Yt{)V>f9-EIFCm03G8u6P|AqX?iDq3g2 ztnGqn92I;kRj0NpvVvEgqX`tdzSB6xn7FOFu!P0sw&k@(4QAP7gGqDMVU^XnOY=PB zW_yf0Rd=ez`i7}GG8O1#l_P@4!2AoAz|C7)Lf>-U5%% zc8$wH9=dLg?E_bz%#(vdGg)Hxoy@G&z4UL`B14&SHFUl>BAhC@ww~VGd9lzZR7#LvcPr?SVftRS+*n>! zozo6^NqD|OF64AdOW%HrH3yo*bANVSmTV$W?JYA#2iqpRVRU=;&x`?jwG*BlwLOFc z-N%FNok1zB9PsO(u_8Ef3e{*j0*Xoy$B$CoFb?`?bW%$YWx&ir3eO{|ksfJIli_#I zSXPWq#^ET)4r02fg_w=|tS)9c9kJsc%&e8L(smTGDKK-9RMvyYq-f9BMJ(Exg-G0J zotZJ(X5inp8T{WqLqDxEHayx^JO)G?(e?~6+BPuSHc@RGLqSp?1MnYrt=K76RN6Xc z?1Y_}gYkKoJt_Oj-kPz~nJj3|plH*6j0b_+F|9LK;V*9N$2}!wOOlQTWwEe^ycERc zXuD`03yEk8*(4shjarykiJ_yq(6IJ0)FPBC4ckH?>mmGfI(eP8cZ}ooE;onSPcYa% zVw*{(Ev{dSOGuJt%J`9Gsa1d-Si0iVGm>Q zRQyp7J#es{Z7g>ZQzn|^eU6$Cw-jJ~m(6xFQE0kxG0ES}DOTFT{)jW+?SNVY5z;mj zN0AdpkrM}z1CMbe!jy9c!r?JM&)j-|P`<3~Vn~|8K&hr9v-6lG5E8TSiaXZnB;S%9 zq*pvMn#OLNn`6cl9b%cHhd+oD7k%FMxhV8yc1CUq&6Aj;dAS6?htmp;^$I^V1ZvcN zj$I?a|I(}uU4?VXQw^tz?|b<>uGocD+2I~tO?Z5oY`$iAw|T+yR7(`hgB68HANH6lOvsFyp$Ueg$NS-4#zaN5k5 zhd;Xe!+6;mn%q7aJLL}*{6eMC> zg3LN#4!&sP9(pR0oy(9T`7`86{&vI)SE&Dc<%S9!SoWS%_J z=W8b0j+@w+iEnWl$3mEt+TwPJ6X9IJdgAilx-p_wATqNEl$uX50(v7D>K z{VoybBy=GnqqLK`1@shB_HimCLX@k^4xKh;lR0_tub*3X;O$uQru3O=o*z%*OBkJE zGuGH4w{u}Um$xv8Ti~hE;A;T_UKdZ5Ehs(5)p1o?K6Ak39(zI(KL1xeiWe9(t5*Ne4f-jrcj@)CUs z=h#=eA50M!p5ZRg-qtJKD2OC>1rCH^eTkDl}eW<5M1g2>L_xY%26 z?Psg`QjMPlVbg67g-$&43v|x<;>i^YZbj$NT-xZ8uXXh!H8aZ2ewjE$uU){LJB~b4 zP@~&RPD(r#5e*a!Xp7Fzjfi2OQpTky^olTHTxuRx zgaW-Hzg8@Sg?>Z{ol26eG+Cx@5(_y=fVMJWJfuXhka{TzKRU|}Ku^#n8=i;~2$;PH zbL4)G^Y|3=;MgK`07Wh0Pyp?*fjI0T2TdUQ=Aynv-alter*q82lw8DsPQM+dvoQ;l zdG-sMY<4aQoglH8yap4cZF96YsG8QIWi3wkX6(m|y&juexq5Hxm`f(C8`0$aw6RmM zLhYDK!hFb%0WuTMmf2;RgL5#2NJGbqMKB&K9z*+TKrcg9RR3|5hi!At5{Nyv&gMB7 zxd4-WD{4awF~}7ytr_+lov1I#;}zU50pH{0swH#sp!(22M-j`a^q7F+lq;?Lpzm(E z04cX>2VIo9Z!s*66tMAI6ld5mNjf{YfsEkeIfSX>AoshUR#-%pD zw&%FZw2>q>T}P8_&6n0?)j_IT9kFXhi*2;pr;IlH)J%Kbd7+a`og-LyzjSG=Bt}?dbgdbNJ+iiMp!$rq!Y|YW81xTBIw%hD?2mZ&UfjH4` z68$EHi{rnW$a(YTO^o>}uv|U02GH{wVnjhAgq54uep*(ksbD`OnDnWZ*6JIgm6xZb8%(M*J~ z$*vIOKg9T5-Pfz=_A@d!Wfmi%Wy-jk^Mr2L*OAG%a24V9#Vj0*^q)(@lKo zr;8tifmVS_leCB=MwFR!a-R93VrQc~#Dry$v4$6!%nHITJCU)n89+h3cFI#BUE+yW z!reDq2H#EUKq3;)aVwRWF(grB^nt5_5gXJ#q#c$txy|pPcey9Al4&fFMaX6hDc$lJ zO9so3y{01Qh!2VuhPMoKWPxUS3YMNg;9Y<)Xdbc?AdXk~G0qH#Y}^1VIo#H1kIgoG zVDxcN_hQ%`c7|_}K#t)ti%u(XQ8Jypkp!uxpsr3sT9x;CC{{W)7rBA9FZ<|)7DLI{ zN7}CJ@e$bJra>QeCYi)+wL)LsZ$mT1P1g)4sdtLYtF9kbvaq64%ed1AlgI;v!L^tM zOlm!(evpp-VGh`9O)iof0n&zJ&8S^a%%ELcaDFO<^b)%ur^$2TxTnX%1?dN3M2(^s zi<1*3+i_%GETkth^6^x3Kv%TGV!}hA?oK6J5!gJc0T~rnM(x67s7A%%_zvk^2LvFw z*A*6alhAX-Ftih&xb@~9HWGQO44R6na6;n}*5K?&Crr+E+NGuPUFJ-<*MG0(2uBo> zCAv`%a_hB>-(};mYHpdh*Dh5W^%(iSQb*w)n~vVP_Ip~C3#kv9RQf^ANiv+q{lnCqTS>CtHyd&2eWDhnrsEMubH)N<8my*gUzl4ngc}eTQwnaDlm7V zNT!-aGUY?=xw;g>dP2Gj+IXh2TZ#@T{P(MKRIi=AO5q<@7Cod;*?G;fQaKnk7eRrz zh7(Nm|Ela__WO{yiMhv%V<&%&UAS!{Oe1%@FMOBUI6x?JQ9P5jaCl44^Ifr>L|Vv_ zuULF`_k9_STPybAGuuRmF?QODvyVpSk~S!W?4#srHa*Yj`#Fm3lZ*7AR?(+YX!Ci$ zA0t;CDCz7pq-5X<+Fpf(R+8+DWtPeSb6WGJ}EG#pu`DrVL7PXlhiR_$} zu`|XYm7cJ&*OTdM3V8>S=@>B;fk^2-d|~_N>{zm}!|g-@Wpj|860TOpN{V7+k9+8m z_K*{pNw&M%E@|OqDS#ajFIRCeH>HF?09q^dqgeRPLXC$7}d&?)uPw# zvxlL`ivU_=QXr492h|Ym?pj0&0AJ8(gg?*)hjg@BLU z0YULBPkND_!#G}&Z#)|aTe#Q`NVF#0%Pax|@}{5Ry(XLt7k0(*03&&CAs$qa3hy3< z_6etBE_MS!+X6EhXgXs3sgs@`y8%;R=1Y8A9JFI&0J?(3&oR$M(y{BH&Ktc7lI9{R zS0*`=C9W=}QS(c}_wzUR1h$=knzljX4p68WTgILs0p>SBEY5TKIF`B*rOAU~w*4IQ zznFW|_BL*$0gyA9B$L}$d?k*VL~-IvvLripOvedDQW9-mAt^cb?7VtgWLx5Eip`gY zZO!cG{jk4cf5ra3t-{qnH-JXB=y~>e5{q3|qj3}pg+hU5(5_Wmd{uH;M&KeEM-jvQ zwN}c#S1Xm^M;Yn_j}`nC0}N^y_Ee)`Pp~e34;TOM;mZ7PWa3-{3QHcLsB9MeFrt_7{I3&&@QlW zE4KHPRokZsEEQWMUMTk&f1;ZEbN<-*V+R|NJU@ZO+8(|2J$$ZLaiJ4FQ~vj9Z1fj3 z63T;p0t0o*Si~1tDD8u@yybsAAMns`hJaxTLkIRST4^V%~ ze$-w(f%knLKEeMrsNeAUMU4s(+@vNL^>yr6}nz!$WP zK=K}f{>ITSkeH68&*{{#TWnW}Xfb_Bl8WP1x zE^2jW+{dGgqHe!U;w0u?Ku2xER*+^!q1yR##GqijXD@T|7QU11n6wG|$ObI{cl8GcL znr501@BLbXq=)cPvwRuB5~WkfeXoKKF)2cYW`yLc@91lH26!}Hyf)MyY|~D3OsJhr z^bHD+j{G`KEZ-SLmhiHY;Y65i5tFYh;p$#)peTV{!3r)+tspBGL4rw&N76S>wWZ)x zm={I+CYCUQxf?AcJnyXjHRLbRHB-4eCVWYe$BUkM7n8NJqjW+-sp)GA6j9$L=S>#1x9IgpEN!aqmK^zB`ryqeUeiBqN8F- zfY?A^!cOlrqGPOvg7RTPi;&lmuwi1MP^_oxF^Y*lT`5kdKFQd@m4Ir5#7IS{m$Wow z6-v_{K;P0;0Hu<4HFRSNiQ3FtJ6+OL><G(rKxIWpS|0#L}Wy{W8@LKJpB zSskeuu8vH2T1oOi(cu+Qn(}cen)20QNGleUz%=JGymnJIQv|N%4Mwx264w0{6ZT0k z7->I@qM7M-(SX-BRm+kH{>20;z_!v^8Dq?B{Y__eJZ3; zD*W3xCEm*H4Ywxnhs;Krl7jU#(|$f8Hnp|h_7BkVZH~2#OtIRJqg{8Y3o4a<+$9r@ zY&r@Q);67Quf>u4qy<}5QkAflNay!=NfajcUCJwI6VD)wznACcIJuhAOWT%$mKd9Y z^16)@8{MtEoN6gF$=9671G=$FW-D3$nt2MjvICU}<6eqE*t>40ky6OrvXJwB?^dm3 z2ilF4q#Sc2?esjbAKXX}y|M4suEL6N>xa=UZmYB@mIAcyYi~#jB%2^cYLdbZ6$WGZ zDVc>){urkm_g}8G`Y(A3v?UC7msg8c!l*rmx#{14{ky`B>aVC--3qzwIO)sqkjP5> zz{pZ@K0AchF*`UMS(_)6M5BHRxyPyH$ho}b_HyKxl`TJhwo(hY=i)mvQV0l}k=z!s zQpBX|MIHn*4Sf_>?Suu%11b^l4{eUf<0iEDlqL<(xisU9a*w1~;s4+{vSnc0`3vWgBo&CynvfwjeAMRW^k zn+X2msAIJ3#2tNmRLb|sQe?}E64894p?~G)2%g?RI(TDI&#Q~ePzFZor|0)!q9vMo5od% zfi+&U3Ly)Al|E$Ig;i_Dcuoe>ooY$R(QRwP3kM zWcZ_Q%bR#d(?XYDE>`HWdH8W5cUI=1XKCdxKp+-yiDmbSGR!e7PabmtS)xZS@63iU@3lLX*R5WvhetW96`mnrXp z?f`hXmkVIj6L>vNLKjaMEKGxE`Av>DoJr-WD?-a;UA5yQl^PPrh8!aBl3;FEJ@a1q zVAH*l$6$meQvEPoa4R}eTs9Z8&V(IWEp8ky+iikCYMifBtQ;2~>E!g5r_zvo#u*ud zrGe63?ZVG`_ylu2Hr|6 zf41EF1y#qNp*cNW>i9k4kP8=?JmNyK&DG;MvRbO14gr8>uZ{+@ zP_I9B;Mkc#3!sw1O+!pu(%0=o8Te%@MuKH6F6^l5R zCj%|zF(LZFN`!k0gv?$x7)gZcx{ZoXG<>GA3fu^SArW}ZMuj7(Gasu_#l$dYT1r`Jy?o|Nxg)_xkwFeycXNGbh`3^8@WhAg z`Z5qo=O>f_7pKPH+=SjDw0A-Y>)v4G)JZX1HhF9`f>C2W946Erl2F6ITDI13KJkXr z-9yUDQtPHYKHN@s3slhQlwNZ)jzOCGRf z|0!9K5i&7iZ`eq~JRQkz-x=_3w`?QZr8&|!gGtw)QV*21w9jC@r&}OsNa=2|uGi?c zUkHV?N4??1rQ7JCapFs>h1~v0W!R8x(cFJG@8Ab!*js)-;ahaWNwcekrXSx8zvIAw zd!95B0IR#0jw7B3wU8^M6M;W55}-l$9G6ou%OOf;`Y%h-hZgv$6Wvka0IOEHvF3ZMnpJQ07J9Am?_Z)cWcRt4R~$czmA z2N|Whaq>jb>e$c6IA7mYDGqfMsUq9C`ZJ(e?)5_M=v}`_9EYq=)(W}7yMA3~Hs7aT zHhkBwl1_Tb+o30WTOs#!L6V?}b%Q3GFtruewNhi}6WBpHl4(e1sA`$`65BkpYT3dq zs)8GXx;@6<*0nQRZV+2C+#QDVOMBr`b@QF8%tCI@&YPSmX-VH&A`1GyPy7N~f+eid z|9Yoy&{av=*%=H#;|8RN++N*1hy~=X*m^l+8!c$_EN{6RY!dcvI$to`2B2> zOv=i{s5aAe8*iB3568k2N7Ck~P19tA4vuNm;a_r;r9Hv3wn~Ro(M`zOs!5D_T~T~5W3_6=AjbAye?HIfdWY%ZVz zUbc{iXE;N}@+b|x0>i%dI5RgLy=h8|@4Jif@RDzbHTfyME#75-7NkadSTMZo=F^m=$tdSe$EGjf2#9?Si zbKKHuO8T{w^y?|<@1~@`SI9Nf(6im7=4ksFITTZU+3@{-SkYJ^ixmhpR$rt*2dycK zlkQA#7=?=Yv*JiCl0WSQaX@Y6{t8b<42@!Ru__N978Ct! zFgv9F;HkyOZeV0T=`Ln4vCQhSfY8HpHw8I6G_-2*Yn!=50C*uiFV7TgvE|Lo&wOu! z8wjD0wbVk=l{%J!>_IwaDJR)_8qO>=%$UN;sij~pd4h3iXT)xrf{AYG@s847oHX%y zPZlQAah%3wr5iUP*Uu@q`3It%0bG^;5jv3~t11xs9y-*o3rrGrU75B1HRl$@#G zwVL@|tCmfcI0udvJ}Zi)?$4R{Q)ywsr_t!53>znwWi`=sGE#L{5>q@)Rac5eNikVS zsw0K16V(x!Y=O9?QB&rc-4 zu#~1N@Lx|N+L2w|gQbU^>G}8j>Dj5BQOL$f2j#EXnE4LiRyOu{&(BZ}f;py@x1F9{ zP2=hJ$)yUG5HO3Rurmnv0drpSZQjZvq-N?P(c}uQjEH7&2fEosPg&#hSy( zY$w zucx*{@I5;u4DP67;uz8(a)p5r!V1rIk}sq~TLf-`#QM4X3)1ifOqP0|EjZDJACY-D;;xpsd(i`Gj z5+&7w;czex#;UARCRue=$h|B=4CZ7K8&k)>WZ|WLltLC(zH$3F3$x_qC}!c8J5|Q= za~1Jx7G~acl5|;&U1T9@W#S_zmzN?yc1CGu!4lai=|Xm~h1|1D%(QE13&nfgqZ0@& z<7@tkuRst#pOso&C`X1Q&Au$i&UZind_kKze*4;m-WzRx`h^ z-r{FG!R5$rNGj&Y%`Xxy`!7Ab3PJyd(#hXo2nNukKE+!N@RG6c^;%0J;UYGT1wg0A zN_Js2|G?`VQ!x)Si!m763B2m8^U^B8emk4Urvg*A3Cqu(_x}U$F~mrwe2d`@y=RLS z&HXIRlM7aF+1oq0Kzl9wCw~DQ0QT2xocJ|`T=m28KEw>7OdYKMPUO>G#{I;G zD9;RUQM=sMVx$_JjssTumDdCR%?b-H!utjcE-52Dy*_Q#nWr<~r?1iKS$Y9WRdWLi z%OOBdT+k5fLUsv;UTkI-hj%sQC@(;iVN*ALAx-Gy{WTQ>f2-Km_(wYS*!74SP&g!> zoK!g0EUTE`PbkaUKpF}1jgF!m>jtC3NlF&p&_(<>6|W4k*i_E^w4<*sM$Fn`#H<^P z-gIIXA!I#m=ZXp;0nDolk+QZBDeGx9gH{T=3R6B5!Oj%FJK<{vTXhk_4VF_X(T2TQ zCmE5cgAVLp(u+gQl78+8SvQB?!PF2~lFXjA7TH(RYrTYnES)Zuug^{We(lw}f1FrG zXgn}Qw6z$KhI1n(K`E6nEwyfbeX{3p(2CP_$Xl3x9G&blKEppwkYm`wWHC7&Gkw{%5 zwv~AjZy`6!&ip8&T>@(3|N6^GUQ2>#=b#u!ZnNygc${$<@rXyF0W%GwsB^-3R=0~` zJ^tw;WO1vdbOK?*{jqTZA>09fVi{`-kg>i18Fv>TgC?TC) zZxyqi!uetsWC(3c5L3wgZw4-Ev6{TF0r#KE3p`@Pv5I^Cu3ni6xu{(()$a zaARi}+v~h;=A<9TGyea6LOIq(N|KO*xkI0nvfsFS|)+C z5gufe=QJy5IoZax7)(zWB8REz*5ZV*9fv0;lBjmo=80r!`s=SJ5qPrltS`De>(^8GptLo^jRx7I0qzKd zSws5L%9MfBIDEcH;i~=hWMQJSwo-FM@;mtS!pd+_SIi{skGVhhd4%6@Clg@}R1BX4KiS3DX2{qBS_GbMBVJvc%A{UX(0C%cg5h&zR&_4eoD zg`Tv&e#u^6irKq$av{V_&1SJ^jpzD;B(W+kXBQ{w>W7)7oPc-j1dY5dHS+e!g`Bi) z*0pVuxn}HJtybO#PONml2hU$qk0h>~j8~;6vpTJCxrQbF=Wtc=I2)(9GBG2+*h;Hp z<1fvpv*0Ma6Y=Q+#E3GLPA<%lb|6^@%lYwhCT^#}sNrM!O(}mNyQGsauNltcj(n2e znS=^sLN)d5G#c?ntR?HXU21~Ff25ZvC5}!I{(qzw9_Hd|uO&!-o?bfH7~Al@QG)2T z)S?Zxyp>1E!2LKiyIfU<-fHC+m0{Q-MCR_qd--zE!~Q)@@ZuQAu~)~zJbLwy#YpM| zy;uIMOV(7I3lV8h>IOO0-qa*!BZU}~jGOK<3_${VVkovD79yC2w$WS5p5jJzSN0w^$CQrvK6Hkd0~+E_CF>ju`!==ER{jE4C(5D4)kIeXMWvAq{h`~YlCJ(Y2m*#9q^JVdsm#YIU-M+gVA7m7_LnpyKzgu zLI1o8=hzeRuQ``q%Wqh~TDh^WQQluu^X~eSa6{#q6T4x?jM34L!U|nWL%+5};(_j@ zk#&2dV^8(9niO)=Uj*>CiE+<}*#%Xk1?aJ9WR zYSHdk$va@A4}Fzm*~-zK_z`-o;V>Qhe(!K)HUs72znyi14grwM;qInmsJBTU%fMyY zjk9y@%w}LUfW5%8+H;^Sm)N>bvVjda+HM2l_v^9l6ALC>0G-NGlWZ;KgOi=*St3|0aM2KSqTh|R%d zI^#kb8HFg=;_x7t3}%N%hM}HTp1@kJW5_Pkp3p9{TyhJJ>DJI>sfH!EV3e}^8-stf z#F1xOrPZwL@m!|YT}9c{kmW6f+_yS5atfVXl2G@?`kPY~60Edjs%6tHVhWX^{uCPd z#wi$VFvW*UGmt5_?+54s_gI24_I!L?~PQo;NTf( zMB@!%jA(Sw8GDndPfDmCNjl0x?*DWpm0Nt`zg&6dd#~F3R+n(uWzI8=-u>y!8_@$9 zG9m`XnGTe1#fXA?8zqoSkdc!$hPQxL#zN)esj1LVZZ;@rC`k1%q zm$X8{y1bv3mDlN`w2VsK7SnRa>-bJe5ry0pBS*^{Omg2?(YE;v@sDoYcx-XR8o zxerM54YeNimb9MMT9ha;o6gLGpgTD7nQfq5ToA*r*z4im{{8?R0Q@|jh!@e|V2#Qh zt?h+NHAMbrlt~1>Se!tyfy^u5&vzu-5VV+0a_C;Zmqn<-qn*SC4T?3?&C07qZ%hXL z1Jl_c2dRclr6f+#Huy!olS#0AmlU7y_(U(UekzgmTND&gK)p?9cpOc;%!PY6-r{B8r?_U|4Z(p}t7zhU=lSh?ATXYX*D6EY@K3 zQih3#5j6b$@{?t=%7xW($kK&fb;tbZCdQEdBTlGFziDKuj>hv@*_TsxnFk%1`<2(> z4fa?89HeaEZMaIHS7&KuR9t0ZcN`6_`sw2G=m9u4Jsd>l2 zd{!O39D))RSGs6`mIG_)1=0ThWHG{aS63G&%b3%}D9f-2HPRE^$}YeXCyUlni%9$0 z?Na2W+a-goZ4qJEnlW;OJ4q{!eBx#>vlU$TCI^ENWutd(^CNNwM3Oz3Ng!>5?qY>L zq4&|QrIu>5mrOjWo?kNa`=dF3%Ofil$-);ZcmydrvFOSj#vw&T{OT$KZ+BLijmPKQ z*ljjX-C2~7`upyD>J{MTIllqR2EX6wVNL|h{&qMR_6=JBMtUB0w&KbKdKwC9^H*pY z_8fuwqMz$6@3R!kPgR3~C>w5d>ewJ`OFdO=!06#ku<8xRSzoz1oo|C3J2X<;({C*Mmo19_4*dWN(IvtGO(0c+*he(q6uv&F!%h{qNk!BP<5Rfz>q!dlX-OV7* z=EF?-2;0yU3W$VHSQZp`g)i=3Z+N{|2NS#$m~xnBw_Sf2^aitIjKhAV9GQz?l$oiM zQl6LwY(k%;6l#;Tl1`S*?9?(yhMjpf#JZO&R6HiRJ|sqF1Wi_>-1l6#w>C1dZI_~K zzqqhr#A&>sKRdE!D(REh2R?9O+t(D-nR6{u?a*N!Wi7a{@)drR`LPQ#tW2keN8WH4 zyvbC>RQXg#eY_zzz&N3G7q;lTmK>ODOR$iNPTaR0D8=BhDg;5U7`fLR7|>VqqXQj@ zJ-^{bNJ{JS@+TX%nLwgbJP;{4*4)a?r?6!QTHcw_!nl=!-mML#-fr7CrVOK(gM&Fc zrWe)I63%t%GsxVW1jm70=(E&9!x_~o_>a_r!D6(FY@`-xm$#Z$UhYb<@J^t@f7U-)}g0U}!A*US>kfzK}N^1-~MZJz{Dd>ALK+!DluQ3lst zMcCG|u@+0xNowmPO`(RWOzQNSYAfV^u(FVKAF5OrvNbodbvLrRNo_&N%6NlcQuR_& zbUxDDHFq4SWv6?RK}9+0$J+1)H|FMuxoDz^{T?_m^fmF&fuHCw1$$u?g zxZ=9_{e<#umY17^gy0M}A>3&C?<{iEM1VS!bdux0-su}`rr3$(hdpZl-Mm2QRf7e; zgC@~b7FxXfZJhX3wpEC$40eWNxDY`}pU%&AR2K2JjA9x=pXBBZ*AV|)fEWcw1HO10 z?Jrt9$B_x>1Vh919nAaq-|y-jC!6k^-ay2^d{^Ry`F8>xlIlGo6~=$!Rjm1Y@9I^u zMdH1ymxQy(p9^?JcxXBV+72gWlFa)6NJf>zTB zUznt|j5ePtiOgTMlgp9L12z{VO>9>$R^Zw~h8|TGkpZ}np%<4d`e0{a(!~I@?F*(9 zTFCiXMMZ9vHR7q}9KY+=#Lixi{-bX!nKkwCl?sX?H6B4w_{!U(yeLa{YI-)H9`7YiODv{zz#oNwmIf@`w+SUT35PRy$Nd-w-AXA~Z4_kJA zyj+MN16J}-c<=H(^cDWQd_~wXD~otd#@-MW!Mo!&!~&@7F7Kx=HV7!V2nd2#^KloCSg6bo9hh6*>`><7t?*lBURL#w zGYg=h)W2llF9)N!Dd6`F&a|_Y;(Qj+;PHfv{U-X-&^sFQ<9Eh`uO@E#P~=|_-fM6x zg%rciB%{W3o6r-EyaN(yvDAF+4LgTkA7hViy7L+Q0-P9H3QzKE%x5zZQcH3@s~AhD zr%e*Q9V?E=AW8?cWVEn};yc5-PrQ>-m?22h!of0Wr)6Vf;z3Hba2Nc(l@mtaXogAU z@FXfr5WnG>uLVhDTub^y17kwxo=>I$-(ttYJ#Z$bJ2hdvV!@fSeq8ouUdNw>%-3C+ zUEZ@f7?J`?52fLNoF4wkk=dZ986{?(^(Qoxb;%H&T5{zl$Ds{EesdKfKgeUbd@=!S z&MKWu3Z1y_rxYS0H}1JIsG$N+7a`DcNY5ldV&*=8LPmab zWN$LF8XkNrg%HCjEdw=K+}=&W5YClrHm;@I~=~ghFkLA!Y(w`!jWP?gCiaM;c!YZkSX~nFj6=PT6S{CkhyPLp>iYac(-*Dh^ z>BcH8GyCp1Gw_eFEiLMpr)%I1x!EN$)30XaTg%9|Ztu57z9^tG_?K^=S&X9Em}S}8 z5HvWV?eBBUenF-fIV zlB6b=h5VXINR0h<8g{$U5F=;iVrrgs`;s@tqof^JPs7Q(r>#e~{b?|t^!&(@*H-V` z;ie>jP*ao^Pr^PMY?2AB^Rw?9dXEstIo3`lq-lTUZ<=SYD zO2c3pi|*Y_C*zN~KRL!bsiJafY2-u!B2fX4I9Q;xHNzH0CTVuhMxrdSUMrqRN}@rY zC?eb?x|KqV-O4alT#|WWW?VBQr$}Vfc6PqIzmrj z$eS=L#X0HCMViu=)5!@TL)pEzy#OiHp4nW0Bs~0CU5FfV_3!O8q6|0Iaq_X(OIT5M z-VDaRvQ2a+iMs8-1meSRY^UT{OU<#Kn&WP2j(e#&eooDCKQ+gL1eFozXpZ=^7<9|2 zB-qs~PPdXBLzYe|EZLxn$iR`P6Op1ABsJgyWUT3A{FX+BPQb730(9&*oZ0R3vP#Pq zz3vRmV|vS(;mLj)@hriAI)*j-N}p#|RX6bM-@tdr!VQQN)N6KMK!iFpDQ-A3Y5fNG z$<=lA^dQCvfaNnDddJN%y8?41nME~I9Ny9JUJnjPkWM}5>$5OLS(+n~{$Fz^)O{D` z@Qv2f{87fPx35)!8oE&KcZu}cMvKtk54=4{tM((bbQ7~192^Wy{$m@5HCDidG2A2D zPAPyq6epA54fo(vj7y);NaD$7V3Q!9SPF%d(+TMY0cZra zjt!+Or;?Jk1;ZtE$DfImvGlOf{cMtKgJTHmRg6-i-ZSj#&a`VOXxCHF-c3P!PrD_j zrzOu+ry8~Zllj&%@~vm&yQ@tWn#|W6wI=@9oA`X&G*qT{GssI(dOE9%%lHbee5FIb z_sZ|%aXsPJ_{ou3YZXY8<$*U04xng*A=zPB_;Xv)m@i;~2I@!|IHB2i8){vzbmh9&$rlEhWoc zQ>g)!z5sVq7hrAOSO8p7tfrNgwxW0MFRf%(D73rPZWg8rIAq@=ol`9U6MuHwYETcS_gn#8ctjIr6lt$_31a$${>!tP2a<7 zL#Xpr^~2T|DKNt~#>8o3(;Q?Ny2PE7!ff-d;9zs)9Y@MdSTY}xSnth54s2$A%_62e z9)cOu$1STt@0Hb!W|3nlDJ*2s=;-*EFu<4Yvb$~M2xfzqXqSii+4UjHMsi_^lv6NO zdwyx+dq*8$c{Au8R^CEE`-VsaqZF|+3fUi}VCT`JA@|QIxa)p@;B{ulxGcKq&S#m$ z;>6gA*V45|XfGHG#nytMgJLxe@tSr++CXg8@4q^WK>@6vh3sW#cAG}|-B}7>LaS4O z_GF1(f~}U{42EbQgYe#*9U{DuM9k8USr>p&TK>$G^G}X^7Ed3w)5xTz^r&Xj zry%PE!(ie-*B`*7XdVqAoe0MLK8bYDH}}wx2*xw%p+6>34%seLBH@%oKsbE!l&b$5 zPIUC6^9i(uv3vm9=5WxPuJGzx;mcH^hpO&;5wGeJeHu(?njvi{fTJkGxSIKIXDiW* z3#pIapB)B$!xT3|Qj*y}bPIL`%+T4$QDs5i3c%JnHjG<|6cvNCZ?fb-Zctf-3X?X$ zw+^66C<8V4Z(A5fSV`SO|0rzIWg|K0?@=GD(UC8gXTwY{U;K;2>>W$7>1-{v48yWR z<{`1!+zw_x`gGTZTrI5H!}n8(!v{8<-A==(4Kcr;l%%@j&y1TW$*i_6qdGi9-I~7% z^zD2lw6L%uwF!#MnwOR0v(Hd&sOxfMruLY8BoY;rk2+n$+y;XX8KSJVaT8W13 zQ6tNf4Sj7Ju5z?WGT3Y?2hqwbL_`^W%c*z`HeQ5Y4D@jL-AcjcR0U+N33bqqZX8Zc z%W8Jh!<(6pokpqL6B5Wf^L<5W+;Jk8U!ZL=p0;LxD(qiUMXQFO0~381NrM(lXb9X& zA;e%KacWK)-c21YAs%L9++ABus29$Q#cCJqr;tgr!<}4BIwQj^=BB0&CPT z{51pDS|+Y_gMznnNzKi>OE}hlOD|826kAIzz%Z^A9#u6ZjSCG6do_s+fMJQl(=g2@ z3K42G!KY~v)ExUGtb>=s;7xcEA+;1HfvP0@GOU@66H76;cpYSrYB6lESl9`h#>x9A zr5trr?O|qagEeU8O;E9dfor12?$qHU$p=LB(q@It+rTKS2-4(2!@u&Z7hJ{8Htt!tmtp@HI>I{aaQkonT^0US$_h_FsDQ z;f(Va)ADaaa|M$@&l}SGqXvJcO+<45LZYxHvr?^}62lRkCRi zm6SYZNgRCCr)617&$6DL<*xSlt(8Rs6Kj%RQp(~wVQL7}v#?f2qc9QGN;>9*f{O6E z`HUn;9r`nIB*n0fin4}=E?<7#bYf#u@NE}j60x`uyiKqk6>`5He#i?aF6FQUTZhtJ zhmOz6%WZj*T=XS5WcEu|*#>`4l$F0y+D_fh!dHCV?=jzU7`~WEQVF-*Xqv#j~=`E4OPaQr?6)l~dyo z;Z3-fj$wE8zN2ml$DwT!rF|Q^6gLWN_A*P1y9o;#UmTS!&Ss#t6GHrq0_^l8#)L7^ zyUPt>5;8ptMlv`_IVIVc=niJ+MYwJwWQu)fHW*IrrsC#+g>p}o4_tF%p()xq&l4ve zY~C%fm&VWx0PP%4(NWIj@djB*C(Axsf ze)~9zWMN!dO-H_#j(pv&;iBYRHS=>qhD{*@cYNcU1FoQPCyh*K_B+%|*i}K?$jSUVa+w@50?8-*qD5e!avZ#tS z2~w7!?N0~)qKWWAkLgW!0m)S^ox0xwTluN)!xR&lk!Cj+!u(WAt9RT?V**>P+b_bKRNpt~2F5 zXUd!Z&7{?|Om+vD%tC(3m28M$jJZi#YM_eosF{TY>JXt_ZvqtY6H3jL;sh+} zQRe}_-7Et6EN7hWR?0E!2fUc{~s)+5`(Xf!assefB(r|DvqGx!&)DaYN->6_%a?qt> zhaC<2!HO4gedje~e!r0WDgsA;O^?6(qKZU|r3HreOzwjMLuzHIJDHDqQ1eASJFB|O zam+Ihw6*GSCAcGUEN7+VO{Z^yNnd|v=dPBg0~Ijz(X*uIx}oLL(?*(soTFMHn=x3G z^7>f9<98LI*MnXe^%!Aj;7DhR!lOh>mGPh#iD|iNXOSm2ErHnd`p!;Aj)jD>=FnCv zMf%X5k7k1-zw#Cx9ps%~Md)VG-}dJ-p9s04B3ZIFsLRO!69S)6(KS5uepZD+KZ62a zQh`u|lc`T;B&iEUQSy2^iVKxUkGic_V4_$d+nhwZqQX#*DVQY$)0K@mX5>MJbvFi> zVtW3NsENn2NoHn}vgP67PI2b{v78rGV&4Fz>w6*g?z( z(k_{3ghEVw*{v1eBzg3U4*k8`oe-arup&4Iy1t+!yqBYH&%{V$+spR&9Zb=g|nGc z8tK!B8@axe=)0sD#O=BI99VLkMn_Yhx^q^Hk2j&yD zw7(svDEs^K15g)Z?3jJ|c&oOyC^?KMjP&e>q(8(-=`O9h3cP6|t9z4!!AK>(XdsSF zm!#Bet6Wok(et{o0nOJc@;XW&x)WdAQj1f>FxdB4_VutmRulPP@r;{9x?|8L7Wr;5 zNqr@kk&dWnkV3(cPdgf}+L>bthi%7&)6kbXd`z*+x**p7D3XV*seR>Z3u#PGST4M0 zy0`7jAmRgMAkm7^DqKw~Q{I6}V!`Vw(HK+9QDhk(is|K`Sx6H`P#dpuA`#@cEsA-R zUQ8RSk#eu4=8g@Q1RmX$pGkZ?Wc{u)2k+)szG&a%j#$Dm^e33@441CsfMpK)(a10y zA9|7__pXtU|5_5ibSbP&Trq90p&={Q9}~%#>%v$EWnW(h#sa8hH%(+TGDao7ZX#}Z zvqQ%wAXc7KQAR@5ArhOJ2cz+P#(XDL{7qdZLNSEu?v20yYA{==4~~3Xh>}G?_$A@# zO&)s?(VMqzq-T+1=EowAad9v4_AJzWHd+n_ZLC>w=>aOGe@7y2th&SVh7^61qI950`(8b#? z#IP*7_fixQo)pMyQSzyPSdB%mOZX;6pk4+Q>lEPy(3+x!apSQ%p~3V^^iSKL&WE$9 z=Bp`Qc7P}dvVk1x|F85^)EgZeVRC$^$ufzPYQAMVm<;}fu@^)6y4IKwB`khPi>2Gf zsE|-G$ZO3gmAsPCgbqeN=!%V2Q&b#*qRsO?|kyF!FZ+a4Mt&J`mdtsozaT{-$ec1h$KJg;mk`WB7%~gjC4w6UUsjT61 zpVKFpNGbM*THhPK9=rncbrj6F1joQNFa zWJ12x;OqX;J|pnS92F<&3=T#lbv2HeIJ$c{2~cx>SMv|N-ti{6&v!f-jCht*sTn_} zH01Z0c$7Vu9x)iL%1d#?9({nZYC`R?0kua{T<#svU54C>GsmHi*=1NboSqZzLk}MUn(WT|eOR43(~_{M>ZtF(h1M~1@p`#tp$WqC6EI1YLX=10(1 z;#7Tl`~!NT5!dqi7|O4$k|XLFe>RvM)-YghIwM~QGfd+B4=WuXO%D0F>`!}>0X>j$Nx>*DxvHQV!EBRkTZJ2+ zmlXoF1YZhVwJEVkVEI+&1=u8|h1&bsWI*haQv%E(SEY4#aeq3)ZB;r4RVEXfqgx`t z1v}9}@V4g54g9QW{JSVEOhOZ~6-eb=l5x0NK{J|%HH9b^Wgu!k?hxSLCNN|pSbQ4= z;~WS*HUcTYc#MFETjR$VRI^8eo``Rvge5TRqzbqY#n%F_PaTR8gr-+qQ)q$__8gYf z)$hlbiU^*ZqQG|fzZ3UQ?d}0zZM^ki@_;w|dGZIO2|9^;+ORfoaR$}nlZ;t&*v{mGq z3=g(_twJNwWLM-m^?UOP?r-S}!~-8M#$a@=P<2=&3{nw9&f}^uu&jNruMRs3s|7H} zDw;!rtAmZ0=iK=gf_Fw!t|oNVCU=+J05i_ZEu~%07)i=OkBm&z6yNDdDnlPBsJ|_* zr)m4R^p9yh9R)w^a79l?4_m0cVB)`AdFFespf|w`4|9gX9K#lJf7sCBZk;(p{SuEx zp`jp;F(a0fNQW$;kMST%T4CmB|Hrt4=p;^=`7WtEI7(MoDBw356seEN98E>V#L(c? zj-(+VQ}n$Anw##$Cdv8OO?4F&82gz2c50Gw3JjNY%E87v?NCe+Hol<`X-cLjymj0Og zbDu<{Jr;9{NetHS&SZd;%XZ3GWNq6{&xc@KRp16{3*%_03?3sktMHMOT2RKb=MK#wRn}#so~{9+=TQhy*^%2LoUd zeqPa8@|Zco#XLn;agQ;HqMHa~p7F^u`CovLc1OL)WccG+@ zh5n840f`NZ+}!YrV5iZ~A`2&+&CYAVsvKM<`8?iGuE=d~dI(>@7YZ`05Cf9%5gAC< z30Q`68lYMN4kgvPtwZRB53%S+-Y|Zl2-BIkza68F^bQ5 zsRIKW_m}XZGamk?_=f(HSclo!03I8xxsj;w-x|S?A2EixgTba(&A8Gx9p=o=8+@zE547 zSV|tR`dF-tT%_unjY(G;ZzsLT*3diNr)Cevv=f=7`E(W>g;g22h;@ya6b%)NBV|W9 zUB4sU3+d6VM6os_W!Hs0Z8Bw$+c~M+SaxIU09A~syLK{z9d#qdWj3LfEVQBZWTOfV zr!S*a^nN1Q3?PQDFLoRF%&E-lVkT7t3aC2Kh12d0obaz|QD_b^qv!wr%m07o>|9S@ zmRQ|pR%rN=M`>T8^uYVB+{*6JV?1w=hB4BUu2}6}#d?StkN}{4A<|9cUNDQGQa67l zP4aW}t&VMQFPTqQi5DVlqWWYDjvnElp4D?PIJ#Nnp$dk%Qu)MCKcfPO;e96pOQ_(- z7#kAd(0$Um2oY5NHra66rH76p)rO8kZbDzs!wb28>Jhef zPvdBnYYeKjH=p1csFjUj(0c_!iRqzeZWEDkWJamb9wIwASM7Lpd95LM)TME`Q9E5B zg&7H`BQE?K2I^pZ+#Hdu+|Y}6)16kGffeHUXhsrE;^|o9hgIJCy?LalS8b%yZd8X~55t`; z0j_&J)IfpPX91j{j{G}9Neh0&f8i`ew!rgj{?A7N4|AVT0FR&{58|qW+{YAvvj?Zd z-~Y~iMjx0MD5m^Kg?+BT{tcgwhF6}is9u{e+o&X@h zIp;V|)9Y>wxC^`NNXm!wZ8v&;2e>2o(O`Up)3hTwzc~DsD>=D7{7wpL zT94P9IB?EJy0=He@q9R3dA*A1Mp_u2K(<;?72EKVD%J_=_>+M*9Q+Ffea7#pprd7- zKmOy$d)on$Uw`P|IvmWV_!kT5PZ^{Qh6?=r;fH_bKCKtKrR}{|v0Z6&b6>(!rClx7 z_Noo|(Q4L;-DW%Y0f5`pKXa$+#Xqa{o%&v@*{tn#sxK#hqF=_q7JM)2LPJ)o!Jn`-os`t?gp&JpL>dOWT$5-bS@sFSe-g3k1GhY{J@1%3iI~*y?WQK0`#c)ND|?&&gxGxK*LgXUKE6Qt#~5E5*)E8(xQHho^G2xVN#> z?KT@7T0R8?pAF@#x1i9u>xgaO$5tBUYGZ3}vt8V(LoJ1$)UI^kJ3I9Ktv1w|^!`@6 zxdjBBy<%glR>_@GVeJwvQK!^y)@pm3AQLK@R79uzbnn@ArCkB}f9zDT@Mj6U((TqN zd*z*Wv0H66Xz@GMas{iX(Wul2=WeClLF{LBMYDg!D`IcEQr+5yf_9;)_d46v%`TLe zBeD2<^`TH0K3iRUZ-BH)!=oc9(Ni~8_j18=t%ID*dDEBrz<`ig-T#r zefainv0UsH_nuasclNr^TNM=sy<}sj4wVywK|OYJm-O&zrwhGPi`v_1SD`@^90)oa zg`kLYQ6OQCknVK1q4h2*KA(uN)&gW*RdBBNaGl&}wO0C7HwY1NAG zw*oz=+9Gecq@}=NlDlF=kHF7k?sh=h~r`mv9l}0;CN;^!o45M5I z0TXNF}4-##TfyEra^ugqzozTAw>m>s*j3{aG9IMYKhpSBh<^17Oc&`bjDV zf!3NJF+v$DFoAX}e|B-Sz%z^+I;=?b?-82KDhzQLFS{_V+n|=a+Z`%luih+IH>&_7 zEFS=DyIIa%t%J%US`_pHXqD|fru%3+bfE2`1g&^ny5p+AWsdV{9wQ~p=*SI%_d6U>pbtktij|^Orr^v5kBrTIxVO^XoxbX z{Sf}V(#d^Hp1a$XI@V>g(ZuhlQ$J_Sml3&u*xo)5nqv?e^yFj?%ZfMi{({ic; zP#yx2=i%Jn5z@esLZr5eFmNdlH4iNy(Lq9qd?7%zmqX)o04g~8)UNDSn>#pP!xLB( zJJ4DiuBun~_dwqvux=Y03i?a~#sd)uoq%ATRiPqD zt#&Gvr!Y~1_9GAN-71VIP`r&w3C*C3G8px}z<;fz@J{1h@b z-l)v4>fYPDhs)-C&%=utX2*FS779MBK%jrd_8OqG#bC?J%P`f(!K?~nh~jv#wra($ z8?hvR2*sX~v7{Ehj6%qp^x$=vR3l*0WS3+p)Y&Y6wKRRjG0($f40eDuqm$hKI*`qkA(#!vmK9Ch8LrMx#g3u0kE(#`nN@2%rd939-=(vJu)E~`xGMrDO z%e;|KJc#}uyXzZfYrMN$YM3v{kyUbKoqVwJBLtHjIn++6hX}K23#=-x);>`lvXgP>ePy!Mu48Opaj^kKuy}@yrVn%{yNYNQPaoUs%uzSY15X zDD9zV)o0P%GH@Fd+%YJ+eKAaAY_-Rx!cXPM7%+{bCvF-s5IY%x{agW5OP$Co7~;u> z)H(>?^JoSMdWik&2$*N*pobDKMzF+cA(-z&4685?lbP-Nvq7(O7))lpInl}yBGKHk zXc-5s9LMnX|1yRd^gzj+jf4BBup&UEQ{-c45(X<3K3 zk>N!Sw138bQKoPCqo|2PANR+?>$h{?#Yx1uadrZq*0@45fI5_fT+c_l_AKMSzW=Ye~6IGE;HgyxUXm2n=-?-TnnKViiJ zl_APKdlTeAK_3DS*?pZp%)_7#vqh^aKMJq(hTdSp`*9SzMG}?lhs)gWVkBbP5Nk*I z>9Jm(27OOZkJ3n~}?Ewp5wW*PaGP+(Jxg3;}N`I8{ulW(i5 z_H(!Db5s!UUT7%PSK^c?v^=OAG(Ga;p*O=6jJf-ix}WEJnVbuhQ+|p~KOm7eJ=Xa6 zJf6>RnR~2Fnhm}CIC7OH*g?lM1cvupu%C|kQC?7S$6+okP+rHoV~>Xm=Kj*iebgw{ zE7Z+*u2I~rZV|8R9&rSsV<>kq3PqP{8NFUH`fhQflgp#mYp(<}RpMX4Euc!LyH{xTDQ zm)()}>c0b)cm#5v@n38L;g2-;rCBp4isYj=SF+ZkFhkJpXD zXg<~Op(On<%UbTsD1>=!WH2U1!ptvh;iyB&lj!9L0nK^M)@)jwVmUW3r41?m#YT|# z$XRnxhOhiQ1`Xv0ebB+5BW6CsnQwLs-}PgI3@#FPmY?D%;X{cGq)z#1{!t#5AGsSq zh>AUbgaMGt`7($DlaMNb??DUTcp$-%zvaF|S{Q0D2657-%9svymcu8XI}0?p_l;+A zaQMN*H&uc2F}%;8=GFoD62AgO9snt7A>!Iv&g1F=I?usivm&kbl$!>SBsZ zw0r|+Bru-A1f!pc1(sX>qXwO`;O9^H6X!K76m3x`!S|^3!_anY-`oYDoUrSqLb(rV zb54SQ)=O`QNtp7W1p-=Jm>3QyIeFL2+t0Hw(Y%x`Qz|HQE*M~x^3@2fM}(pjQUs}2 zG3q;Sb6+(Ayt05;j*?V5I6lME2-9vr!!co$;`&+2onK`Wz!Y>zFv27dEOMv;-_)ZX z3Lgy$qRz2;CU`NA|C(61dEp~j&YeaM=t;Qh#jl4Iz~>~2940`v6jY+hm!ZQ?&|)FI zl}$`A*UpZ|U<{E1Ke_K^2G$`kyHrv3bl)@(v7dAz;}KD3;%9fTW}`4>vcwVSNw{Oh zGE3yEI5y0_cO{OjklJ9DP8=PxhVpTm$SV5BI7PMR<0TSD9WYSd40?ymXwnekd~!t( zw|pV@wcN2GS3%!vkz~rcYQ`~3QBNRMkV%H9pWHP)L9}{Ig2bMMt`8sq&2yz|Bf)Cy z2y%|B>v6Pn{DS!r`TT1-v61`6h@z}ZM!amHFB_@!y-JZ9FZILx4l28^OjN`XN07%P z{PdIX_dh_Z&1v{GvjCbKwdx-`xN-hLv$a<&mjMKSyWL`GoBS+S$j=Yq=Qb?c$PZ$$ zA+lY;t=`aL_rpBRc=sz|!u|K$m(6yy(&$ptvj(PSr&Mf#0V{)B&33n4 ztafu}Kz5slDHUtaiqAW_Z)8|?6L&MaxYJA_o!n^|->ASt?hkrq3Dxg>GUDr$fL#j1 z;%{Zc(j%*gDY>IBPg0q};sX;#(77I0YWjp8vMTp!Kg48soUO+Aagd9`hJEa2iMI^Z|w4DlIW8^C>cw>TRVW2sp z$&s;qn}Zq63Pisv#C;dLa7$?zlH=}l?Al4JR}z9vK27>u4rdEjxxTgcIzjK!BX|Q| zr1CI)2fdDVyt+qCV!1e@+qZnribAe@4oDuPn!+E$d~yn20&JZ3Bx zMPo(9@8Zt=wK)dN*dJjI@0Y{ijaW8c6-l3XcMxH%YIaN%@!0)08T&p3>DE^~irJ^Nu`Gou=QCFSZ7c|0E#BS!^ zYn3;1AGa_#gN8hP$YVQBw<>K6Y(X_xt~4;x=VA=BS8TQRnyuU!34?()7`Sm76mNI4 z*{<*HmiJ1v;)@r#OCs2Uuee31il2eleqZ<0H+baQ)jb<2muMN z5q-oo;INt)Lk-H0Y%_<#(DP4;evSaBRwYwie=xzxv4@@oTts+zdUqBc?SQ_Z^06(@ z2vqDcosA;U7QUbX5_|Q$1_7d={e|TOwE-5*rcY8hQ3wBJ0#ddFgo-&saGfC-L!ySi z!jPHa&=)6`lpVz|oskUwAqpm@LJ*$AVfJ*CEcB|j+2-t}kYqO)&X35sPqtK{D5~n9 z%sqZPhrAS`J{!7vjV62jRL-1)r0ShC$_Bq4DTgTNDZ<6W#4iat*g>X9g zK<7hO_H;&_631dA0lErv_3nXz#b&;XaoApsWWByBFeJl0&H*q@ORP%?1bby~@(TJ@ z0u_DRc|o?jx+=ZoYdu`Ub=SakH^%j?z|tE6Bm$Pk9~zLEB;?fD7fSkx{J%-9Me|Xx zC7K2!bvYAyjVrO?97gU`?DAbANj9f>5BE?4^zcpc-WYvFxxe9&MCgX_@054fU_8cN z6*^U@vl6WL&&b>@w8lB|7ax@@Ry#! z$Sq-D_viFX!`?cYZ0(MCz8iVI$DTiB&)XF|U-JojA|~o7@z5oq*I+g?2zwb?^XC|- zyS-E2*xPCCk+}Xd?NW(EFH^gbi2E4K&1!?363BhQes4VA13B&I@L~!el=*fAPvz`Z z_O`)Te9?qA)zEa`rDkO3Y3`DsfOj-^x_jj+7{g?n?3_T!2LV1{E*SXRsz6nK$o()E z`SzVSJN9h5Np|thu(M;ZKB%_fJz$CFzM(K^kKz`rEtomq-2;=nT!YtqNQ2PJxxcr! zHoC!fr^bE(JNxzL^B1}I+hl|Ay>_jF|J0#wYISnd0v0!aYd4!+AZhM2%7E?GKtFa(z?Y$Gp|J2ZV)Xkp%;?aqw*d1^=1BuIYR$1X2Raf7gTc4mqoE zl|g-6$i0Nd^L?}@AdQaBFTIos3*ZOiI~M07_yNBeRVSE_x(|B zElMwKY?^p3FrH~xTDCZZkpwdhnTUnA<|a#r)2G2O|1&=t!|#3nI2iS@iOF^wKyafF zv;iT;dLmn0*tgimqL{e-w@`ynrI$HMx$KLXavY}|<+v1qN{T{Fgx-@!UeuD+=ouq_p!2cRLmOF;zVe&7Ry4$KtEZqRKT_NY{=I^G_;o*X~Zoc ztzuRry4XsEt|dYH?-4d)ZQQak&^OU{VBA~ox{W%t<5BQ^XVSeY%OFaFlb78Y(f4Yn z4?~0Y>fQnQhMURsdu4W;O>Q*>F{z@}^ek)XScum-cP9-Csi!Z2g9R?iW;r(L4ki+@ zbs1`LtT~hJarZCSG4m1VnZI@(=Kj_xHafYF@n1YnSKZ8=?G$&>XDRth%ehk&Si*Cy zU^an?be=-!DMo&-9W68p#~m|q#_pllY_CU{jp6!&1csL*I)9?`V7ZgaMyEdy} znSQPSy15TJrFNy#KyLg?PR63aNskjpfKU=JqR-K7wcTpv87&9<2)04@XSE~QweYzT zoS47oWXNu%-L0a(`2yd}Yn0)++idewyXRtv3K))G#-O#zW>=IV1XEKq4#(v|S0fzH zGIHUxDav3uZxOe=0P)B?O*r}3a5bx6-dYYg6B-u7L zam8?+gYb-Hv%wFF=C0`Bdz-~7E)BkppkYM^oqW4mE4QJ0iTAMN5PPfm87io>(lo>j&b2&{5SY`2&lcJ1Wycrulp1n+DYq2t3Mr&-^F@7<-n{}cmb&SlJ#l_DnUljv(X#H4(r^zu*j}= zpr6KxNRk&!4g<}M=|}j^&nfb>i4mzxO@2%uwPJec@mz$Aag2K^KYFSm+im^^65w+bH~u3}Cf?L5A&x(aX?K3?T~6%gXmSKj{3i14B0V z_fEUCS41WM0sg8sC}pWSBqVDXAO$3;L@J%KeP|#76h0#I%8LZ^JM~`Sc0>XrS%G=W3(1)0LiS zf`Sh_JB@Y~+Ux`PfgRyoXQzb`O=NI2=&0)emZtmo0^?8nEQ~sMnTMJ{0CnPDC0Dhx zfS9sBBdJK0eM&Qd>@r_UBBRHRbyU>j-02q5!F#2 zT{*#In!6sxyyM!FL`qY?44&VSx1gayd&yx5>V6M+*ydmKi# zr?14}a-`&!aWrmTUlQT=>{4%W289<|gHj3yc9#YPEFE8}IS%|jIgtlyk%IXd%TMIA8mD5ZG)~3R zXMDrX>E~y`D}NNvi18`IZw|eKDe}*R{w7;7%?{gM@WL~8{?LC-55dIF)R9Ag0HvE5 z`F(F9+`04&L++nKAS#{laL^mfWb#8ic^Qz~ma~Yz#KlVi0QB@t?lFlsWG;3*MlqBe z$n^9H*?Tw?Cs}TD+L?ENYpysyvcB<$!`mc|tG^6N1&NBvnRm8FATZG+@$_~_sC*=l zJH=TEB97gDAp^-aas)u8u`>}Mu)`2nVNW&`GJeEuiNLs1(iAg$nNaoFMVGvbb49Gf zVE};vL64kjkxU^IRBOU7XjEMIXW}<3K&1?D>LQ7M>mG|>yGVh$y#b0Tle1{jHxj5e zW|zs*gr1$@7%BegV+O-`l^Y%CpBP&podf1w-3t#*Rm%@iXA#=?9_3|Xxs%4JpdlbnZOY{^aM&O3gWg@2p>`eX^P8wIO%j3^*HEfUzsrV z_9|2kx#qEp8t7wm>H53~Ve)3Vy+7n3N>|vA*sbk!I=v7@@CVZ;VJ3LIZRNpimlGO0)r&%j%ySB5wv` zp9c$p8O0j|!TbP#q$fTF#H@G7dctY>iC2>Z3iFfrZ)eSyFF`RFu_MqmTIAvUXrGib z#9{6dvMY2!1%rJt1H}j(LVeMcJk$qFQ(V>{Tl5qYti|HENP3Pd3JED6Qg8`pR5U5h zsm}4JcQ^qv{9it~St0jcw^+!1(k*WAG^X@{XC{3QJ&B*gKQwJM^HSq;<+97>G22#T#% zrPwBUV2j;uyMrVMCci&b^0mI#-NZ`64Kap4*WGScie;KG95aIMpacIRjpr&hs&(qG z6FX)fcQJ`J<-JUPL+zHH66Y;-%hI$8mng1TYqrVhvo?rl&Y~+C6#aO@`Cj*F0otZU z0^7=ayTux2y6iT$wrZ8oQOq5P)YnPV%96txGJyLGWh&waJWm0g8lJeT5PuUnbMh7O zJ~8J#bVo&VUR06)GoQ|Aw0iE0jOmdBHPALO7+4-qJ{e3`FHjr_*dI(e{DKUB=}l*w z!Q_oM>8rxYozr-@7aCIq(^blM5opbu!&p*}%3qAoglXz7#4s#L-Q@^^o#wy<6uGaX zI5~znR!n-|&Ltg`1RumuG$M^S2+l-MU=`)AMqsp+iZht4_ve`T;0KvtKutl^>?|W- zh2^Wbs8 zYH*|;Il(t70bA0RX_Ql3KzJmB3pgzkjJ-K#xl=$;WVH$qvI#~Z?N^cVb0l?7s6CG3 zb|wS0-;5{z>p=k4oAPE{KjfAa2#dSpmP>ewQKiBtGiA7+QSq1`N`*~*|5Z0o-#>*> zrG5ZHU@AL;=~x{W1R-5Wsa6s78-gK;+qgNfC$ft8!PCPTug#8~Z| zmHhC0r&$I{iR2k@kDeQ&`)vaDC;US|=Q&73+Lmff+_j0pH;ZK*xY?>SU^-)9vW4>* zf1;ZRf9H2)!5q@Tf4Vq>c5w#%5dKuF@Z-JiZXx$Ka)rU?ZX3gw_<-Xf$_Vp2hM&-4al%RbzYaOu!b*@jGqYCGE1n0^HU8+JK{bYNuIH zcWbA+$MVL1LO^T-MgYxS!Jq(WSwXf;jHa=lYe@#I05#`9XIqSsSpK6HWkiA z@pKD72c_FUI!u@kLyHcxT*OKf2?zc>vVgd#K1%_R-Zo1LaIx{yi{mN^0y!ZxlcY<QK;W2^0<;kCyqG9WUgVD~?C8ipXeE z(QEGXqOu>R=Mm*wap$EUem^CHc+Lka$#4@8&kHHNm zvOQu8-E^bH-I+C4!FVyMtKhD7CW(cxQ?Ik%Csj@A;!YAvml|#1V7cweLCf@Agq%BV zrzE#Z39p}wO)x4=`E3%xaqj#7kF_`9ZsSPS1Q*RaRE6k(rSZ7Yg83 zp{%1zBZRQId~rq~!RxUXC81{?Ba=Aqr1grZcDD-xc+^hpWC8lbVV-u*dzO`w z-L=w-dvwyAwM!p)0gQ_;qnCUy{w_Ru&rHb2Q9Omv_7H&MR77`8lnel{zw3(NVAWg!5meAEl`YyY1XVu?UZFhq7v(q*jwM zBI%k)|YO^ZjyR)>nD&xa&wq**Dh2`5%NFJ^=({AsR2_E|M#0MiKU$(;+Tpy6qjNcnh5Ba@2 zT)?t9;_;BXm7;*w=r=>jg;KveLP&G|?M2*>|N9q-*;ibcRQQ&!hl|CLitA;(VW&<~!&pGyKhz8!r?XH$K z+8mqB45XwNVpq2|*L1g2?aAFmoTqEMyfp+fIg9k*z6t&X>Xl{&=k)Nr4TIn`ids-I zjV%mFTl@fLXcBoN@McK}EvN3L;XTZ`p2jx>JG)g`SlK?F+BgsTRq6V>%CO1Wq&I{% z-E?Nj-}rFR}PoC zCA0gm8}MfJf;V#G>-GIctGD*C(oOR>wQqoKaTIcfBr{+H$772?{nd1*=m-tRjx`!t znHK~Q89K=uLIRnOFBQnaLui-9}WG^HRqQa9z_1Hcwsd)nu!pN@{CN zrVTJN6vKS0c7>p1cf8|la-F#8W-j`|vXOPs;)HJvqq@Sh)r`~Q%?-VOCKzouL^tNR zdEc?B?PgQd`qWlwQ7AH>5idhazOmBYGy?Bc>L<;Q9blvp)|DrJUjK zbyC8D#`zVzA@q8^QN^}EmR}AIF#NTM>qB^0qAYTtr?**epf?w2YTB?=v?YKQ`pqFk zvob4kGQK`fGVA!E^q-_F7wPIY(vx|L+-v)TpCUbPi+q28KfG8~=2hBNkDP9_a}1V7 z-UqW}G#z4@`{RDMp#!`wbNt1fI@f8oK7k7rUh$CWSL(lUEK8hnyLAjlaar>F{q8w0 zF0?tpV=>gOm%2<2mg;{vs$db;Rj)`l_CGe7=%@1K)qXRS&75O6tLWtd!A%rKb=E9? zLWriHiPtYT=+kN=8FQEP#tnFwOd14-2MZ1kj=tv|DLDD&3AewQj94@BiamGUK1p!z z+4k0cvO@UH_TDz^q@Kan3Pxp+R$I8_IzYP$7~Qv%{OzwFKK}8?ACs%E_qYD=*JS2( zBaQ=n^>yo@(UFw!!}G=&f_^&q_O*}VP+?SrQY-SlUUDv*9$YM@aT}65LFz~}HvD>Z zGWjYnt8`G#`vn=?G1VHv|83yc@i1@Ab<-Af0cis}2o&ece7-5l<{j$jHNJa6D01%; z`L+6eEbu`l_6y%xc^$>OP}Mje4J*a|rH_fFHqSYet=~gwZThPll29(_)@pM5bt`qt ze0dN(qGr7>S$f^lxL-9op^~;O%l@BVw;G~Lt2)Lp4GHOKb=SE#Vzd*4r;0BhWM~K) zPNaGYS55N{wbV(dv6On8xcm{xOc{J-9g?honDW>^kz%)A#b`OfAGF7{EYEOfC&QI^1tL7U|B`B z^{1?o<#L(NZzCyu%vQhI_U5m9?AeoQazT^K*#IAYc=Q*;Bh%71 z+sK{dfq%>VdjK*C%G^eVw()a~Kil%@+xj2g>%b`wx(CWCSOzrVAWNl;&*QHN9}s`8 zpNl6zEguj$AaX$D`4-;v{Q1`NGX9rJ2}l_^=aXfYy1lKut%;VO^REi%d-1w!{9%5| zWqZH8c#&hKnykFq-F}0Z>kBdM_0#h9dXBWWxxTx(k4!Mf2iwf?fg%UnQd7vm^NkI8 z=kw>=Ead0Uk?ZGp>+>>10F|ZjPQ58_xc@|=j1R(RP2n&9lZ3AU*+$zcqs0(CU<$0# z@)i;=6I7{f7EGB{RMt8zv&P2scU#&|*;nIqfP)CCRRQ<(fhJZ~w5-2UDST6zOp|pl zHW@8;{u=#&&!7piw#v`Zg;ct{zRtAD8~ngBzo)#V2p=!&_mnNOWoxu$=1mD@O=A1G z{_tDMXf6jTST;dz2W8EKJ*3~jw~Xm;*$Borv}}Br9WdtfSJFL@b}Cgg8xs!7_Jq98 z0574XBSmsOj~_^3F{Qf&x-$5!!o4}1d!S#gZ<=sW8MW`>=>V6#_<S!g{Mwe z>G(i84t}0BWb*G;PtJdqLKx=PeG$}rp{r!rhOtn*-wmVsjftahjqRJEff489L{_^@Xpu^$BjTP!_7md-5L1I7nN>ya>`9syECP{$R08- z->*k-x4P|f+w8kHLd2KQ;2YxhI}a|RB>MYwvyNhIa4CHogNy!q7f9%(iZk$o zR)8Yb%T|h%s2j!Pa0owyquwwE7@*!MQsYK^dpJ{r-W7TIa=JT;tp>P7Zt#OnjzvQv zudCi}N$=vgws$^kj=Dcuz?aQe7s%k{UytUyf#P=;hzyJk7o_+1zgzIZ(IWW*z2N)y z(%uE{%kN%&f00P;9BgRL^6{x`9|?lH7VWZ|JO+yT)Wi0Z$_E!?jmP7@i!jWIwt?h_ zq0fAPuj7(>C2`ZZ_Mhky@=_jm>O+ng9J183jE1pPo2hNrv}q3!G5;v+%o=8R)`QVl zHNQQe#!K&yKAr9Wdo6`yie=>=0KSC z0$Tz%B4zyNQav$Z>Gx2#MUkScEr=KOsYn@5_rF z&VF~XlUc^oqpJ0r&-6xnXM`LRc`%e2IUiw`za5ks7WDnbfS7&L?GX$V>u*N$^pxMs z2JVlLJAB&49%B<*;=ld0%ps3c(pvI|k+MTye{YnyOYh530&2ec{Qx_EIC{uvMNivj z$?rZT83#o8&8LLTDt55+)Q!nnx7+@>-#$K;ap&71GQq^x$Naf9XhK?R^w|9G4zRXQ zMR{?zNCvoShY|YeZ$2eqy><2Tk*=nQ@%%|M9g80_nm&x%vt>0TSF!IzWXCt zp$xtnEyEJHJ=z`qkVZVDT<#7RvfK~h2CpVV#*K)3_^jP+{0nwW%^|rAQD+{E<{f%J zYC{S-Na+l6=K@FnL&omN?OmwOn?uCZ58lm@G2Xr&#R--8yHAQldH80eu=?3Y=$s+n zGxXZV%~3ZEhKw1`u)+qS5O|l0kxeGx%VM>_1A8rmnIW$UzE+0 z`Zz#({3Y~a^X2Pg^6k5W{kB@Xj1xu>sVRXDH(%{-mv>%D3WEH7?bWNbWCh@_&$j8a zcxzMYW_|PU?QrtD;p78(jdQCq_4c&sjau!Um(UFIU)#RtaN4!bt z$oKqh*hBF78NACiYNH?jJ05SPYQ$nDqgZ*a`VMCnrQb_#YiU-MRa&Lh`#}%&y@N(f z->XRtiDf74zPzX<{RZjbpxmeB_U$jSbd}tGJV{%wlhHH=udzyPh}FAkDR2S3Qab@{iITt2}0<^hk} zLb6Orob?=R zKgS=E%S@(BX4w!v$Fr=+PxgX?>58}{p{GjZPTo3HX_3D8h zHy+p-<^hicA^x0yl~l$zl}UNdSCNc&UE>d*z**@54=4FkCXLUSILR&) zBXgez+KrwhcSg%RNp9zvQT(tc$*sV%Hug|WWS%772G+5R$|sF#_ONCLU=Q6%*pp;2 zh_%w*Lm5e)B+G%;&K^GP!&>G^ax+H_VT*G)>>woNL+n*EFyE8pKLgKfrH5oELwl>*#qBS@IV~2^5X0aw@rPL{Lc%Xv0G=FE%TFQh2WhmJxR*{ zXDJK~P&ah2_?*;um*C>6bWab9w*Dm9_?#yP6}tzqGBm1-eKM6%gNqEZ`C=M1OmuAj z{b6ij{3N+IRJh-3G^G?8lG@hA0{`i`ICXglUFAs`TJgiC4DAoq0W5qo4sX={As$@j zM!VrX^&^*R56!VM&rNbq{q>@!UUESdf=J|^{Ev&C9B^u!d-UayNB_cMZ9red;QZz< z59qgeOZ7h{l1p#>|9g7F$J)QR@3Eb;wAJ^K#B(`#e9^;UyCC<>!;7A=6?N``NP~zP z+>L+ao0R$L$*C4(xNB6oghDG!=Ki4#vC)30ZT;3iqL#USQt9qNA#YVx!HHPSN+yH; z$^h*@e=7}nDJJU@wjk>kzXe(A3&}!Ed?T5rZWKt}v<_=1$#mKj-q=6(q3S$ICJgxD zO>*TQ@N_B!8L29#lGjNO{*X)wY+FxHAi4iUR7_Ds{~@~O7ynms^{~=C{!xD(>Ca>R z`AL7Wgvb1-2iu>%1N;COQLCk_&9G>t_Qjq)I2st}I zJ(SgH5dOm_gc%1Qh~FxRr>940O-kY@OG+bIaOHUT&!c3uC}Hk691U$hJM>ZAl6wXD zllEzPSc@)L{pJ$_hq$|fsHwx`+_kA;4-`uUdj*Hm9D0a?;LFCB%6CO^?4<{bu^{;S zf?(TrZim;+>Zha&l~b&Nj`boUY_wk&BzV&@WyBS0M#+N_B2tkQ`^am?#jN?lJmS4F zk;MJ4(QVSp_u8ES;bJ3GNfc^wr@-oW4*m7oQgXpXY2Ca(z*E zPfsOp#Xk06xEKp(MCU3>`P%g2@yDHFW1sEFGIqVlH2Q-g-KQIW`%)~0^Cs*Ye^Vs# z0+znjXKJ}9BqLiIstB7}hgCh4Vu^-S2UuFztjDiM3uS3~h% ziq#JKYipUbdzyI`mnSf43Qg5?JG!CWt5JZRKr{x z9UdL)hZXob`dR{Cj}i!_H>V<<2J$C`pUmb6Ev-Yg6=}%FC(Zn*SyC>HY;8z!IO*K)7Gq1vyFo`%`_O(e@vFSz8`Z}+PwJN;fJ zt4(d?CMQ}<-Nk0d9QZKeA>IOB#LQIXVWjl;^!%t@>DFwCVl|+bc!#P7cVdBRyNiRu ze1~()f@*j-<_)MPEL0oK>Wwq$#eO>bXS;g=yU`N%-2t|n<^FjQm(TtXaXI*pZoc0{ zqJGqi3W-DJgHH(QD0w@Uie_cxcLa~Qy%X^U3h~|$X0H3(iUd?+$+vr1gYfQ!cBR5x z@byI!(b$iGKDGA87UyVcrK*qJA7H}$h0kact`fevSf;B^Zy=P`8a-udJM&6itnU_u zhK*dMVS>3*yPlWubWS{efe*%j;U=IJKZB$ywNB7ua zy(^!iU!~jzmuE*|VRmXG-VNhcn<>qz@A^b!sX$;IZB6QpyA@G$6@B^#u z&UxYWw{!e{Z&(hQf?(pxs?zotV zkD4goM}Mw$hS7fl{Z33jsWj{HL!+2{^1d+{_i#jR*vlAuQa+}4(ym3GIS!Be2)x0; zu(*CZkqJ%v=~pA!Q77d{S8H&)GJgGvXVL&V)hBh3^s4cNn!qhD+HALuJ6PPgRKlCX z(t#@7QTt3=ae;}^BT8^!!Etj4i<+4>N*&Il9B2XE8P3zvdE}X1!Hsnde=R*q@A1F& zNHb{q`Dgsl8dCoDQ&Pnm^uG}%(*3??Ub-kr8Cvur{_}VtF*y~&KROrq+!j?8%?M`=n;jJ&sBa>V3l4OUE>1}>4lEP9}cOHz;m&E81^Y#$pVGDb2 zrUVyx_BC3IMW*&W;l?lLUc|iufjWHJ?K(A8TV*VuEzc>2+OCxUK?4hiy+W!47fLV? zu+BOoB$Rxy2%`XB_#V!APC_c9HlmMxeUU_@J0tK7H{RfZt+0FPd2Ao?ELhkgyFDoF zdA}Xx`OV4^>7a@Swq(8^0d9h4x*GXH~Nw?8@?{(0e zYN>4>5l5kP8gV{HM97}yKtT#7w~(hokkdkD7NmJK?uVF#iml`HW#}qXMD>vv*SaZq68U~72Ph+E)=C#hbr1*$)&!g5tRcH>{zQLddIKDwCwcr@F#U30r6 zfnC*@9)*b{@ZG`Dqfbga{-nfDpOpAxVYwM3PAr;7v2?valaV+^mBOjUp~%;1%*G00 zM9PJkvQU7Tg>=ZT4RiebV%SfFh1V38%nvT&`ZVr4DQ)fC62e`@xS^HuGP&)_sP6;` zw{{qo*mpxkhot%CP{Be2DEL6k?bu(f9JRYWXm1FO>b+oIt{ipnCrifV&qmtpRUn#e zoaxUw&LOj3x|I*fqycc(C^KV58-7QSRdnVrFI*GkMdeI?WmP>PzdM>XK}H|v3+eBI zuXy_=Z4!6~0O_}z{a)(QUxwqaR&fGaDN=RPnN%-f51`Nl_)!Eu_V6Q-nF??YiKQMz z@Z%tqdpyT^9CIGWoS$OOAM;2g_NSQhr0aqf}$V;;vJ^El4`<2cKY{}LmAjo$fF4i3ft$B6#Ni2kRD{-=ok=ZOC2 zh#nWuU!p3F^YGV5{y#!SH8ke9B59V)C}bCclTr?K)+oG~xK(MugB#N9pVEjyI$X7u zT&YysnKbz-J*7!!QI9WU`un4F6@M>b-h<|dHll3k#(=EJ9R<77QLybL&v+I5gU)y& z12F`dJ%set*bB3PNPOAjdXrD73o%tmD=}%`$8reiX&yp)df`N=lSXayGM`I}P3B(3 zIat%2R+8OOpK@5AD+MC%8jZ?Z>YJ_pse9I9q0Yw`hB6t1BFc+O$7RR7|GO7#@r>Vv zx*S*HcFkpGyH!ii+`BA#s+9yPiUa0Uz%y6x2>)PDStxnKUR1L8@}fJHL7OG-PUL1_ z7M!Fm9ZO9jLsi7?=Bv0?*k-C)XoJyL0a8D-pfl8z#ObdYz|7>A%7* zqh~~!iY}vRrtSpZ9+mjDW^-7Idnb{XXVFyy1C2i_fw_oPe8aElks5yagskFTWXGYIsQ7)Jz`)arO>9hMj z^}SD(O((Dt6FaV3_Wysavn?s1&@Mb)RgX*+H8K=o(4B|ZJu$_*U$E-h7g|~N{3=Xx> zaBb}Cm<=xKp?P>BW3ddkt7oUpkQ-6?8kj3Bz~;08E|ZFBc}y9`54|i4RGCL=wGtNA zxII*k+))X64z8k3!gLbhDm9RPbg1 zId?J{lXO>5RH}=Xj?DbhY#&vc!8?qQo;5OA6IClsyC5 zV50@U89*2l;zO}Beo2<^G^U1mwmxZfMK!9xQeq*|Ka6DUx1Bz@){;@GO9yygbc0OT{}(c~tPIs$3SXgG&>Bax5U@OAu}v2e#F)3!VUgo?Y~KJf zR$;ML=m`_O=T+Lx5I;k}=sprVfL^_jVb1Cr&mlGwhr8YOM>eUw*b_8U-0OAI%BiS! z0EZ88XkgOr>APSyz-(}Hiif?9KNSe2I+tL2e^&Fnc~(u8*Wq_=*Z!9L{@-|PHTm;^ zbh{g_wf9acy;37clnlZ}Pw=;UY?FtA87CO(>4kQU(uU_q z5Zn-na*?8QT_O2R9{>IaW)DHU=qg_=4Zi<@Iii)4j(J4=K`5JDKwZ8t0_J^`v9kTR z4`ACZT&^-E3%@I^=@dOfc%uQ&=v8fcX$?C+Dx?-sNRj^fCk&9>NqPNKrV#Xd{QA|M ztYX(%HRsR{Bj!4X(WiE9J0Ee}3=t@9H4KWzew?WI2!;!lX5+Xe zh1u_REry6AVQejsWX$+rq&bq%^9Bf}x?F~_>{!JN=q3%=W4mlNoj>{+fwvm)Gfuy9 zi-Mv*W@}xp2XO`g_=tyY`wmS-jz- z+@|M$&zhnsKUg67MieEK!nmE7LHkgbs&?hKXL+uz+>dofTo#(e$s`R4k*=xf8c z%=iyOSr*Kbx4fjA(sn2L_CnDm(7snn^h7FO5FPhY&SKQ0-2pXX|Q)j z2y7r8#i%!IZ11ffzI^@SsU+~*(K4^fYwr#>Huu(dw_h!YFLm$d?n6#qZ9yWsh^!c*xKqpK7 z`hW1y1Nc@Btt$Vd4#+!OTV<()(5i+B?QX7P;{5g^nZ4J){Ia>Xk7ycR>_k-clWx1! zK23E!6)|w3MOLVe!cgW;7m@ev{PI#}iNn2Do13D~l!nXwy7~0bG@dUD5}K*<+RI;F zV@~?!LiXW{osG@%z*|)4#oF6L(IiDP+6zr7C-G`mhT{FG3B*i$^zfDFSJE}N)p_%y z&zBXA@8yOJ4!(C}ef5gE6bPrVy(BSwgSs4mPqA{PFAD{pMN2KL7A2l;i{|%oXMcOk zG*y|PH#QH~pRK)oDW&pFQGRQ?ym=_!{6?g94_~eAKido4$O);tKYIT{ysI$qIf2~S z>-{3vEgwEs-XjXgd$^e{$_%U#q8b<_A|H>vc3HsQ9F&zMJGPO(Dsmc`F6XtFg9hjL zSiClOTFvvpuk3~mvMlNt#?9o<&^Pw8bWawr*mh{8u&^ueKm0NI!yt`IK2aoh*ACa$ z%F?ZW3FZI$&k}zn^9;Jn!x7Tk@q#kW;gcZ`=;$!$4oIfUGJFfcXUX#|+IJ4O%4@$Q|1t70^D|?EX^6S$kJDE_^HDcj{^gVMHiE6~{_^?-ItuGy zFZtuY{ous~Qh18G(v}QYeC*pHkF{kjo_C-V4Xr`UhOJ&N8*K9*{(`nrRf`Ni=J(Rm z4*dRyl{oEK7GeyC8Q6bxB<^}G zk^)@H-N=#r(RStsvY#`!l5x9CfY296xKl9*%$oT5rO2!5F}u zqkk%Zw7xPxH&o%1wcAarJ-;`7x4>rz3eUZ5T!t%`hdFJliy(ZX^4jzoKJ8JQAS`(- zoGRhFbi(_?2X3Hg&MgAE2X*&(ykfyeu)Q}d42gTV-OaQ}a0c0GOM&Assdc_nN8Oy~ zVjLsPdvdALNhT|uhQ&ZiF3SLsJd;0KSsEAqW2u%(yT(RRZMF2OnO3s2blU!qs+&~C zc8{x=aaG|(S2EG*&>mq%fSpd}!tnw%8y%?fa~`$hsR<$I?Q;2c0eM_Wh>m@3`(f;7 zPVt8=y-9$gU-G=e?0uudKlns%XLSuQf{p0!W~(ZX=^@&rk_ay={NK3QL61eLnlq4U z$H+^HsY#O*-x_=p-HdJyJZx8cY3~o29;3}g9G1!$2|T{&!1d51f7a{UQNnBm2 z?Yqfo(#Ypct$rM~bI5v{59+3JdPK9NFg{D&{ouJBIlp-SN_3C=I+_ci`#@R%&S9jo@Uvd&R1jd#p=#E}rv%0AVS??Cn=&sVdjdX_ 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

  • ") - .append("") - .append(app.name) - .append("
  • \n"); - } - - String line; - while ((line = in.readLine()) != null) { - line = line.replaceAll("\\{\\{REPO_URL\\}\\}", repoAddress); - line = line.replaceAll("\\{\\{CLIENT_URL\\}\\}", fdroidClientURL); - line = line.replaceAll("\\{\\{APP_LIST\\}\\}", builder.toString()); - out.write(line); - } - in.close(); - out.close(); - - for (final String file : WEB_ROOT_ASSET_FILES) { - InputStream assetIn = assetManager.open(file); - OutputStream assetOut = new FileOutputStream(new File(webRoot, file)); - Utils.copy(assetIn, assetOut); - assetIn.close(); - assetOut.close(); - } - - // make symlinks/copies in each subdir of the repo to make sure that - // the user will always find the bootstrap page. - symlinkEntireWebRootElsewhere("../", fdroidDir); - symlinkEntireWebRootElsewhere("../../", repoDir); - - // add in /FDROID/REPO to support bad QR Scanner apps - attemptToMkdir(fdroidDirCaps); - attemptToMkdir(repoDirCaps); - - symlinkEntireWebRootElsewhere("../", fdroidDirCaps); - symlinkEntireWebRootElsewhere("../../", repoDirCaps); - - } catch (IOException e) { - Log.e(TAG, "Error writing local repo index", e); - } - } - - private static void attemptToMkdir(@NonNull File dir) throws IOException { - if (dir.exists()) { - if (dir.isDirectory()) { - return; - } - throw new IOException("Can't make directory " + dir + " - it is already a file."); - } - - if (!dir.mkdir()) { - throw new IOException("An error occurred trying to create directory " + dir); - } - } - - private static void attemptToDelete(@NonNull File file) { - if (!file.delete()) { - Log.i(TAG, "Could not delete \"" + file.getAbsolutePath() + "\"."); - } - } - - private void symlinkEntireWebRootElsewhere(String symlinkPrefix, File directory) { - symlinkFileElsewhere("index.html", symlinkPrefix, directory); - for (final String fileName : WEB_ROOT_ASSET_FILES) { - symlinkFileElsewhere(fileName, symlinkPrefix, directory); - } - } - - private void symlinkFileElsewhere(String fileName, String symlinkPrefix, File directory) { - SanitizedFile index = new SanitizedFile(directory, fileName); - attemptToDelete(index); - Utils.symlinkOrCopyFileQuietly(new SanitizedFile(new File(directory, symlinkPrefix), fileName), index); - } - - private void deleteContents(File path) { - if (path.exists()) { - for (File file : path.listFiles()) { - if (file.isDirectory()) { - deleteContents(file); - } else { - attemptToDelete(file); - } - } - } - } - - /** - * Get the {@code index-v1.jar} file that represents the local swap repo. - */ - public File getIndexJar() { - return indexJar; - } - - public File getWebRoot() { - return webRoot; - } - - public void deleteRepo() { - deleteContents(repoDir); - } - - void generateIndex(String repoUri, String address, String[] selectedApps) throws IOException { - String name = Preferences.get().getLocalRepoName() + " on " + FDroidApp.ipAddressString; - String description = - "A local FDroid repo generated from apps installed on " + Preferences.get().getLocalRepoName(); - RepoV1 repo = new RepoV1(System.currentTimeMillis(), 20001, 7, name, "swap-icon.png", - address, description, Collections.emptyList()); - Set apps = new HashSet<>(Arrays.asList(selectedApps)); - IndexV1Creator creator = new IndexV1Creator(context.getPackageManager(), repoDir, apps, repo); - IndexV1 indexV1 = creator.createRepo(); - cacheApps(indexV1); - writeIndexPage(repoUri); - SanitizedFile indexJson = new SanitizedFile(repoDir, IndexV1VerifierKt.DATA_FILE_NAME); - writeIndexJar(indexJson); - } - - private void cacheApps(IndexV1 indexV1) { - this.apps.clear(); - for (AppV1 a : indexV1.getApps()) { - App app = new App(); - app.packageName = a.getPackageName(); - app.name = a.getName(); - app.installedApk = new Apk(); - List packages = indexV1.getPackages().get(a.getPackageName()); - if (packages != null && packages.size() > 0) { - Long versionCode = packages.get(0).getVersionCode(); - if (versionCode != null) app.installedApk.versionCode = versionCode; - } - this.apps.add(app); - } - } - - private void writeIndexJar(SanitizedFile indexJson) throws IOException { - BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(indexJarUnsigned)); - JarOutputStream jo = new JarOutputStream(bo); - JarEntry je = new JarEntry(indexJson.getName()); - jo.putNextEntry(je); - FileUtils.copyFile(indexJson, jo); - jo.close(); - bo.close(); - - try { - LocalRepoKeyStore.get(context).signZip(indexJarUnsigned, indexJar); - } catch (LocalRepoKeyStore.InitException e) { - throw new IOException("Could not sign index - keystore failed to initialize"); - } finally { - attemptToDelete(indexJarUnsigned); - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalRepoService.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalRepoService.java deleted file mode 100644 index 8e3ca538e..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/LocalRepoService.java +++ /dev/null @@ -1,130 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.app.IntentService; -import android.content.Context; -import android.content.Intent; -import android.os.Process; -import android.util.Log; - -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.Utils; - -import java.util.Arrays; -import java.util.Collections; -import java.util.Set; - -/** - * Handles setting up and generating the local repo used to swap apps, including - * the {@code index.jar}, the symlinks to the shared APKs, etc. - *

    - * The work is done in a {@link Thread} so that new incoming {@code Intents} - * are not blocked by processing. A new {@code Intent} immediately nullifies - * the current state because it means the user has chosen a different set of - * apps. That is also enforced here since new {@code Intent}s with the same - * {@link Set} of apps as the current one are ignored. Having the - * {@code Thread} also makes it easy to kill work that is in progress. - */ -public class LocalRepoService extends IntentService { - public static final String TAG = "LocalRepoService"; - - public static final String ACTION_CREATE = "org.fdroid.fdroid.nearby.action.CREATE"; - public static final String EXTRA_PACKAGE_NAMES = "org.fdroid.fdroid.nearby.extra.PACKAGE_NAMES"; - - public static final String ACTION_STATUS = "localRepoStatusAction"; - public static final String EXTRA_STATUS = "localRepoStatusExtra"; - public static final int STATUS_STARTED = 0; - public static final int STATUS_PROGRESS = 1; - public static final int STATUS_ERROR = 2; - - private String[] currentlyProcessedApps = new String[0]; - - private GenerateLocalRepoThread thread; - - public LocalRepoService() { - super("LocalRepoService"); - } - - /** - * Creates a skeleton swap repo with only F-Droid itself in it - */ - public static void create(Context context) { - create(context, Collections.singleton(context.getPackageName())); - } - - /** - * Sets up the local repo with the included {@code packageNames} - */ - public static void create(Context context, Set packageNames) { - Intent intent = new Intent(context, LocalRepoService.class); - intent.setAction(ACTION_CREATE); - intent.putExtra(EXTRA_PACKAGE_NAMES, packageNames.toArray(new String[0])); - context.startService(intent); - } - - @Override - protected void onHandleIntent(Intent intent) { - Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST); - String[] packageNames = intent.getStringArrayExtra(EXTRA_PACKAGE_NAMES); - if (packageNames == null || packageNames.length == 0) { - Utils.debugLog(TAG, "no packageNames found, quitting"); - return; - } - Arrays.sort(packageNames); - - if (Arrays.equals(currentlyProcessedApps, packageNames)) { - Utils.debugLog(TAG, "packageNames list unchanged, quitting"); - return; - } - currentlyProcessedApps = packageNames; - - if (thread != null) { - thread.interrupt(); - } - thread = new GenerateLocalRepoThread(); - thread.start(); - } - - private class GenerateLocalRepoThread extends Thread { - private static final String TAG = "GenerateLocalRepoThread"; - - @Override - public void run() { - android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_LOWEST); - runProcess(LocalRepoService.this, currentlyProcessedApps); - } - } - - public static void runProcess(Context context, String[] selectedApps) { - try { - final LocalRepoManager lrm = LocalRepoManager.get(context); - broadcast(context, STATUS_PROGRESS, R.string.deleting_repo); - lrm.deleteRepo(); - broadcast(context, STATUS_PROGRESS, R.string.linking_apks); - String urlString = Utils.getSharingUri(FDroidApp.repo).toString(); - lrm.generateIndex(urlString, FDroidApp.repo.getAddress(), selectedApps); - broadcast(context, STATUS_STARTED, null); - } catch (Exception e) { - broadcast(context, STATUS_ERROR, e.getLocalizedMessage()); - Log.e(TAG, "Error creating repo", e); - } - } - - /** - * Translate Android style broadcast {@link Intent}s to {@code PrepareSwapRepo} - */ - static void broadcast(Context context, int status, String message) { - Intent intent = new Intent(ACTION_STATUS); - intent.putExtra(EXTRA_STATUS, status); - if (message != null) { - intent.putExtra(Intent.EXTRA_TEXT, message); - } - LocalBroadcastManager.getInstance(context).sendBroadcast(intent); - } - - static void broadcast(Context context, int status, int resId) { - broadcast(context, status, context.getString(resId)); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/NewRepoConfig.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/NewRepoConfig.java deleted file mode 100644 index bc0720e84..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/NewRepoConfig.java +++ /dev/null @@ -1,234 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Build; -import android.os.UserManager; -import android.text.TextUtils; -import android.util.Log; - -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.Utils; -import org.fdroid.fdroid.nearby.peers.WifiPeer; -import org.fdroid.fdroid.views.repos.ManageReposActivity; - -import java.util.Arrays; -import java.util.List; -import java.util.Locale; - -public class NewRepoConfig { - - private static final String TAG = "NewRepoConfig"; - - private String errorMessage; - private boolean isValidRepo; - - private String uriString; - private String host; - private String username; - private String password; - private String fingerprint; - private String bssid; - private String ssid; - private boolean fromSwap; - private boolean preventFurtherSwaps; - - public NewRepoConfig(Context context, String uri) { - init(context, uri != null ? Uri.parse(uri) : null); - } - - public NewRepoConfig(Context context, Intent intent) { - init(context, intent.getData()); - preventFurtherSwaps = intent.getBooleanExtra(SwapWorkflowActivity.EXTRA_PREVENT_FURTHER_SWAP_REQUESTS, false); - } - - private void init(Context context, Uri incomingUri) { - /* an URL from a click, NFC, QRCode scan, etc */ - Uri uri = incomingUri; - if (uri == null) { - isValidRepo = false; - return; - } - - if (hasDisallowInstallUnknownSources(context)) { - errorMessage = ManageReposActivity.getDisallowInstallUnknownSourcesErrorMessage(context); - isValidRepo = false; - return; - } - - Utils.debugLog(TAG, "Parsing incoming intent looking for repo: " + incomingUri); - - // scheme and host should only ever be pure ASCII aka Locale.ENGLISH - String scheme = uri.getScheme(); - host = uri.getHost(); - if (TextUtils.isEmpty(scheme) || (TextUtils.isEmpty(host) && !"file".equals(scheme))) { - errorMessage = String.format(context.getString(R.string.malformed_repo_uri), uri); - Log.i(TAG, errorMessage); - isValidRepo = false; - return; - } - - if (Arrays.asList("FDROIDREPO", "FDROIDREPOS").contains(scheme)) { - /* - * QRCodes are more efficient in all upper case, so QR URIs are - * encoded in all upper case, then forced to lower case. Checking if - * the special F-Droid scheme being all is upper case means it - * should be downcased. - */ - uri = Uri.parse(uri.toString().toLowerCase(Locale.ENGLISH)); - } else if (uri.getPath().endsWith("/FDROID/REPO")) { - /* - * some QR scanners chop off the fdroidrepo:// and just try http://, - * then the incoming URI does not get downcased properly, and the - * query string is stripped off. So just downcase the path, and - * carry on to get something working. - */ - uri = Uri.parse(uri.toString().toLowerCase(Locale.ENGLISH)); - } - - // make scheme and host lowercase so they're readable in dialogs - scheme = scheme.toLowerCase(Locale.ENGLISH); - host = host.toLowerCase(Locale.ENGLISH); - - if (uri.getPath() == null - || !Arrays.asList("https", "http", "fdroidrepos", "fdroidrepo", "content", "file").contains(scheme)) { - isValidRepo = false; - return; - } - - String userInfo = uri.getUserInfo(); - if (userInfo != null) { - String[] userInfoTokens = userInfo.split(":"); - if (userInfoTokens.length >= 2) { - username = userInfoTokens[0]; - password = userInfoTokens[1]; - for (int i = 2; i < userInfoTokens.length; i++) { - password += ":" + userInfoTokens[i]; - } - } - } - - fingerprint = uri.getQueryParameter("fingerprint"); - bssid = uri.getQueryParameter("bssid"); - ssid = uri.getQueryParameter("ssid"); - fromSwap = uri.getQueryParameter("swap") != null; - uriString = sanitizeRepoUri(uri); - isValidRepo = true; - } - - public String getBssid() { - return bssid; - } - - public String getSsid() { - return ssid; - } - - public String getRepoUriString() { - return uriString; - } - - public Uri getRepoUri() { - if (uriString == null) { - return null; - } - return Uri.parse(uriString); - } - - public String getHost() { - return host; - } - - public String getUsername() { - return username; - } - - public String getPassword() { - return password; - } - - public String getFingerprint() { - return fingerprint; - } - - public boolean isValidRepo() { - return isValidRepo; - } - - public boolean isFromSwap() { - return fromSwap; - } - - public boolean preventFurtherSwaps() { - return preventFurtherSwaps; - } - - public String getErrorMessage() { - return errorMessage; - } - - private static final List FORCE_HTTPS_DOMAINS = Arrays.asList( - "amazonaws.com", - "github.com", - "githubusercontent.com", - "github.io", - "gitlab.com", - "gitlab.io" - ); - - /** - * Sanitize and format an incoming repo URI for function and readability. - * This also forces URLs listed in {@code app/src/main/res/xml/network_security_config.xml} - * to have "https://" as the scheme. - * - * @see Network Security Config - */ - public static String sanitizeRepoUri(Uri uri) { - String scheme = uri.getScheme(); - String newScheme = scheme.toLowerCase(Locale.ENGLISH); - String host = uri.getHost(); - String newHost = host.toLowerCase(Locale.ENGLISH); - String userInfo = uri.getUserInfo(); - if ("http".equals(newScheme)) { - for (String httpsDomain : FORCE_HTTPS_DOMAINS) { - if (newHost.endsWith(httpsDomain)) { - scheme = "https"; - break; - } - } - } - - return uri.toString() - .replaceAll("\\?.*$", "") // remove the whole query - .replaceAll("/*$", "") // remove all trailing slashes - .replace(userInfo + "@", "") // remove user authentication - .replaceFirst(host, newHost) - .replaceFirst(scheme, newScheme) - .replace("fdroidrepo", "http") // proper repo address - .replace("/FDROID/REPO", "/fdroid/repo"); // for QR FDroid path - } - - public WifiPeer toPeer() { - return new WifiPeer(this); - } - - /** - * {@link android.app.admin.DevicePolicyManager} makes it possible to set - * user- or device-wide restrictions. This changes whether installing from - * "Unknown Sources" has been disallowed by device policy. - * - * @return boolean whether installing from Unknown Sources has been disallowed - * @see UserManager#DISALLOW_INSTALL_UNKNOWN_SOURCES - * @see UserManager#DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY - */ - public static boolean hasDisallowInstallUnknownSources(Context context) { - UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE); - if (Build.VERSION.SDK_INT < 29) { - return userManager.hasUserRestriction(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES); - } else { - return userManager.hasUserRestriction(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES) - || userManager.hasUserRestriction(UserManager.DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY); - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/SDCardScannerService.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/SDCardScannerService.java deleted file mode 100644 index bc395df65..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/SDCardScannerService.java +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright (C) 2018 Hans-Christoph Steiner - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.nearby; - -import android.Manifest; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.os.Environment; -import android.os.Process; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.core.app.JobIntentService; -import androidx.core.content.ContextCompat; - -import org.fdroid.fdroid.Utils; -import org.fdroid.index.v1.IndexV1UpdaterKt; - -import java.io.File; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; - -/** - * An {@link JobIntentService} subclass for scanning removable "external storage" - * for F-Droid package repos, e.g. SD Cards. This is intended to support - * sharable package repos, so it ignores non-removable storage, like the fake - * emulated sdcard from devices with only built-in storage. This method will - * only ever allow for reading repos, never writing. It also will not work - * for removable storage devices plugged in via USB, since do not show up as - * "External Storage" - *

    - * Scanning the removable storage requires that the user allowed it. This - * requires both the {@link org.fdroid.fdroid.Preferences#isScanRemovableStorageEnabled()} - * and the {@link android.Manifest.permission#READ_EXTERNAL_STORAGE} - * permission to be enabled. - * - * @see TreeUriScannerIntentService TreeUri method for writing repos to be shared - * @see Universal way to write to external SD card on Android - * @see The Storage Situation: External Storage - */ -public class SDCardScannerService extends JobIntentService { - public static final String TAG = "SDCardScannerService"; - private static final int JOB_ID = TAG.hashCode(); - - private static final String ACTION_SCAN = "org.fdroid.fdroid.nearby.SCAN"; - - private static final List SKIP_DIRS = Arrays.asList(".android_secure", "LOST.DIR"); - - public static void scan(Context context) { - Intent intent = new Intent(context, SDCardScannerService.class); - intent.setAction(ACTION_SCAN); - JobIntentService.enqueueWork(context, SDCardScannerService.class, JOB_ID, intent); - } - - @Override - protected void onHandleWork(@NonNull Intent intent) { - if (!ACTION_SCAN.equals(intent.getAction())) { - return; - } - Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST); - - HashSet files = new HashSet<>(); - for (File f : getExternalFilesDirs(null)) { - Log.i(TAG, "getExternalFilesDirs " + f); - if (f == null || !f.isDirectory()) { - continue; - } - Log.i(TAG, "getExternalFilesDirs " + f); - boolean isExternalStorageRemovable; - try { - isExternalStorageRemovable = Environment.isExternalStorageRemovable(f); - } catch (IllegalArgumentException e) { - Utils.debugLog(TAG, e.toString()); - continue; - } - if (isExternalStorageRemovable) { - String state = Environment.getExternalStorageState(f); - if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) - == PackageManager.PERMISSION_GRANTED) { - // remove Android/data/org.fdroid.fdroid/files to get root - File sdcard = f.getParentFile().getParentFile().getParentFile().getParentFile(); - Collections.addAll(files, checkExternalStorage(sdcard, state)); - } else { - Collections.addAll(files, checkExternalStorage(f, state)); - } - } - } - - Log.i(TAG, "sdcard files " + files.toString()); - ArrayList filesList = new ArrayList<>(); - for (File dir : files) { - if (!dir.isDirectory()) { - continue; - } - searchDirectory(dir); - } - } - - private File[] checkExternalStorage(File sdcard, String state) { - File[] files = null; - if (sdcard != null && - (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) || Environment.MEDIA_MOUNTED.equals(state))) { - files = sdcard.listFiles(); - } - - if (files == null) { - Utils.debugLog(TAG, "checkExternalStorage returned blank, F-Droid probably doesn't have Storage perm!"); - return new File[0]; - } else { - return files; - } - } - - private void searchDirectory(File dir) { - if (SKIP_DIRS.contains(dir.getName())) { - return; - } - File[] files = dir.listFiles(); - if (files == null) { - return; - } - for (File file : files) { - if (file.isDirectory()) { - searchDirectory(file); - } else { - if (IndexV1UpdaterKt.SIGNED_FILE_NAME.equals(file.getName())) { - registerRepo(file); - } - } - } - } - - private void registerRepo(File file) { - TreeUriScannerIntentService.registerRepo(this, Uri.fromFile(file.getParentFile())); - } -} \ No newline at end of file diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/SelectAppsView.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/SelectAppsView.java deleted file mode 100644 index 673c2713a..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/SelectAppsView.java +++ /dev/null @@ -1,222 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import static java.util.Objects.requireNonNull; - -import android.content.Context; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.graphics.drawable.Drawable; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.view.ContextThemeWrapper; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.CheckBox; -import android.widget.ImageView; -import android.widget.ListView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; - -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.Utils; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -public class SelectAppsView extends SwapView { - - public SelectAppsView(Context context) { - super(context); - } - - public SelectAppsView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public SelectAppsView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - public SelectAppsView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - } - - private ListView listView; - private AppListAdapter adapter; - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - listView = findViewById(R.id.list); - List packages = getContext().getPackageManager().getInstalledPackages(0); - adapter = new AppListAdapter(listView, packages); - - listView.setAdapter(adapter); - listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); - - listView.setOnItemClickListener((parent, v, position, id) -> toggleAppSelected(position)); - afterAppsLoaded(); - } - - @Override - public void setCurrentFilterString(String currentFilterString) { - super.setCurrentFilterString(currentFilterString); - adapter.setSearchTerm(currentFilterString); - } - - private void toggleAppSelected(int position) { - String packageName = adapter.getItem(position).packageName; - if (getActivity().getSwapService().hasSelectedPackage(packageName)) { - getActivity().getSwapService().deselectPackage(packageName); - } else { - getActivity().getSwapService().selectPackage(packageName); - } - LocalRepoService.create(getContext(), getActivity().getSwapService().getAppsToSwap()); - } - - public void afterAppsLoaded() { - for (int i = 0; i < listView.getCount(); i++) { - InstalledApp app = (InstalledApp) listView.getItemAtPosition(i); - getActivity().getSwapService().ensureFDroidSelected(); - for (String selected : getActivity().getSwapService().getAppsToSwap()) { - if (TextUtils.equals(app.packageName, selected)) { - listView.setItemChecked(i, true); - } - } - } - } - - private class AppListAdapter extends BaseAdapter { - - private final Context context = SelectAppsView.this.getContext(); - @Nullable - private LayoutInflater inflater; - - @Nullable - private Drawable defaultAppIcon; - - @NonNull - private final ListView listView; - - private final List allPackages; - private final List filteredPackages = new ArrayList<>(); - - AppListAdapter(@NonNull ListView listView, List packageInfos) { - this.listView = listView; - allPackages = new ArrayList<>(packageInfos.size()); - for (PackageInfo packageInfo : packageInfos) { - allPackages.add(new InstalledApp(context, packageInfo)); - } - filteredPackages.addAll(allPackages); - } - - void setSearchTerm(@Nullable String searchTerm) { - filteredPackages.clear(); - if (TextUtils.isEmpty(searchTerm)) { - filteredPackages.addAll(allPackages); - } else { - String query = requireNonNull(searchTerm).toLowerCase(Locale.US); - for (InstalledApp app : allPackages) { - if (app.name.toLowerCase(Locale.US).contains(query)) { - filteredPackages.add(app); - } - } - } - notifyDataSetChanged(); - } - - @NonNull - private LayoutInflater getInflater(Context context) { - if (inflater == null) { - Context themedContext = new ContextThemeWrapper(context, R.style.SwapTheme_AppList_ListItem); - inflater = ContextCompat.getSystemService(themedContext, LayoutInflater.class); - } - return inflater; - } - - private Drawable getDefaultAppIcon(Context context) { - if (defaultAppIcon == null) { - defaultAppIcon = ContextCompat.getDrawable(context, android.R.drawable.sym_def_app_icon); - } - return defaultAppIcon; - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - View view = convertView == null ? - getInflater(context).inflate(R.layout.select_local_apps_list_item, parent, false) : - convertView; - bindView(view, context, position); - return view; - } - - public void bindView(final View view, final Context context, final int position) { - InstalledApp app = getItem(position); - - TextView packageView = (TextView) view.findViewById(R.id.package_name); - TextView labelView = (TextView) view.findViewById(R.id.application_label); - ImageView iconView = (ImageView) view.findViewById(android.R.id.icon); - - Drawable icon; - try { - icon = context.getPackageManager().getApplicationIcon(app.packageName); - } catch (PackageManager.NameNotFoundException e) { - icon = getDefaultAppIcon(context); - } - - packageView.setText(app.packageName); - labelView.setText(app.name); - iconView.setImageDrawable(icon); - - // Since v11, the Android SDK provided the ability to show selected list items - // by highlighting their background. Prior to this, we need to handle this ourselves - // by adding a checkbox which can toggle selected items. - View checkBoxView = view.findViewById(R.id.checkbox); - if (checkBoxView != null) { - CheckBox checkBox = (CheckBox) checkBoxView; - checkBox.setOnCheckedChangeListener(null); - - checkBox.setChecked(listView.isItemChecked(position)); - checkBox.setOnCheckedChangeListener((buttonView, isChecked) -> { - listView.setItemChecked(position, isChecked); - toggleAppSelected(position); - }); - } - } - - @Override - public int getCount() { - return filteredPackages.size(); - } - - @Override - public InstalledApp getItem(int position) { - return filteredPackages.get(position); - } - - @Override - public long getItemId(int position) { - return getItem(position).hashCode(); - } - } - - private static class InstalledApp { - final String packageName; - final String name; - - InstalledApp(String packageName, String name) { - this.packageName = packageName; - this.name = name; - } - - InstalledApp(Context context, PackageInfo packageInfo) { - this(packageInfo.packageName, Utils.getApplicationLabel(context, packageInfo.packageName)); - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/StartSwapView.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/StartSwapView.java deleted file mode 100644 index 221cbadb8..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/StartSwapView.java +++ /dev/null @@ -1,255 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.Manifest; -import android.bluetooth.BluetoothAdapter; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.PackageManager; -import android.net.wifi.WifiConfiguration; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.CompoundButton; -import android.widget.ImageView; -import android.widget.ListView; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - -import com.google.android.material.button.MaterialButton; -import com.google.android.material.materialswitch.MaterialSwitch; -import com.google.android.material.progressindicator.CircularProgressIndicator; - -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.Utils; -import org.fdroid.fdroid.nearby.peers.Peer; - -import java.util.ArrayList; - -import cc.mvdan.accesspoint.WifiApControl; - -@SuppressWarnings("LineLength") -public class StartSwapView extends SwapView { - private static final String TAG = "StartSwapView"; - - public StartSwapView(Context context) { - super(context); - } - - public StartSwapView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public StartSwapView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - public StartSwapView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - } - - class PeopleNearbyAdapter extends ArrayAdapter { - - PeopleNearbyAdapter(Context context) { - super(context, 0, new ArrayList()); - } - - @Override - public View getView(int position, View convertView, ViewGroup parent) { - if (convertView == null) { - convertView = LayoutInflater.from(getContext()) - .inflate(R.layout.swap_peer_list_item, parent, false); - } - - Peer peer = getItem(position); - ((TextView) convertView.findViewById(R.id.peer_name)).setText(peer.getName()); - ((ImageView) convertView.findViewById(R.id.icon)) - .setImageDrawable(ContextCompat.getDrawable(getContext(), peer.getIcon())); - - return convertView; - } - } - - @Nullable /* Emulators typically don't have bluetooth adapters */ - private final BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter(); - - private MaterialSwitch bluetoothSwitch; - private TextView viewBluetoothId; - private TextView textBluetoothVisible; - private TextView viewWifiId; - private TextView viewWifiNetwork; - private TextView peopleNearbyText; - private ListView peopleNearbyList; - private CircularProgressIndicator peopleNearbyProgress; - - private PeopleNearbyAdapter peopleNearbyAdapter; - - /** - * Remove relevant listeners/subscriptions/etc so that they do not receive and process events - * when this view is not in use. - *

    - */ - @Override - protected void onDetachedFromWindow() { - super.onDetachedFromWindow(); - if (bluetoothSwitch != null) { - bluetoothSwitch.setOnCheckedChangeListener(null); - } - - LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(onWifiNetworkChanged); - } - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - - uiInitPeers(); - uiInitBluetooth(); - uiInitWifi(); - uiInitButtons(); - - LocalBroadcastManager.getInstance(getActivity()).registerReceiver( - onWifiNetworkChanged, new IntentFilter(WifiStateChangeService.BROADCAST)); - } - - private final BroadcastReceiver onWifiNetworkChanged = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - uiUpdateWifiNetwork(); - } - }; - - private void uiInitButtons() { - MaterialButton sendFDroidButton = findViewById(R.id.btn_send_fdroid); - sendFDroidButton.setEllipsize(TextUtils.TruncateAt.END); - findViewById(R.id.btn_send_fdroid).setOnClickListener(v -> getActivity().sendFDroid()); - } - - /** - * Setup the list of nearby peers with an adapter, and hide or show it and the associated - * message for when no peers are nearby depending on what is happening. - * - * @see SwapWorkflowActivity#bonjourFound - * @see SwapWorkflowActivity#bluetoothFound - */ - private void uiInitPeers() { - - peopleNearbyText = (TextView) findViewById(R.id.text_people_nearby); - peopleNearbyList = (ListView) findViewById(R.id.list_people_nearby); - peopleNearbyProgress = (CircularProgressIndicator) findViewById(R.id.searching_people_nearby); - - peopleNearbyAdapter = new PeopleNearbyAdapter(getContext()); - peopleNearbyList.setAdapter(peopleNearbyAdapter); - for (Peer peer : getActivity().getSwapService().getActivePeers()) { - if (peopleNearbyAdapter.getPosition(peer) == -1) { - peopleNearbyAdapter.add(peer); - } - } - - peopleNearbyList.setOnItemClickListener((parent, view, position, id) -> { - Peer peer = peopleNearbyAdapter.getItem(position); - onPeerSelected(peer); - }); - } - - private void uiInitBluetooth() { - if (bluetooth != null) { - - viewBluetoothId = (TextView) findViewById(R.id.device_id_bluetooth); - if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.BLUETOOTH_CONNECT) == - PackageManager.PERMISSION_GRANTED) { - viewBluetoothId.setText(bluetooth.getName()); - } - viewBluetoothId.setVisibility(bluetooth.isEnabled() ? View.VISIBLE : View.GONE); - - textBluetoothVisible = findViewById(R.id.bluetooth_visible); - - bluetoothSwitch = (MaterialSwitch) findViewById(R.id.switch_bluetooth); - bluetoothSwitch.setOnCheckedChangeListener(onBluetoothSwitchToggled); - bluetoothSwitch.setChecked(SwapService.getBluetoothVisibleUserPreference()); - bluetoothSwitch.setEnabled(true); - bluetoothSwitch.setOnCheckedChangeListener(onBluetoothSwitchToggled); - } else { - findViewById(R.id.bluetooth_info).setVisibility(View.GONE); - } - } - - private final CompoundButton.OnCheckedChangeListener onBluetoothSwitchToggled = new CompoundButton.OnCheckedChangeListener() { - @Override - public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { - if (isChecked) { - if (ContextCompat.checkSelfPermission(getContext(), Manifest.permission.BLUETOOTH_CONNECT) != - PackageManager.PERMISSION_GRANTED || - ContextCompat.checkSelfPermission(getContext(), Manifest.permission.BLUETOOTH_SCAN) != - PackageManager.PERMISSION_GRANTED) { - Toast.makeText(getContext(), R.string.swap_bluetooth_permissions, Toast.LENGTH_LONG).show(); - bluetoothSwitch.setChecked(false); - return; - } - Utils.debugLog(TAG, "Received onCheckChanged(true) for Bluetooth swap, prompting user as to whether they want to enable Bluetooth."); - getActivity().startBluetoothSwap(); - textBluetoothVisible.setText(R.string.swap_visible_bluetooth); - viewBluetoothId.setText(bluetooth.getName()); - viewBluetoothId.setVisibility(View.VISIBLE); - Utils.debugLog(TAG, "Received onCheckChanged(true) for Bluetooth swap (prompting user or setup Bluetooth complete)"); - // TODO: When they deny the request for enabling bluetooth, we need to disable this switch... - } else { - Utils.debugLog(TAG, "Received onCheckChanged(false) for Bluetooth swap, disabling Bluetooth swap."); - BluetoothManager.stop(getContext()); - textBluetoothVisible.setText(R.string.swap_not_visible_bluetooth); - viewBluetoothId.setVisibility(View.GONE); - Utils.debugLog(TAG, "Received onCheckChanged(false) for Bluetooth swap, Bluetooth swap disabled successfully."); - } - SwapService.putBluetoothVisibleUserPreference(isChecked); - } - }; - - private void uiInitWifi() { - - viewWifiId = (TextView) findViewById(R.id.device_id_wifi); - viewWifiNetwork = (TextView) findViewById(R.id.wifi_network); - - uiUpdateWifiNetwork(); - } - - private void uiUpdateWifiNetwork() { - - viewWifiId.setText(FDroidApp.ipAddressString); - viewWifiId.setVisibility(TextUtils.isEmpty(FDroidApp.ipAddressString) ? View.GONE : View.VISIBLE); - - WifiApControl wifiAp = WifiApControl.getInstance(getActivity()); - if (wifiAp != null && wifiAp.isWifiApEnabled()) { - WifiConfiguration config = wifiAp.getConfiguration(); - TextView textWifiVisible = findViewById(R.id.wifi_visible); - if (textWifiVisible != null) { - textWifiVisible.setText(R.string.swap_visible_hotspot); - } - Context context = getContext(); - if (config == null) { - viewWifiNetwork.setText(context.getString(R.string.swap_active_hotspot, - context.getString(R.string.swap_blank_wifi_ssid))); - } else { - viewWifiNetwork.setText(context.getString(R.string.swap_active_hotspot, config.SSID)); - } - } else if (TextUtils.isEmpty(FDroidApp.ssid)) { - // not connected to or setup with any wifi network - viewWifiNetwork.setText(R.string.swap_no_wifi_network); - } else { - // connected to a regular wifi network - viewWifiNetwork.setText(FDroidApp.ssid); - } - } - - private void onPeerSelected(Peer peer) { - getActivity().swapWith(peer); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/SwapService.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/SwapService.java deleted file mode 100644 index 4f86394eb..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/SwapService.java +++ /dev/null @@ -1,647 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import static org.fdroid.fdroid.views.main.MainActivity.ACTION_REQUEST_SWAP; - -import android.app.Notification; -import android.app.PendingIntent; -import android.app.Service; -import android.bluetooth.BluetoothAdapter; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.SharedPreferences; -import android.net.Uri; -import android.net.wifi.WifiManager; -import android.os.Build; -import android.os.IBinder; -import android.text.TextUtils; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.app.NotificationCompat; -import androidx.core.app.ServiceCompat; -import androidx.core.content.ContextCompat; -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - -import org.fdroid.database.Repository; -import org.fdroid.download.Downloader; -import org.fdroid.download.NotFoundException; -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.NotificationHelper; -import org.fdroid.fdroid.Preferences; -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.Utils; -import org.fdroid.fdroid.nearby.peers.Peer; -import org.fdroid.fdroid.net.DownloaderFactory; -import org.fdroid.fdroid.net.DownloaderService; -import org.fdroid.index.IndexParser; -import org.fdroid.index.IndexParserKt; -import org.fdroid.index.SigningException; -import org.fdroid.index.v1.IndexV1; -import org.fdroid.index.v1.IndexV1UpdaterKt; -import org.fdroid.index.v1.IndexV1Verifier; -import org.fdroid.index.v2.FileV2; - -import java.io.File; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.Collections; -import java.util.HashSet; -import java.util.Set; -import java.util.Timer; -import java.util.TimerTask; - -import cc.mvdan.accesspoint.WifiApControl; -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers; -import io.reactivex.rxjava3.core.Completable; -import io.reactivex.rxjava3.disposables.CompositeDisposable; -import io.reactivex.rxjava3.schedulers.Schedulers; - -/** - * Central service which manages all of the different moving parts of swap - * which are required to enable p2p swapping of apps. This is the background - * operations for {@link SwapWorkflowActivity}. - */ -public class SwapService extends Service { - private static final String TAG = "SwapService"; - - private static final String SHARED_PREFERENCES = "swap-state"; - private static final String KEY_APPS_TO_SWAP = "appsToSwap"; - private static final String KEY_BLUETOOTH_ENABLED = "bluetoothEnabled"; - private static final String KEY_WIFI_ENABLED = "wifiEnabled"; - private static final String KEY_HOTSPOT_ACTIVATED = "hotspotEnabled"; - private static final String KEY_BLUETOOTH_ENABLED_BEFORE_SWAP = "bluetoothEnabledBeforeSwap"; - private static final String KEY_BLUETOOTH_NAME_BEFORE_SWAP = "bluetoothNameBeforeSwap"; - private static final String KEY_WIFI_ENABLED_BEFORE_SWAP = "wifiEnabledBeforeSwap"; - private static final String KEY_HOTSPOT_ACTIVATED_BEFORE_SWAP = "hotspotEnabledBeforeSwap"; - - @NonNull - private final Set appsToSwap = new HashSet<>(); - private final Set activePeers = new HashSet<>(); - private final MutableLiveData index = new MutableLiveData<>(); - private final MutableLiveData indexError = new MutableLiveData<>(); - - private static LocalBroadcastManager localBroadcastManager; - private static SharedPreferences swapPreferences; - private static BluetoothAdapter bluetoothAdapter; - private static WifiManager wifiManager; - private static Timer pollConnectedSwapRepoTimer; - - public static void stop(Context context) { - Intent intent = new Intent(context, SwapService.class); - context.stopService(intent); - } - - @NonNull - public Set getAppsToSwap() { - return appsToSwap; - } - - @NonNull - public Set getActivePeers() { - return activePeers; - } - - public void connectToPeer() { - if (getPeer() == null) { - throw new IllegalStateException("Cannot connect to peer, no peer has been selected."); - } - connectTo(getPeer()); - if (LocalHTTPDManager.isAlive() && getPeer().shouldPromptForSwapBack()) { - askServerToSwapWithUs(peerRepo); - } - } - - private void connectTo(@NonNull Peer peer) { - if (peer != this.peer) { - Log.e(TAG, "Oops, got a different peer to swap with than initially planned."); - } - peerRepo = FDroidApp.createSwapRepo(peer.getRepoAddress(), null); - try { - updateRepo(peer, peerRepo); - } catch (Exception e) { - Log.e(TAG, "Error updating repo.", e); - indexError.postValue(e); - } - } - - /** - * {@code swapJarFile} is a path where the downloaded data will be written - * to, but this method will not delete it afterwards. - */ - public static IndexV1 getVerifiedRepoIndex(Repository repo, String expectedSigningFingerprint, File swapJarFile) - throws SigningException, IOException, NotFoundException, InterruptedException { - Uri uri = Uri.parse(repo.getAddress()) - .buildUpon() - .appendPath(IndexV1UpdaterKt.SIGNED_FILE_NAME) - .build(); - FileV2 indexFile = FileV2.fromPath("/" + IndexV1UpdaterKt.SIGNED_FILE_NAME); - Downloader downloader = - DownloaderFactory.INSTANCE.createWithTryFirstMirror(repo, uri, indexFile, swapJarFile); - downloader.download(); - IndexV1Verifier verifier = new IndexV1Verifier(swapJarFile, null, expectedSigningFingerprint); - return verifier.getStreamAndVerify(inputStream -> - IndexParserKt.parseV1(IndexParser.INSTANCE, inputStream) - ).getSecond(); - } - - /** - * Start updating the swap repo. If {@code index-v1.jar} is not found, - * then check if {@code index.jar} aka v0 is present. If so, then the - * other side is using an old F-Droid version, so tell the user. - */ - private void updateRepo(@NonNull Peer peer, Repository repo) - throws IOException, InterruptedException, SigningException, NotFoundException { - File swapJarFile = - File.createTempFile("swap", "", getApplicationContext().getCacheDir()); - File ignoredFile; - try { - index.postValue(getVerifiedRepoIndex(repo, peer.getFingerprint(), swapJarFile)); - startPollingConnectedSwapRepo(); - } catch (org.fdroid.download.NotFoundException e) { - String index = "index.jar"; - Uri uri = Uri.parse(repo.getAddress()).buildUpon().appendPath(index).build(); - FileV2 indexFile = FileV2.fromPath("/" + index); - ignoredFile = File.createTempFile("ignored-", ""); - Downloader downloader = - DownloaderFactory.INSTANCE.createWithTryFirstMirror(repo, uri, indexFile, ignoredFile); - downloader.download(); - String msg = getApplicationContext().getString(R.string.swap_connection_indexv0_error); - throw new FileNotFoundException(msg); - } finally { - //noinspection ResultOfMethodCallIgnored - swapJarFile.delete(); - } - } - - @Nullable - public Repository getPeerRepo() { - return peerRepo; - } - - public LiveData getIndex() { - return index; - } - - public LiveData getIndexError() { - return indexError; - } - - // ================================================= - // Have selected a specific peer to swap with - // (Rather than showing a generic QR code to scan) - // ================================================= - - @Nullable - private Peer peer; - - @Nullable - private Repository peerRepo; - - public void swapWith(Peer peer) { - this.peer = peer; - } - - public void addCurrentPeerToActive() { - activePeers.add(peer); - } - - public void removeCurrentPeerFromActive() { - activePeers.remove(peer); - } - - public boolean isConnectingWithPeer() { - return peer != null; - } - - @Nullable - public Peer getPeer() { - return peer; - } - - // ========================================== - // Remember apps user wants to swap - // ========================================== - - private void persistAppsToSwap() { - swapPreferences.edit().putString(KEY_APPS_TO_SWAP, serializePackages(appsToSwap)).apply(); - } - - /** - * Replacement for {@link android.content.SharedPreferences.Editor#putStringSet(String, Set)} - * which is only available in API >= 11. - * Package names are reverse-DNS-style, so they should only have alpha numeric values. Thus, - * this uses a comma as the separator. - * - * @see SwapService#deserializePackages(String) - */ - private static String serializePackages(Set packages) { - StringBuilder sb = new StringBuilder(); - for (String pkg : packages) { - if (sb.length() > 0) { - sb.append(','); - } - sb.append(pkg); - } - return sb.toString(); - } - - /** - * @see SwapService#deserializePackages(String) - */ - private static Set deserializePackages(String packages) { - Set set = new HashSet<>(); - if (!TextUtils.isEmpty(packages)) { - Collections.addAll(set, packages.split(",")); - } - return set; - } - - public void ensureFDroidSelected() { - String fdroid = getPackageName(); - if (!hasSelectedPackage(fdroid)) { - selectPackage(fdroid); - } - } - - public boolean hasSelectedPackage(String packageName) { - return appsToSwap.contains(packageName); - } - - public void selectPackage(String packageName) { - appsToSwap.add(packageName); - persistAppsToSwap(); - } - - public void deselectPackage(String packageName) { - if (appsToSwap.contains(packageName)) { - appsToSwap.remove(packageName); - } - persistAppsToSwap(); - } - - public static boolean getBluetoothVisibleUserPreference() { - return swapPreferences.getBoolean(SwapService.KEY_BLUETOOTH_ENABLED, false); - } - - public static void putBluetoothVisibleUserPreference(boolean visible) { - swapPreferences.edit().putBoolean(SwapService.KEY_BLUETOOTH_ENABLED, visible).apply(); - } - - public static boolean getWifiVisibleUserPreference() { - return swapPreferences.getBoolean(SwapService.KEY_WIFI_ENABLED, false); - } - - public static void putWifiVisibleUserPreference(boolean visible) { - swapPreferences.edit().putBoolean(SwapService.KEY_WIFI_ENABLED, visible).apply(); - } - - public static boolean getHotspotActivatedUserPreference() { - return swapPreferences.getBoolean(SwapService.KEY_HOTSPOT_ACTIVATED, false); - } - - public static void putHotspotActivatedUserPreference(boolean visible) { - swapPreferences.edit().putBoolean(SwapService.KEY_HOTSPOT_ACTIVATED, visible).apply(); - } - - public static boolean wasBluetoothEnabledBeforeSwap() { - return swapPreferences.getBoolean(SwapService.KEY_BLUETOOTH_ENABLED_BEFORE_SWAP, false); - } - - public static void putBluetoothEnabledBeforeSwap(boolean visible) { - swapPreferences.edit().putBoolean(SwapService.KEY_BLUETOOTH_ENABLED_BEFORE_SWAP, visible).apply(); - } - - public static String getBluetoothNameBeforeSwap() { - return swapPreferences.getString(SwapService.KEY_BLUETOOTH_NAME_BEFORE_SWAP, null); - } - - public static void putBluetoothNameBeforeSwap(String name) { - swapPreferences.edit().putString(SwapService.KEY_BLUETOOTH_NAME_BEFORE_SWAP, name).apply(); - } - - public static boolean wasWifiEnabledBeforeSwap() { - return swapPreferences.getBoolean(SwapService.KEY_WIFI_ENABLED_BEFORE_SWAP, false); - } - - public static void putWifiEnabledBeforeSwap(boolean visible) { - swapPreferences.edit().putBoolean(SwapService.KEY_WIFI_ENABLED_BEFORE_SWAP, visible).apply(); - } - - public static boolean wasHotspotEnabledBeforeSwap() { - return swapPreferences.getBoolean(SwapService.KEY_HOTSPOT_ACTIVATED_BEFORE_SWAP, false); - } - - public static void putHotspotEnabledBeforeSwap(boolean visible) { - swapPreferences.edit().putBoolean(SwapService.KEY_HOTSPOT_ACTIVATED_BEFORE_SWAP, visible).apply(); - } - - private static final int NOTIFICATION = 1; - - private final Binder binder = new Binder(); - - private static final int TIMEOUT = 15 * 60 * 1000; // 15 mins - - /** - * Used to automatically turn of swapping after a defined amount of time (15 mins). - */ - @Nullable - private Timer timer; - - private final CompositeDisposable compositeDisposable = new CompositeDisposable(); - - public class Binder extends android.os.Binder { - public SwapService getService() { - return SwapService.this; - } - } - - @Override - public void onCreate() { - super.onCreate(); - startForeground(NOTIFICATION, createNotification()); - localBroadcastManager = LocalBroadcastManager.getInstance(this); - swapPreferences = getSharedPreferences(SHARED_PREFERENCES, Context.MODE_PRIVATE); - - LocalHTTPDManager.start(this); - - bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); - if (bluetoothAdapter != null) { - SwapService.putBluetoothEnabledBeforeSwap(bluetoothAdapter.isEnabled()); - if (bluetoothAdapter.isEnabled()) { - BluetoothManager.start(this); - } - registerReceiver(bluetoothScanModeChanged, - new IntentFilter(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED)); - } - - wifiManager = ContextCompat.getSystemService(getApplicationContext(), WifiManager.class); - if (wifiManager != null) { - SwapService.putWifiEnabledBeforeSwap(wifiManager.isWifiEnabled()); - } - - appsToSwap.addAll(deserializePackages(swapPreferences.getString(KEY_APPS_TO_SWAP, ""))); - - Preferences.get().registerLocalRepoHttpsListeners(httpsEnabledListener); - - localBroadcastManager.registerReceiver(onWifiChange, new IntentFilter(WifiStateChangeService.BROADCAST)); - localBroadcastManager.registerReceiver(bluetoothPeerFound, new IntentFilter(BluetoothManager.ACTION_FOUND)); - localBroadcastManager.registerReceiver(bonjourPeerFound, new IntentFilter(BonjourManager.ACTION_FOUND)); - localBroadcastManager.registerReceiver(bonjourPeerRemoved, new IntentFilter(BonjourManager.ACTION_REMOVED)); - - if (Build.VERSION.SDK_INT <= 28) { - if (getHotspotActivatedUserPreference()) { - WifiApControl wifiApControl = WifiApControl.getInstance(this); - if (wifiApControl != null) { - wifiApControl.enable(); - } - } else if (getWifiVisibleUserPreference()) { - if (wifiManager != null) { - if (!wifiManager.isWifiEnabled()) { - wifiManager.setWifiEnabled(true); - } - } - } - } - - BonjourManager.start(this); - BonjourManager.setVisible(this, getWifiVisibleUserPreference() || getHotspotActivatedUserPreference()); - } - - private void askServerToSwapWithUs(final Repository repo) { - compositeDisposable.add( - Completable.fromAction(() -> { - String swapBackUri = Utils.getLocalRepoUri(FDroidApp.repo).toString(); - HttpURLConnection conn = null; - try { - URL url = new URL(repo.getAddress().replace("/fdroid/repo", "/request-swap")); - conn = (HttpURLConnection) url.openConnection(); - conn.setRequestMethod("POST"); - conn.setDoInput(true); - conn.setDoOutput(true); - - try (OutputStream outputStream = conn.getOutputStream(); - OutputStreamWriter writer = new OutputStreamWriter(outputStream)) { - writer.write("repo=" + swapBackUri); - writer.flush(); - } - - int responseCode = conn.getResponseCode(); - Utils.debugLog(TAG, "Asking server at " + repo.getAddress() + " to swap with us in return (by " + - "POSTing to \"/request-swap\" with repo \"" + swapBackUri + "\"): " + responseCode); - } finally { - if (conn != null) { - conn.disconnect(); - } - } - }) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .onErrorComplete(e -> { - Intent intent = new Intent(DownloaderService.ACTION_INTERRUPTED); - intent.setData(Uri.parse(repo.getAddress())); - intent.putExtra(DownloaderService.EXTRA_ERROR_MESSAGE, e.getLocalizedMessage()); - LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent); - return true; - }) - .subscribe() - ); - } - - /** - * This is for setting things up for when the {@code SwapService} was - * started by the user clicking on the initial start button. The things - * that must be run always on start-up go in {@link #onCreate()}. - */ - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - Intent startUiIntent = new Intent(this, SwapWorkflowActivity.class); - if (intent.getData() != null) { - startUiIntent.setData(intent.getData()); - startUiIntent.setAction(ACTION_REQUEST_SWAP); - } - startUiIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(startUiIntent); - return START_NOT_STICKY; - } - - @Override - public IBinder onBind(Intent intent) { - // reset the timer on each new connect, the user has come back - initTimer(); - return binder; - } - - @Override - public void onDestroy() { - compositeDisposable.dispose(); - - Utils.debugLog(TAG, "Destroying service, will disable swapping if required, and unregister listeners."); - Preferences.get().unregisterLocalRepoHttpsListeners(httpsEnabledListener); - localBroadcastManager.unregisterReceiver(onWifiChange); - localBroadcastManager.unregisterReceiver(bluetoothPeerFound); - localBroadcastManager.unregisterReceiver(bonjourPeerFound); - localBroadcastManager.unregisterReceiver(bonjourPeerRemoved); - - if (bluetoothAdapter != null) { - unregisterReceiver(bluetoothScanModeChanged); - } - - BluetoothManager.stop(this); - - BonjourManager.stop(this); - LocalHTTPDManager.stop(this); - if (Build.VERSION.SDK_INT <= 28) { - if (wifiManager != null && !wasWifiEnabledBeforeSwap()) { - wifiManager.setWifiEnabled(false); - } - WifiApControl ap = WifiApControl.getInstance(this); - if (ap != null) { - try { - if (wasHotspotEnabledBeforeSwap()) { - ap.enable(); - } else { - ap.disable(); - } - } catch (Exception e) { - Log.e(TAG, "could not access/enable/disable WiFi AP", e); - } - } - } - - stopPollingConnectedSwapRepo(); - - if (timer != null) { - timer.cancel(); - } - ServiceCompat.stopForeground(this, ServiceCompat.STOP_FOREGROUND_REMOVE); - - super.onDestroy(); - } - - private Notification createNotification() { - Intent intent = new Intent(this, SwapWorkflowActivity.class); - intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); - PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, - PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE); - return new NotificationCompat.Builder(this, NotificationHelper.CHANNEL_SWAPS) - .setContentTitle(getText(R.string.local_repo_running)) - .setContentText(getText(R.string.touch_to_configure_local_repo)) - .setSmallIcon(R.drawable.ic_nearby) - .setContentIntent(contentIntent) - .build(); - } - - private void startPollingConnectedSwapRepo() { - stopPollingConnectedSwapRepo(); - pollConnectedSwapRepoTimer = new Timer("pollConnectedSwapRepoTimer", true); - TimerTask timerTask = new TimerTask() { - @Override - public void run() { - if (peer != null) { - connectTo(peer); - } - } - }; - pollConnectedSwapRepoTimer.schedule(timerTask, 5000); - } - - public void stopPollingConnectedSwapRepo() { - if (pollConnectedSwapRepoTimer != null) { - pollConnectedSwapRepoTimer.cancel(); - pollConnectedSwapRepoTimer = null; - } - } - - /** - * Sets or resets the idle timer for {@link #TIMEOUT}ms, once the timer - * expires, this service and all things that rely on it will be stopped. - */ - public void initTimer() { - if (timer != null) { - Utils.debugLog(TAG, "Cancelling existing timeout timer so timeout can be reset."); - timer.cancel(); - } - - Utils.debugLog(TAG, "Initializing swap timeout to " + TIMEOUT + "ms minutes"); - timer = new Timer(TAG, true); - timer.schedule(new TimerTask() { - @Override - public void run() { - Utils.debugLog(TAG, "Disabling swap because " + TIMEOUT + "ms passed."); - String msg = getString(R.string.swap_toast_closing_nearby_after_timeout); - Utils.showToastFromService(SwapService.this, msg, android.widget.Toast.LENGTH_LONG); - stop(SwapService.this); - } - }, TIMEOUT); - } - - private void restartWiFiServices() { - boolean hasIp = FDroidApp.ipAddressString != null; - if (hasIp) { - LocalHTTPDManager.restart(this); - BonjourManager.restart(this); - BonjourManager.setVisible(this, getWifiVisibleUserPreference() || getHotspotActivatedUserPreference()); - } else { - BonjourManager.stop(this); - LocalHTTPDManager.stop(this); - } - } - - private final Preferences.ChangeListener httpsEnabledListener = this::restartWiFiServices; - - private final BroadcastReceiver onWifiChange = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent i) { - restartWiFiServices(); - } - }; - - /** - * Handle events if the user or system changes the Bluetooth setup outside of F-Droid. - */ - private final BroadcastReceiver bluetoothScanModeChanged = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - switch (intent.getIntExtra(BluetoothAdapter.EXTRA_SCAN_MODE, -1)) { - case BluetoothAdapter.SCAN_MODE_NONE: - BluetoothManager.stop(SwapService.this); - break; - - case BluetoothAdapter.SCAN_MODE_CONNECTABLE: - case BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE: - BluetoothManager.start(SwapService.this); - break; - } - } - }; - - private final BroadcastReceiver bluetoothPeerFound = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - activePeers.add((Peer) intent.getParcelableExtra(BluetoothManager.EXTRA_PEER)); - } - }; - - private final BroadcastReceiver bonjourPeerFound = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - activePeers.add((Peer) intent.getParcelableExtra(BonjourManager.EXTRA_BONJOUR_PEER)); - } - }; - - private final BroadcastReceiver bonjourPeerRemoved = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - activePeers.remove((Peer) intent.getParcelableExtra(BonjourManager.EXTRA_BONJOUR_PEER)); - } - }; -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/SwapSuccessView.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/SwapSuccessView.java deleted file mode 100644 index f23128268..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/SwapSuccessView.java +++ /dev/null @@ -1,380 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.app.PendingIntent; -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.util.AttributeSet; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.pm.PackageInfoCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.google.android.material.progressindicator.LinearProgressIndicator; - -import org.fdroid.database.Repository; -import org.fdroid.fdroid.CompatibilityChecker; -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.Utils; -import org.fdroid.fdroid.data.Apk; -import org.fdroid.fdroid.data.App; -import org.fdroid.fdroid.installer.InstallManagerService; -import org.fdroid.fdroid.installer.Installer; -import org.fdroid.fdroid.net.DownloaderService; -import org.fdroid.index.v1.AppV1; -import org.fdroid.index.v1.IndexV1; -import org.fdroid.index.v1.PackageV1; -import org.fdroid.index.v1.PermissionV1; -import org.fdroid.index.v2.FileV1; -import org.fdroid.index.v2.FileV2; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * This is a view that shows a listing of all apps in the swap repo that this - * just connected to. The app listing and search should be replaced by - * {@link org.fdroid.fdroid.views.apps.AppListActivity}'s plumbing. - */ -// TODO merge this with AppListActivity, perhaps there could be AppListView? -public class SwapSuccessView extends SwapView { - private static final String TAG = "SwapSuccessView"; - - public SwapSuccessView(Context context) { - super(context); - } - - public SwapSuccessView(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public SwapSuccessView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - public SwapSuccessView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - } - - private Repository repo; - private AppListAdapter adapter; - - @Override - protected void onFinishInflate() { - super.onFinishInflate(); - repo = getActivity().getSwapService().getPeerRepo(); - - adapter = new AppListAdapter(); - RecyclerView listView = findViewById(R.id.list); - listView.setAdapter(adapter); - - getActivity().getSwapService().getIndex().observe(getActivity(), this::onIndexReceived); - } - - private void onIndexReceived(IndexV1 indexV1) { - List apps = new ArrayList<>(indexV1.getApps().size()); - HashMap apks = new HashMap<>(indexV1.getApps().size()); - CompatibilityChecker checker = new CompatibilityChecker(getContext()); - for (AppV1 a : indexV1.getApps()) { - App app = new App(); - app.name = a.getName(); - app.packageName = a.getPackageName(); - app.iconFile = FileV2.fromPath("icons/" + a.getIcon()); - try { - PackageInfo packageInfo = getContext().getPackageManager().getPackageInfo(app.packageName, 0); - app.installedVersionCode = PackageInfoCompat.getLongVersionCode(packageInfo); - } catch (PackageManager.NameNotFoundException ignored) { - } - Apk apk = new Apk(); - List packages = indexV1.getPackages().get(app.packageName); - if (packages != null && packages.get(0) != null) { - PackageV1 packageV1 = packages.get(0); - if (packageV1.getVersionCode() != null) { - app.autoInstallVersionCode = packageV1.getVersionCode().intValue(); - } - if (packageV1.getVersionCode() != null) { - apk.versionCode = packageV1.getVersionCode(); - } - apk.versionName = packageV1.getVersionName(); - apk.apkFile = new FileV1("/" + packageV1.getApkName(), packageV1.getHash(), packageV1.getSize(), null); - ArrayList permissions = - new ArrayList<>(packageV1.getUsesPermission().size()); - for (PermissionV1 perm : packageV1.getUsesPermission()) { - permissions.add(perm.getName()); - } - apk.requestedPermissions = permissions.toArray(new String[0]); - if (apk.requestedPermissions.length == 0) apk.requestedPermissions = null; - } - - apk.repoId = Long.MAX_VALUE; - apk.packageName = app.packageName; - apk.repoAddress = repo.getAddress(); - apk.canonicalRepoAddress = repo.getAddress(); - apk.setCompatibility(checker); - app.compatible = apk.compatible; - - apps.add(app); - apks.put(app.packageName, apk); - } - adapter.setApps(apps, apks); - } - - private class AppListAdapter extends RecyclerView.Adapter { - - private final List apps = new ArrayList<>(); - private final Map apks = new HashMap<>(); - - private class ViewHolder extends RecyclerView.ViewHolder { - - private final LocalBroadcastManager localBroadcastManager; - - @Nullable - private App app; - - @Nullable - private Apk apk; - - LinearProgressIndicator progressView; - TextView nameView; - ImageView iconView; - Button btnInstall; - TextView statusInstalled; - TextView statusIncompatible; - - private class DownloadReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - switch (intent.getAction()) { - case DownloaderService.ACTION_STARTED: - resetView(); - break; - case DownloaderService.ACTION_PROGRESS: - if (progressView.getVisibility() != View.VISIBLE) { - showProgress(); - } - long read = intent.getLongExtra(DownloaderService.EXTRA_BYTES_READ, 0); - long total = intent.getLongExtra(DownloaderService.EXTRA_TOTAL_BYTES, 0); - if (total > 0) { - progressView.setProgressCompat(Utils.getPercent(read, total), true); - } else { - if (!progressView.isIndeterminate()) { - progressView.hide(); - progressView.setIndeterminate(true); - } - } - progressView.show(); - break; - case DownloaderService.ACTION_COMPLETE: - localBroadcastManager.unregisterReceiver(this); - resetView(); - statusInstalled.setText(R.string.installing); - statusInstalled.setVisibility(View.VISIBLE); - btnInstall.setVisibility(View.GONE); - break; - case DownloaderService.ACTION_CONNECTION_FAILED: - case DownloaderService.ACTION_INTERRUPTED: - localBroadcastManager.unregisterReceiver(this); - if (intent.hasExtra(DownloaderService.EXTRA_ERROR_MESSAGE)) { - String msg = intent.getStringExtra(DownloaderService.EXTRA_ERROR_MESSAGE) - + " " + intent.getDataString(); - Toast.makeText(context, R.string.download_error, Toast.LENGTH_SHORT).show(); - Toast.makeText(context, msg, Toast.LENGTH_LONG).show(); - } else { // user canceled - Toast.makeText(context, R.string.details_notinstalled, Toast.LENGTH_LONG).show(); - } - resetView(); - break; - default: - throw new RuntimeException("intent action not handled!"); - } - } - } - - ViewHolder(View view) { - super(view); - localBroadcastManager = LocalBroadcastManager.getInstance(getContext()); - progressView = view.findViewById(R.id.progress); - nameView = view.findViewById(R.id.name); - iconView = view.findViewById(android.R.id.icon); - btnInstall = view.findViewById(R.id.btn_install); - statusInstalled = view.findViewById(R.id.status_installed); - statusIncompatible = view.findViewById(R.id.status_incompatible); - } - - public void setApp(@NonNull App app) { - if (this.app == null || !this.app.packageName.equals(app.packageName)) { - this.app = app; - this.apk = apks.get(this.app.packageName); - - if (apk != null) { - localBroadcastManager.registerReceiver(new DownloadReceiver(), - DownloaderService.getIntentFilter(apk.getCanonicalUrl())); - localBroadcastManager.registerReceiver(new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - switch (intent.getAction()) { - case Installer.ACTION_INSTALL_STARTED: - statusInstalled.setText(R.string.installing); - statusInstalled.setVisibility(View.VISIBLE); - btnInstall.setVisibility(View.GONE); - if (!progressView.isIndeterminate()) { - progressView.hide(); - progressView.setIndeterminate(true); - } - progressView.show(); - break; - case Installer.ACTION_INSTALL_USER_INTERACTION: - PendingIntent installPendingIntent = - intent.getParcelableExtra(Installer.EXTRA_USER_INTERACTION_PI); - try { - installPendingIntent.send(); - } catch (PendingIntent.CanceledException e) { - Log.e(TAG, "PI canceled", e); - } - break; - case Installer.ACTION_INSTALL_COMPLETE: - localBroadcastManager.unregisterReceiver(this); - statusInstalled.setText(R.string.app_installed); - statusInstalled.setVisibility(View.VISIBLE); - btnInstall.setVisibility(View.GONE); - progressView.hide(); - break; - case Installer.ACTION_INSTALL_INTERRUPTED: - localBroadcastManager.unregisterReceiver(this); - statusInstalled.setVisibility(View.GONE); - btnInstall.setVisibility(View.VISIBLE); - progressView.hide(); - String errorMessage = intent.getStringExtra(Installer.EXTRA_ERROR_MESSAGE); - if (errorMessage != null) { - Toast.makeText(getContext(), errorMessage, Toast.LENGTH_LONG).show(); - } - break; - } - } - }, Installer.getInstallIntentFilter(apk.getCanonicalUrl())); - } - } - resetView(); - } - - private final OnClickListener cancelListener = new OnClickListener() { - @Override - public void onClick(View v) { - if (apk != null) { - InstallManagerService.cancel(getContext(), apk.getCanonicalUrl()); - } - } - }; - - private final OnClickListener installListener = new OnClickListener() { - @Override - public void onClick(View v) { - if (apk != null && (app.hasUpdates() || app.compatible)) { - showProgress(); - InstallManagerService.queue(getContext(), app, apk); - } - } - }; - - private void resetView() { - if (app == null) { - return; - } - - if (!progressView.isIndeterminate()) { - progressView.hide(); - progressView.setIndeterminate(true); - } - progressView.show(); - - if (app.name != null) { - nameView.setText(app.name); - } - - Glide.with(iconView.getContext()) - .load(Utils.getGlideModel(repo, app.iconFile)) - .apply(Utils.getAlwaysShowIconRequestOptions()) - .into(iconView); - - if (app.hasUpdates()) { - btnInstall.setText(R.string.menu_upgrade); - btnInstall.setVisibility(View.VISIBLE); - btnInstall.setOnClickListener(installListener); - statusIncompatible.setVisibility(View.GONE); - statusInstalled.setVisibility(View.GONE); - } else if (app.isInstalled(getContext())) { - btnInstall.setVisibility(View.GONE); - statusIncompatible.setVisibility(View.GONE); - statusInstalled.setVisibility(View.VISIBLE); - statusInstalled.setText(R.string.app_installed); - } else if (!app.compatible) { - btnInstall.setVisibility(View.GONE); - statusIncompatible.setVisibility(View.VISIBLE); - statusInstalled.setVisibility(View.GONE); - } else if (progressView.getVisibility() == View.VISIBLE) { - btnInstall.setText(R.string.cancel); - btnInstall.setVisibility(View.VISIBLE); - btnInstall.setOnClickListener(cancelListener); - statusIncompatible.setVisibility(View.GONE); - statusInstalled.setVisibility(View.GONE); - } else { - btnInstall.setText(R.string.menu_install); - btnInstall.setVisibility(View.VISIBLE); - btnInstall.setOnClickListener(installListener); - statusIncompatible.setVisibility(View.GONE); - statusInstalled.setVisibility(View.GONE); - } - } - - private void showProgress() { - btnInstall.setText(R.string.cancel); - btnInstall.setVisibility(View.VISIBLE); - btnInstall.setOnClickListener(cancelListener); - progressView.show(); - statusInstalled.setVisibility(View.GONE); - statusIncompatible.setVisibility(View.GONE); - } - } - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()) - .inflate(R.layout.swap_app_list_item, parent, false); - return new ViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) { - holder.setApp(apps.get(position)); - } - - @Override - public int getItemCount() { - return apps.size(); - } - - void setApps(List apps, Map apks) { - this.apps.clear(); - this.apps.addAll(apps); - this.apks.clear(); - this.apks.putAll(apks); - notifyDataSetChanged(); - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/SwapView.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/SwapView.java deleted file mode 100644 index 0f08fcead..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/SwapView.java +++ /dev/null @@ -1,86 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.content.Context; -import android.content.res.TypedArray; -import android.util.AttributeSet; -import android.widget.RelativeLayout; - -import androidx.annotation.ColorInt; -import androidx.annotation.LayoutRes; -import androidx.core.content.ContextCompat; - -import org.fdroid.fdroid.R; - -/** - * A {@link android.view.View} that registers to handle the swap events from - * {@link SwapService}. - */ -public class SwapView extends RelativeLayout { - public static final String TAG = "SwapView"; - - @ColorInt - public final int toolbarColor; - public final String toolbarTitle; - - private int layoutResId = -1; - - protected String currentFilterString; - - public SwapView(Context context) { - this(context, null); - } - - public SwapView(Context context, AttributeSet attrs) { - this(context, attrs, 0); - } - - /** - * In order to support Android < 21, this calls {@code super} rather than - * {@code this}. {@link RelativeLayout}'s methods just use a 0 for the - * fourth argument, just like this used to. - */ - public SwapView(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - final TypedArray a = context.obtainStyledAttributes( - attrs, R.styleable.SwapView, 0, 0); - toolbarColor = a.getColor(R.styleable.SwapView_toolbarColor, - ContextCompat.getColor(context, R.color.swap_blue)); - toolbarTitle = a.getString(R.styleable.SwapView_toolbarTitle); - a.recycle(); - } - - public SwapView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - final TypedArray a = context.obtainStyledAttributes( - attrs, R.styleable.SwapView, 0, 0); - toolbarColor = a.getColor(R.styleable.SwapView_toolbarColor, - ContextCompat.getColor(context, R.color.swap_blue)); - toolbarTitle = a.getString(R.styleable.SwapView_toolbarTitle); - a.recycle(); - } - - @LayoutRes - public int getLayoutResId() { - return layoutResId; - } - - public void setLayoutResId(@LayoutRes int layoutResId) { - this.layoutResId = layoutResId; - } - - public String getCurrentFilterString() { - return this.currentFilterString; - } - - public void setCurrentFilterString(String currentFilterString) { - this.currentFilterString = currentFilterString; - } - - public SwapWorkflowActivity getActivity() { - return (SwapWorkflowActivity) getContext(); - } - - public String getToolbarTitle() { - return toolbarTitle; - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java deleted file mode 100644 index 66118bc64..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/SwapWorkflowActivity.java +++ /dev/null @@ -1,1457 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import static org.fdroid.fdroid.views.main.MainActivity.ACTION_REQUEST_SWAP; - -import android.Manifest; -import android.bluetooth.BluetoothAdapter; -import android.content.BroadcastReceiver; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.ServiceConnection; -import android.content.pm.PackageManager; -import android.graphics.LightingColorFilter; -import android.net.Uri; -import android.net.wifi.WifiInfo; -import android.net.wifi.WifiManager; -import android.os.Build; -import android.os.Bundle; -import android.os.IBinder; -import android.provider.Settings; -import android.text.TextUtils; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.ListView; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.activity.result.ActivityResultLauncher; -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.annotation.LayoutRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.StringRes; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.SearchView; -import androidx.core.content.ContextCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - -import com.google.android.material.appbar.MaterialToolbar; -import com.google.android.material.button.MaterialButton; -import com.google.android.material.dialog.MaterialAlertDialogBuilder; -import com.google.android.material.materialswitch.MaterialSwitch; -import com.google.android.material.progressindicator.CircularProgressIndicator; -import com.google.zxing.integration.android.IntentIntegrator; -import com.google.zxing.integration.android.IntentResult; - -import org.fdroid.fdroid.BuildConfig; -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.Preferences; -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.Utils; -import org.fdroid.fdroid.nearby.peers.BluetoothPeer; -import org.fdroid.fdroid.nearby.peers.Peer; -import org.fdroid.fdroid.net.BluetoothDownloader; -import org.fdroid.fdroid.qr.CameraCharacteristicsChecker; -import org.fdroid.fdroid.views.main.MainActivity; - -import java.util.Date; -import java.util.HashMap; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.Stack; -import java.util.Timer; -import java.util.TimerTask; - -import cc.mvdan.accesspoint.WifiApControl; -import io.reactivex.rxjava3.disposables.CompositeDisposable; - -/** - * This is the core of the UI for the whole nearby swap experience. Each - * screen is implemented as a {@link View} with the related logic in this - * {@link android.app.Activity}. Long lived pieces work in {@link SwapService}. - * All these pieces of the UX are tracked here: - *

      - *
    • which WiFi network to use
    • - *
    • whether to advertise via Bluetooth or WiFi+Bonjour
    • - *
    • connect to another device's swap
    • - *
    • choose which apps to share
    • - *
    • ask if the other device would like to swap with us
    • - *
    • help connect via QR Code or NFC
    • - *
    - *

    - * There are lots of async events in this system, and the user can also change - * the views while things are working. The {@link ViewGroup} - * {@link SwapWorkflowActivity#container} can have all its widgets removed and - * replaced by a new view at any point. Therefore, any widget config that is - * based on fetching it from {@code container} must check that the result is - * not null before trying to config it. - * - * @see - */ -@SuppressWarnings("LineLength") -public class SwapWorkflowActivity extends AppCompatActivity { - private static final String TAG = "SwapWorkflowActivity"; - - /** - * When connecting to a swap, we then go and initiate a connection with that - * device and ask if it would like to swap with us. Upon receiving that request - * and agreeing, we don't then want to be asked whether we want to swap back. - * This flag protects against two devices continually going back and forth - * among each other offering swaps. - */ - public static final String EXTRA_PREVENT_FURTHER_SWAP_REQUESTS = "preventFurtherSwap"; - - private ViewGroup container; - - private static final int REQUEST_BLUETOOTH_ENABLE_FOR_SWAP = 2; - private static final int REQUEST_BLUETOOTH_DISCOVERABLE = 3; - private static final int REQUEST_BLUETOOTH_ENABLE_FOR_SEND = 4; - private static final int REQUEST_WRITE_SETTINGS_PERMISSION = 5; - - private MaterialToolbar toolbar; - private SwapView currentView; - private boolean hasPreparedLocalRepo; - private boolean newIntent; - private NewRepoConfig confirmSwapConfig; - private LocalBroadcastManager localBroadcastManager; - private WifiManager wifiManager; - private WifiApControl wifiApControl; - private BluetoothAdapter bluetoothAdapter; - - @LayoutRes - private int currentSwapViewLayoutRes = R.layout.swap_start_swap; - private final Stack backstack = new Stack<>(); - - private final CompositeDisposable compositeDisposable = new CompositeDisposable(); - - private final ActivityResultLauncher requestPermissionLauncher = - registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> { - if (isGranted) sendFDroidBluetooth(); - }); - - public static void requestSwap(Context context, String repo) { - requestSwap(context, Uri.parse(repo)); - } - - public static void requestSwap(Context context, Uri uri) { - Intent intent = new Intent(MainActivity.ACTION_REQUEST_SWAP, uri, context, SwapWorkflowActivity.class); - intent.putExtra(EXTRA_PREVENT_FURTHER_SWAP_REQUESTS, true); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - } - - @NonNull - private final ServiceConnection serviceConnection = new ServiceConnection() { - @Override - public void onServiceConnected(ComponentName className, IBinder binder) { - service = ((SwapService.Binder) binder).getService(); - service.getIndex().observe(SwapWorkflowActivity.this, index -> - onRepoUpdateSuccess()); - service.getIndexError().observe(SwapWorkflowActivity.this, e -> - onRepoUpdateError(e)); - showRelevantView(); - } - - @Override - public void onServiceDisconnected(ComponentName className) { - finish(); - service.getIndex().removeObservers(SwapWorkflowActivity.this); - service.getIndexError().removeObservers(SwapWorkflowActivity.this); - service = null; - } - }; - - @Nullable - private SwapService service; - - @NonNull - public SwapService getSwapService() { - return service; - } - - /** - * Handle the back logic for the system back button. - * - * @see #inflateSwapView(int, boolean) - */ - @Override - public void onBackPressed() { - if (backstack.isEmpty()) { - super.onBackPressed(); - } else { - int resId = backstack.pop(); - inflateSwapView(resId, true); - } - } - - /** - * Handle the back logic for the upper left back button in the toolbar. - * This has a simpler, hard-coded back logic than the system back button. - * - * @see #onBackPressed() - */ - public void onToolbarBackPressed() { - int nextStep = R.layout.swap_start_swap; - if (currentView.getLayoutResId() == R.layout.swap_confirm_receive) { - nextStep = backstack.peek(); - } else if (currentView.getLayoutResId() == R.layout.swap_connecting) { - nextStep = R.layout.swap_select_apps; - } else if (currentView.getLayoutResId() == R.layout.swap_join_wifi) { - nextStep = R.layout.swap_start_swap; - } else if (currentView.getLayoutResId() == R.layout.swap_select_apps) { - if (!backstack.isEmpty() && backstack.peek() == R.layout.swap_start_swap) { - nextStep = R.layout.swap_start_swap; - } else if (getSwapService() != null && getSwapService().isConnectingWithPeer()) { - nextStep = R.layout.swap_success; - } else { - nextStep = R.layout.swap_join_wifi; - } - } else if (currentView.getLayoutResId() == R.layout.swap_send_fdroid) { - nextStep = R.layout.swap_start_swap; - } else if (currentView.getLayoutResId() == R.layout.swap_start_swap) { - if (getSwapService() != null && getSwapService().isConnectingWithPeer()) { - nextStep = R.layout.swap_success; - } else { - SwapService.stop(this); - finish(); - return; - } - } else if (currentView.getLayoutResId() == R.layout.swap_success) { - nextStep = R.layout.swap_start_swap; - } else if (currentView.getLayoutResId() == R.layout.swap_wifi_qr) { - if (!backstack.isEmpty() && backstack.peek() == R.layout.swap_start_swap) { - nextStep = R.layout.swap_start_swap; - } else { - nextStep = R.layout.swap_join_wifi; - } - } - currentSwapViewLayoutRes = nextStep; - inflateSwapView(currentSwapViewLayoutRes); - } - - @Override - protected void onCreate(Bundle savedInstanceState) { - FDroidApp fdroidApp = (FDroidApp) getApplication(); - fdroidApp.setSecureWindow(this); - - fdroidApp.applyPureBlackBackgroundInDarkTheme(this); - - super.onCreate(savedInstanceState); - - currentView = new SwapView(this); // dummy placeholder to avoid NullPointerExceptions; - - if (!bindService(new Intent(this, SwapService.class), serviceConnection, - BIND_ABOVE_CLIENT | BIND_IMPORTANT)) { - Toast.makeText(this, "ERROR: cannot bind to SwapService!", Toast.LENGTH_LONG).show(); - finish(); - } - - setContentView(R.layout.swap_activity); - - toolbar = findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - container = (ViewGroup) findViewById(R.id.container); - - backstack.clear(); - - localBroadcastManager = LocalBroadcastManager.getInstance(this); - - wifiManager = ContextCompat.getSystemService(getApplicationContext(), WifiManager.class); - wifiApControl = WifiApControl.getInstance(this); - - bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); - - new SwapDebug().logStatus(); - } - - @Override - protected void onDestroy() { - compositeDisposable.dispose(); - unbindService(serviceConnection); - super.onDestroy(); - } - - @Override - public boolean onPrepareOptionsMenu(Menu menu) { - menu.clear(); - - MenuInflater menuInflater = getMenuInflater(); - if (currentView.getLayoutResId() == R.layout.swap_select_apps) { - menuInflater.inflate(R.menu.swap_next_search, menu); - if (getSwapService().isConnectingWithPeer()) { - setUpNextButton(menu, R.string.next, R.drawable.ic_nearby); - } else { - setUpNextButton(menu, R.string.next, null); - } - setUpSearchView(menu); - return true; - } else if (currentView.getLayoutResId() == R.layout.swap_success) { - menuInflater.inflate(R.menu.swap_search, menu); - setUpSearchView(menu); - return true; - } else if (currentView.getLayoutResId() == R.layout.swap_join_wifi) { - menuInflater.inflate(R.menu.swap_next, menu); - setUpNextButton(menu, R.string.next, R.drawable.ic_arrow_forward); - return true; - } - - return super.onPrepareOptionsMenu(menu); - } - - private void setUpNextButton(Menu menu, @StringRes int titleResId, Integer drawableResId) { - MenuItem next = menu.findItem(R.id.action_next); - CharSequence title = getString(titleResId); - next.setTitle(title); - next.setTitleCondensed(title); - if (drawableResId == null) { - next.setVisible(false); - } else { - next.setVisible(true); - next.setIcon(drawableResId); - } - next.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); - next.setOnMenuItemClickListener(item -> { - sendNext(); - return true; - }); - } - - private void sendNext() { - int currentLayoutResId = currentView.getLayoutResId(); - if (currentLayoutResId == R.layout.swap_select_apps) { - onAppsSelected(); - } else if (currentLayoutResId == R.layout.swap_join_wifi) { - inflateSwapView(R.layout.swap_select_apps); - } - } - - private void setUpSearchView(Menu menu) { - MenuItem appsMenuItem = menu.findItem(R.id.action_apps); - if (appsMenuItem != null) { - appsMenuItem.setOnMenuItemClickListener(item -> { - inflateSwapView(R.layout.swap_select_apps); - return true; - }); - } - - SearchView searchView = new SearchView(this); - MenuItem searchMenuItem = menu.findItem(R.id.action_search); - searchMenuItem.setActionView(searchView); - searchMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); - - searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { - - @Override - public boolean onQueryTextSubmit(String newText) { - String currentFilterString = currentView.getCurrentFilterString(); - String newFilter = !TextUtils.isEmpty(newText) ? newText : null; - if (currentFilterString == null && newFilter == null) { - return true; - } - if (currentFilterString != null && currentFilterString.equals(newFilter)) { - return true; - } - currentView.setCurrentFilterString(newFilter); - return true; - } - - @Override - public boolean onQueryTextChange(String s) { - return true; - } - }); - } - - @Override - protected void onResume() { - super.onResume(); - - localBroadcastManager.registerReceiver(onWifiStateChanged, - new IntentFilter(WifiStateChangeService.BROADCAST)); - localBroadcastManager.registerReceiver(localRepoStatus, new IntentFilter(LocalRepoService.ACTION_STATUS)); - localBroadcastManager.registerReceiver(bonjourFound, new IntentFilter(BonjourManager.ACTION_FOUND)); - localBroadcastManager.registerReceiver(bonjourRemoved, new IntentFilter(BonjourManager.ACTION_REMOVED)); - localBroadcastManager.registerReceiver(bonjourStatusReceiver, new IntentFilter(BonjourManager.ACTION_STATUS)); - localBroadcastManager.registerReceiver(bluetoothFound, new IntentFilter(BluetoothManager.ACTION_FOUND)); - localBroadcastManager.registerReceiver(bluetoothStatusReceiver, new IntentFilter(BluetoothManager.ACTION_STATUS)); - - registerReceiver(bluetoothScanModeChanged, - new IntentFilter(BluetoothAdapter.ACTION_SCAN_MODE_CHANGED)); - - checkIncomingIntent(); - - // could be we just started the service and it wasn't bound, yet - if (service != null && newIntent) { - showRelevantView(); - newIntent = false; - } - - if (currentSwapViewLayoutRes == R.layout.swap_start_swap) { - updateWifiBannerVisibility(); - } - } - - @Override - protected void onPause() { - super.onPause(); - - unregisterReceiver(bluetoothScanModeChanged); - - localBroadcastManager.unregisterReceiver(onWifiStateChanged); - localBroadcastManager.unregisterReceiver(localRepoStatus); - localBroadcastManager.unregisterReceiver(bonjourFound); - localBroadcastManager.unregisterReceiver(bonjourRemoved); - localBroadcastManager.unregisterReceiver(bonjourStatusReceiver); - localBroadcastManager.unregisterReceiver(bluetoothFound); - localBroadcastManager.unregisterReceiver(bluetoothStatusReceiver); - } - - @Override - protected void onNewIntent(Intent intent) { - super.onNewIntent(intent); - setIntent(intent); - newIntent = true; - } - - /** - * Check whether incoming {@link Intent} is a swap repo, and ensure that - * it is a valid swap URL. The hostname can only be either an IP or - * Bluetooth address. - */ - private void checkIncomingIntent() { - Intent intent = getIntent(); - if (!ACTION_REQUEST_SWAP.equals(intent.getAction())) { - return; - } - Uri uri = intent.getData(); - if (uri != null && !isSwapUrl(uri) && !BluetoothDownloader.isBluetoothUri(uri)) { - String msg = getString(R.string.swap_toast_invalid_url, uri); - Toast.makeText(this, msg, Toast.LENGTH_LONG).show(); - return; - } - confirmSwapConfig = new NewRepoConfig(this, intent); - checkIfNewRepoOnSameWifi(confirmSwapConfig); - } - - private static boolean isSwapUrl(Uri uri) { - return isSwapUrl(uri.getHost(), uri.getPort()); - } - - private static boolean isSwapUrl(String host, int port) { - return port > 1023 // only root can use <= 1023, so never a swap repo - && host.matches("[0-9.]+") // host must be an IP address - && FDroidApp.subnetInfo.isInRange(host); // on the same subnet as we are - } - - private void promptToSelectWifiNetwork() { - new MaterialAlertDialogBuilder(this) - .setTitle(R.string.swap_join_same_wifi) - .setMessage(R.string.swap_join_same_wifi_desc) - .setNeutralButton(R.string.cancel, (dialog, which) -> { - // Do nothing - }) - .setPositiveButton(R.string.wifi, (dialog, which) -> { - SwapService.putWifiEnabledBeforeSwap(wifiManager.isWifiEnabled()); - if (Build.VERSION.SDK_INT <= 28) { - wifiManager.setWifiEnabled(true); - } - Intent intent = new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intent); - }) - .setNegativeButton(R.string.wifi_ap, (dialog, which) -> { - if (Build.VERSION.SDK_INT >= 26) { - showTetheringSettings(); - } else if (!Settings.System.canWrite(getBaseContext())) { - requestWriteSettingsPermission(); - } else { - setupWifiAP(); - } - }) - .create().show(); - } - - private void setupWifiAP() { - if (wifiApControl == null) { - Log.e(TAG, "WiFi AP is null"); - Toast.makeText(this, R.string.swap_toast_could_not_enable_hotspot, Toast.LENGTH_LONG).show(); - return; - } - SwapService.putHotspotEnabledBeforeSwap(wifiApControl.isEnabled()); - if (Build.VERSION.SDK_INT <= 28) { - wifiManager.setWifiEnabled(false); - } - boolean wifiEnabled = false; - try { - wifiEnabled = wifiApControl.enable(); - } catch (Exception e) { - Log.e(TAG, "Error enabling WiFi: ", e); - } - if (wifiEnabled) { - Toast.makeText(this, R.string.swap_toast_hotspot_enabled, Toast.LENGTH_SHORT).show(); - SwapService.putHotspotActivatedUserPreference(true); - } else { - Toast.makeText(this, R.string.swap_toast_could_not_enable_hotspot, Toast.LENGTH_LONG).show(); - SwapService.putHotspotActivatedUserPreference(false); - Log.e(TAG, "Could not enable WiFi AP."); - } - } - - /** - * Handle events that trigger different swap views to be shown. - */ - private void showRelevantView() { - - if (confirmSwapConfig != null) { - inflateSwapView(R.layout.swap_confirm_receive); - setUpConfirmReceive(); - confirmSwapConfig = null; - return; - } - - if (currentSwapViewLayoutRes == R.layout.swap_start_swap) { - showIntro(); - return; - } else if (currentSwapViewLayoutRes == R.layout.swap_connecting) { - // TODO: Properly decide what to do here (i.e. returning to the activity after it was connecting)... - inflateSwapView(R.layout.swap_start_swap); - return; - } - inflateSwapView(currentSwapViewLayoutRes); - } - - public void inflateSwapView(@LayoutRes int viewRes) { - inflateSwapView(viewRes, false); - - if (viewRes == R.layout.swap_start_swap) { - updateWifiBannerVisibility(); - } - } - - private void updateWifiBannerVisibility() { - final View wifiBanner = findViewById(R.id.wifi_banner); - if (wifiBanner != null) { - if (Build.VERSION.SDK_INT >= 29 && wifiManager != null && !wifiManager.isWifiEnabled()) { - Button turnOnWifi = findViewById(R.id.turn_on_wifi); - if (turnOnWifi != null) { - turnOnWifi.setOnClickListener(view -> { - wifiBanner.setVisibility(View.GONE); - startActivity(new Intent(Settings.Panel.ACTION_WIFI)); - }); - } - wifiBanner.setVisibility(View.VISIBLE); - } else { - wifiBanner.setVisibility(View.GONE); - } - } - } - - /** - * The {@link #backstack} for the global back button is managed mostly here. - * The initial screen is never added to the {@code backstack} since the - * empty state is used to detect that the system's backstack should be used. - */ - public void inflateSwapView(@LayoutRes int viewRes, boolean backPressed) { - getSwapService().initTimer(); - - if (!backPressed) { - if (currentSwapViewLayoutRes == R.layout.swap_connecting || - currentSwapViewLayoutRes == R.layout.swap_confirm_receive) { - // do not add to backstack - } else { - if (backstack.isEmpty()) { - if (viewRes != R.layout.swap_start_swap) { - backstack.push(currentSwapViewLayoutRes); - } - } else { - if (backstack.peek() != currentSwapViewLayoutRes) { - backstack.push(currentSwapViewLayoutRes); - } - } - } - } - - container.removeAllViews(); - View view = ContextCompat.getSystemService(this, LayoutInflater.class) - .inflate(viewRes, container, false); - currentView = (SwapView) view; - currentView.setLayoutResId(viewRes); - currentSwapViewLayoutRes = viewRes; - - toolbar.setTitle(currentView.getToolbarTitle()); - toolbar.setNavigationOnClickListener(v -> onToolbarBackPressed()); - toolbar.setNavigationOnClickListener(v -> { - if (currentView.getLayoutResId() == R.layout.swap_start_swap) { - SwapService.stop(this); - finish(); - return; - } else { - currentSwapViewLayoutRes = R.layout.swap_start_swap; - } - inflateSwapView(currentSwapViewLayoutRes); - }); - if (viewRes == R.layout.swap_start_swap) { - toolbar.setNavigationIcon(R.drawable.ic_close); - } else { - toolbar.setNavigationIcon(R.drawable.ic_arrow_back); - } - container.addView(view); - supportInvalidateOptionsMenu(); - - if (currentView.getLayoutResId() == R.layout.swap_send_fdroid) { - setUpFromWifi(); - setUpUseBluetoothButton(); - } else if (currentView.getLayoutResId() == R.layout.swap_wifi_qr) { - setUpFromWifi(); - setUpQrScannerButton(); - } else if (currentView.getLayoutResId() == R.layout.swap_select_apps) { - LocalRepoService.create(this, getSwapService().getAppsToSwap()); - } else if (currentView.getLayoutResId() == R.layout.swap_connecting) { - setUpConnectingView(); - } else if (currentView.getLayoutResId() == R.layout.swap_start_swap) { - setUpStartVisibility(); - } - } - - public void showIntro() { - // If we were previously swapping with a specific client, forget that we were doing that, - // as we are starting over now. - getSwapService().swapWith(null); - - LocalRepoService.create(this); - - inflateSwapView(R.layout.swap_start_swap); - } - - /** - * On {@code android-26}, only apps with privileges can access - * {@code WRITE_SETTINGS}. So this just shows the tethering settings - * for the user to do it themselves. - */ - public void showTetheringSettings() { - final Intent intent = new Intent(Intent.ACTION_MAIN, null); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - final ComponentName cn = new ComponentName("com.android.settings", - "com.android.settings.TetherSettings"); - intent.setComponent(cn); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivity(intent); - } - - public void requestWriteSettingsPermission() { - Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS, - Uri.parse("package:" + getPackageName())); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - startActivityForResult(intent, REQUEST_WRITE_SETTINGS_PERMISSION); - } - - public void sendFDroid() { - if (bluetoothAdapter == null // TODO make Bluetooth work with content:// URIs - || (!bluetoothAdapter.isEnabled() && LocalHTTPDManager.isAlive())) { - inflateSwapView(R.layout.swap_send_fdroid); - } else { - sendFDroidBluetooth(); - } - } - - /** - * Send the F-Droid APK via Bluetooth. If Bluetooth has not been - * enabled/turned on, then enabling device discoverability will - * automatically enable Bluetooth. - */ - public void sendFDroidBluetooth() { - if (bluetoothAdapter.isEnabled()) { - sendFDroidApk(); - } else if (Build.VERSION.SDK_INT >= 31) { - if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED) { - Intent discoverBt = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); - discoverBt.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 120); - startActivityForResult(discoverBt, REQUEST_BLUETOOTH_ENABLE_FOR_SEND); - } else { - requestPermissionLauncher.launch(Manifest.permission.BLUETOOTH_CONNECT); - } - } - } - - private void sendFDroidApk() { - ((FDroidApp) getApplication()).sendViaBluetooth(this, AppCompatActivity.RESULT_OK, BuildConfig.APPLICATION_ID); - } - - /** - * TODO: Figure out whether they have changed since last time LocalRepoService - * was run. If the local repo is running, then we can ask it what apps it is - * swapping and compare with that. Otherwise, probably will need to scan the - * file system. - */ - public void onAppsSelected() { - if (hasPreparedLocalRepo) { - onLocalRepoPrepared(); - } else { - LocalRepoService.create(this, getSwapService().getAppsToSwap()); - currentSwapViewLayoutRes = R.layout.swap_connecting; - inflateSwapView(R.layout.swap_connecting); - } - } - - /** - * Once the LocalRepoService has finished preparing our repository index, we can - * show the next screen to the user. This will be one of two things: - *

      - *
    1. If we directly selected a peer to swap with initially, we will skip straight to getting - * the list of apps from that device.
    2. - *
    3. Alternatively, if we didn't have a person to connect to, and instead clicked "Scan QR Code", - * then we want to show a QR code or NFC dialog.
    4. - *
    - */ - public void onLocalRepoPrepared() { - // TODO ditch this, use a message from LocalRepoService. Maybe? - hasPreparedLocalRepo = true; - if (getSwapService().isConnectingWithPeer()) { - startSwappingWithPeer(); - } else { - inflateSwapView(R.layout.swap_wifi_qr); - } - } - - private void startSwappingWithPeer() { - getSwapService().connectToPeer(); - inflateSwapView(R.layout.swap_connecting); - } - - public void swapWith(Peer peer) { - getSwapService().swapWith(peer); - inflateSwapView(R.layout.swap_select_apps); - } - - /** - * This is for when we initiate a swap by viewing the "Are you sure you want to swap with" view - * This can arise either: - * * As a result of scanning a QR code (in which case we likely already have a repo setup) or - * * As a result of the other device selecting our device in the "start swap" screen, in which - * case we are likely just sitting on the start swap screen also, and haven't configured - * anything yet. - */ - public void swapWith(NewRepoConfig repoConfig) { - Peer peer = repoConfig.toPeer(); - if (currentSwapViewLayoutRes == R.layout.swap_start_swap - || currentSwapViewLayoutRes == R.layout.swap_confirm_receive) { - // This will force the "Select apps to swap" workflow to begin. - swapWith(peer); - } else { - getSwapService().swapWith(peer); - startSwappingWithPeer(); - } - } - - public void denySwap() { - showIntro(); - } - - /** - * Attempts to open a QR code scanner, in the hope a user will then scan the QR code of another - * device configured to swapp apps with us. Delegates to the zxing library to do so. - */ - public void initiateQrScan() { - IntentIntegrator integrator = new IntentIntegrator(this); - integrator.initiateScan(); - } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent intent) { - super.onActivityResult(requestCode, resultCode, intent); - IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, intent); - if (scanResult != null) { - if (scanResult.getContents() != null) { - NewRepoConfig repoConfig = new NewRepoConfig(this, scanResult.getContents()); - if (repoConfig.isValidRepo()) { - checkIfNewRepoOnSameWifi(repoConfig); - confirmSwapConfig = repoConfig; - showRelevantView(); - } else { - Toast.makeText(this, R.string.swap_qr_isnt_for_swap, Toast.LENGTH_SHORT).show(); - } - } - } else if (requestCode == REQUEST_WRITE_SETTINGS_PERMISSION) { - if (Settings.System.canWrite(this)) { - setupWifiAP(); - } - } else if (requestCode == REQUEST_BLUETOOTH_ENABLE_FOR_SWAP) { - - if (resultCode == RESULT_OK) { - Utils.debugLog(TAG, "User enabled Bluetooth, will make sure we are discoverable."); - ensureBluetoothDiscoverableThenStart(); - } else { - Utils.debugLog(TAG, "User chose not to enable Bluetooth, so doing nothing"); - SwapService.putBluetoothVisibleUserPreference(false); - } - - } else if (requestCode == REQUEST_BLUETOOTH_DISCOVERABLE) { - - if (resultCode != RESULT_CANCELED) { - Utils.debugLog(TAG, "User made Bluetooth discoverable, will proceed to start bluetooth server."); - BluetoothManager.start(this); - } else { - Utils.debugLog(TAG, "User chose not to make Bluetooth discoverable, so doing nothing"); - SwapService.putBluetoothVisibleUserPreference(false); - } - - } else if (requestCode == REQUEST_BLUETOOTH_ENABLE_FOR_SEND) { - sendFDroidApk(); - } - } - - private void checkIfNewRepoOnSameWifi(NewRepoConfig newRepo) { - // if this is a local repo, check we're on the same wifi - if (!TextUtils.isEmpty(newRepo.getBssid())) { - WifiManager wifiManager = ContextCompat.getSystemService(getApplicationContext(), - WifiManager.class); - WifiInfo wifiInfo = wifiManager.getConnectionInfo(); - String bssid = wifiInfo.getBSSID(); - if (TextUtils.isEmpty(bssid)) { /* not all devices have wifi */ - return; - } - bssid = bssid.toLowerCase(Locale.ENGLISH); - String newRepoBssid = Uri.decode(newRepo.getBssid()).toLowerCase(Locale.ENGLISH); - if (!bssid.equals(newRepoBssid)) { - String msg = getString(R.string.not_on_same_wifi, newRepo.getSsid()); - Toast.makeText(this, msg, Toast.LENGTH_LONG).show(); - } - // TODO we should help the user to the right thing here, - // instead of just showing a message! - } - } - - /** - * The process for setting up bluetooth is as follows: - *
      - *
    • Assume we have bluetooth available (otherwise the button which allowed us to start - * the bluetooth process should not have been available)
    • - *
    • Ask user to enable (if not enabled yet)
    • - *
    • Start bluetooth server socket
    • - *
    • Enable bluetooth discoverability, so that people can connect to our server socket.
    • - *
    - * Note that this is a little different than the usual process for bluetooth _clients_, which - * involves pairing and connecting with other devices. - */ - public void startBluetoothSwap() { - if (bluetoothAdapter != null) { - if (bluetoothAdapter.isEnabled()) { - Utils.debugLog(TAG, "Bluetooth enabled, will check if device is discoverable with device."); - ensureBluetoothDiscoverableThenStart(); - } else { - Utils.debugLog(TAG, "Bluetooth disabled, asking user to enable it."); - Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); - startActivityForResult(enableBtIntent, REQUEST_BLUETOOTH_ENABLE_FOR_SWAP); - } - } - } - - private void ensureBluetoothDiscoverableThenStart() { - Utils.debugLog(TAG, "Ensuring Bluetooth is in discoverable mode."); - if (bluetoothAdapter.getScanMode() != BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) { - Utils.debugLog(TAG, "Not currently in discoverable mode, so prompting user to enable."); - Intent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); - intent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 3600); // 1 hour - startActivityForResult(intent, REQUEST_BLUETOOTH_DISCOVERABLE); - } - BluetoothManager.start(this); - } - - private final BroadcastReceiver bluetoothScanModeChanged = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - MaterialSwitch bluetoothSwitch = container.findViewById(R.id.switch_bluetooth); - TextView textBluetoothVisible = container.findViewById(R.id.bluetooth_visible); - if (bluetoothSwitch == null || textBluetoothVisible == null - || !BluetoothManager.ACTION_STATUS.equals(intent.getAction())) { - return; - } - switch (intent.getIntExtra(BluetoothAdapter.EXTRA_SCAN_MODE, -1)) { - case BluetoothAdapter.SCAN_MODE_NONE: - textBluetoothVisible.setText(R.string.disabled); - bluetoothSwitch.setEnabled(true); - break; - - case BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE: - textBluetoothVisible.setText(R.string.swap_visible_bluetooth); - bluetoothSwitch.setEnabled(true); - break; - - case BluetoothAdapter.SCAN_MODE_CONNECTABLE: - textBluetoothVisible.setText(R.string.swap_not_visible_bluetooth); - bluetoothSwitch.setEnabled(true); - break; - } - } - }; - - /** - * Helper class to try and make sense of what the swap workflow is currently doing. - * The more technologies are involved in the process (e.g. Bluetooth/Wifi/NFC/etc) - * the harder it becomes to reason about and debug the whole thing. Thus,this class - * will periodically dump the state to logcat so that it is easier to see when certain - * protocols are enabled/disabled. - *

    - * To view only this output from logcat: - *

    - * adb logcat | grep 'Swap Status' - *

    - * To exclude this output from logcat (it is very noisy): - *

    - * adb logcat | grep -v 'Swap Status' - */ - class SwapDebug { - - public void logStatus() { - - if (true) return; // NOPMD - - String message = ""; - if (service == null) { - message = "No swap service"; - } else { - String bluetooth; - - bluetooth = "N/A"; - if (bluetoothAdapter != null) { - Map scanModes = new HashMap<>(3); - scanModes.put(BluetoothAdapter.SCAN_MODE_CONNECTABLE, "CON"); - scanModes.put(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE, "CON_DISC"); - scanModes.put(BluetoothAdapter.SCAN_MODE_NONE, "NONE"); - bluetooth = "\"" + bluetoothAdapter.getName() + "\" - " - + scanModes.get(bluetoothAdapter.getScanMode()); - } - } - - Date now = new Date(); - Utils.debugLog("SWAP_STATUS", - now.getHours() + ":" + now.getMinutes() + ":" + now.getSeconds() + " " + message); - - new Timer().schedule(new TimerTask() { - @Override - public void run() { - new SwapDebug().logStatus(); - } - }, 1000 - ); - } - } - - private final BroadcastReceiver onWifiStateChanged = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - setUpFromWifi(); - - TextView textWifiVisible = container.findViewById(R.id.wifi_visible); - if (textWifiVisible == null) { - return; - } - switch (intent.getIntExtra(WifiStateChangeService.EXTRA_STATUS, -1)) { - case WifiManager.WIFI_STATE_ENABLING: - textWifiVisible.setText(R.string.swap_setting_up_wifi); - break; - case WifiManager.WIFI_STATE_ENABLED: - textWifiVisible.setText(R.string.swap_not_visible_wifi); - break; - case WifiManager.WIFI_STATE_DISABLING: - case WifiManager.WIFI_STATE_DISABLED: - textWifiVisible.setText(R.string.swap_stopping_wifi); - break; - case WifiManager.WIFI_STATE_UNKNOWN: - break; - } - - updateWifiBannerVisibility(); - } - }; - - private void setUpFromWifi() { - String scheme = Preferences.get().isLocalRepoHttpsEnabled() ? "https://" : "http://"; - - // the fingerprint is not useful on the button label - String buttonLabel = scheme + FDroidApp.ipAddressString + ":" + FDroidApp.port; - TextView ipAddressView = container.findViewById(R.id.device_ip_address); - if (ipAddressView != null) { - ipAddressView.setText(buttonLabel); - } - - String qrUriString = null; - if (currentView.getLayoutResId() == R.layout.swap_join_wifi) { - setUpJoinWifi(); - return; - } else if (currentView.getLayoutResId() == R.layout.swap_send_fdroid) { - qrUriString = buttonLabel; - } else if (currentView.getLayoutResId() == R.layout.swap_wifi_qr) { - Uri sharingUri = Utils.getSharingUri(FDroidApp.repo); - StringBuilder qrUrlBuilder = new StringBuilder(scheme); - qrUrlBuilder.append(sharingUri.getHost()); - if (sharingUri.getPort() != 80) { - qrUrlBuilder.append(':'); - qrUrlBuilder.append(sharingUri.getPort()); - } - qrUrlBuilder.append(sharingUri.getPath()); - boolean first = true; - - Set names = sharingUri.getQueryParameterNames(); - for (String name : names) { - if (!"ssid".equals(name)) { - if (first) { - qrUrlBuilder.append('?'); - first = false; - } else { - qrUrlBuilder.append('&'); - } - qrUrlBuilder.append(name); - qrUrlBuilder.append('='); - qrUrlBuilder.append(sharingUri.getQueryParameter(name)); - } - } - qrUriString = qrUrlBuilder.toString(); - } - - ImageView qrImage = container.findViewById(R.id.wifi_qr_code); - if (qrUriString != null && qrImage != null) { - Utils.debugLog(TAG, "Encoded swap URI in QR Code: " + qrUriString); - - compositeDisposable.add(Utils.generateQrBitmap(this, qrUriString) - .subscribe(qrBitmap -> { - qrImage.setImageBitmap(qrBitmap); - - // Replace all blacks with the background blue. - qrImage.setColorFilter(new LightingColorFilter(0xffffffff, - ContextCompat.getColor(this, R.color.swap_blue))); - - final View qrWarningMessage = container.findViewById(R.id.warning_qr_scanner); - if (qrWarningMessage != null) { - if (CameraCharacteristicsChecker.getInstance(this).hasAutofocus()) { - qrWarningMessage.setVisibility(View.GONE); - } else { - qrWarningMessage.setVisibility(View.VISIBLE); - } - } - }) - ); - } - } - - // TODO: Listen for "Connecting..." state and reflect that in the view too. - private void setUpJoinWifi() { - currentView.setOnClickListener(v -> startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK))); - TextView descriptionView = container.findViewById(R.id.text_description); - ImageView wifiIcon = container.findViewById(R.id.wifi_icon); - TextView ssidView = container.findViewById(R.id.wifi_ssid); - TextView tapView = container.findViewById(R.id.wifi_available_networks_prompt); - if (descriptionView == null || wifiIcon == null || ssidView == null || tapView == null) { - return; - } - if (TextUtils.isEmpty(FDroidApp.bssid) && !TextUtils.isEmpty(FDroidApp.ipAddressString)) { - // empty bssid with an ipAddress means hotspot mode - descriptionView.setText(R.string.swap_join_this_hotspot); - wifiIcon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_wifi_tethering)); - ssidView.setText(R.string.swap_active_hotspot); - tapView.setText(R.string.swap_switch_to_wifi); - } else if (TextUtils.isEmpty(FDroidApp.ssid)) { - // not connected to or setup with any wifi network - descriptionView.setText(R.string.swap_join_same_wifi); - wifiIcon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_wifi)); - ssidView.setText(R.string.swap_no_wifi_network); - tapView.setText(R.string.swap_view_available_networks); - } else { - // connected to a regular wifi network - descriptionView.setText(R.string.swap_join_same_wifi); - wifiIcon.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_wifi)); - ssidView.setText(FDroidApp.ssid); - tapView.setText(R.string.swap_view_available_networks); - } - } - - private void setUpStartVisibility() { - bluetoothStatusReceiver.onReceive(this, new Intent(BluetoothManager.ACTION_STATUS)); - bonjourStatusReceiver.onReceive(this, new Intent(BonjourManager.ACTION_STATUS)); - - TextView viewWifiNetwork = findViewById(R.id.wifi_network); - MaterialSwitch wifiSwitch = findViewById(R.id.switch_wifi); - MaterialButton scanQrButton = findViewById(R.id.btn_scan_qr); - MaterialButton appsButton = findViewById(R.id.btn_apps); - if (viewWifiNetwork == null || wifiSwitch == null || scanQrButton == null || appsButton == null) { - return; - } - viewWifiNetwork.setOnClickListener(v -> promptToSelectWifiNetwork()); - - wifiSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> { - Context context = getApplicationContext(); - if (isChecked) { - if (wifiApControl != null && wifiApControl.isEnabled()) { - setupWifiAP(); - } else { - if (Build.VERSION.SDK_INT <= 28) { - wifiManager.setWifiEnabled(true); - } - } - BonjourManager.start(context); - } - BonjourManager.setVisible(context, isChecked); - SwapService.putWifiVisibleUserPreference(isChecked); - }); - - scanQrButton.setOnClickListener(v -> inflateSwapView(R.layout.swap_wifi_qr)); - - appsButton.setOnClickListener(v -> inflateSwapView(R.layout.swap_select_apps)); - appsButton.setEllipsize(TextUtils.TruncateAt.END); - - if (SwapService.getWifiVisibleUserPreference()) { - wifiSwitch.setChecked(true); - } else { - wifiSwitch.setChecked(false); - } - } - - private final BroadcastReceiver bonjourStatusReceiver = new BroadcastReceiver() { - - private volatile int bonjourStatus = BonjourManager.STATUS_STOPPED; - - @Override - public void onReceive(Context context, Intent intent) { - if (!BonjourManager.ACTION_STATUS.equals(intent.getAction())) { - return; - } - bonjourStatus = intent.getIntExtra(BonjourManager.EXTRA_STATUS, bonjourStatus); - TextView textWifiVisible = container.findViewById(R.id.wifi_visible); - TextView peopleNearbyText = container.findViewById(R.id.text_people_nearby); - CircularProgressIndicator peopleNearbyProgress = container.findViewById(R.id.searching_people_nearby); - if (textWifiVisible == null || peopleNearbyText == null || peopleNearbyProgress == null) { - return; - } - switch (bonjourStatus) { - case BonjourManager.STATUS_STARTING: - textWifiVisible.setText(R.string.swap_setting_up_wifi); - peopleNearbyText.setText(R.string.swap_starting); - peopleNearbyText.setVisibility(View.VISIBLE); - peopleNearbyProgress.setVisibility(View.VISIBLE); - break; - case BonjourManager.STATUS_STARTED: - textWifiVisible.setText(R.string.swap_not_visible_wifi); - peopleNearbyText.setText(R.string.swap_scanning_for_peers); - peopleNearbyText.setVisibility(View.VISIBLE); - peopleNearbyProgress.setVisibility(View.VISIBLE); - break; - case BonjourManager.STATUS_VPN_CONFLICT: - textWifiVisible.setText(R.string.swap_wifi_vpn_conflict); - break; - case BonjourManager.STATUS_NOT_VISIBLE: - textWifiVisible.setText(R.string.swap_not_visible_wifi); - peopleNearbyText.setText(R.string.swap_scanning_for_peers); - peopleNearbyText.setVisibility(View.VISIBLE); - peopleNearbyProgress.setVisibility(View.VISIBLE); - break; - case BonjourManager.STATUS_VISIBLE: - if (wifiApControl != null && wifiApControl.isEnabled()) { - textWifiVisible.setText(R.string.swap_visible_hotspot); - } else { - textWifiVisible.setText(R.string.swap_visible_wifi); - } - peopleNearbyText.setText(R.string.swap_scanning_for_peers); - peopleNearbyText.setVisibility(View.VISIBLE); - peopleNearbyProgress.setVisibility(View.VISIBLE); - break; - case BonjourManager.STATUS_STOPPING: - textWifiVisible.setText(R.string.swap_stopping_wifi); - if (!BluetoothManager.isAlive()) { - peopleNearbyText.setText(R.string.swap_stopping); - peopleNearbyText.setVisibility(View.VISIBLE); - peopleNearbyProgress.setVisibility(View.VISIBLE); - } - break; - case BonjourManager.STATUS_STOPPED: - textWifiVisible.setText(R.string.swap_not_visible_wifi); - if (!BluetoothManager.isAlive()) { - peopleNearbyText.setVisibility(View.GONE); - peopleNearbyProgress.setVisibility(View.GONE); - } - break; - case BonjourManager.STATUS_ERROR: - textWifiVisible.setText(R.string.swap_not_visible_wifi); - peopleNearbyText.setText(intent.getStringExtra(Intent.EXTRA_TEXT)); - peopleNearbyText.setVisibility(View.VISIBLE); - peopleNearbyProgress.setVisibility(View.GONE); - break; - default: - String msg = "Bad intent: " + intent + " " + bonjourStatus; - Log.i(TAG, msg); - if (BuildConfig.DEBUG) { - throw new IllegalArgumentException(msg); - } - } - } - }; - - /** - * Add any new Bonjour devices that were found, as long as they are not - * already present. - * - * @see #bluetoothFound - * @see ArrayAdapter#getPosition(Object) - * @see java.util.List#indexOf(Object) - */ - private final BroadcastReceiver bonjourFound = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - ListView peopleNearbyList = container.findViewById(R.id.list_people_nearby); - if (peopleNearbyList != null) { - ArrayAdapter peopleNearbyAdapter = (ArrayAdapter) peopleNearbyList.getAdapter(); - Peer peer = intent.getParcelableExtra(BonjourManager.EXTRA_BONJOUR_PEER); - if (peopleNearbyAdapter.getPosition(peer) == -1) { - peopleNearbyAdapter.add(peer); - } - } - } - }; - - private final BroadcastReceiver bonjourRemoved = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - ListView peopleNearbyList = container.findViewById(R.id.list_people_nearby); - if (peopleNearbyList != null) { - ArrayAdapter peopleNearbyAdapter = (ArrayAdapter) peopleNearbyList.getAdapter(); - peopleNearbyAdapter.remove((Peer) intent.getParcelableExtra(BonjourManager.EXTRA_BONJOUR_PEER)); - } - } - }; - - private final BroadcastReceiver bluetoothStatusReceiver = new BroadcastReceiver() { - - private volatile int bluetoothStatus = BluetoothManager.STATUS_STOPPED; - - @Override - public void onReceive(Context context, Intent intent) { - if (!BluetoothManager.ACTION_STATUS.equals(intent.getAction())) { - return; - } - bluetoothStatus = intent.getIntExtra(BluetoothManager.EXTRA_STATUS, bluetoothStatus); - MaterialSwitch bluetoothSwitch = container.findViewById(R.id.switch_bluetooth); - TextView textBluetoothVisible = container.findViewById(R.id.bluetooth_visible); - TextView textDeviceIdBluetooth = container.findViewById(R.id.device_id_bluetooth); - TextView peopleNearbyText = container.findViewById(R.id.text_people_nearby); - CircularProgressIndicator peopleNearbyProgress = container.findViewById(R.id.searching_people_nearby); - if (bluetoothSwitch == null || textBluetoothVisible == null || textDeviceIdBluetooth == null - || peopleNearbyText == null || peopleNearbyProgress == null) { - return; - } - switch (bluetoothStatus) { - case BluetoothManager.STATUS_STARTING: - bluetoothSwitch.setEnabled(false); - textBluetoothVisible.setText(R.string.swap_setting_up_bluetooth); - textDeviceIdBluetooth.setVisibility(View.VISIBLE); - peopleNearbyText.setText(R.string.swap_scanning_for_peers); - peopleNearbyText.setVisibility(View.VISIBLE); - peopleNearbyProgress.setVisibility(View.VISIBLE); - break; - case BluetoothManager.STATUS_STARTED: - bluetoothSwitch.setEnabled(true); - textBluetoothVisible.setText(R.string.swap_visible_bluetooth); - textDeviceIdBluetooth.setVisibility(View.VISIBLE); - peopleNearbyText.setText(R.string.swap_scanning_for_peers); - peopleNearbyText.setVisibility(View.VISIBLE); - peopleNearbyProgress.setVisibility(View.VISIBLE); - break; - case BluetoothManager.STATUS_STOPPING: - bluetoothSwitch.setEnabled(false); - textBluetoothVisible.setText(R.string.swap_stopping); - textDeviceIdBluetooth.setVisibility(View.GONE); - if (!BonjourManager.isAlive()) { - peopleNearbyText.setText(R.string.swap_stopping); - peopleNearbyText.setVisibility(View.VISIBLE); - peopleNearbyProgress.setVisibility(View.VISIBLE); - } - break; - case BluetoothManager.STATUS_STOPPED: - bluetoothSwitch.setEnabled(true); - textBluetoothVisible.setText(R.string.swap_not_visible_bluetooth); - textDeviceIdBluetooth.setVisibility(View.GONE); - if (!BonjourManager.isAlive()) { - peopleNearbyText.setVisibility(View.GONE); - peopleNearbyProgress.setVisibility(View.GONE); - } - - ListView peopleNearbyView = container.findViewById(R.id.list_people_nearby); - if (peopleNearbyView == null) { - break; - } - ArrayAdapter peopleNearbyAdapter = (ArrayAdapter) peopleNearbyView.getAdapter(); - for (int i = 0; i < peopleNearbyAdapter.getCount(); i++) { - Peer peer = (Peer) peopleNearbyAdapter.getItem(i); - if (peer.getClass().equals(BluetoothPeer.class)) { - Utils.debugLog(TAG, "Removing bluetooth peer: " + peer.getName()); - peopleNearbyAdapter.remove(peer); - } - } - break; - case BluetoothManager.STATUS_ERROR: - bluetoothSwitch.setEnabled(true); - textBluetoothVisible.setText(intent.getStringExtra(Intent.EXTRA_TEXT)); - textDeviceIdBluetooth.setVisibility(View.VISIBLE); - break; - default: - throw new IllegalArgumentException("Bad intent: " + intent); - } - } - }; - - /** - * Add any new Bluetooth devices that were found, as long as they are not - * already present. - * - * @see #bonjourFound - * @see ArrayAdapter#getPosition(Object) - * @see java.util.List#indexOf(Object) - */ - private final BroadcastReceiver bluetoothFound = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - ListView peopleNearbyList = container.findViewById(R.id.list_people_nearby); - if (peopleNearbyList != null) { - ArrayAdapter peopleNearbyAdapter = (ArrayAdapter) peopleNearbyList.getAdapter(); - Peer peer = intent.getParcelableExtra(BluetoothManager.EXTRA_PEER); - if (peopleNearbyAdapter.getPosition(peer) == -1) { - peopleNearbyAdapter.add(peer); - } - } - } - }; - - private void setUpUseBluetoothButton() { - Button useBluetooth = findViewById(R.id.btn_use_bluetooth); - if (useBluetooth != null) { - if (bluetoothAdapter == null) { - useBluetooth.setVisibility(View.GONE); - } else { - useBluetooth.setVisibility(View.VISIBLE); - } - useBluetooth.setOnClickListener(v -> { - showIntro(); - sendFDroidBluetooth(); - }); - } - } - - private void setUpQrScannerButton() { - Button openQr = findViewById(R.id.btn_qr_scanner); - if (openQr != null) { - openQr.setOnClickListener(v -> initiateQrScan()); - } - } - - private void setUpConfirmReceive() { - TextView descriptionTextView = findViewById(R.id.text_description); - if (descriptionTextView != null) { - descriptionTextView.setText(getString(R.string.swap_confirm_connect, confirmSwapConfig.getHost())); - } - - Button confirmReceiveYes = container.findViewById(R.id.confirm_receive_yes); - if (confirmReceiveYes != null) { - confirmReceiveYes.setOnClickListener(v -> denySwap()); - } - - Button confirmReceiveNo = container.findViewById(R.id.confirm_receive_no); - if (confirmReceiveNo != null) { - confirmReceiveNo.setOnClickListener(new View.OnClickListener() { - - private final NewRepoConfig config = confirmSwapConfig; - - @Override - public void onClick(View v) { - swapWith(config); - } - }); - } - } - - private void setUpConnectingProgressText(String message) { - TextView progressText = container.findViewById(R.id.progress_text); - if (progressText != null && message != null) { - progressText.setVisibility(View.VISIBLE); - progressText.setText(message); - } - } - - /** - * Listens for feedback about a local repository being prepared, like APK - * files copied to the LocalHTTPD webroot, the {@code index.html} generated, - * etc. Icons will be copied to the webroot in the background and so are - * not part of this process. - */ - private final BroadcastReceiver localRepoStatus = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - setUpConnectingProgressText(intent.getStringExtra(Intent.EXTRA_TEXT)); - - CircularProgressIndicator progressBar = container.findViewById(R.id.progress_bar); - Button tryAgainButton = container.findViewById(R.id.try_again); - if (progressBar == null || tryAgainButton == null) { - return; - } - - switch (intent.getIntExtra(LocalRepoService.EXTRA_STATUS, -1)) { - case LocalRepoService.STATUS_PROGRESS: - progressBar.show(); - tryAgainButton.setVisibility(View.GONE); - break; - case LocalRepoService.STATUS_STARTED: - progressBar.show(); - tryAgainButton.setVisibility(View.GONE); - onLocalRepoPrepared(); - break; - case LocalRepoService.STATUS_ERROR: - progressBar.hide(); - tryAgainButton.setVisibility(View.VISIBLE); - break; - default: - throw new IllegalArgumentException("Bogus intent: " + intent); - } - } - }; - - private void onRepoUpdateSuccess() { - CircularProgressIndicator progressBar = container.findViewById(R.id.progress_bar); - Button tryAgainButton = container.findViewById(R.id.try_again); - if (progressBar != null && tryAgainButton != null) { - progressBar.show(); - tryAgainButton.setVisibility(View.GONE); - } - getSwapService().addCurrentPeerToActive(); - inflateSwapView(R.layout.swap_success); - } - - private void onRepoUpdateError(Exception e) { - CircularProgressIndicator progressBar = container.findViewById(R.id.progress_bar); - Button tryAgainButton = container.findViewById(R.id.try_again); - if (progressBar != null && tryAgainButton != null) { - progressBar.hide(); - tryAgainButton.setVisibility(View.VISIBLE); - } - String msg = e.getMessage() == null ? "Error updating repo " + e : e.getMessage(); - setUpConnectingProgressText(msg); - getSwapService().removeCurrentPeerFromActive(); - } - - private void setUpConnectingView() { - TextView heading = container.findViewById(R.id.progress_text); - heading.setText(R.string.swap_connecting); - Button tryAgainButton = container.findViewById(R.id.try_again); - if (tryAgainButton != null) { - tryAgainButton.setOnClickListener(v -> onAppsSelected()); - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java deleted file mode 100644 index 6b0dfa74a..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/TreeUriScannerIntentService.java +++ /dev/null @@ -1,194 +0,0 @@ -/* - * Copyright (C) 2018 Hans-Christoph Steiner - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.nearby; - -import android.content.ContentResolver; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Process; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.core.app.JobIntentService; -import androidx.documentfile.provider.DocumentFile; - -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.views.repos.AddRepoActivity; -import org.fdroid.index.RepoManager; -import org.fdroid.index.SigningException; -import org.fdroid.index.v1.IndexV1UpdaterKt; - -import java.io.InputStream; -import java.security.CodeSigner; -import java.security.cert.Certificate; -import java.security.cert.X509Certificate; -import java.util.ArrayList; -import java.util.List; -import java.util.jar.JarEntry; -import java.util.jar.JarInputStream; - -/** - * An {@link JobIntentService} subclass for handling asynchronous scanning of a - * removable storage device like an SD Card or USB OTG thumb drive using the - * Storage Access Framework. Permission must first be granted by the user - * {@link android.content.Intent#ACTION_OPEN_DOCUMENT_TREE} or - * {@link android.os.storage.StorageVolume#createAccessIntent(String)}request, - * then F-Droid will have permanent access to that{@link Uri}. - *

    - * Even though the Storage Access Framework was introduced in - * {@link android.os.Build.VERSION_CODES#KITKAT android-19}, this approach is only - * workable if {@link android.content.Intent#ACTION_OPEN_DOCUMENT_TREE} is available. - * It was added in {@link android.os.Build.VERSION_CODES#LOLLIPOP android-21}. - * {@link android.os.storage.StorageVolume#createAccessIntent(String)} is also - * necessary to do this with any kind of rational UX. - * - * @see The Storage Situation: Removable Storage - * @see Be Careful with Scoped Directory Access - * @see Using Scoped Directory Access - * @see Open Files using Storage Access Framework - */ -public class TreeUriScannerIntentService extends JobIntentService { - public static final String TAG = "TreeUriScannerIntentSer"; - private static final int JOB_ID = TAG.hashCode(); - - private static final String ACTION_SCAN_TREE_URI = "org.fdroid.fdroid.nearby.action.SCAN_TREE_URI"; - - /** - * @see DocumentsContract.EXTERNAL_STORAGE_PROVIDER_AUTHORITY - * @see ExternalStorageProvider.AUTHORITY - */ - public static final String EXTERNAL_STORAGE_PROVIDER_AUTHORITY = "com.android.externalstorage.documents"; - - public static void scan(Context context, Uri data) { - Intent intent = new Intent(context, TreeUriScannerIntentService.class); - intent.setAction(ACTION_SCAN_TREE_URI); - intent.setData(data); - JobIntentService.enqueueWork(context, TreeUriScannerIntentService.class, JOB_ID, intent); - } - - /** - * Now determine if it is External Storage that must be handled by the - * {@link TreeUriScannerIntentService} or whether it is External Storage - * like an SD Card that can be directly accessed via the file system. - */ - public static void onActivityResult(Context context, Intent intent) { - if (intent == null) { - return; - } - Uri uri = intent.getData(); - if (uri != null) { - ContentResolver contentResolver = context.getContentResolver(); - int perms = Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION; - contentResolver.takePersistableUriPermission(uri, perms); - String msg = String.format(context.getString(R.string.swap_toast_using_path), uri.toString()); - Toast.makeText(context, msg, Toast.LENGTH_SHORT).show(); - scan(context, uri); - } - } - - @Override - protected void onHandleWork(@NonNull Intent intent) { - if (!ACTION_SCAN_TREE_URI.equals(intent.getAction())) { - return; - } - Uri treeUri = intent.getData(); - if (treeUri == null) { - return; - } - Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST); - DocumentFile treeFile = DocumentFile.fromTreeUri(this, treeUri); - searchDirectory(treeFile); - } - - /** - * Recursively search for {@link IndexV1UpdaterKt#SIGNED_FILE_NAME} starting - * from the given directory, looking at files first before recursing into - * directories. This is "depth last" since the index file is much more - * likely to be shallow than deep, and there can be a lot of files to - * search through starting at 4 or more levels deep, like the fdroid - * icons dirs and the per-app "external storage" dirs. - */ - private void searchDirectory(DocumentFile documentFileDir) { - DocumentFile[] documentFiles = documentFileDir.listFiles(); - if (documentFiles == null) { - return; - } - boolean foundIndex = false; - ArrayList dirs = new ArrayList<>(); - for (DocumentFile documentFile : documentFiles) { - if (documentFile.isDirectory()) { - dirs.add(documentFile); - } else if (!foundIndex) { - if (IndexV1UpdaterKt.SIGNED_FILE_NAME.equals(documentFile.getName())) { - registerRepo(documentFile); - foundIndex = true; - } - } - } - for (DocumentFile dir : dirs) { - searchDirectory(dir); - } - } - - /** - * For all files called {@link IndexV1UpdaterKt#SIGNED_FILE_NAME} found, check - * the JAR signature and read the fingerprint of the signing certificate. - * The fingerprint is then used to find whether this local repo is a mirror - * of an existing repo, or a totally new repo. In order to verify the - * signatures in the JAR, the whole file needs to be read in first. - * - * @see JarInputStream#JarInputStream(InputStream, boolean) - */ - private void registerRepo(DocumentFile index) { - DocumentFile repoFile = index.getParentFile(); - if (repoFile != null) registerRepo(this, repoFile.getUri()); - } - - static void registerRepo(Context context, Uri repoUri) { - RepoManager repoManager = FDroidApp.getRepoManager(context); - repoManager.fetchRepositoryPreview(repoUri.toString()); - Intent i = new Intent(context, AddRepoActivity.class); - i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(i); - } - - /** - * FDroid's index.jar is signed using a particular format and does not allow lots of - * signing setups that would be valid for a regular jar. This validates those - * restrictions. - */ - static X509Certificate getSigningCertFromJar(JarEntry jarEntry) throws SigningException { - final CodeSigner[] codeSigners = jarEntry.getCodeSigners(); - if (codeSigners == null || codeSigners.length == 0) { - throw new SigningException("No signature found in index"); - } - /* we could in theory support more than 1, but as of now we do not */ - if (codeSigners.length > 1) { - throw new SigningException("index.jar must be signed by a single code signer!"); - } - List certs = codeSigners[0].getSignerCertPath().getCertificates(); - if (certs.size() != 1) { - throw new SigningException("index.jar code signers must only have a single certificate!"); - } - return (X509Certificate) certs.get(0); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceAttachedReceiver.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceAttachedReceiver.java deleted file mode 100644 index 002483de8..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceAttachedReceiver.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (C) 2018-2019 Hans-Christoph Steiner - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.nearby; - -import android.content.BroadcastReceiver; -import android.content.ContentResolver; -import android.content.Context; -import android.content.Intent; -import android.content.UriPermission; -import android.database.ContentObserver; -import android.hardware.usb.UsbManager; -import android.net.Uri; -import android.os.Handler; -import android.text.TextUtils; -import android.util.Log; - -import org.fdroid.fdroid.views.main.NearbyViewBinder; - -/** - * This is just a shim to receive {@link UsbManager#ACTION_USB_ACCESSORY_ATTACHED} - * events. - */ -public class UsbDeviceAttachedReceiver extends BroadcastReceiver { - public static final String TAG = "UsbDeviceAttachedReceiv"; - - @Override - public void onReceive(final Context context, Intent intent) { - - if (intent == null || TextUtils.isEmpty(intent.getAction()) - || !UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(intent.getAction())) { - Log.i(TAG, "ignoring irrelevant intent: " + intent); - return; - } - Log.i(TAG, "handling intent: " + intent); - - final ContentResolver contentResolver = context.getContentResolver(); - - for (final UriPermission uriPermission : contentResolver.getPersistedUriPermissions()) { - Uri uri = uriPermission.getUri(); - final ContentObserver contentObserver = new ContentObserver(new Handler()) { - - @Override - public void onChange(boolean selfChange, Uri uri) { - NearbyViewBinder.updateUsbOtg(context); - } - }; - contentResolver.registerContentObserver(uri, true, contentObserver); - UsbDeviceDetachedReceiver.contentObservers.put(uri, contentObserver); - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceDetachedReceiver.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceDetachedReceiver.java deleted file mode 100644 index 8229e2d71..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceDetachedReceiver.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2018-2019 Hans-Christoph Steiner - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.nearby; - -import android.content.BroadcastReceiver; -import android.content.ContentResolver; -import android.content.Context; -import android.content.Intent; -import android.database.ContentObserver; -import android.hardware.usb.UsbManager; -import android.net.Uri; -import android.text.TextUtils; -import android.util.Log; - -import org.fdroid.fdroid.views.main.NearbyViewBinder; - -import java.util.HashMap; - -/** - * This is just a shim to receive {@link UsbManager#ACTION_USB_DEVICE_DETACHED} - * events. - */ -public class UsbDeviceDetachedReceiver extends BroadcastReceiver { - public static final String TAG = "UsbDeviceDetachedReceiv"; - - static final HashMap contentObservers = new HashMap<>(); - - @Override - public void onReceive(Context context, Intent intent) { - if (intent == null || TextUtils.isEmpty(intent.getAction()) - || !UsbManager.ACTION_USB_DEVICE_DETACHED.equals(intent.getAction())) { - Log.i(TAG, "ignoring irrelevant intent: " + intent); - return; - } - Log.i(TAG, "handling intent: " + intent); - - final ContentResolver contentResolver = context.getContentResolver(); - NearbyViewBinder.updateUsbOtg(context); - for (ContentObserver contentObserver : contentObservers.values()) { - contentResolver.unregisterContentObserver(contentObserver); - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceMediaMountedReceiver.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceMediaMountedReceiver.java deleted file mode 100644 index 69bb4b102..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/UsbDeviceMediaMountedReceiver.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.Environment; - -import org.fdroid.fdroid.views.main.NearbyViewBinder; - -public class UsbDeviceMediaMountedReceiver extends BroadcastReceiver { - @Override - public void onReceive(Context context, Intent intent) { - if (intent == null || intent.getAction() == null) { - return; - } - String action = intent.getAction(); - if (Environment.MEDIA_BAD_REMOVAL.equals(action) - || Environment.MEDIA_MOUNTED.equals(action) - || Environment.MEDIA_REMOVED.equals(action) - || Environment.MEDIA_EJECTING.equals(action)) { - NearbyViewBinder.updateUsbOtg(context); - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeReceiver.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeReceiver.java deleted file mode 100644 index 7061bd94f..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeReceiver.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.net.wifi.WifiManager; - -import org.fdroid.fdroid.Utils; - -public class WifiStateChangeReceiver extends BroadcastReceiver { - private static final String TAG = "WifiStateChangeReceiver"; - - @Override - public void onReceive(Context context, Intent intent) { - if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) { - WifiStateChangeService.start(context, intent); - } else { - Utils.debugLog(TAG, "received unsupported Intent: " + intent); - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java deleted file mode 100644 index b33fc40b0..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/WifiStateChangeService.java +++ /dev/null @@ -1,387 +0,0 @@ -package org.fdroid.fdroid.nearby; - -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.net.DhcpInfo; -import android.net.NetworkInfo; -import android.net.wifi.WifiConfiguration; -import android.net.wifi.WifiInfo; -import android.net.wifi.WifiManager; -import android.text.TextUtils; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; -import androidx.work.Constraints; -import androidx.work.Data; -import androidx.work.NetworkType; -import androidx.work.OneTimeWorkRequest; -import androidx.work.WorkManager; -import androidx.work.WorkRequest; -import androidx.work.Worker; -import androidx.work.WorkerParameters; - -import org.apache.commons.net.util.SubnetUtils; -import org.fdroid.database.Repository; -import org.fdroid.fdroid.BuildConfig; -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.Hasher; -import org.fdroid.fdroid.Preferences; -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.Utils; - -import java.net.Inet6Address; -import java.net.InetAddress; -import java.net.InterfaceAddress; -import java.net.NetworkInterface; -import java.net.SocketException; -import java.security.cert.Certificate; -import java.util.Enumeration; -import java.util.Locale; - -import cc.mvdan.accesspoint.WifiApControl; - -/** - * Handle state changes to the device's wifi, storing the required bits. - * The {@link Intent} that starts it either has no extras included, - * which is how it can be triggered by code, or it came in from the system - * via {@link WifiStateChangeReceiver}, in - * which case an instance of {@link NetworkInfo} is included. - *

    - * The work is done in a {@link Thread} so that new incoming {@code Intents} - * are not blocked by processing. A new {@code Intent} immediately nullifies - * the current state because it means that something about the wifi has - * changed. Having the {@code Thread} also makes it easy to kill work - * that is in progress. - *

    - * This also schedules an update to encourage updates happening on - * unmetered networks like typical WiFi rather than networks that can - * cost money or have caps. - *

    - * Some devices send multiple copies of given events, like a Moto G often - * sends three {@code CONNECTED} events. So they have to be debounced to - * keep the {@link #BROADCAST} useful. - */ -@SuppressWarnings("LineLength") -public class WifiStateChangeService extends Worker { - private static final String TAG = "WifiStateChangeService"; - - public static final String BROADCAST = "org.fdroid.fdroid.action.WIFI_CHANGE"; - public static final String EXTRA_STATUS = "wifiStateChangeStatus"; - - private WifiManager wifiManager; - private static WifiInfoThread wifiInfoThread; - private static int previousWifiState = Integer.MIN_VALUE; - private volatile static int wifiState; - private static final int NETWORK_INFO_STATE_NOT_SET = -1; - - public WifiStateChangeService(@NonNull Context context, @NonNull WorkerParameters workerParams) { - super(context, workerParams); - } - - public static void registerReceiver(Context context) { - ContextCompat.registerReceiver( - context, - new WifiStateChangeReceiver(), - new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION), - ContextCompat.RECEIVER_NOT_EXPORTED); - } - - public static void start(Context context, @Nullable Intent intent) { - int networkInfoStateInt = NETWORK_INFO_STATE_NOT_SET; - if (intent != null) { - NetworkInfo ni = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); - networkInfoStateInt = ni.getState().ordinal(); - } - - WorkRequest workRequest = new OneTimeWorkRequest.Builder(WifiStateChangeService.class) - .setConstraints(new Constraints.Builder() - .setRequiredNetworkType(NetworkType.CONNECTED) - .build()) - .setInputData(new Data.Builder() - .putInt(WifiManager.EXTRA_NETWORK_INFO, networkInfoStateInt) - .build() - ) - .build(); - WorkManager.getInstance(context).enqueue(workRequest); - } - - @NonNull - @Override - public Result doWork() { - android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_LOWEST); - int networkInfoStateInt = getInputData().getInt(WifiManager.EXTRA_NETWORK_INFO, NETWORK_INFO_STATE_NOT_SET); - NetworkInfo.State networkInfoState = null; - if (networkInfoStateInt != NETWORK_INFO_STATE_NOT_SET) { - networkInfoState = NetworkInfo.State.values()[networkInfoStateInt]; - } - Utils.debugLog(TAG, "WiFi change service started."); - wifiManager = ContextCompat.getSystemService(getApplicationContext(), WifiManager.class); - if (wifiManager == null) { - return Result.failure(); - } - wifiState = wifiManager.getWifiState(); - Utils.debugLog(TAG, "networkInfoStateInt == " + networkInfoStateInt - + " wifiState == " + printWifiState(wifiState)); - if (networkInfoState == null - || networkInfoState == NetworkInfo.State.CONNECTED - || networkInfoState == NetworkInfo.State.DISCONNECTED) { - if (previousWifiState != wifiState && - (wifiState == WifiManager.WIFI_STATE_ENABLED - || wifiState == WifiManager.WIFI_STATE_DISABLING // might be switching to hotspot - || wifiState == WifiManager.WIFI_STATE_DISABLED // might be hotspot - || wifiState == WifiManager.WIFI_STATE_UNKNOWN)) { // might be hotspot - if (wifiInfoThread != null) { - wifiInfoThread.interrupt(); - } - wifiInfoThread = new WifiInfoThread(); - wifiInfoThread.start(); - } - } - return Result.success(); - } - - public class WifiInfoThread extends Thread { - - @Override - public void run() { - android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_LOWEST); - try { - FDroidApp.initWifiSettings(); - Utils.debugLog(TAG, "Checking wifi state (in background thread)."); - WifiInfo wifiInfo = null; - - int wifiState = wifiManager.getWifiState(); - int retryCount = 0; - while (FDroidApp.ipAddressString == null) { - if (isInterrupted()) { // can be canceled by a change via WifiStateChangeReceiver - return; - } - if (wifiState == WifiManager.WIFI_STATE_ENABLED) { - wifiInfo = wifiManager.getConnectionInfo(); - FDroidApp.ipAddressString = formatIpAddress(wifiInfo.getIpAddress()); - setSsid(wifiInfo); - DhcpInfo dhcpInfo = wifiManager.getDhcpInfo(); - if (dhcpInfo != null) { - String netmask = formatIpAddress(dhcpInfo.netmask); - if (!TextUtils.isEmpty(FDroidApp.ipAddressString) && netmask != null) { - try { - FDroidApp.subnetInfo = new SubnetUtils(FDroidApp.ipAddressString, netmask).getInfo(); - } catch (IllegalArgumentException e) { - // catch mystery: "java.lang.IllegalArgumentException: Could not parse [null/24]" - e.printStackTrace(); - } - } - } - if (FDroidApp.ipAddressString == null - || FDroidApp.subnetInfo == FDroidApp.UNSET_SUBNET_INFO) { - setIpInfoFromNetworkInterface(); - } - } else if (wifiState == WifiManager.WIFI_STATE_DISABLED - || wifiState == WifiManager.WIFI_STATE_DISABLING - || wifiState == WifiManager.WIFI_STATE_UNKNOWN) { - // try once to see if its a hotspot - setIpInfoFromNetworkInterface(); - if (FDroidApp.ipAddressString == null) { - return; - } - } - - if (retryCount > 120) { - return; - } - retryCount++; - - if (FDroidApp.ipAddressString == null) { - Thread.sleep(1000); - Utils.debugLog(TAG, "waiting for an IP address..."); - } - } - if (isInterrupted()) { // can be canceled by a change via WifiStateChangeReceiver - return; - } - - setSsid(wifiInfo); - - String scheme; - if (Preferences.get().isLocalRepoHttpsEnabled()) { - scheme = "https"; - } else { - scheme = "http"; - } - Context context = WifiStateChangeService.this.getApplicationContext(); - String address = String.format(Locale.ENGLISH, "%s://%s:%d/fdroid/repo", - scheme, FDroidApp.ipAddressString, FDroidApp.port); - // the fingerprint for the local repo's signing key - LocalRepoKeyStore localRepoKeyStore = LocalRepoKeyStore.get(context); - Certificate localCert = localRepoKeyStore.getCertificate(); - String cert = localCert == null ? - null : Hasher.hex(localCert).toLowerCase(Locale.US); - Repository repo = FDroidApp.createSwapRepo(address, cert); - - if (isInterrupted()) { // can be canceled by a change via WifiStateChangeReceiver - return; - } - - LocalRepoManager lrm = LocalRepoManager.get(context); - lrm.writeIndexPage(Utils.getSharingUri(FDroidApp.repo).toString()); - - if (isInterrupted()) { // can be canceled by a change via WifiStateChangeReceiver - return; - } - - FDroidApp.repo = repo; - - /* - * Once the IP address is known we need to generate a self - * signed certificate to use for HTTPS that has a CN field set - * to the ipAddressString. This must be run in the background - * because if this is the first time the singleton is run, it - * can take a while to instantiate. - */ - if (Preferences.get().isLocalRepoHttpsEnabled()) { - localRepoKeyStore.setupHTTPSCertificate(); - } - - } catch (LocalRepoKeyStore.InitException e) { - Log.e(TAG, "Unable to configure a fingerprint or HTTPS for the local repo", e); - } catch (InterruptedException e) { - Utils.debugLog(TAG, "interrupted"); - return; - } - Intent intent = new Intent(BROADCAST); - intent.putExtra(EXTRA_STATUS, wifiState); - LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent); - } - } - - private void setSsid(WifiInfo wifiInfo) { - Context context = getApplicationContext(); - if (wifiInfo != null && wifiInfo.getBSSID() != null) { - String ssid = wifiInfo.getSSID(); - Utils.debugLog(TAG, "Have wifi info, connected to " + ssid); - if (ssid == null) { - FDroidApp.ssid = context.getString(R.string.swap_blank_wifi_ssid); - } else { - FDroidApp.ssid = ssid.replaceAll("^\"(.*)\"$", "$1"); - } - FDroidApp.bssid = wifiInfo.getBSSID(); - } else { - WifiApControl wifiApControl = WifiApControl.getInstance(context); - Utils.debugLog(TAG, "WifiApControl: " + wifiApControl); - if (wifiApControl == null && FDroidApp.ipAddressString != null) { - wifiInfo = wifiManager.getConnectionInfo(); - if (wifiInfo != null && wifiInfo.getBSSID() != null) { - setSsid(wifiInfo); - } else { - FDroidApp.ssid = context.getString(R.string.swap_active_hotspot, ""); - } - } else if (wifiApControl != null && wifiApControl.isEnabled()) { - WifiConfiguration wifiConfiguration = wifiApControl.getConfiguration(); - Utils.debugLog(TAG, "WifiConfiguration: " + wifiConfiguration); - if (wifiConfiguration == null) { - FDroidApp.ssid = context.getString(R.string.swap_active_hotspot, ""); - FDroidApp.bssid = ""; - return; - } - - if (wifiConfiguration.hiddenSSID) { - FDroidApp.ssid = context.getString(R.string.swap_hidden_wifi_ssid); - } else { - FDroidApp.ssid = wifiConfiguration.SSID; - } - FDroidApp.bssid = wifiConfiguration.BSSID; - } - } - } - - /** - * Search for known Wi-Fi, Hotspot, and local network interfaces and get - * the IP Address info from it. This is necessary because network - * interfaces in Hotspot/AP mode do not show up in the regular - * {@link WifiManager} queries, and also on - * {@link android.os.Build.VERSION_CODES#LOLLIPOP Android 5.0} and newer, - * {@link WifiManager#getDhcpInfo()} returns an invalid netmask. - * - * @see netmask of WifiManager.getDhcpInfo() is always zero on Android 5.0 - */ - private void setIpInfoFromNetworkInterface() { - try { - Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces(); - if (networkInterfaces == null) { - return; - } - while (networkInterfaces.hasMoreElements()) { - NetworkInterface netIf = networkInterfaces.nextElement(); - - for (Enumeration inetAddresses = netIf.getInetAddresses(); inetAddresses.hasMoreElements(); ) { - InetAddress inetAddress = inetAddresses.nextElement(); - if (inetAddress.isLoopbackAddress() || inetAddress instanceof Inet6Address) { - continue; - } - if (netIf.getDisplayName().contains("wlan0") - || netIf.getDisplayName().contains("eth0") - || netIf.getDisplayName().contains("ap0")) { - FDroidApp.ipAddressString = inetAddress.getHostAddress(); - for (InterfaceAddress address : netIf.getInterfaceAddresses()) { - short networkPrefixLength = address.getNetworkPrefixLength(); - if (networkPrefixLength > 32) { - // something is giving a "/64" netmask, IPv6? - // java.lang.IllegalArgumentException: Value [64] not in range [0,32] - continue; - } - try { - String cidr = String.format(Locale.ENGLISH, "%s/%d", - FDroidApp.ipAddressString, networkPrefixLength); - FDroidApp.subnetInfo = new SubnetUtils(cidr).getInfo(); - break; - } catch (IllegalArgumentException e) { - if (BuildConfig.DEBUG) { - e.printStackTrace(); - } else { - Log.i(TAG, "Getting subnet failed: " + e.getLocalizedMessage()); - } - } - } - } - } - } - } catch (NullPointerException | SocketException e) { - // NetworkInterface.getNetworkInterfaces() can throw a NullPointerException internally - Log.e(TAG, "Could not get ip address", e); - } - } - - static String formatIpAddress(int ipAddress) { - if (ipAddress == 0) { - return null; - } - return String.format(Locale.ENGLISH, "%d.%d.%d.%d", - ipAddress & 0xff, - ipAddress >> 8 & 0xff, - ipAddress >> 16 & 0xff, - ipAddress >> 24 & 0xff); - } - - private String printWifiState(int wifiState) { - switch (wifiState) { - case WifiManager.WIFI_STATE_DISABLED: - return "WIFI_STATE_DISABLED"; - case WifiManager.WIFI_STATE_DISABLING: - return "WIFI_STATE_DISABLING"; - case WifiManager.WIFI_STATE_ENABLING: - return "WIFI_STATE_ENABLING"; - case WifiManager.WIFI_STATE_ENABLED: - return "WIFI_STATE_ENABLED"; - case WifiManager.WIFI_STATE_UNKNOWN: - return "WIFI_STATE_UNKNOWN"; - case Integer.MIN_VALUE: - return "previous value unset"; - default: - return "~not mapped~"; - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/peers/BluetoothPeer.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/peers/BluetoothPeer.java deleted file mode 100644 index 3b3b81b1e..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/peers/BluetoothPeer.java +++ /dev/null @@ -1,120 +0,0 @@ -package org.fdroid.fdroid.nearby.peers; - -import android.bluetooth.BluetoothClass.Device; -import android.bluetooth.BluetoothDevice; -import android.os.Parcel; -import android.text.TextUtils; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.annotation.RequiresPermission; - -import org.fdroid.fdroid.R; - -public class BluetoothPeer implements Peer { - - private static final String BLUETOOTH_NAME_TAG = "FDroid:"; - - private final BluetoothDevice device; - - /** - * Return a instance if the {@link BluetoothDevice} is a device that could - * host a swap repo. - */ - @Nullable - @RequiresPermission("android.permission.BLUETOOTH_CONNECT") - public static BluetoothPeer getInstance(@Nullable BluetoothDevice device) { - if (device != null && device.getName() != null && - (device.getBluetoothClass().getDeviceClass() == Device.COMPUTER_HANDHELD_PC_PDA - || device.getBluetoothClass().getDeviceClass() == Device.COMPUTER_PALM_SIZE_PC_PDA - || device.getBluetoothClass().getDeviceClass() == Device.PHONE_SMART)) { - return new BluetoothPeer(device); - } - return null; - } - - private BluetoothPeer(BluetoothDevice device) { - this.device = device; - } - - @NonNull - @Override - @RequiresPermission("android.permission.BLUETOOTH_CONNECT") - public String toString() { - String name = getName(); - if (name == null) return "null"; - return name; - } - - @Override - @Nullable - @RequiresPermission("android.permission.BLUETOOTH_CONNECT") - public String getName() { - String name = device.getName(); - if (name == null) return null; - return name.replaceAll("^" + BLUETOOTH_NAME_TAG, ""); - } - - @Override - public int getIcon() { - return R.drawable.ic_bluetooth; - } - - @Override - public boolean equals(Object peer) { - return peer instanceof BluetoothPeer - && TextUtils.equals(((BluetoothPeer) peer).device.getAddress(), device.getAddress()); - } - - @Override - public int hashCode() { - return device.getAddress().hashCode(); - } - - @Override - public String getRepoAddress() { - return "bluetooth://" + device.getAddress().replace(':', '-') + "/fdroid/repo"; - } - - /** - * Return the fingerprint of the signing key, or {@code null} if it is not set. - *

    - * This is not yet stored for Bluetooth connections. Once a device is connected to a bluetooth - * socket, if we trust it enough to accept a fingerprint from it somehow, then we may as well - * trust it enough to receive an index from it that contains a fingerprint we can use. - */ - @Override - public String getFingerprint() { - return null; - } - - @Override - public boolean shouldPromptForSwapBack() { - return false; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeParcelable(this.device, 0); - } - - private BluetoothPeer(Parcel in) { - this.device = in.readParcelable(BluetoothDevice.class.getClassLoader()); - } - - public static final Creator CREATOR = new Creator() { - public BluetoothPeer createFromParcel(Parcel source) { - return new BluetoothPeer(source); - } - - public BluetoothPeer[] newArray(int size) { - return new BluetoothPeer[size]; - } - }; - -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/peers/BonjourPeer.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/peers/BonjourPeer.java deleted file mode 100644 index cca554f87..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/peers/BonjourPeer.java +++ /dev/null @@ -1,101 +0,0 @@ -package org.fdroid.fdroid.nearby.peers; - -import android.net.Uri; -import android.os.Parcel; -import android.text.TextUtils; - -import androidx.annotation.Nullable; - -import org.fdroid.fdroid.FDroidApp; - -import javax.jmdns.ServiceInfo; -import javax.jmdns.impl.FDroidServiceInfo; - -public class BonjourPeer extends WifiPeer { - private static final String TAG = "BonjourPeer"; - - public static final String FINGERPRINT = "fingerprint"; - public static final String NAME = "name"; - public static final String PATH = "path"; - public static final String TYPE = "type"; - - private final FDroidServiceInfo serviceInfo; - - /** - * Return a instance if the {@link ServiceInfo} is fully resolved and does - * not represent this device, but something else on the network. - */ - @Nullable - public static BonjourPeer getInstance(ServiceInfo serviceInfo) { - String type = serviceInfo.getPropertyString(TYPE); - String fingerprint = serviceInfo.getPropertyString(FINGERPRINT); - if (type == null || !type.startsWith("fdroidrepo") || FDroidApp.repo == null - || TextUtils.equals(FDroidApp.repo.getFingerprint(), fingerprint)) { - return null; - } - return new BonjourPeer(serviceInfo); - } - - private BonjourPeer(ServiceInfo serviceInfo) { - this.serviceInfo = new FDroidServiceInfo(serviceInfo); - this.name = serviceInfo.getDomain(); - this.uri = Uri.parse(this.serviceInfo.getRepoAddress()); - this.shouldPromptForSwapBack = true; - } - - @Override - public String toString() { - return getName(); - } - - @Override - public String getName() { - return serviceInfo.getName(); - } - - @Override - public int hashCode() { - String fingerprint = getFingerprint(); - if (fingerprint == null) { - return 0; - } - return fingerprint.hashCode(); - } - - @Override - public String getRepoAddress() { - return serviceInfo.getRepoAddress(); - } - - /** - * Return the fingerprint of the signing key, or {@code null} if it is not set. - */ - @Override - public String getFingerprint() { - return serviceInfo.getFingerprint(); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeParcelable(serviceInfo, flags); - } - - private BonjourPeer(Parcel in) { - this((ServiceInfo) in.readParcelable(FDroidServiceInfo.class.getClassLoader())); - } - - public static final Creator CREATOR = new Creator() { - public BonjourPeer createFromParcel(Parcel source) { - return new BonjourPeer(source); - } - - public BonjourPeer[] newArray(int size) { - return new BonjourPeer[size]; - } - }; -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/peers/Peer.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/peers/Peer.java deleted file mode 100644 index 438db6bb1..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/peers/Peer.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.fdroid.fdroid.nearby.peers; - -import android.os.Parcelable; - -import androidx.annotation.DrawableRes; - -/** - * TODO This model assumes that "peers" from Bluetooth, Bonjour, and WiFi are - * different things. They are not different repos though, they all point to - * the same repos. This should really be combined to be a single "RemoteRepo" - * class that represents a single device's local repo, and can have zero to - * many ways to connect to it (e.g. Bluetooth, WiFi, USB Thumb Drive, SD Card, - * WiFi Direct, etc). - */ -public interface Peer extends Parcelable { - - String getName(); - - @DrawableRes - int getIcon(); - - boolean equals(Object peer); - - String getRepoAddress(); - - String getFingerprint(); - - boolean shouldPromptForSwapBack(); -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/nearby/peers/WifiPeer.java b/legacy/src/full/java/org/fdroid/fdroid/nearby/peers/WifiPeer.java deleted file mode 100644 index 2b892cfa7..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/nearby/peers/WifiPeer.java +++ /dev/null @@ -1,109 +0,0 @@ -package org.fdroid.fdroid.nearby.peers; - -import android.net.Uri; -import android.os.Parcel; -import android.text.TextUtils; - -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.nearby.NewRepoConfig; - -public class WifiPeer implements Peer { - - protected String name; - protected Uri uri; - protected boolean shouldPromptForSwapBack; - - public WifiPeer() { - - } - - public WifiPeer(NewRepoConfig config) { - this(config.getRepoUri(), config.getHost(), !config.preventFurtherSwaps()); - } - - private WifiPeer(Uri uri, String name, boolean shouldPromptForSwapBack) { - this.name = name; - this.uri = uri; - this.shouldPromptForSwapBack = shouldPromptForSwapBack; - } - - /** - * Return if this instance points to the same device as that instance, even - * if some of the configuration details are not the same, like whether one - * instance supplies the fingerprint and the other does not, then use IP - * address and port number. - */ - @Override - public boolean equals(Object peer) { - if (peer instanceof BluetoothPeer) { - return false; - } - String fingerprint = getFingerprint(); - if (this instanceof BonjourPeer && peer instanceof BonjourPeer) { - BonjourPeer that = (BonjourPeer) peer; - return TextUtils.equals(this.getFingerprint(), that.getFingerprint()); - } else { - WifiPeer that = (WifiPeer) peer; - if (!TextUtils.isEmpty(fingerprint) && TextUtils.equals(this.getFingerprint(), that.getFingerprint())) { - return true; - } - return TextUtils.equals(this.getRepoAddress(), that.getRepoAddress()); - } - } - - @Override - public int hashCode() { - return (uri.getHost() + uri.getPort()).hashCode(); - } - - @Override - public String getName() { - return name; - } - - @Override - public int getIcon() { - return R.drawable.ic_wifi; - } - - @Override - public String getRepoAddress() { - return uri.toString(); - } - - @Override - public String getFingerprint() { - return uri.getQueryParameter("fingerprint"); - } - - @Override - public boolean shouldPromptForSwapBack() { - return shouldPromptForSwapBack; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeString(name); - dest.writeString(uri.toString()); - dest.writeByte(shouldPromptForSwapBack ? (byte) 1 : (byte) 0); - } - - private WifiPeer(Parcel in) { - this(Uri.parse(in.readString()), in.readString(), in.readByte() == 1); - } - - public static final Creator CREATOR = new Creator() { - public WifiPeer createFromParcel(Parcel source) { - return new WifiPeer(source); - } - - public WifiPeer[] newArray(int size) { - return new WifiPeer[size]; - } - }; -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/panic/CalculatorActivity.java b/legacy/src/full/java/org/fdroid/fdroid/panic/CalculatorActivity.java deleted file mode 100644 index 7d5a78de6..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/panic/CalculatorActivity.java +++ /dev/null @@ -1,160 +0,0 @@ -package org.fdroid.fdroid.panic; - -import android.os.Bundle; -import android.view.View; -import android.widget.Button; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.google.android.material.appbar.MaterialToolbar; - -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.R; - -import java.util.regex.Pattern; - -/** - * A very hacky calculator which is barely functional. - * It is just meant to pass a very casual inspection. - */ -public class CalculatorActivity extends AppCompatActivity { - - // binary operators - private static final String TIMES = "×"; - private static final String DIVIDED = "÷"; - private static final String PLUS = "+"; - private static final String MINUS = "-"; - - // unary operators - private static final String PERCENT = "%"; - - @Nullable - private String lastOp; - - // views - private TextView textView; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - FDroidApp fdroidApp = (FDroidApp) getApplication(); - fdroidApp.setSecureWindow(this); - - fdroidApp.applyPureBlackBackgroundInDarkTheme(this); - - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_calculator); - - MaterialToolbar toolbar = findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - textView = (TextView) findViewById(R.id.textView); - } - - public void ce(View view) { - // clear display - textView.setText(null); - } - - public void c(View view) { - // clear last character - if (textView.length() > 0) { - String text = textView.getText().toString(); - textView.setText(text.substring(0, text.length() - 1)); - } - } - - public void number(View view) { - String number = ((Button) view).getText().toString(); - String newNumber = String.format("%s%s", textView.getText(), number); - // FIXME don't allow multiple commas - String pin = String.valueOf(HidingManager.getUnhidePin(this)); - if (newNumber.equals(pin)) { - // correct PIN was entered, show app launcher again - HidingManager.show(this); - } - textView.setText(newNumber); - } - - public void op(View view) { - String text = textView.getText().toString(); - - if (text.length() == 0) { - return; - } else if (containsBinaryOperator(String.valueOf(text.charAt(text.length() - 1)))) { - // last character was already binary operator, ignore - return; - } - - String op = ((Button) view).getText().toString(); - if (containsBinaryOperator(op)) { - // remember binary operator - lastOp = op; - // add binary operator to display - textView.setText(String.format("%s%s", text, op)); - } else if (op.equals(PERCENT)) { - double result; - try { - result = Double.valueOf(eval(text)); - } catch (NumberFormatException e) { - result = 0; - } - textView.setText(toString(result / 100)); - } else if ("=".equals(op)) { - textView.setText(eval(text)); - } else { - Toast.makeText(this, "Error: Unknown Operation", Toast.LENGTH_SHORT).show(); - } - } - - private String eval(String s) { - if (lastOp != null && s.contains(lastOp)) { - // remember and reset binary operator - String op = lastOp; - lastOp = null; - - // extract binary operation - String[] parts = s.split(Pattern.quote(op)); - double left; - double right; - try { - left = Double.valueOf(parts[0]); - right = Double.valueOf(parts[1]); - } catch (NumberFormatException e) { - return ""; - } - - // evaluate binary operation - switch (op) { - case PLUS: - return toString(left + right); - case MINUS: - return toString(left - right); - case TIMES: - return toString(left * right); - case DIVIDED: - if (right == 0) return ""; - return toString(left / right); - default: - Toast.makeText(this, "Error: Unknown Operation", Toast.LENGTH_SHORT).show(); - return s; - } - } else { - return s; - } - } - - private boolean containsBinaryOperator(String s) { - return s.contains(TIMES) || s.contains(DIVIDED) || s.contains(PLUS) || s.contains(MINUS); - } - - private String toString(double d) { - String s = String.valueOf(d); - if (s.length() > 2 && s.endsWith(".0")) { - return s.substring(0, s.length() - 2); - } - return s; - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/panic/DestructivePreference.java b/legacy/src/full/java/org/fdroid/fdroid/panic/DestructivePreference.java deleted file mode 100644 index 9c5bf991b..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/panic/DestructivePreference.java +++ /dev/null @@ -1,34 +0,0 @@ -package org.fdroid.fdroid.panic; - -import android.content.Context; -import android.util.AttributeSet; - -import androidx.core.content.ContextCompat; -import androidx.preference.Preference; -import androidx.preference.PreferenceViewHolder; - -import org.fdroid.fdroid.R; - -public class DestructivePreference extends Preference { - public DestructivePreference(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - public DestructivePreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - } - - public DestructivePreference(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public DestructivePreference(Context context) { - super(context); - } - - @Override - public void onBindViewHolder(PreferenceViewHolder holder) { - super.onBindViewHolder(holder); - holder.itemView.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.panic_destructive)); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/panic/DestructiveSwitchPreference.java b/legacy/src/full/java/org/fdroid/fdroid/panic/DestructiveSwitchPreference.java deleted file mode 100644 index b97d76af2..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/panic/DestructiveSwitchPreference.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.fdroid.fdroid.panic; - -import android.content.Context; -import android.util.AttributeSet; - -import androidx.core.content.ContextCompat; -import androidx.preference.PreferenceViewHolder; -import androidx.preference.SwitchPreferenceCompat; - -import com.google.android.material.materialswitch.MaterialSwitch; - -import org.fdroid.fdroid.R; - -public class DestructiveSwitchPreference extends SwitchPreferenceCompat { - public DestructiveSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) { - super(context, attrs, defStyleAttr); - } - - public DestructiveSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { - super(context, attrs, defStyleAttr, defStyleRes); - } - - public DestructiveSwitchPreference(Context context, AttributeSet attrs) { - super(context, attrs); - } - - public DestructiveSwitchPreference(Context context) { - super(context); - } - - @Override - public void onBindViewHolder(PreferenceViewHolder holder) { - super.onBindViewHolder(holder); - if (!holder.itemView.isEnabled()) { - return; - } - holder.itemView.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.panic_destructive)); - - //noinspection unused // TODO choose more fitting color below - MaterialSwitch switchView = holder.itemView.findViewById(androidx.preference.R.id.switchWidget); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/panic/ExitActivity.java b/legacy/src/full/java/org/fdroid/fdroid/panic/ExitActivity.java deleted file mode 100644 index 51befa555..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/panic/ExitActivity.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.fdroid.fdroid.panic; - -import android.content.Intent; -import android.os.Bundle; - -import androidx.appcompat.app.AppCompatActivity; - -public class ExitActivity extends AppCompatActivity { - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - finishAndRemoveTask(); - - System.exit(0); - } - - static void exitAndRemoveFromRecentApps(final AppCompatActivity activity) { - activity.runOnUiThread(() -> { - Intent intent = new Intent(activity, ExitActivity.class); - - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK - | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS - | Intent.FLAG_ACTIVITY_CLEAR_TASK - | Intent.FLAG_ACTIVITY_NO_ANIMATION); - - activity.startActivity(intent); - }); - - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/panic/HidingManager.java b/legacy/src/full/java/org/fdroid/fdroid/panic/HidingManager.java deleted file mode 100644 index c8ff50786..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/panic/HidingManager.java +++ /dev/null @@ -1,104 +0,0 @@ -package org.fdroid.fdroid.panic; - -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.pm.ServiceInfo; - -import androidx.core.app.NotificationManagerCompat; - -import com.google.android.material.dialog.MaterialAlertDialogBuilder; - -import org.fdroid.fdroid.BuildConfig; -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.views.main.MainActivity; - -/** - * This class is encapsulating all methods related to hiding the app from the launcher - * and restoring it. - *

    - * It can tell you whether the app is hidden, what the PIN to restore is - * and show confirmation dialogs before hiding. - */ -public class HidingManager { - - private static final ComponentName LAUNCHER_NAME = - new ComponentName(BuildConfig.APPLICATION_ID, MainActivity.class.getName()); - - private static final ComponentName CALCULATOR_NAME = - new ComponentName(BuildConfig.APPLICATION_ID, CalculatorActivity.class.getName()); - - public static int getUnhidePin(Context context) { - return context.getResources().getInteger(R.integer.unhidePin); - } - - public static boolean isHidden(Context context) { - PackageManager pm = context.getPackageManager(); - int state = pm.getComponentEnabledSetting(LAUNCHER_NAME); - return state == PackageManager.COMPONENT_ENABLED_STATE_DISABLED; - } - - public static void showHideDialog(final Context context) { - String appName = context.getString(R.string.app_name); - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(context); - builder.setTitle(context.getString(R.string.hiding_dialog_title, appName)); - builder.setMessage(context.getString(R.string.hiding_dialog_message, appName, - HidingManager.getUnhidePin(context), context.getString(R.string.hiding_calculator))); - builder.setPositiveButton(context.getString(R.string.panic_hide_title, appName), - (dialog, which) -> hide(context)); - builder.setNegativeButton(R.string.cancel, (dialogInterface, i) -> dialogInterface.cancel()); - builder.setView(R.layout.dialog_app_hiding); - builder.create().show(); - } - - public static void hide(Context context) { - stopServices(context); - removeNotifications(context); - - PackageManager pm = context.getPackageManager(); - // hide launcher icon - pm.setComponentEnabledSetting(LAUNCHER_NAME, - PackageManager.COMPONENT_ENABLED_STATE_DISABLED, - PackageManager.DONT_KILL_APP); - // show calculator icon - pm.setComponentEnabledSetting(CALCULATOR_NAME, - PackageManager.COMPONENT_ENABLED_STATE_ENABLED, - 0); // please kill app (faster and safer, because it also stops services) - } - - public static void show(Context context) { - PackageManager pm = context.getPackageManager(); - // show launcher icon - pm.setComponentEnabledSetting(LAUNCHER_NAME, - PackageManager.COMPONENT_ENABLED_STATE_ENABLED, - PackageManager.DONT_KILL_APP); - // hide calculator icon - pm.setComponentEnabledSetting(CALCULATOR_NAME, - PackageManager.COMPONENT_ENABLED_STATE_DISABLED, - 0); // please kill app (faster) - } - - private static void removeNotifications(Context context) { - NotificationManagerCompat nm = NotificationManagerCompat.from(context); - nm.cancelAll(); - } - - /** - * Stops all running services, so nothing can pop up and reveal F-Droid's existence on the system - */ - private static void stopServices(Context context) { - try { - PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), - PackageManager.GET_SERVICES); - for (ServiceInfo serviceInfo : packageInfo.services) { - Intent intent = new Intent(); - intent.setComponent(new ComponentName(context, serviceInfo.name)); - context.stopService(intent); - } - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesActivity.java b/legacy/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesActivity.java deleted file mode 100644 index ce355b7a7..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesActivity.java +++ /dev/null @@ -1,28 +0,0 @@ -package org.fdroid.fdroid.panic; - -import android.os.Bundle; - -import androidx.appcompat.app.AppCompatActivity; - -import com.google.android.material.appbar.MaterialToolbar; - -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.R; - -public class PanicPreferencesActivity extends AppCompatActivity { - - @Override - public void onCreate(Bundle bundle) { - FDroidApp fdroidApp = (FDroidApp) getApplication(); - fdroidApp.setSecureWindow(this); - - fdroidApp.applyPureBlackBackgroundInDarkTheme(this); - - super.onCreate(bundle); - setContentView(R.layout.activity_panic_settings); - - MaterialToolbar toolbar = findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesFragment.java b/legacy/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesFragment.java deleted file mode 100644 index 5ae61aaee..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/panic/PanicPreferencesFragment.java +++ /dev/null @@ -1,288 +0,0 @@ -package org.fdroid.fdroid.panic; - -import android.content.ComponentName; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.SharedPreferences; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.content.res.Resources; -import android.graphics.LightingColorFilter; -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.os.Bundle; -import android.text.TextUtils; -import android.util.TypedValue; - -import androidx.annotation.ColorInt; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.content.ContextCompat; -import androidx.preference.ListPreference; -import androidx.preference.Preference; -import androidx.preference.PreferenceCategory; -import androidx.preference.PreferenceFragmentCompat; -import androidx.preference.SwitchPreferenceCompat; - -import com.google.android.material.dialog.MaterialAlertDialogBuilder; - -import org.fdroid.fdroid.Preferences; -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.installer.PrivilegedInstaller; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -import info.guardianproject.panic.Panic; -import info.guardianproject.panic.PanicResponder; - -public class PanicPreferencesFragment extends PreferenceFragmentCompat - implements SharedPreferences.OnSharedPreferenceChangeListener { - - private static final String PREF_APP = "pref_panic_app"; - - private PackageManager pm; - private ListPreference prefApp; - private SwitchPreferenceCompat prefExit; - private SwitchPreferenceCompat prefHide; - private SwitchPreferenceCompat prefResetRepos; - private PreferenceCategory categoryAppsToUninstall; - - @Override - public void onCreatePreferences(Bundle bundle, String s) { - addPreferencesFromResource(R.xml.preferences_panic); - - pm = requireActivity().getPackageManager(); - prefExit = findPreference(Preferences.PREF_PANIC_EXIT); - prefApp = findPreference(PREF_APP); - prefHide = findPreference(Preferences.PREF_PANIC_HIDE); - prefHide.setTitle(getString(R.string.panic_hide_title, getString(R.string.app_name))); - prefResetRepos = findPreference(Preferences.PREF_PANIC_RESET_REPOS); - categoryAppsToUninstall = findPreference("pref_panic_apps_to_uninstall"); - - if (PanicResponder.checkForDisconnectIntent(requireActivity())) { - // the necessary action should have been performed by the check already - requireActivity().finish(); - return; - } - String connectIntentSender = PanicResponder.getConnectIntentSender(requireActivity()); - // if there's a connecting app and it is not the old one - if (!TextUtils.isEmpty(connectIntentSender) && !TextUtils.equals(connectIntentSender, PanicResponder - .getTriggerPackageName(getActivity()))) { - // Show dialog allowing the user to opt-in - showOptInDialog(); - } - - prefApp.setOnPreferenceChangeListener((preference, newValue) -> { - String packageName = (String) newValue; - PanicResponder.setTriggerPackageName(requireActivity(), packageName); - if (packageName.equals(Panic.PACKAGE_NAME_NONE)) { - prefHide.setChecked(false); - prefHide.setEnabled(false); - prefResetRepos.setChecked(false); - prefResetRepos.setEnabled(false); - requireActivity().setResult(AppCompatActivity.RESULT_CANCELED); - } else { - prefHide.setEnabled(true); - prefResetRepos.setEnabled(true); - } - showPanicApp(packageName); - return true; - }); - showPanicApp(PanicResponder.getTriggerPackageName(getActivity())); - } - - @Override - public void onStart() { - super.onStart(); - getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this); - - if (!PrivilegedInstaller.isDefault(getActivity())) { - getPreferenceScreen().removePreference(categoryAppsToUninstall); - return; - } - showWipeList(); - } - - private void showWipeList() { - Intent intent = new Intent(getActivity(), SelectInstalledAppsActivity.class); - intent.setAction(Intent.ACTION_MAIN); - Set wipeSet = Preferences.get().getPanicWipeSet(); - categoryAppsToUninstall.removeAll(); - if (Panic.PACKAGE_NAME_NONE.equals(prefApp.getValue())) { - categoryAppsToUninstall.setEnabled(false); - return; - } - categoryAppsToUninstall.setEnabled(true); - if (wipeSet.size() > 0) { - for (String packageName : wipeSet) { - Preference preference = new DestructivePreference(getActivity()); - preference.setSingleLineTitle(true); - preference.setIntent(intent); - categoryAppsToUninstall.addPreference(preference); - try { - preference.setTitle(pm.getApplicationLabel(pm.getApplicationInfo(packageName, 0))); - preference.setIcon(pm.getApplicationIcon(packageName)); - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - preference.setTitle(packageName); - } - } - } else { - Preference preference = new Preference(requireActivity()); - preference.setIntent(intent); - Drawable icon = ContextCompat.getDrawable(requireContext(), R.drawable.ic_add_circle_outline); - icon.setColorFilter(new LightingColorFilter(0, getResources().getColor(R.color.swap_light_grey_icon))); - preference.setSingleLineTitle(true); - preference.setTitle(R.string.panic_add_apps_to_uninstall); - preference.setIcon(icon); - categoryAppsToUninstall.addPreference(preference); - } - } - - @Override - public void onStop() { - super.onStop(); - getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); - } - - @Override - public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - if (key.equals(Preferences.PREF_PANIC_HIDE) - && sharedPreferences.getBoolean(Preferences.PREF_PANIC_HIDE, false)) { - showHideConfirmationDialog(); - } - // disable "hiding" if "exit" gets disabled - if (key.equals(Preferences.PREF_PANIC_EXIT) - && !sharedPreferences.getBoolean(Preferences.PREF_PANIC_EXIT, true)) { - prefHide.setChecked(false); - } - } - - private void showPanicApp(String packageName) { - // Fill list of available panic apps - List entries = new ArrayList<>(Collections.singletonList(getString(R.string.panic_app_setting_none))); - List entryValues = new ArrayList<>(Collections.singletonList(Panic.PACKAGE_NAME_NONE)); - - for (ResolveInfo resolveInfo : PanicResponder.resolveTriggerApps(pm)) { - if (resolveInfo.activityInfo == null) continue; - entries.add(resolveInfo.activityInfo.loadLabel(pm)); - entryValues.add(resolveInfo.activityInfo.packageName); - } - - prefApp.setEntries(entries.toArray(new CharSequence[0])); - prefApp.setEntryValues(entryValues.toArray(new CharSequence[0])); - prefApp.setDefaultValue(Panic.PACKAGE_NAME_NONE); - - if (entries.size() <= 1) { - // bring the user to Ripple if no other panic apps are available - prefApp.setOnPreferenceClickListener(preference -> { - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setData(Uri.parse("market://details?id=info.guardianproject.ripple")); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - if (intent.resolveActivity(requireActivity().getPackageManager()) != null) { - startActivity(intent); - } - return true; - }); - } - - if (TextUtils.isEmpty(packageName) || packageName.equals(Panic.PACKAGE_NAME_NONE)) { - // no panic app set - prefApp.setValue(Panic.PACKAGE_NAME_NONE); - prefApp.setSummary(getString(R.string.panic_app_setting_summary)); - - prefApp.setIcon(null); // otherwise re-setting view resource doesn't work - Drawable icon = ContextCompat.getDrawable(requireActivity(), R.drawable.ic_cancel); - TypedValue typedValue = new TypedValue(); - Resources.Theme theme = requireActivity().getTheme(); - theme.resolveAttribute(R.attr.appListItem, typedValue, true); - @ColorInt int color = typedValue.data; - icon.setColorFilter(color, PorterDuff.Mode.SRC_IN); - prefApp.setIcon(icon); - - // disable destructive panic actions - prefHide.setEnabled(false); - showWipeList(); - } else { - // try to display connected panic app - try { - prefApp.setValue(packageName); - prefApp.setSummary(pm.getApplicationLabel(pm.getApplicationInfo(packageName, 0))); - prefApp.setIcon(pm.getApplicationIcon(packageName)); - prefHide.setEnabled(true); - prefResetRepos.setEnabled(true); - showWipeList(); - } catch (PackageManager.NameNotFoundException e) { - // revert back to no app, just to be safe - PanicResponder.setTriggerPackageName(requireActivity(), Panic.PACKAGE_NAME_NONE); - showPanicApp(Panic.PACKAGE_NAME_NONE); - } - } - } - - private void showOptInDialog() { - DialogInterface.OnClickListener okListener = (dialogInterface, i) -> { - PanicResponder.setTriggerPackageName(requireActivity()); - showPanicApp(PanicResponder.getTriggerPackageName(getActivity())); - requireActivity().setResult(AppCompatActivity.RESULT_OK); - }; - DialogInterface.OnClickListener cancelListener = (dialogInterface, i) -> { - requireActivity().setResult(AppCompatActivity.RESULT_CANCELED); - requireActivity().finish(); - }; - - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireActivity()); - builder.setTitle(getString(R.string.panic_app_dialog_title)); - - CharSequence app = getString(R.string.panic_app_unknown_app); - String packageName = getCallingPackageName(); - if (packageName != null) { - try { - app = pm.getApplicationLabel(pm.getApplicationInfo(packageName, 0)); - } catch (PackageManager.NameNotFoundException e) { - e.printStackTrace(); - } - } - - String text = String.format(getString(R.string.panic_app_dialog_message), app); - builder.setMessage(text); - builder.setNegativeButton(R.string.allow, okListener); - builder.setPositiveButton(R.string.cancel, cancelListener); - builder.show(); - } - - @Nullable - private String getCallingPackageName() { - ComponentName componentName = requireActivity().getCallingActivity(); - String packageName = null; - if (componentName != null) { - packageName = componentName.getPackageName(); - } - return packageName; - } - - private void showHideConfirmationDialog() { - String appName = getString(R.string.app_name); - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(requireActivity()); - builder.setTitle(R.string.panic_hide_warning_title); - builder.setMessage(getString(R.string.panic_hide_warning_message, appName, - HidingManager.getUnhidePin(requireActivity()), getString(R.string.hiding_calculator))); - builder.setPositiveButton(R.string.ok, (dialogInterface, i) -> { - // enable "exit" if "hiding" gets enabled - prefExit.setChecked(true); - // dismiss, but not cancel dialog - dialogInterface.dismiss(); - }); - builder.setNegativeButton(R.string.cancel, (dialogInterface, i) -> dialogInterface.cancel()); - builder.setOnCancelListener(dialogInterface -> { - prefHide.setChecked(false); - prefResetRepos.setChecked(false); - }); - builder.setView(R.layout.dialog_app_hiding); - builder.create().show(); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/panic/PanicResponderActivity.java b/legacy/src/full/java/org/fdroid/fdroid/panic/PanicResponderActivity.java deleted file mode 100644 index d6f7a6c8d..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/panic/PanicResponderActivity.java +++ /dev/null @@ -1,145 +0,0 @@ -package org.fdroid.fdroid.panic; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; - -import org.fdroid.fdroid.Preferences; -import org.fdroid.fdroid.data.Apk; -import org.fdroid.fdroid.data.App; -import org.fdroid.fdroid.data.DBHelper; -import org.fdroid.fdroid.installer.Installer; -import org.fdroid.fdroid.installer.InstallerService; -import org.fdroid.fdroid.installer.PrivilegedInstaller; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.TimeUnit; - -import info.guardianproject.panic.Panic; -import info.guardianproject.panic.PanicResponder; - -/** - * This {@link AppCompatActivity} is purely to run events in response to a panic trigger. - * It needs to be an {@code AppCompatActivity} rather than a {@link android.app.Service} - * so that it can fetch some of the required information about what sent the - * {@link Intent}. This is therefore an {@code AppCompatActivity} without any UI, which - * is a special case in Android. All the code must be in - * {@link #onCreate(Bundle)} and {@link #finish()} must be called at the end of - * that method. - * - * @see PanicResponder#receivedTriggerFromConnectedApp(AppCompatActivity) - */ -public class PanicResponderActivity extends AppCompatActivity { - - private static final String TAG = PanicResponderActivity.class.getSimpleName(); - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - Intent intent = getIntent(); - if (!Panic.isTriggerIntent(intent)) { - finish(); - return; - } - - // received intent from panic app - Log.i(TAG, "Received Panic Trigger..."); - - final Preferences preferences = Preferences.get(); - - boolean receivedTriggerFromConnectedApp = PanicResponder.receivedTriggerFromConnectedApp(this); - final boolean runningAppUninstalls = PrivilegedInstaller.isDefault(this); - - ArrayList wipeList = new ArrayList<>(preferences.getPanicWipeSet()); - preferences.setPanicWipeSet(Collections.emptySet()); - preferences.setPanicTmpSelectedSet(Collections.emptySet()); - - if (receivedTriggerFromConnectedApp && runningAppUninstalls && wipeList.size() > 0) { - - // if this app (e.g. F-Droid) is to be deleted, do it last - if (wipeList.contains(getPackageName())) { - wipeList.remove(getPackageName()); - wipeList.add(getPackageName()); - } - - final Context context = this; - final CountDownLatch latch = new CountDownLatch(1); - final LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(context); - final String lastToUninstall = wipeList.get(wipeList.size() - 1); - final BroadcastReceiver receiver = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - switch ((intent.getAction())) { - case Installer.ACTION_UNINSTALL_INTERRUPTED: - case Installer.ACTION_UNINSTALL_COMPLETE: - latch.countDown(); - break; - } - } - }; - lbm.registerReceiver(receiver, Installer.getUninstallIntentFilter(lastToUninstall)); - - for (String packageName : wipeList) { - App app = new App(); - Apk apk = new Apk(); - app.packageName = packageName; - apk.packageName = packageName; - InstallerService.uninstall(context, app, apk); - } - - // wait for apps to uninstall before triggering final responses - new Thread() { - @Override - public void run() { - try { - latch.await(10, TimeUnit.MINUTES); - } catch (InterruptedException e) { - // ignored - } - lbm.unregisterReceiver(receiver); - if (preferences.panicResetRepos()) { - resetRepos(context); - } - if (preferences.panicHide()) { - HidingManager.hide(context); - } - if (preferences.panicExit()) { - exitAndClear(); - } - } - }.start(); - } else if (receivedTriggerFromConnectedApp) { - if (preferences.panicResetRepos()) { - resetRepos(this); - } - // Performing destructive panic response - if (preferences.panicHide()) { - Log.i(TAG, "Hiding app..."); - HidingManager.hide(this); - } - } - - // exit and clear, if not deactivated - if (!runningAppUninstalls && preferences.panicExit()) { - exitAndClear(); - } - finish(); - } - - static void resetRepos(Context context) { - DBHelper.resetRepos(context); - } - - private void exitAndClear() { - ExitActivity.exitAndRemoveFromRecentApps(this); - finishAndRemoveTask(); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListAdapter.java b/legacy/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListAdapter.java deleted file mode 100644 index e907a92f7..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListAdapter.java +++ /dev/null @@ -1,32 +0,0 @@ -package org.fdroid.fdroid.panic; - -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; - -import org.fdroid.fdroid.Preferences; -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.views.installed.InstalledAppListAdapter; -import org.fdroid.fdroid.views.installed.InstalledAppListItemController; - -import java.util.Set; - -public class SelectInstalledAppListAdapter extends InstalledAppListAdapter { - private final Set selectedApps; - - SelectInstalledAppListAdapter(AppCompatActivity activity) { - super(activity); - Preferences prefs = Preferences.get(); - selectedApps = prefs.getPanicWipeSet(); - prefs.setPanicTmpSelectedSet(selectedApps); - } - - @NonNull - @Override - public InstalledAppListItemController onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = activity.getLayoutInflater().inflate(R.layout.installed_app_list_item, parent, false); - return new SelectInstalledAppListItemController(activity, view, selectedApps); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListItemController.java b/legacy/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListItemController.java deleted file mode 100644 index dedb23b63..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppListItemController.java +++ /dev/null @@ -1,40 +0,0 @@ -package org.fdroid.fdroid.panic; - -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import org.fdroid.fdroid.AppUpdateStatusManager; -import org.fdroid.fdroid.data.Apk; -import org.fdroid.fdroid.data.App; -import org.fdroid.fdroid.views.apps.AppListItemState; -import org.fdroid.fdroid.views.installed.InstalledAppListItemController; - -import java.util.Set; - -/** - * Shows the currently installed apps as a selectable list. - */ -public class SelectInstalledAppListItemController extends InstalledAppListItemController { - - private final Set selectedApps; - - public SelectInstalledAppListItemController(AppCompatActivity activity, View itemView, Set selectedApps) { - super(activity, itemView); - this.selectedApps = selectedApps; - } - - @NonNull - @Override - protected AppListItemState getCurrentViewState( - @NonNull App app, @Nullable AppUpdateStatusManager.AppUpdateStatus appStatus) { - return new AppListItemState(app).setCheckBoxStatus(selectedApps.contains(app.packageName)); - } - - @Override - protected void onActionButtonPressed(App app, Apk currentApk) { - super.onActionButtonPressed(app, currentApk); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppsActivity.java b/legacy/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppsActivity.java deleted file mode 100644 index 71df6979e..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/panic/SelectInstalledAppsActivity.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (C) 2010-12 Ciaran Gultnieks, ciaran@ciarang.com - * Copyright (C) 2009 Roberto Jacinto, roberto.jacinto@caixamagica.pt - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU 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 General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -package org.fdroid.fdroid.panic; - -import android.annotation.SuppressLint; -import android.os.Bundle; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.widget.TextView; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.google.android.material.appbar.MaterialToolbar; - -import org.fdroid.database.AppListItem; -import org.fdroid.database.AppPrefsDao; -import org.fdroid.database.FDroidDatabase; -import org.fdroid.fdroid.FDroidApp; -import org.fdroid.fdroid.Preferences; -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.Utils; -import org.fdroid.fdroid.data.DBHelper; -import org.fdroid.fdroid.views.installed.InstalledAppListAdapter; - -import java.util.List; - -public class SelectInstalledAppsActivity extends AppCompatActivity { - - private InstalledAppListAdapter adapter; - private RecyclerView appList; - private TextView emptyState; - private int checkId; - - private FDroidDatabase db; - private Preferences prefs; - - @Override - protected void onCreate(Bundle savedInstanceState) { - FDroidApp fdroidApp = (FDroidApp) getApplication(); - fdroidApp.setSecureWindow(this); - - fdroidApp.applyPureBlackBackgroundInDarkTheme(this); - - super.onCreate(savedInstanceState); - - setContentView(R.layout.installed_apps_layout); - - MaterialToolbar toolbar = findViewById(R.id.toolbar); - toolbar.setTitle(getString(R.string.panic_add_apps_to_uninstall)); - setSupportActionBar(toolbar); - getSupportActionBar().setDisplayHomeAsUpEnabled(true); - - adapter = new SelectInstalledAppListAdapter(this); - - appList = findViewById(R.id.app_list); - appList.setHasFixedSize(true); - appList.setLayoutManager(new LinearLayoutManager(this)); - appList.setAdapter(adapter); - - emptyState = findViewById(R.id.empty_state); - - db = DBHelper.getDb(this); - db.getAppDao().getInstalledAppListItems(getPackageManager()).observe(this, this::onLoadFinished); - } - - @Override - protected void onResume() { - super.onResume(); - - prefs = Preferences.get(); - } - - public void onLoadFinished(List items) { - adapter.setApps(items); - - if (adapter.getItemCount() == 0) { - appList.setVisibility(View.GONE); - emptyState.setVisibility(View.VISIBLE); - } else { - appList.setVisibility(View.VISIBLE); - emptyState.setVisibility(View.GONE); - } - - // load app prefs for each app off the UiThread and update item if updates are ignored - AppPrefsDao appPrefsDao = db.getAppPrefsDao(); - for (AppListItem item : items) { - Utils.observeOnce(appPrefsDao.getAppPrefs(item.getPackageName()), this, appPrefs -> { - if (appPrefs.getIgnoreVersionCodeUpdate() > 0) adapter.updateItem(item, appPrefs); - }); - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - MenuItem menuItem = menu.add(R.string.menu_select_for_wipe); - menuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); - checkId = menuItem.getItemId(); - menuItem.setIcon(R.drawable.check); - return true; - } - - @SuppressLint("ApplySharedPref") - @Override - public boolean onOptionsItemSelected(MenuItem item) { - finish(); - if (item.getItemId() == checkId) { - prefs.setPanicWipeSet(prefs.getPanicTmpSelectedSet()); - return true; - } - return super.onOptionsItemSelected(item); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/views/main/LatestLayoutPolicy.java b/legacy/src/full/java/org/fdroid/fdroid/views/main/LatestLayoutPolicy.java deleted file mode 100644 index 052866252..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/views/main/LatestLayoutPolicy.java +++ /dev/null @@ -1,96 +0,0 @@ -package org.fdroid.fdroid.views.main; - -import android.content.Context; -import android.content.res.Resources; -import android.graphics.Rect; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import org.fdroid.fdroid.R; - -public class LatestLayoutPolicy { - private final Context context; - - public LatestLayoutPolicy(Context context) { - this.context = context.getApplicationContext(); - } - - public RecyclerView.ItemDecoration getItemDecoration() { - return new ItemDecorator(context); - } - - public int getItemViewType(int position) { - int relativePositionInCycle = position % 5; - - if (position == 0) { - return R.id.latest_regular_list; - } else { - switch (relativePositionInCycle) { - case 1: - case 2: - return R.id.latest_large_tile; - - case 3: - case 4: - return R.id.latest_small_tile; - - case 0: - default: - return R.id.latest_regular_list; - } - } - } - - public int getSpanSize(int position) { - int relativePositionInCycle = position % 5; - if (relativePositionInCycle == 0) { - return 2; - } else { - return 1; - } - } - - /** - * Applies padding to items, ensuring that the spacing on the left, centre, and right all match. - * The vertical padding is slightly shorter than the horizontal padding also. - * - * @see org.fdroid.fdroid.R.dimen#latest__padding__app_card__horizontal - * @see org.fdroid.fdroid.R.dimen#latest__padding__app_card__vertical - */ - private static class ItemDecorator extends RecyclerView.ItemDecoration { - private final Context context; - - ItemDecorator(Context context) { - this.context = context.getApplicationContext(); - } - - @Override - public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, RecyclerView parent, - @NonNull RecyclerView.State state) { - int position = parent.getChildAdapterPosition(view); - Resources resources = context.getResources(); - int horizontalPadding = (int) resources.getDimension(R.dimen.latest__padding__app_card__horizontal); - int verticalPadding = (int) resources.getDimension(R.dimen.latest__padding__app_card__vertical); - - int relativePositionInCycle = position % 5; - if (position == 0) { - outRect.set(horizontalPadding, verticalPadding, horizontalPadding, verticalPadding); - } else if (relativePositionInCycle != 0) { - // The item on the left will have both left and right padding. The item on the right - // will only have padding on the right. This will allow the same amount of padding - // on the left, centre, and right of the grid, rather than double the padding in the - // middle (which would happen if both left and right padding was set for both items). - boolean isLtr = parent.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR; - boolean isAtStart = relativePositionInCycle == 1 || relativePositionInCycle == 3; - int paddingStart = isAtStart ? horizontalPadding : 0; - int paddingLeft = isLtr ? paddingStart : horizontalPadding; - int paddingRight = isLtr ? horizontalPadding : paddingStart; - outRect.set(paddingLeft, 0, paddingRight, verticalPadding); - } else { - outRect.set(horizontalPadding, 0, horizontalPadding, verticalPadding); - } - } - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/views/main/MainViewController.java b/legacy/src/full/java/org/fdroid/fdroid/views/main/MainViewController.java deleted file mode 100644 index 96c38af07..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/views/main/MainViewController.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.fdroid.fdroid.views.main; - -import android.widget.FrameLayout; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.RecyclerView; - -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.views.PreferencesFragment; -import org.fdroid.fdroid.views.updates.UpdatesViewBinder; - -/** - * Decides which view on the main screen to attach to a given {@link FrameLayout}. This class - * doesn't know which view it will be rendering at the time it is constructed. Rather, at some - * point in the future the {@link MainViewAdapter} will have information about which view we - * are required to render, and will invoke the relevant "bind*()" method on this class. - */ -class MainViewController extends RecyclerView.ViewHolder { - - private final AppCompatActivity activity; - private final FrameLayout frame; - - @Nullable - private UpdatesViewBinder updatesView = null; - - MainViewController(AppCompatActivity activity, FrameLayout frame) { - super(frame); - this.activity = activity; - this.frame = frame; - } - - /** - * @see LatestViewBinder - */ - public void bindLatestView() { - new LatestViewBinder(activity, frame); - } - - /** - * @see UpdatesViewBinder - */ - public void bindUpdates() { - if (updatesView == null) { - updatesView = new UpdatesViewBinder(activity, frame); - } - - updatesView.bind(); - } - - public void unbindUpdates() { - if (updatesView != null) { - updatesView.unbind(); - } - } - - /** - * @see CategoriesViewBinder - */ - public void bindCategoriesView() { - new CategoriesViewBinder(activity, frame); - } - - /** - * {@link android.os.Environment#isExternalStorageRemovable()} sometimes - * throughs {@link IllegalArgumentException}s when it can't find the - * storage. - */ - public void bindSwapView() { - try { - new NearbyViewBinder(activity, frame); - } catch (IllegalArgumentException e) { - e.printStackTrace(); - } - } - - /** - * Attaches a {@link PreferencesFragment} to the view. Everything else is managed by the - * fragment itself, so no further work needs to be done by this view binder. - *

    - * Note: It is tricky to attach a {@link Fragment} to a view from this view holder. This is due - * to the way in which the {@link RecyclerView} will reuse existing views and ask us to - * put a settings fragment in there at arbitrary times. Usually it won't be the same view we - * attached the fragment to last time, which causes weirdness. The solution is to use code from - * the com.lsjwzh.widget.recyclerviewpager.FragmentStatePagerAdapter which manages this. - * The code has been ported to {@link SettingsView}. - * - * @see SettingsView - */ - public void bindSettingsView() { - activity.getLayoutInflater().inflate(R.layout.main_tab_settings, frame, true); - } -} diff --git a/legacy/src/full/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java b/legacy/src/full/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java deleted file mode 100644 index dc485273e..000000000 --- a/legacy/src/full/java/org/fdroid/fdroid/views/main/NearbyViewBinder.java +++ /dev/null @@ -1,248 +0,0 @@ -package org.fdroid.fdroid.views.main; - -import android.Manifest; -import android.content.Context; -import android.content.Intent; -import android.content.UriPermission; -import android.content.pm.PackageManager; -import android.hardware.usb.UsbDevice; -import android.hardware.usb.UsbManager; -import android.net.Uri; -import android.os.Build; -import android.os.Environment; -import android.os.storage.StorageManager; -import android.os.storage.StorageVolume; -import android.provider.DocumentsContract; -import android.provider.Settings; -import android.text.TextUtils; -import android.util.Log; -import android.view.View; -import android.widget.Button; -import android.widget.FrameLayout; -import android.widget.ImageView; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; - -import org.fdroid.fdroid.R; -import org.fdroid.fdroid.Utils; -import org.fdroid.fdroid.nearby.SDCardScannerService; -import org.fdroid.fdroid.nearby.SwapService; -import org.fdroid.fdroid.nearby.TreeUriScannerIntentService; - -import java.io.File; -import java.util.List; -import java.util.concurrent.Executor; - -/** - * A splash screen encouraging people to start the swap process. The swap - * process is quite heavy duty in that it fires up Bluetooth and/or WiFi - * in order to scan for peers. As such, it is quite convenient to have a - * more lightweight view to show in the main navigation that doesn't - * automatically start doing things when the user touches the navigation - * menu in the bottom navigation. - *

    - * Lots of pieces of the nearby/swap functionality require that the user grant - * F-Droid permissions at runtime on {@code android-23} and higher. On devices - * that have a removable SD Card that is currently mounted, this will request - * permission to read it, so that F-Droid can look for repos on the SD Card. - *

    - * Once {@link Manifest.permission#READ_EXTERNAL_STORAGE} is granted to F-Droid, - * then it can read any file on an SD Card and no more prompts are needed. For - * USB OTG drives, the only way to get read permissions is to prompt the user - * via {@link Intent#ACTION_OPEN_DOCUMENT_TREE}. - *

    - * - * @see TreeUriScannerIntentService - * @see org.fdroid.fdroid.nearby.SDCardScannerService - *

    - * TODO use {@link StorageManager#registerStorageVolumeCallback(Executor, StorageManager.StorageVolumeCallback)} - */ -public class NearbyViewBinder { - public static final String TAG = "NearbyViewBinder"; - - private static File externalStorage = null; - private static View swapView; - - NearbyViewBinder(final AppCompatActivity activity, FrameLayout parent) { - swapView = activity.getLayoutInflater().inflate(R.layout.main_tab_nearby, parent, true); - - TextView subtext = swapView.findViewById(R.id.both_parties_need_fdroid_text); - subtext.setText(activity.getString(R.string.nearby_splash__both_parties_need_fdroid, - activity.getString(R.string.app_name))); - - Button startButton = swapView.findViewById(R.id.find_people_button); - startButton.setOnClickListener(v -> { - final String coarseLocation = Manifest.permission.ACCESS_COARSE_LOCATION; - if (Build.VERSION.SDK_INT <= 30 && PackageManager.PERMISSION_GRANTED != ContextCompat.checkSelfPermission(activity, coarseLocation)) { - ActivityCompat.requestPermissions(activity, new String[]{coarseLocation}, - MainActivity.REQUEST_LOCATION_PERMISSIONS); - } else { - ContextCompat.startForegroundService(activity, new Intent(activity, SwapService.class)); - } - }); - - updateExternalStorageViews(activity); - updateUsbOtg(activity); - } - - public static void updateExternalStorageViews(final AppCompatActivity activity) { - if (swapView == null || activity == null) { - return; - } - - ImageView nearbySplash = swapView.findViewById(R.id.image); - TextView explainer = swapView.findViewById(R.id.read_external_storage_text); - Button button = swapView.findViewById(R.id.request_read_external_storage_button); - - if (nearbySplash == null || explainer == null || button == null) { - return; - } - - File[] dirs = activity.getExternalFilesDirs(""); - if (dirs != null) { - for (File dir : dirs) { - if (dir != null && Environment.isExternalStorageRemovable(dir)) { - String state = Environment.getExternalStorageState(dir); - if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) - || Environment.MEDIA_MOUNTED.equals(state)) { - // remove Android/data/org.fdroid.fdroid/files to get root - externalStorage = dir.getParentFile().getParentFile().getParentFile().getParentFile(); - break; - } - } - } - } - - final String readExternalStorage = Manifest.permission.READ_EXTERNAL_STORAGE; - - if (externalStorage != null) { - nearbySplash.setVisibility(View.GONE); - explainer.setVisibility(View.VISIBLE); - button.setVisibility(View.VISIBLE); - if (Build.VERSION.SDK_INT >= 30) { - if (!Environment.isExternalStorageManager()) { - // we don't have permission to access files yet, so ask for it - explainer.setText(R.string.nearby_splach__external_storage_permission_explainer); - button.setText(R.string.nearby_splace__external_storage_permission_button); - button.setOnClickListener(view -> activity.startActivity( - new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, - Uri.parse(String.format("package:%s", - activity.getPackageName()))))); - } else { - explainer.setText(R.string.nearby_splash__read_external_storage); - button.setText(R.string.nearby_splash__request_permission); - button.setOnClickListener(view -> scanExternalStorageNow(activity)); - } - } else { - if ((externalStorage == null || !externalStorage.canRead()) - && PackageManager.PERMISSION_GRANTED - != ContextCompat.checkSelfPermission(activity, readExternalStorage)) { - explainer.setText(R.string.nearby_splach__external_storage_permission_explainer); - button.setText(R.string.nearby_splace__external_storage_permission_button); - button.setOnClickListener(v -> { - ActivityCompat.requestPermissions(activity, new String[]{readExternalStorage}, - MainActivity.REQUEST_STORAGE_PERMISSIONS); - }); - } else { - explainer.setText(R.string.nearby_splash__read_external_storage); - button.setText(R.string.nearby_splash__request_permission); - button.setOnClickListener(view -> scanExternalStorageNow(activity)); - } - } - } - } - - private static void scanExternalStorageNow(final AppCompatActivity activity) { - Toast.makeText(activity, activity.getString(R.string.scan_removable_storage_toast, externalStorage), - Toast.LENGTH_SHORT).show(); - SDCardScannerService.scan(activity); - } - - public static void updateUsbOtg(final Context context) { - if (Build.VERSION.SDK_INT < 24) { - return; - } - if (swapView == null) { - Utils.debugLog(TAG, "swapView == null"); - return; - } - TextView storageVolumeText = swapView.findViewById(R.id.storage_volume_text); - Button requestStorageVolume = swapView.findViewById(R.id.request_storage_volume_button); - storageVolumeText.setVisibility(View.GONE); - requestStorageVolume.setVisibility(View.GONE); - - final StorageManager storageManager = ContextCompat.getSystemService(context, StorageManager.class); - for (final StorageVolume storageVolume : storageManager.getStorageVolumes()) { - if (storageVolume.isRemovable() && !storageVolume.isPrimary()) { - Log.i(TAG, "StorageVolume: " + storageVolume); - Intent tmpIntent = null; - if (Build.VERSION.SDK_INT < 29) { - tmpIntent = storageVolume.createAccessIntent(null); - } else { - tmpIntent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); - tmpIntent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, - Uri.parse("content://" - + TreeUriScannerIntentService.EXTERNAL_STORAGE_PROVIDER_AUTHORITY - + "/tree/" - + storageVolume.getUuid() - + "%3A/document/" - + storageVolume.getUuid() - + "%3A")); - } - if (tmpIntent == null) { - Utils.debugLog(TAG, "Got null Storage Volume access Intent"); - return; - } - final Intent intent = tmpIntent; - - storageVolumeText.setVisibility(View.VISIBLE); - - String text = storageVolume.getDescription(context); - if (!TextUtils.isEmpty(text)) { - requestStorageVolume.setText(text); - UsbDevice usb = intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); - if (usb != null) { - text = String.format("%s (%s %s)", text, usb.getManufacturerName(), usb.getProductName()); - Toast.makeText(context, text, Toast.LENGTH_LONG).show(); - } - } - - requestStorageVolume.setVisibility(View.VISIBLE); - requestStorageVolume.setOnClickListener(v -> { - List list = context.getContentResolver().getPersistedUriPermissions(); - if (list != null) { - for (UriPermission uriPermission : list) { - Uri uri = uriPermission.getUri(); - if (uri.getPath().equals(String.format("/tree/%s:", storageVolume.getUuid()))) { - intent.setData(uri); - TreeUriScannerIntentService.onActivityResult(context, intent); - return; - } - } - } - - AppCompatActivity activity = null; - if (context instanceof AppCompatActivity) { - activity = (AppCompatActivity) context; - } else if (swapView != null && swapView.getContext() instanceof AppCompatActivity) { - activity = (AppCompatActivity) swapView.getContext(); - } - - if (activity != null) { - activity.startActivityForResult(intent, MainActivity.REQUEST_STORAGE_ACCESS); - } else { - // scan in the background without requesting permissions - Toast.makeText(context.getApplicationContext(), - context.getString(R.string.scan_removable_storage_toast, externalStorage), - Toast.LENGTH_SHORT).show(); - SDCardScannerService.scan(context); - } - }); - } - } - } -} diff --git a/legacy/src/full/res/drawable-hdpi/circle.png b/legacy/src/full/res/drawable-hdpi/circle.png deleted file mode 100644 index 9de5d38fa47944a99d6b81bf4ba053301fcb5c4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+0wn(&ce?|m=6Jd|hEy>2PI4D*F%WSr{ve>e zAVI)E(7lw|x~ughmyODEzoplA|NXmPoozzPlPzDqn53|H7_xKEW@$}4u)w2W!!nWS zOlPHhJAeBhUiP3v==pZ)K_mC0OlR19T^Y Mr>mdKI;Vst0M0&9n*aa+ diff --git a/legacy/src/full/res/drawable-hdpi/ic_fdroid_grey.png b/legacy/src/full/res/drawable-hdpi/ic_fdroid_grey.png deleted file mode 100644 index 098e521de30c8631fcfe52776f17654f09e3fa5c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 246 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 diff --git a/legacy/src/full/res/drawable-ldpi/circle.png b/legacy/src/full/res/drawable-ldpi/circle.png deleted file mode 100644 index e72332bdb7dac090b97d3b828ee884937897940d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 94 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$60wmSb-sJ%)RZkbkkP1fDgN}>`0z{Y;s`qaF r-}dR4f}d|~phI$lD`W5HGsX6oPV1Z!*6%X_YGCkm^>bP0l+XkK`av3s diff --git a/legacy/src/full/res/drawable-ldpi/ic_fdroid_grey.png b/legacy/src/full/res/drawable-ldpi/ic_fdroid_grey.png deleted file mode 100644 index f0512812afc5f31c5fe0574042b4cd40f9d4d0d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^tRT$60wmSb-sJ%)BTpB{kP61+53}BHz5AL$;C%Xr zS#L`(y_OO!S`-uzzU-XvybW(+f#nZjT(Gntv0#b`#!VrDIfIrs*_`YLsF=E!SVkSndF>-X|uqzl%-QGiUO{U)fiQY5w^bygga%n%A#L z5fOT?!QUoRAX6}eS6PbzL(0DHkur!REIL?#HL(_~j<3Ln;YC<{GzTNyG`GKyqIVhL z^cWu=D1u8w6@21r;TlJl+wwb85rxDhC#C9okw~`d(X$T zk^c~ree&?yflAB>EW$Xh8<yym9mf@qbMF_s#h-H^5@mX{Y&S(4}VlHIfW=W>SrduxO{58`Fs3JI&Y@RfD|`TX2pqxbuFC)Hv*3Gn~Us-6CZu zH(^;+36@{8iU2x#eDcVIjW?wwYTJ-x!RJZU_&ll>+hgnT1&R48rVehzs-uN?i{|g` zJpv|q$fjeOSE}x9@eVP|SCUN0e{9S(!29>8>1$$2KutA#+!|iLx?P2x51O&!a-|6H zx!EW}{73}vv7GGzHyb1@eX1!#9a5Db&IvBVlHFGNkt)1*s2V%(v`CFz5)C!RHR7AN zI&2{^yKXmN<>9=pNRj=0?R37#Sa!vVEqA3U_=IL`b+p<<&;~|00XLel`%WuDZ?#|x zwdPZj9Bx(420$XO`A( z=6kJ)sFc8M}{{63BWHSS9%C?Gtz&lMM#8+)rsdw0&Mr=6IB`F4`1f^qjLK#hl z$dK9CddDo2v7BaX^_434UT+d9K{uPRDZE;y&5`D8^QmHPZZD9+zn7oR<2#u2Y({@F zrPADoCIuoCM0nn>!+~V^QjsBFN)1|es2GDN(7l?caPzTrw^d{;At|$iN-@qo8zif} zWGfc;NvOld@M@{?@zn2S!j7bThxOO0WWGXgQj+QHyPG_+U&O4tS&Gk7<>;|4+6w2` z2CO2<+$4NOUlK;sWBr*j zoJsu-5xGC(9L?8?!+#Od2N^xJLiML}JQH=D5WDF@Uh z2sS=t0!bm6PmKHMa1J&mmMLeVW?Z8$qfCAaEQ_7auJf; zH?=Q1bPRJ$?Z)6_%ndGqa}>?VgBCa?)GH*U(`QIbNe(xQkoQQ)yL)ZTSJxQD@uOVR zDIjLNcbGXrR6V|=ulh8yR!){zMPiO@`-r8PB_SDD8cOgw&P{7+O|`X0h^_{4qn%SY z*QTF%i+*KoVg(~G3mA?Qy6S#)d^rV2q>6~CUKt9lU+517NhOc_s<8cPEiN(~zDo0T zKK*-|k}^r)I9CHkUeI0egS7_Dr+nILyUXE7&G1ZYgd-ihTS6l|XttJyEO zymQ9XlQoU8Bb_sP`0d(bT8m7B6gu)0%<@ZPl4S$7QSxmIlGKD0%nSG{An08+9>K7j zQJ~gYN_=#*hCZYbYfsmzO`&=pLC@dIH7{AP`3}wTd27$t+^g{z=aJo$eW45CITVw0 z23sOUlV?8LNiuRt<3yX2$G#~Ns){f-q)Z>k^)TKuhnktIHOCVZ>;bP_Oby7LtejSj~cU4-FP+)VO@lfm84PO~}!W<8G zcy?`V82j4$#BuIjlfr1%7*8;eDpStb-$>DOS#OiXP#a9eKJA2mgZYgaIv( z`vI%c<5W1CbQ@LYgF*CYmS-8BLZJG8|A!tFR)MF@>2JbM=h!dVyF$+rapU15hovae4OxQ^E2VVm-o z0YZwAMDj<5N(hHLruAqo+vKss1(iJ7pA?98&hm7bc^#}@hQtO` zL}We6SaX2+6ghg$|L2e*==76zS!+w`23AP?&m?7}ONMMS&slWt^RFVM#|25dZAOah zv+<$-7E)v;JX7)Nj?9jr-&5H?`ZB;|t57D4k<9bd6z#>c1b1m@ACNNW8!g-s)MxKJ z<*9!zQi1Zh{d1A_V48QT&iXrmQi?&nNXoC>0ZI9lr2NrF%I|8o6PVrq#)|PDJOKKW s8L`&xf6yNNMpFLTqd!T?-+s^k2h!Fzicn2lpa1{>07*qoM6N<$g0t>@DF6Tf diff --git a/legacy/src/full/res/drawable-mdpi/circle.png b/legacy/src/full/res/drawable-mdpi/circle.png deleted file mode 100644 index a5e6e2a8dedfab0ea17ec4ce733de2e1739e25f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^93afW0wnX;%77$;xu=U`NCjhZLc)*yzxAL0^E>SL zx!<&<`k6h?97Zn2qZ1FNu`LKn`5@=a;LP2&&>;Ih^FuWOaR$Blxd(Xo#H&DNc)I$z JtaD0e0suiQAX@+c diff --git a/legacy/src/full/res/drawable-mdpi/ic_fdroid_grey.png b/legacy/src/full/res/drawable-mdpi/ic_fdroid_grey.png deleted file mode 100644 index 44c0e61f8a0af07d86862573892fd276e9bc96d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139 zcmeAS@N?(olHy`uVBq!ia0vp^93afW0wnX;%77$8kf)1dNCl(Mv5mYA2_mf*t?zF? zWY4ouRQSP0F4e70ISOeNd78^D7cE?F{5i_7_~WE+1)Dp%rZ!(LGs_C(n60y>qw$aA m(d|1mm_BdhIO8HXgO$OA)n&nr_}tGR<2_ydT-G@yGywqDt1kcm diff --git a/legacy/src/full/res/drawable-mdpi/swap_start_header.png b/legacy/src/full/res/drawable-mdpi/swap_start_header.png deleted file mode 100644 index fd1dc2af8c8be7892bb6cc93ca84c3c8ca336c4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5106 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 U7oBf1`v3p{07*qoM6N<$g6uE{>Hq)$ diff --git a/legacy/src/full/res/drawable-xhdpi/circle.png b/legacy/src/full/res/drawable-xhdpi/circle.png deleted file mode 100644 index 74e972ea479f8c4743534de67a23a0ef6ee9b41b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 304 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 szEINVJU81D1hVfiTwbhP#31nh0S7yWkpKVy diff --git a/legacy/src/full/res/drawable-xxhdpi/circle.png b/legacy/src/full/res/drawable-xxhdpi/circle.png deleted file mode 100644 index 9b8cc04f6eb9559d0be4d240a8a6197835d7eb1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmV+@1K0eCP)e8iChpR5hYLQW++>2J3WPH$9 z5{fPLf>Ko)bjhbny-y+7rLg9t_i(h^8Z6M!YU=QdK6NxoKmZd5DUaj_mWT)LNA&w9!OfJLW3yOE4NlM zFwxU$bcsTj^PVyxFwagIQAyijPGGAtEuzw*)W*QuPRNN$)^TqHK2hzGs9X~IC~(ww zu8PW4-#QeilF=b59nw;PZ#3!@l}?Sm4*aA=m#B1U@#Bzu$&d`!kWBm#E#c@lD`QEU_W_qkg;DLvd-1|M&VWS1$_n%B+?6_aX73P_M!Zyslc$3}1X$RU-!_OqXT mtcFG diff --git a/legacy/src/full/res/drawable-xxhdpi/ic_fdroid_grey.png b/legacy/src/full/res/drawable-xxhdpi/ic_fdroid_grey.png deleted file mode 100644 index 248050d7f0776be52cb2ad44044ddac0f761c08a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 655 zcmV;A0&x9_P)LtzqqM5+i? zyf7kEq|%2;3L}}tAY$>;n!t}(1~H3~im1axmNS$TN>hZQ8dZeSq%f4_OcZq#Q9#sY zHd|T6B*tmjBv!GN*`l^6U_WyCMSBin#lUk7GhpQq9h`)!^Cz8kSZ!IbYLs(L8)TL~ zC`?s!YR#M?iPc!W&{~VNmq=laSCDn2%Ycs|Chl^M<6PmH2ZzthBQ9`^OFY8t z8hOAf+S7;$oaUL^$bEJ(kj4yTCr?}>SLh-_b^fHWio0$jml#70La59bZo5V<(uyGQ zA2H11hTF(l`csZv6lD-MTqC!bD$OfwBhNW4RxpF@Jn-Pe z8@a(crpwJ-#poKb@RU1Ty{x(FfhW#fan2!Oo zGc2~OSTK9o`%4*ED5Lb*Y>1-7|0;{qjeT6;GM6;!G8fn{d&m+Izbej=K?qvVhXESa zSGJVsgOpbzf8#&=2+}s`FaOj3rhL)SXCogqi6Vw*jfx=(9rEg=8^ diff --git a/legacy/src/full/res/drawable-xxhdpi/swap_start_header.png b/legacy/src/full/res/drawable-xxhdpi/swap_start_header.png deleted file mode 100644 index 3c06713ff2ad9de67d8cd48677a371563a0cc576..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51061 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

    kRvE1fWpZi}nX$R> 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 bPJ=4~S}TtWE8Bos21rdsTe(8fGVK2Y0mZ-A diff --git a/legacy/src/full/res/drawable-xxxhdpi/circle.png b/legacy/src/full/res/drawable-xxxhdpi/circle.png deleted file mode 100644 index 0a0668914e8437e83059a4b2f3f8b2c3a3ec81da..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1446 zcmV;X1zGxuP)vhGRHb;Y6XZLDr+!Wz-FdL~G4i6Rro z4D(x=x<_aJ?{U4aKhM24&^!e7($835x70ehHrVE0-m%?w@A#K(HpsQk66wb1tCwJ) zJ&>Y{3tek~VW#`8UwhEAwkY%pRr%I*Q6x-q%5BQbum}aN}u63aEUOdh4dMPR*Bdrpw*#Zp*C~ z(jcleL^TL`)iUV@xzbt96Vu7rE;HPZJ*nIQVKJ>GChUN6IkJp)xm2CLteBt+++egU zFQ{-_TN1Y2D;62+Mi&Tv2~mQ&=wp`Ew%X~a)7p~Lj;r!VtIg8eIf7q&eJ;@33~Q7+ zq)|*;6VvFBQmf6-+XY{6jhyWUGp)AG5mD_$#1Y%9G0TloKkw?C=`v%iQsS^C?Mahr zW!4(!3TOHBtE96ljI_{J2Sv0uQHTA>5~E$I^QQ~yYM=}+*`-lOaMEt;EihQOPrEwj z>n&ZjO2@=>1Tn|$kSkqp=YQ;dlj?etEm!V@(>jXN!v1EtNv`|Y!>zkPvaEMNM{~e> zSqAC;(Rt@`bL0sL>uAD4^38R*;D^VrG>et17t_(iH29mv(%v88baAt(9`;|h+C7R<3 z{K8!UOFW=dSfV+h#Qhcptn;kbHA*y%Uh}jy0eQBlbV{N*DP)uEfK5v6(In9{*{#@y zfMRbrC?e5B9Q3+v0k5f4Et&*^s)hVB;B8gvl0Z;YtzF&<2-%}PDFoHots?0JCEYDc zx`#RmU;E9;^f1(UPzJ=_M1iq z^ffI>hWtlOaceTILCXx$BfcnRDov6_F(tlA&r5<;Iy=5f$IXV}mL%M4SY((BKd@t_ zcvw{e?U;v6ag(?mBSlwVwMbdQ46AaBrRgf=0}t&ov*oIAA|aMuo;fc6NCc{zfik_C z5YzKj83yY1aa;I0lPpVsEnIGyiLU*)EgW>d-tP8Pha2ZP(%tGj!B3ACe$t`QLX}r# z8LaE)g)a*fc3}9j`18V-csw=QO2x?#Pkj*J&9KT}6CdDx5OLmWy4CF*ah80Eh%=6$ zbM!W|-9q4Fs%*8|%y(d48?Cmhq@h@DDg zTjXoL>N4G=3bs|{>n6j^m0`KZJg-2B*M#hLz!7!o)vI&F0aZd?Q=-809<@w{xrVt( zS1D~@in~UCLrn24zi_{&ZC3n0SylGh8<(QUCi(933*R)w5dB;uUW#iE1ohP0D0f+8 zjU4O!)jz$hQl+>3(_gKZZMB8&G}5hlG*`&K0rHO9PkS_5R{#J207*qoM6N<$f@kH? AJOBUy diff --git a/legacy/src/full/res/drawable-xxxhdpi/ic_fdroid_grey.png b/legacy/src/full/res/drawable-xxxhdpi/ic_fdroid_grey.png deleted file mode 100644 index 8284efcb64041da74e9ea2b1ce2003e7f076c7eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1014 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 diff --git a/legacy/src/full/res/drawable/check.xml b/legacy/src/full/res/drawable/check.xml deleted file mode 100644 index 3f26c70ce..000000000 --- a/legacy/src/full/res/drawable/check.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - \ No newline at end of file diff --git a/legacy/src/full/res/drawable/ic_add_circle_outline.xml b/legacy/src/full/res/drawable/ic_add_circle_outline.xml deleted file mode 100644 index c6c1d9a0a..000000000 --- a/legacy/src/full/res/drawable/ic_add_circle_outline.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/legacy/src/full/res/drawable/ic_apps.xml b/legacy/src/full/res/drawable/ic_apps.xml deleted file mode 100644 index af3bfb8ef..000000000 --- a/legacy/src/full/res/drawable/ic_apps.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/legacy/src/full/res/drawable/ic_bluetooth.xml b/legacy/src/full/res/drawable/ic_bluetooth.xml deleted file mode 100644 index 287c8fb08..000000000 --- a/legacy/src/full/res/drawable/ic_bluetooth.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/legacy/src/full/res/drawable/ic_bluetooth_searching.xml b/legacy/src/full/res/drawable/ic_bluetooth_searching.xml deleted file mode 100644 index c4b89a589..000000000 --- a/legacy/src/full/res/drawable/ic_bluetooth_searching.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/legacy/src/full/res/drawable/ic_nearby.xml b/legacy/src/full/res/drawable/ic_nearby.xml deleted file mode 100644 index 59566d6b2..000000000 --- a/legacy/src/full/res/drawable/ic_nearby.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - diff --git a/legacy/src/full/res/drawable/ic_qr_code.xml b/legacy/src/full/res/drawable/ic_qr_code.xml deleted file mode 100644 index a2ef5ec78..000000000 --- a/legacy/src/full/res/drawable/ic_qr_code.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - diff --git a/legacy/src/full/res/drawable/ic_wifi.xml b/legacy/src/full/res/drawable/ic_wifi.xml deleted file mode 100644 index 709530074..000000000 --- a/legacy/src/full/res/drawable/ic_wifi.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/legacy/src/full/res/drawable/ic_wifi_off.xml b/legacy/src/full/res/drawable/ic_wifi_off.xml deleted file mode 100644 index 1e60ce147..000000000 --- a/legacy/src/full/res/drawable/ic_wifi_off.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/legacy/src/full/res/drawable/ic_wifi_tethering.xml b/legacy/src/full/res/drawable/ic_wifi_tethering.xml deleted file mode 100644 index c5db5777c..000000000 --- a/legacy/src/full/res/drawable/ic_wifi_tethering.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/legacy/src/full/res/drawable/nearby_splash.xml b/legacy/src/full/res/drawable/nearby_splash.xml deleted file mode 100644 index c118830a3..000000000 --- a/legacy/src/full/res/drawable/nearby_splash.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - diff --git a/legacy/src/full/res/layout-sw480dp/start_swap_header.xml b/legacy/src/full/res/layout-sw480dp/start_swap_header.xml deleted file mode 100644 index dae55f41a..000000000 --- a/legacy/src/full/res/layout-sw480dp/start_swap_header.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/legacy/src/full/res/layout/activity_calculator.xml b/legacy/src/full/res/layout/activity_calculator.xml deleted file mode 100644 index 184a9334d..000000000 --- a/legacy/src/full/res/layout/activity_calculator.xml +++ /dev/null @@ -1,299 +0,0 @@ - - - - - - - - - - - -