From a55a93af1369c88f8f8b0d481c27b845c2290f1f Mon Sep 17 00:00:00 2001 From: OutdatedGuy <74326345+OutdatedGuy@users.noreply.github.com> Date: Fri, 17 Jun 2022 19:55:21 +0530 Subject: [PATCH] Initial Release --- .github/ISSUE_TEMPLATE/bug_report.md | 38 + .github/ISSUE_TEMPLATE/feature_request.md | 20 + .gitignore | 50 + .metadata | 45 + CHANGELOG.md | 10 + CODE_OF_CONDUCT.md | 46 + CONTRIBUTING.md | 40 + README.md | 80 ++ analysis_options.yaml | 29 + android/.gitignore | 13 + android/app/.gitignore | 1 + android/app/build.gradle | 71 ++ android/app/src/debug/AndroidManifest.xml | 8 + android/app/src/main/AndroidManifest.xml | 46 + .../app/src/main/ic_launcher-playstore.png | Bin 0 -> 127656 bytes .../whatsthatanime/MainActivity.kt | 6 + .../app/src/main/res/drawable-hdpi/splash.png | Bin 0 -> 156031 bytes .../app/src/main/res/drawable-mdpi/splash.png | Bin 0 -> 80977 bytes .../main/res/drawable-night-hdpi/splash.png | Bin 0 -> 156031 bytes .../main/res/drawable-night-mdpi/splash.png | Bin 0 -> 80977 bytes .../res/drawable-night-v21/background.png | Bin 0 -> 70 bytes .../drawable-night-v21/launch_background.xml | 9 + .../main/res/drawable-night-xhdpi/splash.png | Bin 0 -> 242772 bytes .../main/res/drawable-night-xxhdpi/splash.png | Bin 0 -> 458023 bytes .../res/drawable-night-xxxhdpi/splash.png | Bin 0 -> 694698 bytes .../main/res/drawable-night/background.png | Bin 0 -> 70 bytes .../res/drawable-night/launch_background.xml | 9 + .../src/main/res/drawable-v21/background.png | Bin 0 -> 70 bytes .../res/drawable-v21/launch_background.xml | 9 + .../src/main/res/drawable-xhdpi/splash.png | Bin 0 -> 242772 bytes .../src/main/res/drawable-xxhdpi/splash.png | Bin 0 -> 458023 bytes .../src/main/res/drawable-xxxhdpi/splash.png | Bin 0 -> 694698 bytes .../app/src/main/res/drawable/background.png | Bin 0 -> 70 bytes .../main/res/drawable/launch_background.xml | 9 + .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 6156 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 20750 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 0 -> 7124 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 3267 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 10936 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 0 -> 3860 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 9665 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 32292 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 0 -> 10965 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 18007 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 61255 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 0 -> 19997 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 28140 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 96562 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 0 -> 30737 bytes .../src/main/res/values-night-v31/styles.xml | 18 + .../app/src/main/res/values-night/styles.xml | 20 + .../app/src/main/res/values-v31/styles.xml | 18 + android/app/src/main/res/values/colors.xml | 4 + android/app/src/main/res/values/styles.xml | 20 + android/app/src/profile/AndroidManifest.xml | 8 + android/build.gradle | 31 + android/gradle.properties | 3 + .../gradle/wrapper/gradle-wrapper.properties | 6 + android/settings.gradle | 11 + assets/icons/launcher_icon_border.png | Bin 0 -> 126305 bytes assets/icons/launcher_icon_round.png | Bin 0 -> 130364 bytes assets/icons/logo.png | Bin 0 -> 154566 bytes assets/icons/splash_screen_logo.png | Bin 0 -> 674657 bytes assets/images/offline.png | Bin 0 -> 59946 bytes docs/icons/logo.png | Bin 0 -> 130364 bytes docs/screenshots/dark/history.jpg | Bin 0 -> 314530 bytes docs/screenshots/dark/home.jpg | Bin 0 -> 182151 bytes docs/screenshots/dark/search.jpg | Bin 0 -> 258033 bytes docs/screenshots/dark/settings.jpg | Bin 0 -> 156687 bytes docs/screenshots/light/history.jpg | Bin 0 -> 315839 bytes docs/screenshots/light/home.jpg | Bin 0 -> 188148 bytes docs/screenshots/light/search.jpg | Bin 0 -> 257239 bytes docs/screenshots/light/setttings.jpg | Bin 0 -> 159496 bytes flutter_native_splash.yaml | 13 + icons_launcher.yaml | 14 + ios/.gitignore | 34 + ios/Flutter/AppFrameworkInfo.plist | 26 + ios/Flutter/Debug.xcconfig | 1 + ios/Flutter/Release.xcconfig | 1 + ios/Runner.xcodeproj/project.pbxproj | 481 ++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 ++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/WorkspaceSettings.xcsettings | 8 + ios/Runner/AppDelegate.swift | 13 + .../AppIcon.appiconset/Contents.json | 122 +++ .../Icon-App-1024x1024@1x.png | Bin 0 -> 10932 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 0 -> 564 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 0 -> 1588 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 0 -> 1025 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 0 -> 1716 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 0 -> 1920 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 0 -> 1283 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 0 -> 1895 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 0 -> 2665 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 0 -> 3831 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 0 -> 1888 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 0 -> 3294 bytes .../Icon-App-83.5x83.5@2x.png | Bin 0 -> 3612 bytes .../LaunchImage.imageset/Contents.json | 23 + .../LaunchImage.imageset/LaunchImage.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@2x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/LaunchImage@3x.png | Bin 0 -> 68 bytes .../LaunchImage.imageset/README.md | 5 + ios/Runner/Base.lproj/LaunchScreen.storyboard | 37 + ios/Runner/Base.lproj/Main.storyboard | 26 + ios/Runner/Info.plist | 49 + ios/Runner/Runner-Bridging-Header.h | 1 + lib/functions/get_formatted_time.dart | 19 + lib/main.dart | 122 +++ lib/models/anime_info.dart | 54 ++ lib/models/my_result.dart | 18 + lib/models/user_preferences.dart | 101 ++ .../AnimeSearchPage/anime_search_page.dart | 157 ++++ .../functions/get_image_search.dart | 40 + .../functions/log_search_to_firestore.dart | 34 + .../functions/style_loading.dart | 16 + .../AnimeSearchPage/widgets/result_tile.dart | 47 + .../AnimeSearchPage/widgets/top_result.dart | 120 +++ lib/pages/HistoryPage/history_page.dart | 63 ++ .../HistoryPage/widgets/record_tile.dart | 135 +++ lib/pages/HomePage/functions/get_image.dart | 14 + .../HomePage/functions/show_result_toast.dart | 37 + .../HomePage/functions/style_loading.dart | 16 + .../functions/upload_image_to_firebase.dart | 78 ++ lib/pages/HomePage/home_page.dart | 114 +++ .../HomePage/widgets/my_search_button.dart | 46 + .../MyLincensePage/my_lincense_page.dart | 56 ++ lib/pages/OfflinePage/offline_page.dart | 41 + .../SettingsPage/functions/style_loading.dart | 16 + lib/pages/SettingsPage/settings_page.dart | 173 ++++ .../switch_options.dart/auto_play_tile.dart | 37 + .../child_filter_lite.dart | 70 ++ .../switch_options.dart/dark_mode_tile.dart | 41 + .../switch_options.dart/loop_tile.dart | 49 + .../search_history_tile.dart | 49 + lib/screens/MainScreen/main_screen.dart | 62 ++ lib/themes/app_theme.dart | 19 + lib/themes/swatchs.dart | 36 + linux/.gitignore | 1 + linux/CMakeLists.txt | 138 +++ linux/flutter/CMakeLists.txt | 88 ++ linux/flutter/generated_plugin_registrant.cc | 15 + linux/flutter/generated_plugin_registrant.h | 15 + linux/flutter/generated_plugins.cmake | 24 + linux/main.cc | 6 + linux/my_application.cc | 104 +++ linux/my_application.h | 18 + macos/.gitignore | 7 + macos/Flutter/Flutter-Debug.xcconfig | 1 + macos/Flutter/Flutter-Release.xcconfig | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 28 + macos/Runner.xcodeproj/project.pbxproj | 572 ++++++++++++ .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../xcshareddata/xcschemes/Runner.xcscheme | 87 ++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + macos/Runner/AppDelegate.swift | 9 + .../AppIcon.appiconset/Contents.json | 68 ++ .../AppIcon.appiconset/app_icon_1024.png | Bin 0 -> 46993 bytes .../AppIcon.appiconset/app_icon_128.png | Bin 0 -> 3276 bytes .../AppIcon.appiconset/app_icon_16.png | Bin 0 -> 1429 bytes .../AppIcon.appiconset/app_icon_256.png | Bin 0 -> 5933 bytes .../AppIcon.appiconset/app_icon_32.png | Bin 0 -> 1243 bytes .../AppIcon.appiconset/app_icon_512.png | Bin 0 -> 14800 bytes .../AppIcon.appiconset/app_icon_64.png | Bin 0 -> 1874 bytes macos/Runner/Base.lproj/MainMenu.xib | 343 +++++++ macos/Runner/Configs/AppInfo.xcconfig | 14 + macos/Runner/Configs/Debug.xcconfig | 2 + macos/Runner/Configs/Release.xcconfig | 2 + macos/Runner/Configs/Warnings.xcconfig | 13 + macos/Runner/DebugProfile.entitlements | 12 + macos/Runner/Info.plist | 32 + macos/Runner/MainFlutterWindow.swift | 15 + macos/Runner/Release.entitlements | 8 + pubspec.lock | 859 ++++++++++++++++++ pubspec.yaml | 139 +++ test/widget_test.dart | 30 + web/favicon.png | Bin 0 -> 917 bytes web/icons/Icon-192.png | Bin 0 -> 5292 bytes web/icons/Icon-512.png | Bin 0 -> 8252 bytes web/icons/Icon-maskable-192.png | Bin 0 -> 5594 bytes web/icons/Icon-maskable-512.png | Bin 0 -> 20998 bytes web/index.html | 58 ++ web/manifest.json | 35 + windows/.gitignore | 17 + windows/CMakeLists.txt | 101 ++ windows/flutter/CMakeLists.txt | 104 +++ .../flutter/generated_plugin_registrant.cc | 14 + windows/flutter/generated_plugin_registrant.h | 15 + windows/flutter/generated_plugins.cmake | 24 + windows/runner/CMakeLists.txt | 32 + windows/runner/Runner.rc | 121 +++ windows/runner/flutter_window.cpp | 61 ++ windows/runner/flutter_window.h | 33 + windows/runner/main.cpp | 43 + windows/runner/resource.h | 16 + windows/runner/resources/app_icon.ico | Bin 0 -> 33772 bytes windows/runner/runner.exe.manifest | 20 + windows/runner/utils.cpp | 64 ++ windows/runner/utils.h | 19 + windows/runner/win32_window.cpp | 245 +++++ windows/runner/win32_window.h | 98 ++ 210 files changed, 7341 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .gitignore create mode 100644 .metadata create mode 100644 CHANGELOG.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 README.md create mode 100644 analysis_options.yaml create mode 100644 android/.gitignore create mode 100644 android/app/.gitignore create mode 100644 android/app/build.gradle create mode 100644 android/app/src/debug/AndroidManifest.xml create mode 100644 android/app/src/main/AndroidManifest.xml create mode 100644 android/app/src/main/ic_launcher-playstore.png create mode 100644 android/app/src/main/kotlin/rocks/outdatedguy/whatsthatanime/MainActivity.kt create mode 100644 android/app/src/main/res/drawable-hdpi/splash.png create mode 100644 android/app/src/main/res/drawable-mdpi/splash.png create mode 100644 android/app/src/main/res/drawable-night-hdpi/splash.png create mode 100644 android/app/src/main/res/drawable-night-mdpi/splash.png create mode 100644 android/app/src/main/res/drawable-night-v21/background.png create mode 100644 android/app/src/main/res/drawable-night-v21/launch_background.xml create mode 100644 android/app/src/main/res/drawable-night-xhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-night-xxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-night-xxxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-night/background.png create mode 100644 android/app/src/main/res/drawable-night/launch_background.xml create mode 100644 android/app/src/main/res/drawable-v21/background.png create mode 100644 android/app/src/main/res/drawable-v21/launch_background.xml create mode 100644 android/app/src/main/res/drawable-xhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-xxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable-xxxhdpi/splash.png create mode 100644 android/app/src/main/res/drawable/background.png create mode 100644 android/app/src/main/res/drawable/launch_background.xml create mode 100644 android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png create mode 100644 android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png create mode 100644 android/app/src/main/res/values-night-v31/styles.xml create mode 100644 android/app/src/main/res/values-night/styles.xml create mode 100644 android/app/src/main/res/values-v31/styles.xml create mode 100644 android/app/src/main/res/values/colors.xml create mode 100644 android/app/src/main/res/values/styles.xml create mode 100644 android/app/src/profile/AndroidManifest.xml create mode 100644 android/build.gradle create mode 100644 android/gradle.properties create mode 100644 android/gradle/wrapper/gradle-wrapper.properties create mode 100644 android/settings.gradle create mode 100644 assets/icons/launcher_icon_border.png create mode 100644 assets/icons/launcher_icon_round.png create mode 100644 assets/icons/logo.png create mode 100644 assets/icons/splash_screen_logo.png create mode 100644 assets/images/offline.png create mode 100644 docs/icons/logo.png create mode 100644 docs/screenshots/dark/history.jpg create mode 100644 docs/screenshots/dark/home.jpg create mode 100644 docs/screenshots/dark/search.jpg create mode 100644 docs/screenshots/dark/settings.jpg create mode 100644 docs/screenshots/light/history.jpg create mode 100644 docs/screenshots/light/home.jpg create mode 100644 docs/screenshots/light/search.jpg create mode 100644 docs/screenshots/light/setttings.jpg create mode 100644 flutter_native_splash.yaml create mode 100644 icons_launcher.yaml create mode 100644 ios/.gitignore create mode 100644 ios/Flutter/AppFrameworkInfo.plist create mode 100644 ios/Flutter/Debug.xcconfig create mode 100644 ios/Flutter/Release.xcconfig create mode 100644 ios/Runner.xcodeproj/project.pbxproj create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 ios/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings create mode 100644 ios/Runner/AppDelegate.swift create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png create mode 100644 ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md create mode 100644 ios/Runner/Base.lproj/LaunchScreen.storyboard create mode 100644 ios/Runner/Base.lproj/Main.storyboard create mode 100644 ios/Runner/Info.plist create mode 100644 ios/Runner/Runner-Bridging-Header.h create mode 100644 lib/functions/get_formatted_time.dart create mode 100644 lib/main.dart create mode 100644 lib/models/anime_info.dart create mode 100644 lib/models/my_result.dart create mode 100644 lib/models/user_preferences.dart create mode 100644 lib/pages/AnimeSearchPage/anime_search_page.dart create mode 100644 lib/pages/AnimeSearchPage/functions/get_image_search.dart create mode 100644 lib/pages/AnimeSearchPage/functions/log_search_to_firestore.dart create mode 100644 lib/pages/AnimeSearchPage/functions/style_loading.dart create mode 100644 lib/pages/AnimeSearchPage/widgets/result_tile.dart create mode 100644 lib/pages/AnimeSearchPage/widgets/top_result.dart create mode 100644 lib/pages/HistoryPage/history_page.dart create mode 100644 lib/pages/HistoryPage/widgets/record_tile.dart create mode 100644 lib/pages/HomePage/functions/get_image.dart create mode 100644 lib/pages/HomePage/functions/show_result_toast.dart create mode 100644 lib/pages/HomePage/functions/style_loading.dart create mode 100644 lib/pages/HomePage/functions/upload_image_to_firebase.dart create mode 100644 lib/pages/HomePage/home_page.dart create mode 100644 lib/pages/HomePage/widgets/my_search_button.dart create mode 100644 lib/pages/MyLincensePage/my_lincense_page.dart create mode 100644 lib/pages/OfflinePage/offline_page.dart create mode 100644 lib/pages/SettingsPage/functions/style_loading.dart create mode 100644 lib/pages/SettingsPage/settings_page.dart create mode 100644 lib/pages/SettingsPage/widgets/switch_options.dart/auto_play_tile.dart create mode 100644 lib/pages/SettingsPage/widgets/switch_options.dart/child_filter_lite.dart create mode 100644 lib/pages/SettingsPage/widgets/switch_options.dart/dark_mode_tile.dart create mode 100644 lib/pages/SettingsPage/widgets/switch_options.dart/loop_tile.dart create mode 100644 lib/pages/SettingsPage/widgets/switch_options.dart/search_history_tile.dart create mode 100644 lib/screens/MainScreen/main_screen.dart create mode 100644 lib/themes/app_theme.dart create mode 100644 lib/themes/swatchs.dart create mode 100644 linux/.gitignore create mode 100644 linux/CMakeLists.txt create mode 100644 linux/flutter/CMakeLists.txt create mode 100644 linux/flutter/generated_plugin_registrant.cc create mode 100644 linux/flutter/generated_plugin_registrant.h create mode 100644 linux/flutter/generated_plugins.cmake create mode 100644 linux/main.cc create mode 100644 linux/my_application.cc create mode 100644 linux/my_application.h create mode 100644 macos/.gitignore create mode 100644 macos/Flutter/Flutter-Debug.xcconfig create mode 100644 macos/Flutter/Flutter-Release.xcconfig create mode 100644 macos/Flutter/GeneratedPluginRegistrant.swift create mode 100644 macos/Runner.xcodeproj/project.pbxproj create mode 100644 macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme create mode 100644 macos/Runner.xcworkspace/contents.xcworkspacedata create mode 100644 macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 macos/Runner/AppDelegate.swift create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png create mode 100644 macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png create mode 100644 macos/Runner/Base.lproj/MainMenu.xib create mode 100644 macos/Runner/Configs/AppInfo.xcconfig create mode 100644 macos/Runner/Configs/Debug.xcconfig create mode 100644 macos/Runner/Configs/Release.xcconfig create mode 100644 macos/Runner/Configs/Warnings.xcconfig create mode 100644 macos/Runner/DebugProfile.entitlements create mode 100644 macos/Runner/Info.plist create mode 100644 macos/Runner/MainFlutterWindow.swift create mode 100644 macos/Runner/Release.entitlements create mode 100644 pubspec.lock create mode 100644 pubspec.yaml create mode 100644 test/widget_test.dart create mode 100644 web/favicon.png create mode 100644 web/icons/Icon-192.png create mode 100644 web/icons/Icon-512.png create mode 100644 web/icons/Icon-maskable-192.png create mode 100644 web/icons/Icon-maskable-512.png create mode 100644 web/index.html create mode 100644 web/manifest.json create mode 100644 windows/.gitignore create mode 100644 windows/CMakeLists.txt create mode 100644 windows/flutter/CMakeLists.txt create mode 100644 windows/flutter/generated_plugin_registrant.cc create mode 100644 windows/flutter/generated_plugin_registrant.h create mode 100644 windows/flutter/generated_plugins.cmake create mode 100644 windows/runner/CMakeLists.txt create mode 100644 windows/runner/Runner.rc create mode 100644 windows/runner/flutter_window.cpp create mode 100644 windows/runner/flutter_window.h create mode 100644 windows/runner/main.cpp create mode 100644 windows/runner/resource.h create mode 100644 windows/runner/resources/app_icon.ico create mode 100644 windows/runner/runner.exe.manifest create mode 100644 windows/runner/utils.cpp create mode 100644 windows/runner/utils.h create mode 100644 windows/runner/win32_window.cpp create mode 100644 windows/runner/win32_window.h diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..dd84ea7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..bbcbbe7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5342182 --- /dev/null +++ b/.gitignore @@ -0,0 +1,50 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Web related +lib/generated_plugin_registrant.dart + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release + +# Firebase related +lib/firebase_options.dart diff --git a/.metadata b/.metadata new file mode 100644 index 0000000..95f73f5 --- /dev/null +++ b/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + - platform: android + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + - platform: ios + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + - platform: linux + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + - platform: macos + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + - platform: web + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + - platform: windows + create_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + base_revision: fb57da5f945d02ef4f98dfd9409a72b7cce74268 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..d77dcfe --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,10 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [1.0.0] - 2022-06-17 + +- Initial Release diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..f472359 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [everythingoutdated@gmail.com](mailto:everythingoutdated@gmail.com). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://contributor-covenant.org/version/1/4/code-of-conduct/][version] + +[homepage]: https://contributor-covenant.org +[version]: https://www.contributor-covenant.org/version/1/4/code-of-conduct/ diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..fc921e6 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,40 @@ +# Contributing + +Contributions to this project are [released](https://help.github.com/articles/github-terms-of-service/#6-contributions-under-repository-license) to the public under the [project's open source license](LICENSE). + +This project adheres to a [Code of Conduct][code-of-conduct]. By participating, you are expected to honor this code. + +[code-of-conduct]: CODE_OF_CONDUCT.md + +## Submitting a Pull Request + +1. Fork this repo. +1. Follow steps to [clone and run project](README.md#how-to-run). +1. Create a branch (`git checkout -b my_branch`). +1. Commit your changes (`git commit -am "Added new feature"`). +1. Push to the branch (`git push origin my_branch`). +1. Open a [Pull Request][pull-request]. +1. Enjoy a pleasant sleep. + +## Linter + +To run the linter: + +```sh +flutter analyze +``` + +If nothing complains, congratulations! + +## Releasing a new version + +If you are the current maintainer of this repo: + +1. Download changes locally (`git pull`) +1. Test the latest version locally with `flutter run` +1. Build the new version locally with `flutter build appbundle` +1. Bump the version number in `pubspec.yaml`, adhering to [Semantic Versioning](http://semver.org/) +1. Update `CHANGELOG.md` +1. Push the new version to the `main` branch (`git push origin main`) + +[pull-request]: https://github.com/OutdatedGuy/Whats-That-Anime/pulls diff --git a/README.md b/README.md new file mode 100644 index 0000000..92d7931 --- /dev/null +++ b/README.md @@ -0,0 +1,80 @@ +
+ +
+ ++ + + + +
+ +## Dark Mode + ++ + + + +
+ +# What's That Anime + +An **Image Search** App to find **Anime** Details related to the Image. Created using [Flutter](https://flutter.dev/), [Dart](https://dart.dev/) and API from [soruly](https://soruly.github.io/trace.moe-api/#/) + +## Features + +- Upload image to cloud +- Get Anime Details for uploaded image +- View and Manage History of all searches +- Customize App Behaviour from Settings Page + +## Support + +This package currently is only tested on android platform. + +- [x] android +- [ ] ios +- [ ] web +- [ ] windows +- [ ] macos +- [ ] linux + +## Whats Next? + +- Add web platform support +- Add ios platform suppport + +## Contributing + +Contributions are welcomed, please refer to the [CONTRIBUTING.md](CONTRIBUTING.md) file for more information. + +## How to Run + +1. Clone the repo + ```sh + git clone https://github.com/OutdatedGuy/Whats-That-Anime.git + ``` +2. Install all the packages by typing + ```sh + flutter pub get + ``` +3. Create a [Firebase project](https://console.firebase.google.com/) +4. Enable _anonymous_ Auth, Firestore and Strorage for project. +5. Set **Firebase rules** for all paths to `true`. (temporarily, you can later add explicit permissions) +6. Then go to _Add App_ and select **Flutter** option and follow those instructions. +7. Run App + +## License + +[![GNU AGPLv3 Image](https://www.gnu.org/graphics/agplv3-155x51.png)](https://www.gnu.org/licenses/agpl-3.0.en.html) + +This project is licensed under the GNU Affero General Public License v3.0. + +For more information, read the [LICENSE](LICENSE) file. + +![](https://img.shields.io/badge/License-AGPL-blue.svg?style=flat-square) diff --git a/analysis_options.yaml b/analysis_options.yaml new file mode 100644 index 0000000..61b6c4d --- /dev/null +++ b/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/android/.gitignore b/android/.gitignore new file mode 100644 index 0000000..6f56801 --- /dev/null +++ b/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/android/app/.gitignore b/android/app/.gitignore new file mode 100644 index 0000000..3bdaf4e --- /dev/null +++ b/android/app/.gitignore @@ -0,0 +1 @@ +google-services.json diff --git a/android/app/build.gradle b/android/app/build.gradle new file mode 100644 index 0000000..a34928d --- /dev/null +++ b/android/app/build.gradle @@ -0,0 +1,71 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + applicationId "rocks.outdatedguy.whatsthatanime" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + minSdkVersion 19 + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + multiDexEnabled true + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 0000000..e606413 --- /dev/null +++ b/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ +j_)Vc*H5Y_9ee?vO82^^wLj2m<(yizt(Z8!biP#39;#?b633*i@joT;Nnd z)$=+dSL`QDaKnJ3z+Jx%Kd7UUF-4#eGyc$VS3Zt5oAzsjA$rLozuemY`R9z`1`T2P zLt1?rU^C{7gBW>p5JhwAs?V2TWf)2t{rUTFWd85bp!cD;#@z1Z#lQtp3cqmLBJGTI z3KzEFi1zimsS{isM6r*iGmWf$1Yby*mzUX0(tB2Yz62{nkxkLu!6I_{b0NpuW0#0LzM>_hqO5$G(f#Tt}p;v5}yX zg6O)c6M3877Vtdhc#OJz8mH!eimzxPMwL~}TS*e3x1BIR!}sA63D-3f zy{VD)-9Uny5|S#7sG+QmB-43wK|}zM(r3$Dlo;hTKF3+{n2`2qM$wu5*OC^>g2)aQ zkwSp2s=BHGK#$J!LFnUS$-+*fFHtHR2#yTr3Uo?lAO5cWwrB%Aq9`kl=();2px-_r z<^R8$bx{*Slj&GVM>)G2eYxAO!5!Qhh{e2Vpw>BoFmy!#o y1!P)BgkfOveUtYW5Xj^kyrERP4BqM zcbwoxLM+7vRT9AfiSXTAh?Ype+02g1r2z7tTyvZe#x4mNd(~&-Dt_G7cT5h@CmWZg z4t%cJFvO2M582f1WUbz{>T@Mn9XLpDYwsgC?oHzV*mL-Xl_Kj N)3q=bS9Kg)|7~{; zIe!Yz=qk$c<=vQVA{wvw4o*pV?8)y(W&?wv5_G|VX1$p)G>Q-7)%oY(*$%#LYS^nv z7Yz#JB_M7*Gfv9?=T1j#w(tl=NEu}e^?VNf2~oRZa4KcXoyS!DJxteMMJhajZx(a7 zJBZ;BDL&w}Fyl9{=pDt0Ixraqq@ZO|?lDTLD%xj{(Abvc7 <(re2b!EhUuN%`mi-dk{Ghj{pc1hx+#qeL6Knu@{az<4oTK=|xO%p_!(|4U z-S!n(77@f;+PAYx0>IXPt8)Z9!v$>D)XVmrXGJqjg6`*@3&Yw)O6AT~ohQNC!4} z;%Cqa>UgvEHnMITIa2>6_5?`M8P_r^eqR3JeE*k7@xS6ZnBf#cbZZI>6(11R|5^e= z6I=);Qyp&+<7D+u)?OmQJ&$K975qtWA22rux81?rq~y8l-wX-nkHQ$o10vXQw`PAI zS?}9rV1P(=QHo(o@tW(mDuw|`*WuC}Jl<(z+VhCu^`j>>vgR0s1UEb6JbM7PUGK|C zuyNq9KT9jnr0zu{I0l<0Iu`}uS^$A}>4rNjNK!-qxCi`X h9&! j>u4&R;ARHR*wMB0iAiviK$bO8oM*yuFh`bl zDV2tq$)M9{tau!^DSg;T;crM7Ep(1!p?w0S%-ALO=hC5z?IRd)j$_nNM01hLf%hqp z1yhkN9Bh1qLo+|Yor7OP*6d3J&{cp!RviZf?yNkCxzs35G(NyV8e7w^As2^a{Rfy2 zfqF gCahuHqKlCu& zJcyb4ix@R+JY5;YSNn!AU|IkXFWpK()|&|J3uABOPyJjEWJQ5dC_ql9$S?@-+QK~E zZ#G5t&0zK}=!tjdmV_Eh@n|A=Hy3z3V >?Q0Jb-WD6G>y*;Us62SybYf0_dRlUKv3+Uqd1EcR5M5{fFp#)Gp0 z(j@4u;(k;zyWoW#QP;oiEg*7EV+&dQ+m*Bk1mha?oa$%Nwo((Qv*>1=a4vcvwISsj zbe J5R=8 A* zk^eORjZzPdk%UiL4g7Fs3XRafSouNG23T3a)0bd#g1!IAsBcE_IzDtv2QlVIsBkEk z%DLd&)^&w!0JhFYNGRQ_nRtaP#EIH_=(WaB$?m#f-)_?x4<2pPv5HzOp`Ysq7>4LH z#&rim|KiO>xDWb+nu>p)&Evnd>X=x3Q!HETCM#8ylajz!2a+IiZ1JVgBgU_nJ2A%h zocVW=a<)c`y_+@~iOdnCZS>t?AUBZ0%;6^LhiXuQ(u&JSn;oJ(vtP&Q+G~J+5P!IB z8=k53BSRK>==r4h7f_p>6?5g>teuU5%yB(AB6NLyh-qHdd=D>^_5VTB#z1aAMtU9; zgfGFZiCcGOZeob4UNos=67@&gZ8ZD P+0ch~WecoLqbvcH=qx$+ltq{=g8jN|zwlW@gZwn@6 l zEe&oaa*t->anrz0-FY0D|0Obd8I{~^^s<~!0#r#y*6ha#C5LC7)7X>GW00&2_5h^l z?+%d gGVV-b4u5^wGbkh{{L>sopew zD#NKeIO@+Kn51_i&WhB;E^dXfjYT%iiG`Q2P $jMv_PspU{iZ97jf%d&zVYZQZp&k|9n<9kFd z`bfy!VOdZ$4cVR^1g?h;eU6Ke4*sS*eaGXvfoA03N43{+Tq|O%{1_~?m{=w^0VENV z9>D4YhHf7~p;F-dL*xf!jNBVTH#CgDvxvo`ZJ5!(Ez|aym&c}?AEMs)1-{l-#5cEW zBjv9M%fB%@hvwqqCB0);3~v5KL_^7D5vDEC)M?)H@DGy{cyXbP;o|48yYkd!gF6#! zek257lY+efoZCC!DB~xyvv{D;i+;lpO4;pnF1bF>U@yRJnt_MS432i1m}B7iNyjf;?!f24NMcUuwtWBo8QX?P-gO+jHWLMm%uaC-@F|KuZ7 z->uWTmEZIvAc$PdG(N=9xqrknJsSRW>vmL# l%8w(P1l%S-LI5@`*bC5OjUaFB##{B* z@XA6JUme^6GnYlKR6=upUMS{^fm;GCL=mbHe~$r)6f!RxaMiyH&!dP|zB@{f;lrSX zA5~AHppWCq_*P={8qp`J!2;TXyi`Qn3!97i+QRZ%fo720)wfYx2 zCvjro7Z}#&@h^t=V%SO{qPf 8HGX}T{+)tejUL<~?5Q!M={k-Tdr(GgKp92I-=^bLfBl8Xk zoCyr4O#H!?Ehwle(uIN$dacC^Eg#NLwz3&yOJzK&$~Y}c`12DdaB%vE7|icW2*3>r z4*c_BLoV1D+*d*Wu0c^^HWF=vB~f^ii#~yy+bAkZBV~;4ui=w+9l@ftX|p}JhsIRn z0NVCpd~N$MZp-Av@|SBn^!_idsQg8h%s9gHo{eAl9x_7fOW3dJNK4XEPsWuY(Y}gh z(Ktw`wOV* YDf@LHGU=u@;bkV$JKD`I8HD1P_9sL;parf {*0E^K6#xomCYhwu5?|;L_7>dCVA QEzG=IhZ1eh%5x&^FK9xI1Kd|A3Npm0w;@^dzT;jp0GDYocV2wXbMP}_ z0u6l!Cj41^%V}XE3h{(yqQLq5OOK4-fQvmnCfJR79h0tu7i)`np-luk_c@I9Je(;1 z1Q#G70Gk*rh%K#0bla=j o?A IwHS Q@0Q%Xw$FiG{~lV%4oTSk$QTCpY=Nv2aU%uA zWoCI;B#|*9iEE4$jjmFmvF<_NSP`}Hc?2^ZQf8a4`y4mc8P4B}W1Wxj5xwW1DRfD! zuA4AYDFhb@z-7z7O3MFr-=Vn|!N@&`yLui&%bUZo>M!xP&Qbi6-@sFbi5)6?1L!>G zL{gmb4A9F`>$LGftASs;E y-#DT{J5wEzc%I4tqm|#xSP(a;GI){jlUc} zNgv1fqoHl+ApzJkMC7B9h1ao>E%l1RL5oBNUYMJ~pB+7ncS%6%S^;}1Ph)50i)SpR zbFV|xn~#?b;~SF%uq7X%Yte^9ZbGSpNVOsB0d&%PB*&p}5-tw{-AhPHUXo*IrX)TO zgP681Q4n1nd5Z!Bz74-E!D*7>_e@d*dFT>*XRgh2;QR68Hq>4lW52Z>+xBgz`>~j% z2)A=2JOB_L08zJ|y%ju$iV7p|qBLB ByO9= zyStI@Zlu|zl -1;rla9c;Rv4^#UU79lLh&hp6LbX;3EO&w=ru0 zazsm>zVeB_S?Nzm(Jh}()tprxQ~uZ`fu@~o!_FinQLlZqj>iU!vdnOSVJ{1vEl%ge zyu3FU_iRH-xsr0P8U57xw|r()62UTG>2%M9o(&yge1Bdttd_BazwS~0fg0JpolUN3 ziDot?6*)m1whp3fV`=94F^rWH{{$b3)WVn-o}&fgw$mk;u64R #;nc6@Q)$v83^G zkBK=V1y8Q2;EVd}Q{S*}ztsgbSR>rBA};qO0#;mgj>pbi60#?hJJDZr$f h}}@V z^sWst*Cb(~WzBbJFC28lcZO{b!j`udUfXQzFY{X3atW<;&GR`kjx&SogC1lBeAl@Y zTS(XyK|z3Js`c9*0j8LQqJvE{6t>(&+jZAdG^KyNcCq~uKiEzw{y_hYN% Z@5)x4aJxhU*Hc3_cG3j%CQ+qpY<0$`?|?Ka7viL z8gc)@cc-qRN6~DfGunHidKCDQ{>72BP@X32%6idh)$NXmTlF>oFezlt&-hCFsmB4U z;#o)lb8XK}<|5(JZ3&2l%#VTvNE;52dt&;omYYz7zk9DEKJSDcRR%} j zFV>C#g9KWYk>g&O1CC=l|Dvkj4`YYDcrvv085QYkLvgJJ>z*^@o9<7TKJC7k7Ihk3 zE}NLErEK})i&R#q;mf|Z$cb(99y^3PzMXTgTSbX77?f^ZYSul@x!RPfT4}i5{?^q< zoJDaiWW5$o=lsWQCC27gLfGqy2%@3PKSFVT%)4w2E=R>QmSQ876K<%crnIcMmtj~_ zbO6JN+& Ml)oVw_c^6#)cAYZ&*S}{sjE-je+;6?`@2b3fJ}%M<1lf1 zU}cS`h{ET$kk!!d8yv@sLY=>ty`sxx4kT-7W$cS&-c3w+c{W3{2ZzKNWAnCpld?$t zzpP%?Xg8*JJyhk}_kDm>T`y8QQepJ0fprVdIGKQ7ug9*|^gB>d-{dCdc}P`)6r$uh zp&R*j({B>Js*i2 t-H) z RS{4Dj2=6gTk-ceavk<({E5QX#fA_!Pm`98rI= zKMF1dVehx_bpVzDOqd$?p9aE1-4T+m>Nr!MZAaDuXBv4fvdYBgf0w$; rG#Nf{}L`p06BMS|9DjAmaSe2?bqPxUz5)NN#l&ai;?jW>D09}CxD&lTNN z_~Kt&aiPxH^ 9g4 nvqVMR-@2|E>RFutX)Wgri_cnuv1GKylmpr>;-)Yet8WK>(Ua`m0 zA8y6|LO8ExNnagtG;#2Bd= (L@Xrxb& zp)*R>2{CD0Z=cNzJ|rH`b~;Mr+r<;&B-W1Y4p&yUm`U+>O1;^<45E(cn8UBcHx{ah ziYT=i_@|z }NJfTMIFcO9Z|9bxY&j5F(e{BAiOGpIyT5He-juzkA@hi%V;-pz$ z4klK@NpvQaY9dDH(P5d9(7f9xhhqEPcTiWer3Uf);3Pc)C?*B0 z0<(jy*Bd0y3{Ul~S(c?Ga%omY>AG}>EzNc;NU~prU-N7I>OSWEzRoSV|4G#qLt#pD zbC077rU6m(a>Jqg;X;yG)d(POdLL9w$G`eUzZ# Hd&Opk=kFe6rGZw)@#5Ma(6{Iu>^D{OHGc5 zqAN^MI@o9-*V@;*rHt$lOI>hC%=#{i8F39l5SsJsbaL!B V!VFm8IsGBdE%+kDFNab(#k6 Bst&@{BSaY`SyTnOj=o?wg z8K}3z#(KkN0Bz%~zCxgy%VIHL*(>0(&i^7CG2N6UiC+mvo(0#2$AjQbS142RtFWSg zLYcV^!HY{WsFTPvPZrPQVK6nBHIBV pT^d}~UGUD> Iq{GV_pI`%940z6eooykwemGOl!5{nDjNv8e-kf@_tql~Aj|oSOJs1?dE_V9` zjkirfs^YOll}(`N QN+)H%24?1l>aej<$BWMp;S2p@sMxdAse@Q@x$g(;#Pop zE_!));Bsuh?lMXG7Jp ^3f!k&KFOsmMs+6`KyJjVO*#D-k4Hp`yUoL)iD*m z9=Guo%-&QR&q;6f;G!Zjpe_zY7Ej!fVy}x=Y3omk#+EU% s^RhW4Gu|nDLUl!kD$$ 6cZ$lZ>-pL_q^7*o*}-+uT+NjwW{6P)KNhLGZwc9{rtv{(Dhpl zgXzgqa|iJCcAQXp+a>&P4Uzj?P_8nueS;0_3+We{N8w`LY`qU+cx1mFY7`zkqZs** z(9;76u4I2D=ol+R 5!QE4Uk|H!|PsplQtI_% R&@XfaQTei#D78pZNG6L6BT@^=|ac3ZHKVx asL= zPnh()>Zm~SZIvO!>Ppg|)r{ntKriU?tsL>Ud-x5Cuq(QUc_q$04-tcy z 5)Pv ysGz5|LLmwx$kg|PL{}v zX)3^7GVB|+s2zP02*24D(@q}AL3Pd+t%Eq)B-;s=HP! wD>=I-i VzsRVGNDzy)Knfu;xq0DOZ^!$EVOJ+=; zRVg)F{#etU2j}(L-1t?!S;{A~{>O+HWYdhrcwEqr;@lkHgDk)! h$#6 `V(Q%CxBY)#BOWrju##7x71ZaoR@+8kOHegf!h1b`#V&uwZX~G1 zVR&;`kRoi;rX* LfB2V&$s3AH|kSc7&N~5 zzj^k!oU %vFacf7w85;TrW3cc0)`)DZ?|^<`nu@jg(5@}H<|uiY=( zE~ljfCycosk&irCj`bEr>X!xu&n0P<`N-s8yh77%P{nnXOZLI1|2SG|LYBJ8H%{&4 z3=hC@%mAy!l2s1$Rhjc$1N~meA4L%Jb$@*4HN#Fv`G+rVcvIa$$G_P(C6Rw1v+Irl z@5A`$0x5Es Q?_SF2(QaSWZghDIhxAhA8l zLI)mi(=Clvh-dkYd6R3lo9h{7?DGdWi(f#;i}`Kxe%;RriDZr*O0{0L1ybnpK?2=` z;--zzOgO_Hg};oq`ZpJkcNjG;K7KWLV`1O3Kc-gSZZZi(|73(IOpK~+#i>aY7?E!0 z1~VG>lLabA!#lAFu2CcWqK6gcH<#lHMh#0x@};y)Ds4o%H4ffb!M%zL^iqvi!xl_d z+k4{pw^Y53Py!wxpW<#*S{vyXo)~hJQ<`|oj=GrPl3reZANj&ZKR!`a{8x-fyUd%K zn9dvD@HdB(kNMYRuUP(uSHSi0i%U|N*Y1hk7A347$JIt9Hy>ZxN$RLvd=)mhlxmyK z3RcnBg(vJiWO9U0X2``}oK$`!#KQs;f3Nhm&KWyDqGkFTp&UJ>o22mlh>adwKRei; z=MD^{VG>c{kQ}mQk(iEJr=^!s9t!JFUQ>qnr9Iu%JjsQfy^h%#?)AavdnoqgkW%Q& z=UKeg`IJqGC%j2CrRMM)_`Wt5;wRQ?AH3~jiW9%E8R&cl@lIpKmi+LWq|a7HdsMg_ zC*{ZJB)ny#H^0$w&PLHvc4Fzhb`HVtaSLcaQ;b!F4Kf$1a~eAI&RQgV_P(TgeL09Z zua1YW0_8EN_&5h=p70jGyyiUMzPShv4BKo5|KmAW^wjQ8|5$!Jqw_zQQXpEZ5V$~} zuJny~JKr$aaJv$JuBYgs^OrQI@s}^#gC)nLc)oi8y|HBV(w?tbb^p3~bUGh*7NK)7 zwT%8mq`G~U*PLYNEI4!!$~c-p<}d#AE1(+>Z}bM1ad{UL!LHF^r;&4h{*>yJ>x=z> zf?vjzLow^z66~)Ulx(8?R@}yqCjj=Zj-d3}Nuq|yh1Lk-W@XHc3lad(Q61A<3G-UI z<=F$l_Zc5*bftg+v=NB)=%$9q)S55M>`CzP6H_vJ{5!y>&(%#ss38Fjc=`SP{Up8P zM|vbea00Mp9 JkVnZpzQmHTB&Gw_P`1+Kx{9EaODtUT{U#AB;{nm z5@{(&_dsU*<|+meRp4otR{OSnHy}#9H`g6Qu3WukHq_k@R>tMbG!51ka8uh z#;2bzAZCxKS3p#-#lC-|k-sQl7FSZa@Yz$gH#&iuNR&5<9lp|+R`2Ye%*J7@XReO0 zgQGEj(-S|)v!wfd{6-zV%}Ha`6Kv;l-j}gg YqskJ|GVA^;k+7J|yt+Y;$a1k?8CD z_AK5=NPSRi=>9xdbmm;!+8tG>-ftcM-8rVmTbn9lyT#KfXoQ`5-7VM>lLw}u+44FY z>qoQnIj) -aKPHmk~KWKIwn;GAo9eshG706Ds zKDy}UV7dj33+j|!m3~LMxc`{Q%%F-_w*v*%0z!#z=$rE+XG28$c{qnKvl-fN$79A3HNuX4V2KyL+!8ZNk?yCRYV z9RZ>G?qWLQY2VHz`1o^4SS_j`Wp^!I*Y%{+qXCumib9Dlsg3**DUjs~(9u(395zKn z6D9!KFHmSfC$7Ad|==ZetaBvWL@gkH<%q@(*hc7G_kUCr9nPqdT+jVmgr~k&mwY z1zLn?8u3ijT*TD_@n?USK#AC2%k6@DQhzj`&YX{!2c3^PleiN-@v@+~q{il;BAXZ<=5 zTmN6l$)zXQYKag9+4MSvt7t!q>P-+XhFo(A#o=6<*nQ*1+u~-+9K81^3 QL z4Dfqw7s2bne hvzRqF{8bf{(qLB$H@yiK5bWCa?Le3Qzn2f~&$K{w5}}{u90( zpQom2N-8mEJ5mC%UvnDOw2bD&z) J z#VcJ!m}? JpK$?9Wvv1KWw!c|Hm-pjZm>GFnXqhz+``%ufbB4-|`zZ=B!TyK+^@F zI6!X+g0IdV+cMJgF6zfzX%z}2m}7n0t)gbg_qSFS8r(+WkEBK{m3{z0dIS;G*Xin0 z3boINu7yqd$mbdU0%9=Nh1@m6-0uMqce<8 vfa9>S2%=}HKO(9h>U!`FVySR zv{;g_+~JFSo;~XZGGO14r(3}-8^eXyArSb74g<<=5h~zggl@@`7TvrhtOz-DC`)6+ z`ux~Wm1Q_MpB%Gg|8{A( nDOWDX3c^%$Xp5F6*0fy*L=I|p0zIXoQ#^o>Z zfEO+SyeMBt*KB_y9JH`*v@7zzf4ty!LDGo#ku3lVC_}+`H{}pMq8F3jGiWU7Pu@7~ ziYtLL`%m@W$e)X4ipIY4a>%pgd6dvPM=!y Q(MZZypc4DhDWe9Uu?QT42`R$kFFRN z@8W2<(O&&oNozhDS@aqZTr$CQjn=&4ANpQ*t2)7?TAYQ$ o$j} uyGUY5VjJixZL`A0Kr!v_*=-mCfg3>AiDVapX+(A `i4w k+Aeg5pf0xv+2<>p z$S1 _}$CH--RATa52Z{G&Tu*o=cInBst8|$72oTNti`==!gJsI{n6W5b)WqqRa z^Q#jvucw2&iF1M!vkEvcI&rAA2>Ri|Gtr-|5X|}kaU;5S?fO|~{ZD?*DmN)$eAG#j zI|j&8f#u9?%rz%SqI@a}hfYLFu7jXxtvCN?P${&hN_1W6C~Lg7>#sO-oNq @;=$CR32EQpV6TLg&n>ckA>B{n*8NUaNAw)$Q5z25Dh^1#2~#Lq&rlK zaM&cx<{XQP%=J$<)7u5-C4$&Flbb(O5WjC{yLZ#;p@K{%C&pY6=oU1|cN4|gM}j2H z53r=N(A{1(TF+BjIy|e)bK4+r^N~f@)h`e7`1rK=A6X1u`p%1?r1A)=^8qG>AbwRG zTo=B*4T=GaIu%H?=TPJh|8(S+&Q_hhPeu0Vqh?Swfgovn5;n1YcFD@Zw5XZse@(JE z&R&wJPeZ(C7mdn-1J8PUk-=)@Hs0*fMx5j3>ruqjl)fH>8T9YfS!Hv=f8;T==7&Rt z#2asae^NzhM =$e`)ZI}>#d}%qnyvQn(q0JQPbh{qQgO54TZ%AjYByf zv;M#xc+XgbJFP7boZqS!&e0>TfO7uzR=jsv!2i0;pp-GLkhGwJR32GChGClaoP-n- zyOtrB@pp^J3|r1DI(M+lHn>0sXSqF_a+n8BliWx>T{4DGa-MpCm=U7?+o)!Vy2Ei@ zI(qh=#|>fsdNIr@kC#*{S?+K-;`%E%+kMEwLP<-R@i03Pu5Nlt`>CosaW+K>pcuc^ zvc`EohQ%U1CJZELK6+3f)1{78z}AMMYo7$=dy+0VHGuP^E3u5sa`N}2vPdvqul_Bu zpgL5~I!ibRThkRLj{9ZZmn=Qu75S@rl8$zy#7N#FVmk;(%_3~(GQ-29)%J*88YA?2 z;5{=mYUgy!O(lR5^hw!XxAxZma4UqU4G0qFO7$36Q53jb?nMYD*jzmQwEZHtWO$M9 z$Bk<)lq{Ynk6Oix_)Lo{IO7-1a&a`jyo4zo$%zhrEx-E``2yZ2DtoVF!he-aMKb@5 z)B)jm553^>5F~^qn4f5{53J0n!9)&y?NHOc9<))Qt<+V;^}b&vSda~Rq;ImYSZ7n0 z>*0`^%>I7&ho7~hrDW+IF(@6>cA}3%tmEC#rYNhzdG0itMR=n>3>)GsG1@aA^gQDn zjq_-I7)*7 lr#`Is0*ikvarAA0!{-82Oi)DY$gnPGO_~lxoAX^pIHj^tC#MsYkQqp zG*<&`kLIR2hY^^l@tLF1K+mMqlojQGss_orgjvl9jxO;v9zMoK9}KNd*1$LuPtz(h z+(}_R#?8dm;}~ef&>LUdxaz1=dNqX>j6n+i{quRyA8jVloFNXd!RD@&bjxD_j^S!q z>T{B}&Ht2xr#|LyoG@>cpL1f^dFLb&LEC^JPy`+XzqR~J*V?68Rv1DHZ z`I-jeY@o+(qk}ehD6;1#yo8!_lhAQDSI@uJY Que%qU^mg_J4tou!dwHJ>;0nEBKh})vB? !x?X@Wx`V0^64Z%h9 zYlnOnh)=W6{NrhKjf|%U8a+hh9rV|-pycX+*&qewnNW`=cAYJdpz|rKlp~d_ND)ef z2$a@i$j!o&I#9IG#(zsskLw!;hM6d8Vv(|^k?9ksU{lEApMWN<*u0(uL)?6Vx0;pn zE{hvdHFo?)yKMhQN4zQNT&~v%Iyq^ZSZ^m6a?SZoCZ0qJjehowPxJ~E4k-XVuakw~ zh1eiS4c@aElu|>SxSR-$2oi7FbUf64q~ek|5+^V(D+Fe&7$zocf!3mcwL`8+3!bT^ z_kd+?hF$E3Js9@oOZrGx*-B5U3Qqd uY5 l%@83NYjPt3=kmM*faUWD96{lCO zJCSBkI l2Az)HT#C8$h<|K!dUMq(dMQ$;NG)tzMN4~Kbz{jDI0C5un zwx~}>qOl(6h6@9)7~R?WYA5%i^^gt -_CC^DOr`!#_agoG?vX&_c7U5yv8O z%gN1#jt>wA?guD0ScfPV&Xy@}48z~HtXlvP?ikH;O%KjNtxvOXZAFr {nmF@WHeuVyq|#C!}nx#bZ#gm z^ben7s|(vN#>1FKW(P)SKD(uVJT1pgcxF9)anckwXteJfrqHObY7LjB#@;bAxGMmf z4qSnU=q`wS!EiXr!dbpQK&tE4U4&hM=3>2jCkAx?(Y-d)9TJ~ATu-(JhQ~SVYF7V3 z{NQ{(sD(3p^{Ns|w~HO+Aa%4x(zp{Hqa$8fnlfkRsuC985|f=4)`UZArCmsi`sTXM z5wDvm&V+uzg?YH(M6J}+>)n-ELR*n0Yhv}-8mdn{^Rft_Ob7Iz8AQjHbG{_7Y` z4+Zuo!(CR IaMdymV(c6(QHslAN9;%UFZKbvyZPFMfj<$JNmJM^XHVsDT5CwfJurBTKSioSm9 zr8T_k`~peZeCU1_hVfoQGg17c(ZY-;A$+oK4tbA=-WDNKw{FA!&N^nVpM%%46_G}` z&c^w+h@`oX#a7QM%$I(n1Y1ccV1XQEOWJ4~S?=pZEba&&5Ktw}Q@RLZdK&$Y+I&@9 zJY?_t2Zte$^0;5syw0O}5XCA9#+)WnF5F;fZq*3Y$q<{ErCyChLVCs(Rg`6#cTS`v z1^%*lsXy?+Llol*Al}>0iE=o7aMAU$_!jm9^)+*JZFQ|@7hUqjg)|BIey -p2~RvV{arZ)D$ zBM|R1;{8$ {e#5FQUyf6_2TZI{SstP|XX=FhAZdnk+;Q z>sbd#7`0MNi=q9Kjh I_Eq1KwOlzN$np{Y(e~sZ z!{fcuG&t_00l)>I3jXRkvZ6fg5XdusOdthx?Rff&eZ4EB1CytO&8BaYeBzec$f7VW z+_#pV_pN1v;a`@97MN=FgsSzvM3H&CG|k>hqU16J?VEZ2BUMYd)m*-w(WM-v6_Nh3~MwpLrq02FLxs5Sj>^iJGlylqUV450L<{M(}~${yeCH86u@BV z7mt+e*(ICnD!lb-1sxv?%j4DfO!J0En?k!K0DcjIQ!&bnq |yp#U3 z2rLKrAALLn{(0a`C eA0Vg z3tbI~5oBS{*u`$0xKb ;p!@}?yoo8qW$W{o9P0l**rfl=|zw&JIjrvtU z4NDp}Nu`S`-1lbAuqr7pll@qB;EL)&`I0?Ki3M LtADcQ~ <;SH)q<_%;|){-YvwUoEhyhWi*<%X_xsP z)KpHH553`83?s&hek!R;-pHctD~=g#g*iCDU6?|B;0iFH+eZB3sHaZy-nGa7buIVS zqo>)Nq#dW|vRtmUVtUW-#Mo57cZF-NnJ-CciZCX?<}CaBGbGio=Ap;t=*gSaq}llt z(XV`5R9i{q(|vWyeA{dvBsiLVzaXq9y$PCd=|QZQ$=A%dco9M7JtNKr!v+7W RPc~Jt7lU&>z=LKKW2~FfOK*+6ZKiMuly=J`&LI`oi)n*bmTQ!jtQt zL7L9*Ev*#O|$d{~Xw2BB(Sddh&;?r$h ?2u9{{8W!}_$QqzH?9+9 z$WA=cIb;5*waXOPEokE}B~bRo-+K}JZ`-o44AxTSDkqPM3$K_JY<||-l4b5N>1@0R zjXxptXIGE;MPeB)Mi%qpEJZ>};w3XEfCKs?Ri$C1(T8be%&^bmttX~IHJk9Tou;Q% z^$DM-pdNRo) 8WPZN=(lu Attbb@a6ZN!D7%R6#`!{1kPv?Kf>XiSP5q!gH01=UfSM>lN> zkCGSq^==_D|JSo05@@Qx(qFG=+b%c1aL!0h{^8E&f*-!Oop4&!qH0nb`nMx&`?kyf zV{XW~-}?)mUtD4jr6y#etWgi-5PehcOl?ptUztJu6COYM^{48pVF7(yyD^o*udr5} z-YFCCTw(u=b@Yh!d(QDcMoonrG?((6f_5NHYjvUpUwx&cCNHo_88Ud$1U109Jgqj8 zU&@&tb%O~@CSlkX?-B6_I-5~mZ_N*{eI~IdTDieT|MkfWke15usZ&bso9p4|v42sE z9piH3bTUKa)py`O%V(wpTFoXvdShLFo{i49s<*Z7=eW@Ju=AffeC7Babkv59_f3ha zsoufQxi%r0l%Mu=3uEvfK^~jyhpr!zsl)L*PzdOA8(#2=GexbCk)AU^$D4vDHwW5C zQv@WN=W}ij*RPm=7!Anb9PMC|`ZK$Sh(Fzo6p!D?Jc-K9Da%>SKwBk)CM|?EUes@0 z8vdt&ml5Ff 7-<3D@}40QQ6T+ z * z)RM*4uAOZhwSCY=6yYVu8NGOwYLNR^1d)}ugu1oVw01)|%Yh&@^?HPLGhnf-hEZ zsbo-x$5Y)loOkn~Ui*J`&eupgYlj)pP95>egq|p>soHN$2UZ-?a{+ot`zUcMHkI7= zyG4p52EG{5-6T^Jw?G~+UDO}ecqxiLAyo`k-1s)zE#w4%=(_RIc)A~$>B#}yZPF^A zz}h_BmPu9e0^Q|2I7tax+27 >^LS2``f0weyV#_lJObw4?l>xOMK~)7QA_QmI-W~H0e{gBS79z z5iq24`Yy+O+&1sD5#C=)3I}zG;?Fz%Z9m?6u9sz`vMacR*Q?9I3A`I&;A=90@zmhT z38?C9Nke1{ZYKW=!{vd7%8Kf+cjsom=XPiB=n}nY63}5EjIo~nPq_z1ux8yL^=#-B zQmCF)HnQVSLES@N(hTvX7q;}qa1apdToZHa^rupH-?Kv>0cs}u{qJM^w;lHWG2BUd zX(kXw73ap}acJvddlHs-J5N*b*rf|ykQzo*a@kRd&7S5xe+F&2ory$cL}VQQ<|ut| zuCMwl-hkkuAjJvff$$>AvN=v2|Kpg~FUV-sC`=H3scRTHk^BlFj99RybL<*zc;Oh+ zx4cy_-)iW#vfMVUl_^09HR6u5dw }puq!?Lvx{?C%GDyl`8DE-X p2pGUIiRDT?W)gKDMM{w>Kki!)UTVFdf!h45Tus7}gO-o}~u{R(l--7+iP5H%{8 zWb@xrv;F<8Q0A&koYFo)#210Do4i`l6185uj~lexxNiID$HCWjVMKZv%ju&Xf&4(Q z0NnCFqB$$Xq)?r?QzPL`XW6hJf|&O~8sooHiII>GF!5!;+uc5T)>02mWK;p_qzHoS zx&v3d4qOTG@+or~u;b9Wn%ppky0cX!QoWq7+CZ3|=FZqbpz}L)X -$lgGya?QRv^>%}YenK4%J zrY|cu2%j&ENI1Tcpi&fN!Uy)`hA!S!p(lsJ7ISzAi)wd}f!}vQp^i)!{*siuU;{MN zJOb>>&fB#WyoXlQjgs~MZ+oKT$3a7GSeswA&z_9Xd~^tRqyWp;em~=<{?0e(YQ|?B zSJH3aTcOS+Jaa+*AW7B20oyW!r-)GdAm3&%9|?NsB4zoKt?UX*BPbStT)Hvg#=qrS zmDCFDgd4T|1wfAex3Dd)-syJMYUV-D`K?NK4D>T!Bl;V8=2+<4vo2Yero1kc7sA6D z+N;v29^n ha@Cij{87fUNFd4 zqjiNhWXLZSpE}_+cfyL=2?T&2Q&n9TqZlWRCb#m%XmGE*=~N_&(;1UHvy+Cm?b08B z3s>MY=!lPA#h2OdoBu?B6MWsd4 qm$Ub23}c{UH31iLq9!f^Z9aP==*fFyE56I|%;-m_Cc(y%J&EeM zf)pwqJ37Cnf6~PEqbU?v?0T`#8KI>Fy4u8+?)M%QAr>rPX=v@JT8MyW{9Z@8?=@ZL z?&^G;*p}KWuNCD-HvayV+fAWY&CaoZEE>02yP%h-Su`}q-;Rg7OMi_XH+$4}G`hYk zwl!&A9XTOZWd4^X%c*Roz1EwK?Pu{GHsB|EnZjP`&ye!F%S42;sTm7={w4Fn=OHqk z$}ahz7c=q?mqT-ocR8m;M6BrQYyly*ZRvYnshdv`lC)!g1JuEoK|6Kd%P9+L6i<`d zq|F39Jwa_Dz2KHqi~zxprvtYo=-$qCc;# t^PJzw~Sf;c`Z zs_y~96wn2E1 z2hnp3Q==Imb=yX-0roMNgbN}6CkZyvzRv9}iv?l<&i7MK)84hNIZwM@+?Pnf1$jA> z{B}BR)0~H%!g84Ih@N3!noMDLA4U#v&A<3O>h3mP8y2DUM=f>j)=lB}Nl(NfAO~aJ z<)5&mb;L})tYL)r(u>)VAU9O=-fYOoO{<4(*e~OHI6_c#$gV!bA%}DRZ9Kk1qvt@T zs|+1*)Sh{4vXTQ7-(+jVHo+Gx!&&Cmgqm4r3ouUTC*<1H+#f_E47%@2X}mtvJ3UNQ zSDAP|$t})dCZ$=qXe>|@34hXG;Zc;9HyC%x(XY_FNvZ#in)~x~{0#y_`S|oC71*r| zWT!B{3I9!o?E66)>9u(Fhg+iLFvLKvrsw!htOK0T8*yIcs#@^(NZBS} d_@fhnT!d@elx1pM4@M)QB`kKfCoQ=B~7B zECv~BpV^>g$xr-9yIU@(AA7kVR#n^|cdvH8Sm$J1)z#ROe^}^#l}PxdE&Nn(wa_sY z-rYGFS`VN0Jr^P(J1b(+73t{MmAgnDfM8;N0f0K8&~PmPN0begRUYTQUdAtxalJ5J z!q%t7rg5EX9`KvJM?MF7ofUX55QH-}Y~7gF{n?2dob8ULmhZm$$bZg+4HO|KO$Ygf zJynoT1fxfK<9w9c5A>~|)!2wdl?k|xkphGk^guz(nl8~>wpjPS0{ntnDZW$vlD8LR zp-2{-x(=0%LXa>~*OP{&NZ$wHEFj_HVK3qBKG&s&TkCuF9DAdl_8Q8-EFz_$;KXI7 zE_~)yl}%;ve1CcECS~xSX!tRLMn5H?OwAk59FWF=wHIq-QWSYrSz-G+H6F5=#~Wju zk?WS_Pf7Itx)5cSr!vf^_6^d%7fA5K{8vPXSk%u&tA`kiXWDj#+HZ+-i2#M8P8Q+$ z_SKKyL44QYD1_4E=-d@|_8XX?2rP!4FMSMJ29kW<9v{2!*o1dsFC)4;;)YV1 le;M5c)_HegBSSETBr@dHPNM-aIp_@mzM15gtl1 gvkJ@a7Oa~+)hGsU?J7`3(BR}%^e<#qcIlU4tyv^zEk+OC;E--|#J znLPY^Yq929@#=4H^5w^Oc4Kk1lpnv!5lPFpD?;;W<3;}SZh4&aYEnvoj4F#j_hk#7G)%_$- zU8Z`w?C_xB<+_k7F)a1K(Tm+ZTy8fwF)$O%mk{H7kyvw3eI&iGX5AZC|63mxGx7BY zQO{I~VqA}c6FMgE@8uvFR79^%^}9dTgQGlmahybxg>#Qx^eZsDaD!Z)IaFegu-mN4 z*!;D#{x2sW0qHY7&qU;@-=d&qYx9@qVVNdQ{J!s*Aer7J7$?;}lrzwPLo`^jct8TN zHz1B)%x39a(_S~#S!5kvEO4ECn)^J_G}Hdw@a!HbMTjF4IvA`WA7>q2e}jpeTq0 B5dMzY_xZk+Vfp~Y@{5~_Uu8ao+V@N}MG|KdP3ct)<*zm*e3 z5@^@)mUSXU-g@m6VZ85tvL#>~N=YfMaOjB40@wXo));q7+j24UV#6}my|Djsou}}Q zYk&X4wUl7LzZD3FWyA^@wVNlT(ZV5G-V9Mdz+W|0kACq61}t1T!rdg@juuRbEZxB8 z3@F)1Wc888sqJUnN4{=;!VO>X-w3z=Sg_c6$<=M=Zl*t@ftzOw^U}38{X!l0v>!HO zeGeZvd)&JP1h7BJc^iF%-=%Y&jVJ?@{S<_Ousd8y1M)~uC!3;o1wq4bd#-u-#xb7aifPAFz%y`~shdfjmLGeP3D5~r_; z cvp^mX#p=P&EnySuc;T&vVy)W%AYuT71BpzdUArp!26C8o!6Ee*djMwRnMP z!V{lx!uqs&5kEqp1#}ZRFQL_@Puknt&9|=aShn*2r$A+?@*mqZIcsgCKYdIqy{Q{N zh4HFT U#WxA2Sd`?`i_h@l&47)p@t zk`Cz>P>_;FI;6Xi8cLc$IwhrR1PSQ|>F(|r=H>UjpU?X*oar7aVMFj=@ zy?21VsqwN9_ZV%H6;`a9I9v(227XWA(VZ0Ilfc0j25Mr@F7_!6P+yE?XPGj|+6I1; zT?02UCZRavqI4D5tu3KY$u3V%GMq~f753JC_)g{31?9UPHP$!?<7YZ>Kth^}rNU7F zCNaM}payBM5PX;eub(Me`0O$&5)xdDsgyA2PGD$B$C&p?MiO)=qRU71-za$)#}i!0 zy%9sP`P5&7AUi@xnjN}aBW}Z2ol}Bn$;Ah7d{qEZc;2`-gBaIueh35^2U-!)!yI*J z%qwo!7u({VuAzQRG3%RMfoLx!EO6_;3)>XF_N#4Gxou%z_I%R)SYS=-VdhMo*||t6 z8qKmVf}0R9f2~dTbE;e^^l@ @i|b~ $2ge^MYbr=H!j($@ovr%N?z8zr{hC`b7VHc%DCF{ z&W77y|Howu)^^I6eoT`|^x{LzUQZ%4hHr0q*QSVtJ9+07H`g5S^GvEbz2`hGwo6O~ zcVg5>Wv@p}%52pRKUJ{+(`S7R_Uf$-imELyAGC4<@?j`?KP4`#E~igQcky}HbQ{rl z%lCt)BbA-OlzKJw`mfJrk^ySyKf78J@9R?jjQuRM^TFA3vpvWSK2e5Ny7@aqk4+tW zOqU967!)hX)~1Wfa6?8CEN#M0R6ZxT>kN_&9rzNV{$(5J$ovicMMSvI1s)7$x%;F` z(RaXCB(!t^>DzU0^H=+vM+{>zll!z{wp5Y=NFPkN+hyKuE_fBfMs1)8lgQ5jHiMy& zoqlEgMqA-%zk4b>ny hK%fci}5@qa+> !?q`*+*QSIJc!kgtvkoZsY&do z(8WIVIgb4ntai~g^)UK>V8ISLw_;gb^j%nTEL^o$nx>2}mE-M)hf4PLM>gD|4%8?} zO?Qm}7EkSD9>Vq3tu@rkju8j-bJ&g_#?oB9znWn_5Lk34VFn!uwHX+VCU*b+6D1af zClBWP(8BNNY5Kqbs4M5F0z;cocu?t?t7=j4>$KVsS+6YLN>n`iGBK7`vfXsKIVKyR zj^{H6b81)sLG$cXS8#J>0HYGQwYdP4A1>{2 <%%Xd zGNrI^Lg5G_5%PTxW8ukPo)a{I9C`D?mV_tKyhP)MTY5|>ytk~2!T=7WSNFBmvUM_} z?Bx3+zlCqlH5b!D$IsD!mAGXqUlee|)o`W0h*|~&$6Mb;7H~PfrV;eaCT^D{j*XPd zOHkO5>2D8l9_O+#+YmNI9Dkf_IpO#2cswxZe2%db_mo6D26VhY#j33uMt8%?5dA)v z4)z_Mli=i1l_jv`R|cqMW&QImke1tpN~3b)mn%jpo&1VxhSDF}Z~%Ww&^DGDfCL-8 zsoL=xCZZ@%y|v{I%S(K<@Mb|&X3CrArVaQGZ-S=v$d(U6vE>9D@B5dB1(^`%7WD$q z3di%dqsbUkSjU*B)Y|ahwEYP!MMG3N4KHx=*%|3A)BriN33uqlu(8wi(9wogkr(0P z7HeTZCVKq4 NRr#Oz$k%Lk6fmOS+%dITHEQ&`OXwhS5>fkonbO6$6&T)c z(`@f)#%FRye$CFNWqcCxgB`$RHXkT9aG7?x28RXBt6~sOMVyT*YjA>qmjgrRu z-_|6iA=Zl;OyE5u5hXA1JN*Cp;Jm`x&Fzw=iy?#ubIBr3g{@5`^PBXeT^{_`PPEMR zEz_K48}w*e)sRM>D(^RQ;_x$N&Yz N^sApQI 5S&$J?Y znFg85qxi`2j3C0xy2-G#On;7 e_TT9@tw8c3)?+aLq#aA4KR~4;fH5cbBe D4`F7ul6cm{q_ib6bL#ZHNpZu znjMErRrxkJE91YpZs*5|ioIE|!AO_V%!7=5{E)SMGT8qPcq~3PJRn0?@lFo}rYxC!=VoR pfhu>eTu_Tv$Xhm*8hB zoAbTD8teKFeOkw2$%+W3#0%sdCXa ba_e`L1KPKGTAq#Fegb7#sIi>zk+td*qWJk3VAA z%~ZnzZ9J$REB=zR8FhXg@RRR6BkAS-OP?jIK{i1cy4?{eL8dJAnI0~b6rP`6doX4g zYC;%$!uTg8B`+r^4EPKZTsMs-_ `nsoJ<_I&aFngpYwE` z<5wDbYv-`Mytx-7Dh|kAKf!SFUtSy{B96U(wzmr54@wLctU<+pq7&6?v$ZB%I4%{_ zz}xIG!L`d?zPa@#@;d8gRPUy|Wx4*f&5hgl7u+A#=~K@ 2(CsUuUMrN1pBHf-E6;I*zov8V)7X{xD3C=RzsNuqu+n<2>cRg&YP3Vj8f}3< zPO4_LBicJ$ubc}3lu7oFmH*Wuk+clEdL28Ua(1bFC(0MSv?thW58a9+!O3S*iaIHV z5K1fK-7;;Y5VkIf)6}I vV`27dwbuN9P%=H6Y-V(EbY CSey1@Wf4jN!=ddUW9VM%82Bpr4AFyoV^W{goD#M5T%!;!$K`^0u06fZ+sW@1?1l z5MJgmM3B9%6q@|;Foy_!nI~>*5hlfDA}4tf=u7 W z7@f^bbLTf)XYEg$F`=4n!7p!?A50O5ekGRY6;H$;V`j=00`#l70j{EPBRhO=tiLpx zw+MdiA0Qt38j_)czk6=l=|(GT@P+4YfMHBwBcc%cxxPTKrVYrXBaJ(S77)5nM%}{j zeQ)@Q`RF=El)Si!0GE8;7 =TMg_6^H9Bf0yffxCCx%B65l-Bd-O)Z0X|&+iu9)0b ~*(i{ZutqusVUvvmq3E2jWYGAOur2youtk)3^L6Xn{88X0q4`GtWbp4! H4j-UT`fB8iRttL;Q1Ba{asa+4ACW^nZ2l=WV zc818w*InYzY#_HmU+U`v+_q4Hbeph=TQK(L+dJZNEcInDe}B9V*8xU^5-!%ZWrcZa z0hFq5zg&z@cnY>qC82E=z8iZ5s^-PJ{(&l^h&E?%Z+CV|IpTnsbvbv?de$k?q(LUu zL?AcY_uC@UJR%- ?ML9z75r1xiRV|2 zPw)^)@gyFb2Zrd ##r9iFKS$=CMbFYAwbCWHx^!!N4ovl0nF{#j**7V@ zuz0aGF>6lf;%2+b{^ZO3kwz!vQ4)(6JX*5$a-aSGcb@}-P%maw8=bK3FPu)cHvX{b zXAc) $05Ja~-_VxpB@2zIls=bga+?gxk#q?17 zM#a1Q)p=$5C%jb!GTsK3i03H#G{W!N5mYvzN=OWQjgQoe80pwS;pfAHVcD4gml_9- z^bbYQm{2IN 0ao3=_XZ0*;RyTMo?$IOIV z!X4*0D2g)w8kW_Ra)depwg3Z)mgI3&!|x`VaWw1NJ4}WSxtz9Q0ue=i=T44=_hw9& zNBeKq#a_t7>VIScnIjK?Wee8WzP6^+&*@6Nv@X$pz6u|HnR@Cw=tA`p_Xb^i*{x3G zNLikeksmnYL?QLB)&Sz*zQGL6yOJW)z`Nw3_2*3}IR^W2apG??Z8lt3GAh=Sy?&u7 zgNsfTGApoHj1YiNUdv@^b&M4>mOaw+!=r9=Gx0vYm!FHKuRPQKKILaKIf3U`31#L_ zIytcTXBkMiHhqAxb5=2DI{&4ec*1QET(rH!bPdGbDeYV?iu3GNwWd)t9yn(GS(R7& zwA*8b)iobkiX=aQt*$$KC0LCFaKLH(s{c_Amj+di_X@6NpU|6tw1^k|hOE=Y|L&Y2 z ^TafCX}{AJeE}auAx^E-+B7=59<8@5yq7LPGuMvBKh^{H4FHk zk+j_|OtttX%iv^XWr(A5MQmU<@I2M;o*9qOiOV9F>sh6Xe=2j rlfKi<_~dTXY}Wf{Q$%~ z4L*6rU?MFiTHV|L1sK6$d<=HMdb$qH!U*R-Jlzq2eIjp3hL=XJ0po2|6l?1Jh1WJ= zKM;HWkXge1(3K$-mql>LpPhefc3^&=pLU$o4`X|>xT<&Z^|qmiXZkMT+KiS3e%1MW z6wsDD<2Sl#cmQo7dc0Wj*&M9UQk-XdV=?_@W(Gg( zlkNSBcNx-*iHh0VWlgR%4*bPt?>Wrb?C3F64;TN_(ePTwvv9Aq9VLBJx-z@If6*hH zl?-&Hztj%3UB5gwJ9AR3k)Rp39qqiW6(rrbKknb4n+MC>e0-oTSAgydwHSLh9i{LL z$ASd+;Z|vOe7pKb%Ocg}p_oQTR1eH55?khAZ(*O(Au_omzR$!cIdCm>r7(|9**Z85 z(~l*jR~Uk3wm!h%SIq=_$|@<@a#4vAN2hv35e|zPSUD$S#>r7RdZi-(kG6rI4i+8N z 17!($k2za`-PW~MEU4io!^1?0oXlQ9kI s_fhWbPWvO{ZD zucfL?A8f6U4rWl7Q^uYYAYb=J45f327s$yhiM{!AmoAJR;;!sc0G4Vq?#bwsx9Ex#;tLVwV@ur<*P4qqwS-1 z2)VU&CVVEhSa#wV1*HXb9@Zpg4h0vGHU9sj{zxrL-<&Zt7kFKYx6F0F1|I~&qh=0} zYP?^m>f=&>fbvK(#s6Ua_3deoh2wcHy}YMzB#^k>-2K$&(Rl7_WI7R!aTBgzCc|w& z9aRAeNl;{AK%~#e%w44ewXlW;19ff2GfJqZS?_Q2@ZSx`s_bQo>;dKfq*qsSHhdK5 zTD5TJ`x&qnpU2;QAQdZJ+zuG+j#a4XC&focfr}RdHLD)?7ru0_%-{@uZ*zp`JE@1< z^TZNTjn3Vs4NzFQmHi-HtA-`a2jEkFR)yc`HK9R$8(hloWk{G+)a4;V!9z(4SyR_9 z`_McLF@gz_#tJ4qUbc8@p`P778as+jWJzIlv9RxZiIh@2`cY_wZ@h}TU8Gh==P?Nt zzC E(J^5_vk88)`l36go z2({a2IJATpC*H&{^(`-m-afoEBW?dRBY5rUNP9gWl7swTn;@>$Lzk?zhXrh&Ct0^G zYk4n7nSf*(7oHUNXsK *o=5 3!0Q<9~Pzxmt3Kw&0+KHNBUAb3OJ2fI)}s+l?nT)fc^&D#n4WmK&sy{NoE@^p{s z7`1mDqoLz IFX>f2dhJhSIC-D{-`lQn0mW``K#TV@>)(A_JN4RV6P_>JKk_eY3Yd)S_nAcomv zY&taqF!JWNGyiw8gl5`w_jyM Bh#<75;Z8LeD-IF281;pT-kE3$F_zPq=8BH1SSAo6sO@|978S_$iYSYpJ zTjshSK3pi=e!90t^nhO&bu!s^O8PHbtZb*2DLbjecbi&2(&Zc5DSG*+>smBB+(M}_ zYc*#*&Vq~}KN7m8u9#?4;1qJpzI8#j0!Np(*oJHDw9Z9Asq@De9EvNziO{asd=W}l z3};UL<9LxMv?>e%tz)HsLk|z!dhJ!kkizYIlOwyo%l38F4YDkH%ku%o1J&va4G%_H zU39kMm}TdMh7X&Z*<$(hPa9o3KPm^0U6`g9StwdGs99CWCWnE{qsJZ2#KK^|-pJ3% z8@q~ssGl*sxi yv#=A0`cOK5UwuZ&7h75hb= zb87pqXx{OPkSNX!SJh3T?PZO5T$G&i4ZaNU#&%P)bD-&OX`x#kx*fJwPdPkYw1dyL z&6^r({x=qMZ3gdsQYqj^KR%tl_53O-7VI0@J~gn=4OmJ)i FymxTPI}wp zXZhM(Ir^ji=MXJyr0TC^M@t@+v%XV~<8w~4qAmXZY=`~74E>xrnKeGRJ|Ah5kTO5> zBvPPmX#^$zm=kOb2tCVn{=rO(bxb>AJT^FDu=2E9h3&apH=xnkv)XA3e{cLAiMtBy zw;=nr _4@Nuu_S_b*Vn=bJ3K>Z@EdK<4?X0$$)jFXa#U*=!|*ZkPS28&UOEEt$C zVwBV;KoVdKdb?E1r6&In?Da~XWhFQ@1NOwh=6J3l^EH;1n~fDmr}%@^weXu|%ObX? zg(s0gA8ZdRu k);wVj$;=5?~-tx%typqmmq4Cp- zxFy&O#7T}(N8l1$XzU=QvdolxkW06&`S4Bc)RNS{u1aHunU2dO%(atLhK%M%FUvVO zoLQ#~{<+1JmCR3M(D&Y?lAQ{s!d4?hy2Ial6e {5^vSPk2}N z^Azr9IXVypCaNdNk*y_miHs-3)}IEs`s1k#f_#x;HlFd6{wtD7sKyy{(^_sbxXcK7 zn%-#hDgbK>x#VN{z3L9LioWse 9w_Vx_ zh|dg>f1Aa7qU!A?vGR+tqt&Ad_O+Lt(cQ`Vkj#A1(>2!=gY>8Zm`Y-3?A_T;Z$FJu zr3MthXv|$`(K7j67~8utIRwa3PX|UeRz)m4%>#p;MY5dqI?=;RM}4b5>Wk-RQiE=G zz#ih)_n`%(w?46+dvH&IP}eeGTRCspC%03TLb(W56r4sBWw3dy`rC#HS)E1E;b+lB zFa~})g7~Kr--VY+bui&$>bpjo(yHo3uX%g^`^^38kM}yEsQQ}7Zl@)90V{Rb>n6xX zKj (dDo~aoc zQOPrCS<8|j*5r}sEn=Z gRO`dg!DgsL89H$bZx3R5KZsa2xPo}fuWjh)c~$J->M6K z3|fB;lY~w`EDM=r{JX`mi|kk4Wiz$dzd%>2{KS7-Xw3EZ0tl29Pz||lcJ+Q5hz6Yn zR;2owPa*F;BG<{k&dsP_<8C&0<|Y8+@8#ioHR%uSU+By}<}5kUSQhWHY#54&5TN(7 zBl|&lYS&wOjyeH#@=NSRRd|?aRLm#~bwcY 8O=Ml?yny8G=+5bmnd1y-Pg832YYF=Ta&@0(mgC4Z;Lwhx+pv)Eb88n zY}Lv}b0O)Joo!jjlS862 BUgCc8Y9AJ;Q=x zyJx?PB&&!*aRW!IRyKMxLS(1$5l+|f^X2NN8a?!6sJi@a{iCQU_h-a3kyTh~dBX7c zW|_9>D??LTrvJUns)-$7xmJ13v>^4OZa~;S$b5_vLLw@&i=G;z&(CH!f4B3!P;T~2 zCcH)QetjUfQ;lV9m18XCRb#QDFiJ(-vM=P(aMSR#iQ -}38Og{aW)e+U)4mbp5K)YKNyOwQ@7E#!io3QMYQ zxPedxeHBZC6o*U6gAeD(g}O^Hy5S$^KCvt$)s{gD@1kx)Z-dAKvPOum*zWyt1F2-r}45kBt`_hs%T zIRm_(0-U;HrXEUK{$pnYzYB0{5S(o@Yt_JQQY;bppQ7wQFHW$8^cnPAU`!+JV&f@x z{8BhQRsItH3WOCvwSdeY6Ddh+TD5iNX0wInxu)W88Xz(;M6(2ggtU`YD7v^BX;bqj znW#r~xdu~5l$heZ SyAz( `7%Hgc!K(W;p%h zTEd`i(3Z$hLHg%3ucA2x?Q3tv&bL;~Oq}6cJn~tZimo_}P;D5un^6C7DjpUz*V)cW zNnVTBRo85B(b_CC{9Bya0Db`b{zv=IfgV{^e%GYXq20g>d6M&z{`b+FPFinCU;38Q zy8rtwNb63dr-f5%T~GHR;)rDHl8d7a9d!~uiM?t)toyYML%sTikHP&CEo fU0lVFz5zfsPv$I60V1bB!*X#;l{8Et;S8A+2u}0GAzl@eh1GVGFc-&x(e1` zNJ{1=^R{#D0cV|({ynC!afmay#3Y+fHn9s2Y^xT@w3h1`2pUJlqkT99&4~U2(R-s; zp5+XCWM*X2bpV3C)R;K_y=tJk(f3AqD)tPf_s3)P#s0}rp7*L_5hLO9ym3`Pinz+) zLn;%JuiC7; XK^DGGFMxs4Pl zr{BViDkPi@M1EIw=955I>dCmDO&-{z93c{6c#k$Du$F?i-c}g$lk9siE;4&%h945? zleEHtC}nMp1cA73nLiO`5Mbhg 8Q>g$e#pU8c4ubC6kXH23IE@6L?=_)y4mIXiu?VT{JX>;wD2+yKW-z zBE2VY?%<{Mu4|(KZ;hCU{vevcJv8s)HqutL(m^EFd_AyAZ>&@z?NYg}j?8F#0M)tJ zUwfyAmkA+d ;LfKlYN) zp(AtBM46lXD!!c?#z4iF6ht4&nujr;k{y69Cj@cc;%p3CQ{JNrYv%M}Lz|10`gYF9 zjf>9V-yv_`0;o!4Sczm1P6wEx<{F6I6HIQ-ed9xO4Aa@Sv!>YcRO`o+^`+O2pF2ql z+4M?ns2Zd~b0tyzAiXz&-?xtwZ-QHFhi~{-=r4>m%6ew~xw45wR+|`IH7Vqh%O_do z#V)Wl{6XmA17Zj|bRs!gm~`p%1foVmls!OaPdoqjyPUcNH_r@6NDQ28=~)HVK l=}o~5O8b=JJIuURxGMEZ0lhoyPjCmXb>z{TN) zN8vSIKoQusI5gD%YsukO?~i$xxiSs=M+*sMVK4d5s@^(zu;*#6c YFZfNp$ z$U#sB(Zwj~gMR6l)-fJaPV5bu&(YBzz95jdMV?(@K174%u(*gO#EMlS6q*$RP7HSy z>(9PNYb{U$s6{TtlY!+jP1YZwvC-|3!Iu$$p`epFfw-&BDb915+=R;*Lm6=~^6$4~ z>7y={0szU8Yv#ePO+x(vb-=LKo|b*~icyIoy4rB9E>{gH(W--&?Ls)R9}`DXA|Mzn zg;Hv6??mHyA%r+I`Fn_vo$8NtyL~VG%#n1yk~Q1VIr878PKo8^+T-1u$C(0RNwzIj zHUu-+ctAtai}i)O0Z(&BcMags8ktSS)bxwhwSRX^`9$-($C;VBCS|a$GuD(~DrrY& zaufKYpCIKrV(rYI(4S5RJLDgCtd&R^^RTJu`~3*ayLoCPqCie2URl8h)8H7OPJv97 z %=pSXH|9&l&O=}In;8fqErof}|Klx9 zcWV07dc(7)ZzWG1qAQ^34;j>H2t%Wnc$Ju(ZSJEY?(~VpHWgbvXy@frc>&~>`@$j+ z%{0!w+Hz}|mv2HKl0@-`^>Pg(Gj%m7HX#Jc#RM>8_!deeh!*HAeWI{~4vBM;$s{Er ztz4`1zq;pP0ce*oA-#(4X?d+gi+&u =&1-pX4UMl>6{fBhY3TI4!o;G&rl_5qTd9Gt4Fjd z4La5)(Eo%%qr5^Bl5kw>7Y46=RC;n&e4o7}<-CMD)8uRin3_z7;25)#r{V^ihDQdJ z%u8D4os4LCy?%k5)6`Ph+V797YsO@1J`?^J)LI#`of(ABD%#j*1VOvUu%>zDn@YQ- z)v;Z>%5Y?=l~po%8G!VPxx*y9{ZX_tM_~r&ie}|9^N8wf=N8iU h>4l=6uR&JR0 z?b8-)%wWLa^n*+F+yFnCaNjq*xZKrh1T>Ae-RR31v@30O#1=kf^gmvG>QBBI$o%#G z&3gF2Q*u$ZpEJG2Pxb8$3mDp+7%|oDCm_j)T8sJ{)J4(D#SkKeqSo29)k5?%>W9bB ziaPRW4KWdCkFPbRKr4|D95zuD_Q*(S) P%7 gHZ2vi88iw^ZkX5d zv(?h)wdqsqP&xeugPS=A&?H|%W5dMadEY|w-3ue%U{eT$s^O$~OC*V_bddh_+fkCT zQVi0_B36`X?e@oQ)hJ504k}aoM?LEC5)aQbG3b{O$O**KKq;dJ#8`GX9)3!v{lzFe zx`Qf!Pt(PG2SLwEj4-xqawZt~~bqHWg?L@JY-5^zc z5W=(b?pPS45ksjBvM0L8z#?uzHYMqs;ASr6(~8RY@O|RyEW U+zDmN<*R9^p1ekA13p=WNy zmr`HOmobbyl-z*Q8JE#}>a!=scJl*$2q$5Akuj; C+7fgk zKP